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 return404 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:
404, the most common cause is that the API key is scoped to a different organization than you expected. Check it with:
Key self-revocation
If a key is compromised, the holder can revoke it without web UI access: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.
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 is429 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:
limitoutside1–100(default is 25)created_after/created_beforenot a valid ISO 8601 timestampstatusfilter not in the allowed enum — see the API Reference tab for per-resource status values- Missing required body field on
POST /v1/webhooks