> ## Documentation Index
> Fetch the complete documentation index at: https://docs.member.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Launch Hub Handoff

> Start a hub handoff for a verified User whose hub Contact link is proven.

Writes a one-use launch that snapshots the User, hub, destination and
purpose. The hub page registers its browser against it before any code
exists.

A team owner with no link yet is linked here to the hub's owner or admin
Contact when both emails are verified and identical and the User's email
proof is newer than any proof on the Contact. When only that last rule
fails, the answer is 403 contact_identity_confirmation_sent: a one-time
link is emailed to the shared address. meta.email_sent is false when this
hub's launch in the last 5 minutes already answered with one;
meta.expires_at is when the live link expires and meta.resend_available_at
is when opening the hub again can send a new one. An address gets at most
3 of these emails in 15 minutes across all Users and hubs; a launch over
that limit sends nothing, but it and the launches after it answer exactly
as a send would (the same email_sent and times), so the answer never
reveals other accounts' emails. The wording is conditional for that
reason. The signed-in User completes it with
POST /api/contact-auth/identity-link-confirmations. Every other refusal,
including an account already linked elsewhere, is 403
contact_identity_link_required, with no email.



## OpenAPI

````yaml /openapi/mio-openapi.json post /api/v1/contact-auth/handoff/launches
openapi: 3.1.0
info:
  description: >-
    Production API reference for Membership.io. Use the authored guides for
    workflows and the generated endpoint pages for exact parameters and schemas.
  title: Membership.io API
  version: 0.1.0
servers:
  - description: Production
    url: https://api.member.dev
security:
  - bearerAuth: []
paths:
  /api/v1/contact-auth/handoff/launches:
    post:
      tags:
        - contact-auth
      summary: Launch Hub Handoff
      description: >-
        Start a hub handoff for a verified User whose hub Contact link is
        proven.


        Writes a one-use launch that snapshots the User, hub, destination and

        purpose. The hub page registers its browser against it before any code

        exists.


        A team owner with no link yet is linked here to the hub's owner or admin

        Contact when both emails are verified and identical and the User's email

        proof is newer than any proof on the Contact. When only that last rule

        fails, the answer is 403 contact_identity_confirmation_sent: a one-time

        link is emailed to the shared address. meta.email_sent is false when
        this

        hub's launch in the last 5 minutes already answered with one;

        meta.expires_at is when the live link expires and
        meta.resend_available_at

        is when opening the hub again can send a new one. An address gets at
        most

        3 of these emails in 15 minutes across all Users and hubs; a launch over

        that limit sends nothing, but it and the launches after it answer
        exactly

        as a send would (the same email_sent and times), so the answer never

        reveals other accounts' emails. The wording is conditional for that

        reason. The signed-in User completes it with

        POST /api/contact-auth/identity-link-confirmations. Every other refusal,

        including an account already linked elsewhere, is 403

        contact_identity_link_required, with no email.
      operationId: contact_auth.post_contact_auth_post_contact_auth_handoff_launches
      requestBody:
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/HubHandoffLaunchEnvelope'
        required: true
      responses:
        '201':
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/HubHandoffLaunchResponse'
          description: Successful Response
        '422':
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      security:
        - HTTPBearer: []
components:
  schemas:
    HubHandoffLaunchEnvelope:
      additionalProperties: false
      properties:
        data:
          $ref: '#/components/schemas/HubHandoffLaunchRequestResource'
      required:
        - data
      title: HubHandoffLaunchEnvelope
      type: object
    HubHandoffLaunchResponse:
      additionalProperties: false
      properties:
        data:
          $ref: '#/components/schemas/HubHandoffLaunchResource'
      required:
        - data
      title: HubHandoffLaunchResponse
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    HubHandoffLaunchRequestResource:
      additionalProperties: false
      properties:
        attributes:
          $ref: '#/components/schemas/_HubHandoffLaunchRequestAttributes'
        type:
          const: hub_handoff_launches
          title: Type
          type: string
      required:
        - type
        - attributes
      title: HubHandoffLaunchRequestResource
      type: object
    HubHandoffLaunchResource:
      additionalProperties: false
      properties:
        attributes:
          $ref: '#/components/schemas/HubHandoffLaunchAttributes'
        id:
          title: Id
          type: string
        type:
          const: hub_handoff_launches
          default: hub_handoff_launches
          title: Type
          type: string
      required:
        - id
        - attributes
      title: HubHandoffLaunchResource
      type: object
    ValidationError:
      properties:
        ctx:
          title: Context
          type: object
        input:
          title: Input
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
        - loc
        - msg
        - type
      title: ValidationError
      type: object
    _HubHandoffLaunchRequestAttributes:
      additionalProperties: false
      properties:
        destination_path:
          description: >-
            Canonical hub URL path. Include /{encoded hub slug} as the first
            segment for shared-host and custom-domain handoff requests.
          maxLength: 2048
          minLength: 1
          title: Destination Path
          type: string
        hub_id:
          maxLength: 36
          minLength: 1
          title: Hub Id
          type: string
        purpose:
          default: view
          description: >-
            view: redeem on the hub's canonical origin (its active custom
            domain, otherwise the platform hub host). preview: always redeem on
            the platform hub host, so the session works inside the admin's
            preview frame.
          enum:
            - view
            - preview
          title: Purpose
          type: string
      required:
        - hub_id
        - destination_path
      title: _HubHandoffLaunchRequestAttributes
      type: object
    HubHandoffLaunchAttributes:
      additionalProperties: false
      properties:
        deadline:
          description: Every step of this handoff must finish before it.
          format: date-time
          title: Deadline
          type: string
        expires_at:
          format: date-time
          title: Expires At
          type: string
        launch_id:
          description: >-
            One-use launch id. Carry it only in URL fragments, never a query
            string.
          title: Launch Id
          type: string
        purpose:
          enum:
            - view
            - preview
          title: Purpose
          type: string
        start_url:
          description: Open this in the tab or frame that will hold the hub session.
          title: Start Url
          type: string
        target_origin:
          title: Target Origin
          type: string
      required:
        - launch_id
        - start_url
        - target_origin
        - purpose
        - expires_at
        - deadline
      title: HubHandoffLaunchAttributes
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT or mio_sk API key
      description: >-
        Send platform JWTs, contact JWTs, or team API keys as `Authorization:
        Bearer <token>`.
      scheme: bearer
      type: http
    HTTPBearer:
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.