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

# An inbound call completed



## OpenAPI

````yaml /openapi.yaml webhook call.incoming.completed
openapi: 3.1.0
info:
  title: Dialbird Public API
  version: 1.0.0
  description: >
    The Dialbird Public API is a versioned, machine-to-machine REST surface for

    building automations on top of Dialbird (Zapier, n8n, Make, custom scripts).


    ## Authentication


    All endpoints except `GET /health` require an OAuth 2.0 bearer access token

    obtained via the Authorization Code flow against Dialbird's OIDC provider.

    The token is a signed JWT with `aud: "public-api"`; the API verifies it

    against the issuer's JWKS. Send it on every request:


    ```

    Authorization: Bearer <access_token>

    ```


    Access tokens must **never** be passed as a `?access_token=` query parameter
    —

    requests that do are rejected with `401 invalid_token`.


    ## Request & response conventions


    - All request and response bodies are JSON (`application/json`).

    - Field names are `snake_case`.

    - Every response carries an `X-Request-Id` header. Include it when
    contacting
      support. Clients may supply their own via the `X-Request-Id` request header
      (`^[A-Za-z0-9_-]{1,64}$`); otherwise the API generates one.
    - Phone numbers are always E.164 (e.g. `+15551234567`).


    ## Idempotency


    Write endpoints (`POST /contacts`, `POST /messages`) accept an optional

    `Idempotency-Key` header (≤255 chars). Retrying a request with the same key

    and identical body replays the original response without re-running the

    operation. Reusing a key with a *different* body returns `409

    idempotency_key_reused`; a retry while the first request is still in flight

    returns `409` with code `idempotency_in_progress`. Keys are retained for
    24h.


    ## Rate limiting


    Authenticated requests are limited per `(business, oauth_client)`; anonymous

    requests (only `GET /health`) are limited per IP. Every response includes:


    - `X-RateLimit-Limit` — requests allowed in the current window

    - `X-RateLimit-Remaining` — requests left in the window

    - `X-RateLimit-Reset` — unix epoch seconds when the window resets


    A `429 rate_limited` response additionally carries a `Retry-After` header

    (seconds).


    ## Errors


    Errors share one envelope:


    ```json

    { "error": { "code": "not_found", "message": "…", "field": "to",
    "request_id": "req_…" } }

    ```


    `field` is present only for validation errors that map to a specific input.
  contact:
    name: Dialbird Support
    email: team@usechalkboard.com
servers:
  - url: '{origin}/api/v1'
    description: Dialbird Public API base URL
    variables:
      origin:
        default: https://app-staging.dialbird.io
        description: The Dialbird deployment origin (matches the OIDC issuer host).
security:
  - OAuth2: []
tags:
  - name: System
    description: Unauthenticated health checks.
  - name: Identity
    description: The authenticated principal.
  - name: Contacts
    description: Create and update contacts.
  - name: Messages
    description: Send SMS messages.
  - name: Webhooks
    description: Manage REST-Hook webhook subscriptions.
paths: {}
components:
  securitySchemes:
    OAuth2:
      type: oauth2
      description: |
        Authorization Code flow against Dialbird's OIDC provider. The issued
        access token is a JWT with `aud: "public-api"`, verified against the
        issuer JWKS.
      flows:
        authorizationCode:
          authorizationUrl: https://app-staging.dialbird.io/oidc/auth
          tokenUrl: https://app-staging.dialbird.io/oidc/token
          refreshUrl: https://app-staging.dialbird.io/oidc/token
          scopes:
            api:me: Read the authenticated business, user, and granted scopes.
            api:contacts:read: Read contacts.
            api:contacts:write: Create and update contacts.
            api:messages:read: Read messages.
            api:messages:write: Send messages.
            api:calls:read: Read calls.
            api:webhooks: Manage webhook subscriptions.

````