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

# Start call (BIC)

> Starts a business-initiated voice call to the user. Body: { to, sdp?, sdpType?:"offer", bizOpaqueCallbackData? }. Meta numbers: sdp is REQUIRED — the RFC 8866 offer from YOUR WebRTC client (business side must use a=setup:active) — and a prior user permission is required (otherwise Meta returns 138006 → META_CALL_PERMISSION_REQUIRED); billed per minute by Meta, directly on your WABA, only when answered. Web (unofficial) numbers: OMIT sdp — media is handled server-side — no permission step and no Meta billing.

**Requires a number-scoped key.**



## OpenAPI

````yaml openapi.json POST /v1/calls
openapi: 3.1.0
info:
  title: Pilot Status API
  version: 1.0.0
  license:
    name: Pilot Status Terms of Service
    url: https://pilotstatus.com.br/terms
  description: >-
    Public REST API for Pilot Status. Authenticate with the `x-api-key: ps_...`
    header (or `x-api-key-id`). Base URL: https://pilotstatus.com.br
servers:
  - url: https://pilotstatus.com.br
security:
  - apiKey: []
  - apiKeyId: []
paths:
  /v1/calls:
    post:
      tags:
        - Calls
      summary: Start call (BIC)
      description: >-
        Starts a business-initiated voice call to the user. Body: { to, sdp?,
        sdpType?:"offer", bizOpaqueCallbackData? }. Meta numbers: sdp is
        REQUIRED — the RFC 8866 offer from YOUR WebRTC client (business side
        must use a=setup:active) — and a prior user permission is required
        (otherwise Meta returns 138006 → META_CALL_PERMISSION_REQUIRED); billed
        per minute by Meta, directly on your WABA, only when answered. Web
        (unofficial) numbers: OMIT sdp — media is handled server-side — no
        permission step and no Meta billing.


        **Requires a number-scoped key.**
      operationId: post_calls
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                to:
                  type: string
                  description: User phone number to call.
                  example: '+5511999999999'
                sdp:
                  type: string
                  description: >-
                    SDP offer from your WebRTC client (a=setup:active). Required
                    on Meta numbers; omit on web numbers.
                sdpType:
                  type: string
                  description: Always "offer" (defaulted).
                  example: offer
                bizOpaqueCallbackData:
                  type: string
                  description: Opaque data echoed back on the terminate event.
                  example: order-42
              required:
                - to
            example:
              to: '+5511999999999'
              sdp: "v=0\r\n..."
              bizOpaqueCallbackData: order-42
      responses:
        '201':
          description: Start call
          content:
            application/json:
              example:
                id: call_01HZX...
                externalCallId: wacid.ABGG...
                status: INITIATED
        '400':
          description: Invalid payload or parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Validation error
        '401':
          description: Missing or invalid `x-api-key` / `x-api-key-id` header
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Unauthorized
        '403':
          description: Tenant-scoped key used on a number-scoped endpoint
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Tenant-scoped keys cannot call number endpoints
                code: TENANT_SCOPE_NOT_ALLOWED
        '409':
          description: Web number not connected
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: WhatsApp instance not connected
                code: WHATSAPP_INSTANCE_NOT_CONNECTED
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Too many requests
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Your ps_ API key
    apiKeyId:
      type: apiKey
      in: header
      name: x-api-key-id
      description: API key id (alternative to x-api-key)

````