Skip to main content

Error format

Errors return a non-2xx status code and a JSON body:

HTTP status codes

Error codes

Verify API errors

See OTP verification for the full flow.

Sender ID request errors

Errors by endpoint

Message statuses

Responses also include a mode field: live for billable carrier sends, sandbox for sandbox sends, and mixed on bulk batches that contain both.

Bulk results

POST /sms/bulk returns one result per recipient. A failed recipient has success: false, a null message_id, and a description in error. Use dispatched_count and failed_count to check the batch totals.

Rate limits

The API allows 600 requests per minute (10 requests per second). Requests above the limit return 429 RATE_LIMIT_EXCEEDED.

Idempotency

Add an Idempotency-Key header to POST /sms/send to retry safely without sending or billing twice.
  • Use a unique value up to 128 characters, such as a UUID v4.
  • Keys are cached for 24 hours per account.
  • Replayed requests return the header X-Cache-Lookup: HIT (Idempotent).

Compliance pre-check

Call POST /compliance/inspect to run the 21-rule UCC compliance and segmentation check before sending. It flags prohibited spam keywords, deceptive financial text, and length issues. See Compliance.