Skip to main content
The reference pages in this tab are generated from the published OpenAPI 3.1 specification — the contract of record for v1. Mintlify also exposes the spec for tooling (and an llms.txt for AI assistants) automatically.

Base URL

The version lives in the path. Backwards-compatible changes (new fields, new enum values, new endpoints) ship without a version bump — write your parsers to ignore unknown fields and tolerate new enum values. Breaking changes get a new path version and a changelog entry.

Authentication

Every request needs your API key as a Bearer token:
See the authentication guide for scopes, rotation, and the BAA gate.

Conventions

  • JSON in, JSON out; property names are snake_case (duration_seconds, next_cursor).
  • Timestamps are ISO 8601 / RFC 3339 UTC strings; phone numbers are E.164.
  • GET endpoints never take request bodies — all filters are query parameters.
  • Practices your app has not been granted return 404, never 403 — practice IDs cannot be probed.
  • Every POST honors an Idempotency-Key header (24-hour replay window).

Errors

All non-2xx responses share one envelope:
error is a stable machine-readable code; message is human-readable and may change — parse the code, not the message. * Returned only by GET /recordings/stream — the signed-URL target of the GET /calls/{callId}/recording redirect.

Pagination

Pagination varies by resource: Calls (GET /practices/{practiceId}/calls) use cursor pagination — limit (1–100, default 50) and an opaque cursor in, and out:
Pass next_cursor back as cursor for the next page; next_cursor is null on the last page. Treat cursors as opaque and short-lived — don’t store them or construct them. Call requests (GET /practices/{practiceId}/call-requests) use limit (1–100, default 20) and offset, and return:
Practices (GET /practices) and webhook endpoints (GET /webhook-endpoints) return the full set as { "data": [ ... ] } — no pagination.

Rate limits

600 requests/minute per key; bulk writes (call-request creation) have a separate 60/minute budget. 429 responses carry Retry-After (seconds).