Bird Whatsapp Suppressions API

WhatsApp suppression list management.

Operations 4

GET /v1/whatsapp/suppressions List WhatsApp suppressions #
POST /v1/whatsapp/suppressions Create a WhatsApp suppression #
GET /v1/whatsapp/suppressions/{suppression_id} Get a WhatsApp suppression #
DELETE /v1/whatsapp/suppressions/{suppression_id} End a WhatsApp suppression #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bird:bird-whatsapp-suppressions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

bird-whatsapp-suppressions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bird Whatsapp Suppressions API
  version: 1.0.0
  description: 'Build communications into your applications and AI workflows with the Bird API.

    Explore endpoints for email, SMS, WhatsApp, verification, and realtime messaging.


    Start with the developer documentation, browse the

    API reference, or connect your agent through the

    Bird MCP server.


    Setting a `User-Agent` header is recommended but not required. Official Bird

    SDKs set it automatically (format: `bird-/`). The header is

    used for operational logging and customer-support diagnostics; the API never

    rejects requests that omit it.


    Rate limits are advertised on every response from a rate-limited endpoint as

    IETF `RateLimit` and `RateLimit-Policy` headers (Structured Fields per RFC

    9651; spec draft-ietf-httpapi-ratelimit-headers-11). On 429 responses, a

    `Retry-After` header in seconds is also returned. Clients should pace

    themselves against the `r` (remaining) and `t` (seconds until reset) params

    in the `RateLimit` header rather than only reacting to 429s.


    The deprecation policy explains how

    the API marks a deprecated field, query parameter, or body shape, including

    the `Deprecation` response header (RFC 9745).'
servers:
- url: https://{region}.platform.bird.com
  description: 'Regional API endpoint. Use the host for the region your organization is hosted in. Official Bird SDKs and the CLI select it automatically from your API key, so you rarely need to set it by hand.

    '
  variables:
    region:
      default: us1
      enum:
      - us1
      - eu1
      description: The region your organization's data is hosted in.
- url: https://platform.bird.com
  description: Region-independent endpoint for authentication and account administration.
- url: http://localhost:8080
  description: Local development.
security:
- BearerAuth: []
tags:
- name: whatsapp-suppressions
  description: WhatsApp suppression list management.
paths:
  /v1/whatsapp/suppressions:
    get:
      operationId: listWhatsAppSuppressions
      summary: List WhatsApp suppressions
      description: Returns a paginated list of the WhatsApp addresses the workspace is currently suppressing. Records that have ended are left out; fetch one by ID to read it. Use the address parameter for prefix lookup.
      tags:
      - whatsapp-suppressions
      security:
      - BearerAuth: []
      - CookieAuth: []
      x-audiences:
      - public
      - command
      x-snippet-key: whatsapp.suppressions.list
      parameters:
      - name: address
        in: query
        required: false
        description: 'Address prefix filter (case-insensitive). A complete address returns only that address; a partial value returns all matches.

          '
        schema:
          type: string
          minLength: 1
        example: '+5511977670804'
      - name: reason
        in: query
        required: false
        description: 'Return only suppressions with this reason:


          - `manual`: Added through the API or dashboard.

          '
        schema:
          $ref: '#/components/schemas/WhatsAppSuppressionReasonFilter'
      - $ref: '#/components/parameters/PaginationLimit'
      - $ref: '#/components/parameters/StartingAfter'
      - $ref: '#/components/parameters/EndingBefore'
      - $ref: '#/components/parameters/XWorkspaceId'
      - $ref: '#/components/parameters/XOrganizationId'
      responses:
        '200':
          description: Paginated list of suppressions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppSuppressionList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      x-surfaces:
      - cli
      - mcp
      - sdk
    post:
      operationId: createWhatsAppSuppression
      summary: Create a WhatsApp suppression
      description: Manually adds a WhatsApp address to the suppression list with reason `manual`. If the address is already suppressed, the API returns `200` with the existing record.
      tags:
      - whatsapp-suppressions
      security:
      - BearerAuth: []
      - CookieAuth: []
      x-audiences:
      - public
      - command
      x-snippet-key: whatsapp.suppressions.add
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      - $ref: '#/components/parameters/XWorkspaceId'
      - $ref: '#/components/parameters/XOrganizationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WhatsAppSuppressionCreate'
            example:
              address: '+5511977670804'
      responses:
        '200':
          description: Address was already suppressed. Existing record returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppSuppression'
        '201':
          description: Suppression created.
          headers:
            Idempotency-Replay:
              $ref: '#/components/headers/IdempotencyReplay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppSuppression'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-surfaces:
      - cli
      - mcp
      - sdk
  /v1/whatsapp/suppressions/{suppression_id}:
    parameters:
    - name: suppression_id
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/WhatsAppSuppressionID'
      example: was_01krdgeqcxet5s7t44vh8rt9mg
    get:
      operationId: getWhatsAppSuppression
      summary: Get a WhatsApp suppression
      description: Returns the suppression record for the given ID, including one that has already ended. An ended record keeps its dates and reports when and how it ended.
      tags:
      - whatsapp-suppressions
      security:
      - BearerAuth: []
      - CookieAuth: []
      x-audiences:
      - public
      - command
      x-snippet-key: whatsapp.suppressions.get
      responses:
        '200':
          description: The suppression record for the requested ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppSuppression'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      parameters:
      - $ref: '#/components/parameters/XWorkspaceId'
      - $ref: '#/components/parameters/XOrganizationId'
      x-surfaces:
      - cli
      - mcp
      - sdk
    delete:
      operationId: deleteWhatsAppSuppression
      summary: End a WhatsApp suppression
      description: 'Ends the suppression, so the address can be messaged again. The record itself is kept and stays readable by ID, reporting when it ended. Dropping it from the list does not destroy the history of what was suppressed when. Only suppressions you added yourself, which carry reason `manual`, can be ended: a recipient''s own opt-out is theirs to reverse, and attempts to end one return `422`. Calling this again on a suppression that has already ended succeeds and changes nothing; an ID that does not exist still returns 404. To end one by address, first look up the ID with List WhatsApp suppressions.'
      tags:
      - whatsapp-suppressions
      security:
      - BearerAuth: []
      - CookieAuth: []
      x-audiences:
      - public
      - command
      x-snippet-key: whatsapp.suppressions.remove
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      - $ref: '#/components/parameters/XWorkspaceId'
      - $ref: '#/components/parameters/XOrganizationId'
      responses:
        '204':
          description: Suppression deleted.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-surfaces:
      - cli
      - mcp
      - sdk
components:
  headers:
    RateLimit:
      description: 'Remaining capacity for the request''s rate-limit policy as an IETF Structured Field. Format: `"<policy>";r=<remaining>;t=<seconds_until_reset>`.

        '
      schema:
        type: string
      example: '"email_send";r=842;t=35'
    RetryAfter:
      description: 'Number of seconds to wait before retrying the request.

        '
      schema:
        type: integer
        minimum: 0
      example: 35
    RateLimit-Policy:
      description: 'Effective quota for the request''s rate-limit policy as an IETF Structured Field. Format: `"<policy>";q=<quota>;w=<window_seconds>`.

        '
      schema:
        type: string
      example: '"email_send";q=1000;w=60'
    IdempotencyReplay:
      description: The API includes this header when it replays the response for an earlier request that used the same `Idempotency-Key`. The API does not process the request again.
      schema:
        type: string
        enum:
        - 'true'
  schemas:
    WhatsAppSuppressionCreate:
      type: object
      additionalProperties: false
      required:
      - address
      properties:
        address:
          type: string
          minLength: 1
          description: 'WhatsApp address to suppress. For a phone number, supply canonical E.164 with a leading plus sign, such as `+5511977670804`. A value that is not a valid phone number returns a `422`.

            '
          example: '+5511977670804'
        waba:
          type: string
          minLength: 1
          maxLength: 64
          description: 'Limit the suppression to messages sent from this WhatsApp Business Account, identified by its WhatsApp-issued account ID. Omit it to block the address for the whole workspace, whichever account sends.

            '
          example: '102290129340398'
    WhatsAppSuppressionID:
      type: string
      minLength: 1
      pattern: ^was_[0-9a-hjkmnp-tv-z]{26}$
      example: was_01krdgeqcxet5s7t44vh8rt9mg
    WhatsAppMessageID:
      type: string
      minLength: 1
      pattern: ^wam_[0-9a-hjkmnp-tv-z]{26}$
      example: wam_01krdgeqcxet5s7t44vh8rt9mg
    WhatsAppSuppression:
      type: object
      additionalProperties: false
      description: 'One period during which an address is suppressed: when it started and, once it is over, what ended it. An address suppressed, ended and suppressed again has two of these on record rather than one current state. The list returns the periods in force; fetch one by ID to read one that has ended.

        '
      required:
      - id
      - address
      - reason
      - origin
      - applies_to
      - created_at
      properties:
        id:
          readOnly: true
          description: Unique identifier for the suppression record.
          $ref: '#/components/schemas/WhatsAppSuppressionID'
        address:
          type: string
          minLength: 1
          description: 'The suppressed WhatsApp address. For a phone number this is canonical E.164 with a leading plus sign, such as `+5511977670804`.

            '
          example: '+5511977670804'
        waba:
          type:
          - string
          - 'null'
          readOnly: true
          description: 'The WhatsApp Business Account the suppression is limited to, identified by its WhatsApp-issued account ID, or null when it covers the whole workspace.

            '
          example: null
        reason:
          type: string
          minLength: 1
          x-extensible-enum:
          - manual
          description: 'Why the address is suppressed. `manual` means it was added directly rather than created automatically from a delivery outcome. This list grows over time, so treat an unknown value as informational rather than rejecting the record.

            '
        origin:
          type: string
          minLength: 1
          x-extensible-enum:
          - api_key
          - user
          description: 'How the suppression came to exist: `api_key` (added through the API with an API key) or `user` (added by a user in the dashboard). This list grows over time, so treat an unknown value as informational rather than rejecting the record.

            '
        applies_to:
          type: string
          minLength: 1
          x-extensible-enum:
          - all
          description: 'Blocking policy. `all` blocks every message category. Treat an unrecognized value as blocking.

            '
        source_whatsapp_id:
          description: ID of the WhatsApp message that caused this address to be suppressed, when the suppression was created automatically. Omitted for addresses added manually.
          allOf:
          - $ref: '#/components/schemas/WhatsAppMessageID'
        ended_at:
          type:
          - string
          - 'null'
          format: date-time
          readOnly: true
          description: 'When this stopped applying. Null while it is still stopping messages, which is the case for every record in the list.

            '
        ended_reason:
          type:
          - string
          - 'null'
          x-extensible-enum:
          - api_key
          - user
          readOnly: true
          description: 'What ended it: `api_key` (deleted through the API with an API key) or `user` (deleted by a user in the dashboard). Null while it is still stopping messages. This list grows over time, so treat an unknown value as informational rather than rejecting the record.

            '
        created_at:
          type: string
          format: date-time
          minLength: 1
          readOnly: true
          description: When the suppression was created.
    ErrorDetail:
      type: object
      additionalProperties: false
      required:
      - param
      - message
      properties:
        param:
          type: string
          minLength: 1
          description: 'Dotted field path, such as `to[0].email`, `subject`, or `.`. When the request was rejected for a query parameter the endpoint does not declare, this carries that parameter''s name instead of a field path.

            '
        message:
          type: string
          minLength: 1
          description: What is wrong with this field.
    Error:
      type: object
      additionalProperties: false
      required:
      - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
    _ListEnvelope:
      type: object
      required:
      - next_cursor
      - prev_cursor
      - refresh_cursor
      properties:
        next_cursor:
          type:
          - string
          - 'null'
          description: Cursor for the next page. Pass back as `starting_after` to advance forward. `null` when no next page exists.
          example: eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9
        prev_cursor:
          type:
          - string
          - 'null'
          description: Cursor for the previous page. Pass back as `ending_before` to step backward. `null` when no previous page exists.
          example: null
        refresh_cursor:
          type:
          - string
          - 'null'
          description: Refresh anchor, the first row of this response. Pass back as `ending_before` to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-`null` whenever `data` is non-empty; `null` only on an empty page. Distinct from `prev_cursor`.
          example: eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9
    WhatsAppSuppressionReasonFilter:
      type: string
      enum:
      - manual
    ErrorBody:
      type: object
      additionalProperties: false
      required:
      - type
      - code
      - name
      - message
      - doc_url
      - request_id
      properties:
        type:
          type: string
          minLength: 1
          description: Broad category for coarse client branching.
          enum:
          - auth_error
          - bad_request_error
          - billing_error
          - client_closed_request_error
          - conflict_error
          - gone_error
          - internal_error
          - misdirected_error
          - not_found_error
          - not_implemented_error
          - payload_too_large_error
          - permission_error
          - precondition_error
          - rate_limit_error
          - service_unavailable_error
          - too_early_error
          - validation_error
        code:
          type: string
          minLength: 1
          pattern: ^E\d{5}$
          description: Opaque, stable, unique error identifier. Never reused.
        name:
          type: string
          minLength: 1
          description: Human-readable slug for log readability. Paired with code, never replaces it.
        message:
          type: string
          minLength: 1
          description: Human-readable description. Not stable; clients must not parse it.
        param:
          type: string
          minLength: 1
          description: Identifies the offending field. Omitted when not applicable.
        doc_url:
          type: string
          minLength: 1
          format: uri
          description: Stable link to the docs page for this error code.
        request_id:
          type: string
          minLength: 1
          description: Request correlation ID for support and troubleshooting. Also returned in the `X-Request-Id` response header.
        vendor_code:
          type: string
          minLength: 1
          description: 'Verbatim error code from an external system, such as an SMTP response code or a payment decline code. Present only when the code may help you resolve the error.

            '
        details:
          type: array
          description: Per-field validation errors. Present only on validation_error responses.
          items:
            $ref: '#/components/schemas/ErrorDetail'
        remediation:
          type: string
          minLength: 1
          description: A human-readable next step to resolve this error. Present when a recovery is known.
        next:
          type: array
          description: 'The steps that resolve this error. Perform them in order, re-reading after each; a `wait` or `terminal` step is always last. Present for errors with a well-defined recovery, such as unmet preconditions and conflicts.

            '
          items:
            $ref: '#/components/schemas/NextAction'
    WhatsAppSuppressionList:
      allOf:
      - type: object
        required:
        - data
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/WhatsAppSuppression'
      - $ref: '#/components/schemas/_ListEnvelope'
    NextAction:
      type: object
      additionalProperties: false
      required:
      - kind
      - description
      properties:
        kind:
          type: string
          minLength: 1
          x-extensible-enum:
          - operation
          - external
          - wait
          - terminal
          description: "What you do about this step.\n\n- `operation`: call the operation named in `operation`, then\n  read again.\n- `external`: act somewhere this API does not reach, then read\n  again.\n- `wait`: nothing is asked of you, so read again later.\n- `terminal`: nothing you do resolves this, so stop retrying.\n\nTolerate a value you do not recognize: show the `description` and\noffer no action.\n"
        description:
          type: string
          minLength: 1
          description: A short, human-readable label for the step, suitable for display.
        operation:
          type: string
          minLength: 1
          description: 'The operationId to call. Present only when `kind` is `operation`. The operation''s own schema says how to call it; this says only which one, and what to address it with.

            '
        params:
          type: object
          additionalProperties:
            type: string
            minLength: 1
          description: 'The parameters that address the operation, by name: `{"sender_id": "…"}` for an operation on `/v1/sms/senders/{sender_id}/requirements`. A parameter the operation takes in its query string is given the same way, so an operation addressed as `?subject_id=` carries `{"subject_id": "…"}`. Every parameter the call needs is here, whether its value came from the thing you were acting on or is fixed for this step, so you can make the call from this object alone. Present only when `kind` is `operation` and the operation names a subject. A request body, when the operation takes one, is described by the operation''s own schema and never appears here.

            '
        url:
          type: string
          format: uri
          description: 'A URL to open. Present only when `kind` is `external`, and only when the step has one. An external step whose `description` says to go and do something with no URL to open is normal.

            '
  responses:
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unprocessable:
      description: 'The request has invalid field values, violates a business rule, or carries a query parameter the endpoint does not declare. Field validation errors use `type: validation_error` and include the affected fields in `details`. Business-rule errors identify the failed rule in `type`.

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServiceUnavailable:
      description: 'The service is temporarily unavailable. If `Retry-After` is present, wait for that delay before retrying; otherwise, retry with exponential backoff. Reuse the same idempotency key and request when retrying a mutation.

        '
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Rate limit exceeded
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    XWorkspaceId:
      name: X-Workspace-Id
      in: header
      required: false
      description: Workspace context for the request. Required for dashboard authentication and master keys. Workspace keys and access tokens already identify their workspace; send that workspace or omit the header. A different one is rejected.
      schema:
        type: string
        pattern: ^ws_[0-9a-hjkmnp-tv-z]{26}$
    PaginationLimit:
      name: limit
      in: query
      required: false
      description: Maximum number of items to return per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    EndingBefore:
      name: ending_before
      in: query
      required: false
      description: Cursor from the `prev_cursor` or `refresh_cursor` field of a previous list response. Returns items immediately before the cursor position in the current sort order. `prev_cursor` returns the preceding page. `refresh_cursor` anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.
      schema:
        type: string
    StartingAfter:
      name: starting_after
      in: query
      required: false
      description: Cursor from the `next_cursor` field of a previous list response. Returns items immediately after the cursor position in the current sort order.
      schema:
        type: string
    XOrganizationId:
      name: X-Organization-Id
      in: header
      required: false
      description: Organization context for the request. Required for dashboard authentication. An API key or access token carries its own organization, so send either that organization or no header at all; a different one is rejected.
      schema:
        type: string
        pattern: ^org_[0-9a-hjkmnp-tv-z]{26}$
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: "Client-supplied key. On operations supporting request deduplication, a retained\nresponse is replayed for duplicate requests with the same key within the\nidempotency window (3 hours by default). This protection requires a workspace,\norganization, or staff-account scope. User-only and unscoped unauthenticated operations,\nstreams, and operations with a separate replay contract do not use this\nresponse replay.\n\nOn a supported operation, if idempotency protection is unavailable before execution, the API returns\n`503 IdempotencyUnavailable` (E01033) without executing this attempt. Retry with\nbackoff using the same key and request. An operation that takes effect before\nits response is retained can still execute again on retry.\n\nTwo distinct 409 errors signal misuse:\n\n- `request_in_progress` (E01004): The same key is currently being\n  processed by a concurrent request. Wait briefly and retry. The lock expires within 30 seconds.\n- `idempotency_key_reuse` (E01005): The same key has already completed\n  against a different request body or method. Generate a new key.\n\nRecommended key format is `<event-type>/<entity-id>` (for example `welcome-user/usr_abc123`).\n"
      schema:
        type: string
        maxLength: 255
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: 'Pass the API key as a bearer token in the `Authorization` header. Workspace

        keys use `bk_{region}_*`; organization master keys use `bm_{region}_*`.

        The prefix identifies the region and selects the

        API endpoint. Official Bird SDKs and the CLI derive the region from the key.

        '
    CookieAuth:
      type: apiKey
      in: cookie
      name: bird_session
      description: 'Session cookie set after signing in to the Bird dashboard. The cookie

        value is an opaque session token; no session data is stored in the cookie

        itself.

        '
    RealtimeKey:
      type: apiKey
      in: header
      name: X-Realtime-Key
      description: 'The Realtime app key. Together with `X-Realtime-Secret`, it authenticates a

        request to the Realtime API in addition to the workspace credential. Both

        values come from the app''s credentials and must belong to the calling

        workspace. Official Bird SDKs accept the pair as client configuration.

        '
    RealtimeSecret:
      type: apiKey
      in: header
      name: X-Realtime-Secret
      description: 'The Realtime app secret paired with `X-Realtime-Key`. The API returns the

        secret only when the key is created and does not store it. Create a new key

        and revoke the current key if you lose the secret. Official Bird SDKs accept

        the pair as client configuration.

        '