TwinToneTwinToneAPI Docs

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." } }
HTTPCodeMeaningFix
400missing_fieldsRequired body/query params absent.Check the endpoint reference.
401unauthorizedKey missing, malformed, or revoked.Verify the Bearer tt_… header; create a new key if revoked.
402plan_requiredYour plan doesn't include API access.Upgrade to Growth+ in Billing.
403insufficient_scopeKey lacks the scope for this endpoint.Create a key with the needed scope.
403vertical_mismatchvertical in the request ≠ your brand's vertical.Drop the field (defaults to your brand) or use the right vertical.
404not_foundResource doesn't exist or belongs to another brand.Check the id.
429rate_limitedOver the per-minute request limit.Back off; see below.
429concurrency_limitBrand already has 3 active (preparing+live) streams.End one before starting another.
500db_errorSomething failed on our side.Retry with backoff; contact support if persistent.

Rate limits

PlanLimit
Growth100 requests/min
Scale300 requests/min
EnterpriseCustom

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/DELETE are safe to retry freely.
  • For POST /streams: if your request times out, check GET /streams before retrying — the stream may have been created.
  • Webhook deliveries are at-least-once; dedupe on the event id.

Was this page helpful?