Skip to main content

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.

Error envelope

Every error shares one envelope:
{
  "error": {
    "code": "not_found",
    "message": "Contact not found.",
    "field": "to",
    "request_id": "req_8f3c2c1d"
  }
}
  • code — a stable, machine-readable identifier. Branch on this, not on the message.
  • message — a human-readable description. Subject to change; don’t parse it.
  • field — present only for validation errors tied to a specific input field.
  • request_id — the same value as the X-Request-Id response header. Include it when contacting support.

Error codes

CodeTypical statusMeaning
validation_error400The request body failed validation.
invalid_phone_number400A phone number was not valid E.164.
invalid_event_type400Unknown webhook event type.
missing_token401No Authorization header was sent.
invalid_token401The token is malformed or failed verification.
expired_token401The token is past its expiry.
insufficient_scope403The token lacks the required scope.
forbidden403The caller may not access the resource.
business_suspended403The business is suspended or not associated.
not_found404The resource does not exist.
conflict409The request conflicts with current state.
idempotency_key_reused409An Idempotency-Key was reused with a different body.
idempotency_in_progress409A prior request with the same key is still in flight.
gone410The resource is no longer available.
unprocessable_entity422The request was understood but cannot be processed.
rate_limited429The rate limit was exceeded.
internal_error500An unexpected server error.

Rate limiting

Authenticated requests are limited per (business, oauth_client) pair. Anonymous requests (only GET /health) are limited per IP. Every response includes:
HeaderMeaning
X-RateLimit-LimitRequests allowed in the current window.
X-RateLimit-RemainingRequests left in the window.
X-RateLimit-ResetUnix epoch seconds when the window resets.
A 429 rate_limited response additionally carries a Retry-After header (seconds). Honor it: wait the indicated time before retrying, and prefer exponential backoff for repeated 429s.