Stytch · Arazzo Workflow

Stytch B2B Discovery Intermediate Session Exchange

Version 1.0.0

Authenticate a discovery magic link, list discovered organizations, then exchange into one.

1 workflow 1 source API 1 provider
View Spec View on GitHub AuthenticationIdentityPasswordlessSecurityB2BConnected AppsMCPAI AgentsDeveloper ToolsArazzoWorkflows

Provider

stytch

Workflows

discovery-intermediate-exchange
Authenticate discovery link, then exchange the intermediate session into an organization.
Exchanges a discovery magic link token for an intermediate session and the list of discovered organizations, then exchanges that intermediate session into the chosen organization for a full member session.
2 steps inputs: discovery_magic_links_token, organization_id, session_duration_minutes outputs: memberId, organizationId, sessionToken
1
authenticateDiscovery
api_b2b_magic_v1_b2b_magic_links_discovery_Authenticate
Authenticate the discovery magic link token to obtain an intermediate session token and the organizations the email already belongs to.
2
exchangeIntoOrg
api_discovery_v1_discovery_intermediate_sessions_Exchange
Exchange the intermediate session token into the chosen organization to mint a full member session.

Source API Descriptions

Arazzo Workflow Specification

stytch-b2b-discovery-intermediate-exchange-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Stytch B2B Discovery Intermediate Session Exchange
  summary: Authenticate a discovery magic link, list discovered organizations, then exchange into one.
  description: >-
    An organization-selection login flow for B2B apps where the member already
    belongs to one or more tenants. The workflow authenticates a discovery email
    magic link to obtain an intermediate session and the list of organizations
    the email is a member of, then exchanges that intermediate session into a
    chosen organization to produce a full member session. Every step spells out
    its request inline so the flow can be read and executed without opening the
    underlying OpenAPI description. All calls authenticate with HTTP Basic auth
    using your Stytch project_id as the username and secret as the password.
  version: 1.0.0
sourceDescriptions:
- name: stytchB2bApi
  url: ../openapi/stytch-b2b-openapi.yml
  type: openapi
workflows:
- workflowId: discovery-intermediate-exchange
  summary: Authenticate discovery link, then exchange the intermediate session into an organization.
  description: >-
    Exchanges a discovery magic link token for an intermediate session and the
    list of discovered organizations, then exchanges that intermediate session
    into the chosen organization for a full member session.
  inputs:
    type: object
    required:
    - discovery_magic_links_token
    - organization_id
    properties:
      discovery_magic_links_token:
        type: string
        description: The discovery magic link token captured from the clicked link.
      organization_id:
        type: string
        description: The id of the discovered organization to exchange into.
      session_duration_minutes:
        type: integer
        description: Optional session lifetime in minutes for the resulting member session.
  steps:
  - stepId: authenticateDiscovery
    description: >-
      Authenticate the discovery magic link token to obtain an intermediate
      session token and the organizations the email already belongs to.
    operationId: api_b2b_magic_v1_b2b_magic_links_discovery_Authenticate
    requestBody:
      contentType: application/json
      payload:
        discovery_magic_links_token: $inputs.discovery_magic_links_token
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      intermediateSessionToken: $response.body#/intermediate_session_token
      discoveredOrganizations: $response.body#/discovered_organizations
  - stepId: exchangeIntoOrg
    description: >-
      Exchange the intermediate session token into the chosen organization to
      mint a full member session.
    operationId: api_discovery_v1_discovery_intermediate_sessions_Exchange
    requestBody:
      contentType: application/json
      payload:
        intermediate_session_token: $steps.authenticateDiscovery.outputs.intermediateSessionToken
        organization_id: $inputs.organization_id
        session_duration_minutes: $inputs.session_duration_minutes
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      memberId: $response.body#/member_id
      organizationId: $response.body#/organization/organization_id
      sessionToken: $response.body#/session_token
      memberAuthenticated: $response.body#/member_authenticated
  outputs:
    memberId: $steps.exchangeIntoOrg.outputs.memberId
    organizationId: $steps.exchangeIntoOrg.outputs.organizationId
    sessionToken: $steps.exchangeIntoOrg.outputs.sessionToken