Docs
REST APIRate Limits

Rate Limits

API key rate limits and how to handle 429 responses.

Rate Limits

Moviie applies rate limits to protect service stability and to keep expensive operations bounded. Limits can be scoped by API key, organization, video, playback session, or source address depending on the endpoint.

Default limits

Authenticated REST API traffic is limited per API key:

ScopeWindowMax requests
API key60 seconds600 requests
API key write operations60 seconds120 requests
API key write operations on Enterprise60 seconds240 requests

Some endpoints also have stricter limits because they start generation jobs, create uploads, or perform high-volume search/interactive work. Write operations that create, update, delete, upload, or start generation work can receive stricter per-organization and per-video budgets.

Endpoint categoryAdditional scopeWindowMax requests
Reels, ebook, and translation generationOrganization burst10 seconds8 requests
Reels and translation generationOrganization60 seconds30 requests
Reels and translation generationVideo60 seconds15 requests
Upload reservation and upload presignOrganization60 seconds60 requests
Upload reservation and upload presignVideo60 seconds12 requests
Ebook generationVideo60 seconds10 requests
Lip sync generationOrganization burst10 seconds4 requests
Lip sync generationOrganization60 seconds10 requests
Lip sync generationVideo60 seconds6 requests
Dubbing generation and audio upload/presignOrganization60 seconds10 requests
Dubbing generation and audio upload/presignVideo60 seconds3 requests
Authenticated embed transcript searchSource burst2 seconds20 requests
Authenticated embed transcript searchSource60 seconds200 requests
Authenticated embed transcript searchOrganization burst2 seconds30 requests
Authenticated embed transcript searchOrganization60 seconds600 requests
Playback session transcript searchSource burst2 seconds15 requests
Playback session transcript searchSource60 seconds120 requests
Playback session transcript searchPlayback session burst2 seconds5 requests
Playback session transcript searchPlayback session60 seconds60 requests
Playback session transcript searchVideo60 seconds600 requests
Playback session transcript searchOrganization60 seconds6,000 requests
Embed quiz retrievalSource burst2 seconds10 requests
Embed quiz retrievalSource60 seconds120 requests
Embed quiz retrievalOrganization60 seconds600 requests

Requests can be denied when any applicable scope exceeds its limit. For example, an organization can remain within the default API-key limit while a single video or generation category is temporarily limited.

Rate limit exceeded

When a limit is exceeded, the API returns:

HTTP/1.1 429 Too Many Requests
Retry-After: 60
{ "error": "rate_limited" }

The Retry-After header is expressed in seconds. Some authentication-level limits may return a different human-readable error string, but clients should treat any 429 response as a rate-limit response and wait for Retry-After before retrying.

Best practices

  • Implement exponential backoff when you receive a 429 response. Wait before retrying.
  • For batch operations (e.g., fetching analytics for many videos), throttle your requests or batch them where the API supports it.
  • Use server-side caching for frequently accessed data (e.g., collection lists) to avoid redundant API calls.
  • Avoid immediately retrying generation or upload requests from multiple workers. Queue them client-side and respect the longest Retry-After value you receive.

On this page