Skip to main content
All errors share a consistent shape:
The error.code is a stable machine-readable string. The error.message is human-readable and may change between versions. Parse code, log message.

Error codes

Cross-tenant 404

Resources that belong to a different organization return 404 not_found, not 403 forbidden. This is intentional — 403 would leak the fact that an ID exists; 404 is indistinguishable from “never existed.” This applies to every resource path, not just videos. Concretely: if your key is for org A, calling GET /v1/videos/{id} with a video ID from org B returns:
If a resource you know exists returns 404, the most common cause is that the API key is scoped to a different organization than you expected. Check it with:
The returned member’s organization is the only one this key can see.

Key self-revocation

If a key is compromised, the holder can revoke it without web UI access:
This endpoint requires no permission scope — any key can always revoke itself. After revocation, every subsequent request with the same key returns 401 unauthorized.

Using request_id

Every response — success or error — includes meta.request_id. When reporting issues, include it: we can trace the exact request server-side, including timing, inputs, and which backend service handled it.
Format is req_ followed by 32 lowercase hex characters (a UUID with dashes removed). The same ID is echoed on the X-Request-Id response header so you can grep logs end-to-end.

Rate limits

Rate-limit enforcement is per-API-key. When a limit is exceeded the response is 429 rate_limited with a Retry-After header specifying seconds to wait:
Rate limits are not yet enforced on all issued keys. Future versions will apply sensible defaults per scope. Design clients to always honor Retry-After rather than hard-coding intervals, so the switch to enforcement is a no-op for you.

Validation errors

validation_failed (422) is the most common error during development. The message field names the offending field path:
Common causes:
  • limit outside 1–100 (default is 25)
  • created_after / created_before not a valid ISO 8601 timestamp
  • status filter not in the allowed enum — see the API Reference tab for per-resource status values
  • Missing required body field on POST /v1/webhooks