API reference
Errors & rate limits
Error format
Every error response has the same shape:
{ "error": { "code": "rate_limited", "message": "Too many requests. Limit: 100/min." } }
| HTTP | Code | Meaning | Fix |
|---|---|---|---|
| 400 | missing_fields | Required body/query params absent. | Check the endpoint reference. |
| 401 | unauthorized | Key missing, malformed, or revoked. | Verify the Bearer tt_… header; create a new key if revoked. |
| 402 | plan_required | Your plan doesn't include API access. | Upgrade to Growth+ in Billing. |
| 403 | insufficient_scope | Key lacks the scope for this endpoint. | Create a key with the needed scope. |
| 403 | vertical_mismatch | vertical in the request ≠ your brand's vertical. | Drop the field (defaults to your brand) or use the right vertical. |
| 404 | not_found | Resource doesn't exist or belongs to another brand. | Check the id. |
| 429 | rate_limited | Over the per-minute request limit. | Back off; see below. |
| 429 | concurrency_limit | Brand already has 3 active (preparing+live) streams. | End one before starting another. |
| 500 | db_error | Something failed on our side. | Retry with backoff; contact support if persistent. |
Rate limits
| Plan | Limit |
|---|---|
| Growth | 100 requests/min |
| Scale | 300 requests/min |
| Enterprise | Custom |
Limits are per brand, per minute, sliding window. When limited you'll get
429 with a Retry-After header. If you're polling stream status, switch to
webhooks — it's what they're for.
Idempotency & retries
GET/DELETEare safe to retry freely.- For
POST /streams: if your request times out, checkGET /streamsbefore retrying — the stream may have been created. - Webhook deliveries are at-least-once; dedupe on the event
id.
Was this page helpful?