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

# Create a connection

> Starts a 30-minute session and returns `connect_url`. Open it as a top-level navigation in your customer's browser, never in an iframe or a fetch. See [Channel Connect](/partner/channel-connect).



## OpenAPI

````yaml /api-reference/partner.openapi.json post /partner/workspaces/{workspace}/channel-connections
openapi: 3.1.0
info:
  title: Partner API
  version: 1.0.0
  description: >-
    Provision your customers, sign them in with single sign-on, issue their
    workspace API keys and connect their messaging channels. Authenticated by
    your partner key as `X-API-KEY`, from your backend only.
servers:
  - url: https://app.onlysocial.io/api
    description: OnlySocial
security:
  - partnerKey: []
tags:
  - name: Customers
    description: Create or refresh a customer's account and workspace.
  - name: Single sign-on
    description: Swap a token signed with your SSO secret for a one-time sign-in link.
  - name: Workspace API keys
    description: Issue, list and revoke the `osk_` keys of a workspace you provisioned.
  - name: Channel Connect
    description: Hosted links that connect a customer's own messaging channels.
paths:
  /partner/workspaces/{workspace}/channel-connections:
    parameters:
      - $ref: '#/components/parameters/Workspace'
    post:
      tags:
        - Channel Connect
      summary: Create a connection
      description: >-
        Starts a 30-minute session and returns `connect_url`. Open it as a
        top-level navigation in your customer's browser, never in an iframe or a
        fetch. See [Channel Connect](/partner/channel-connect).
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            1–200 characters. The same key and request returns the same
            connection with `200`; a different request on that key is a `409`.
          schema:
            type: string
            maxLength: 200
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - platform
                - return_url
              properties:
                platform:
                  type: string
                  enum:
                    - whatsapp
                    - facebook
                    - instagram
                    - tiktok
                  example: whatsapp
                return_url:
                  type: string
                  format: uri
                  description: One of your registered return URLs, exactly.
                  example: https://app.acmedealers.test/integrations/callback
                state:
                  type: string
                  maxLength: 500
                  description: >-
                    Comes back on the return URL and in the completion event. No
                    secrets or personal data.
                  example: dealer-4821
                channel_id:
                  type: string
                  format: uuid
                  description: Reconnect this existing channel.
                coexistence:
                  type: boolean
                  description: 'WhatsApp only: keep the number on the WhatsApp Business app.'
      responses:
        '200':
          description: The same request again on the same `Idempotency-Key`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConnectionEnvelope'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConnectionEnvelope'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: A different request on an `Idempotency-Key` already used.
        '422':
          description: >-
            Validation failed, or the platform is not available (`error_code`:
            `provider_not_supported`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  parameters:
    Workspace:
      name: workspace
      in: path
      required: true
      description: >-
        A workspace uuid from provisioning. It must be administered by a
        customer you provisioned.
      schema:
        type: string
        format: uuid
  schemas:
    ConnectionEnvelope:
      type: object
      properties:
        success:
          type: boolean
          example: true
        data:
          $ref: '#/components/schemas/Connection'
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
        error_code:
          type: string
    Connection:
      type: object
      properties:
        id:
          type: string
          format: uuid
        workspace_id:
          type: string
          format: uuid
        platform:
          type: string
          enum:
            - whatsapp
            - facebook
            - instagram
            - tiktok
        coexistence:
          type: boolean
        status:
          type: string
          enum:
            - pending
            - authorizing
            - selecting
            - connected
            - failed
            - cancelled
            - expired
        channel_id:
          type:
            - string
            - 'null'
          format: uuid
          description: The channel, once `connected`.
        error_code:
          type:
            - string
            - 'null'
          description: >-
            Why it `failed`. See [Error
            codes](/partner/channel-connect#error-codes).
        state:
          type:
            - string
            - 'null'
        expires_at:
          type: string
          format: date-time
        connect_url:
          type: string
          format: uri
          description: >-
            Only on a pending, unexpired session. A one-session capability: hand
            it straight to the customer's browser and never log it.
  responses:
    Unauthenticated:
      description: Missing or invalid partner key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            success: false
            message: Invalid or inactive API key.
    NotFound:
      description: >-
        Not found, or not yours. Another partner's workspace and a uuid that
        does not exist look the same.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    partnerKey:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Your partner API key, `pk_…`. Backend only.

````

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