Limits and concurrency
Creatomate's infrastructure automatically scales based on demand. For low to moderate API usage, you won't need any special consideration regarding throughput. However, if you anticipate high usage spikes, there are two important constraints to keep in mind; the API rate limit and render concurrency.
API rate limit
To protect our services from abuse and maintain fast response times for all customers, the API has a rate limit of 30 requests per 10-second window. Every API request from your account counts toward this limit. When exceeded, the API returns a 429 Too Many Requests response.
Every response carries the headers X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (the reset as a Unix time in seconds), so a client can pace itself before being refused. A 429 adds a Retry-After header with the number of seconds to wait, and its body names the limit in a hint.
For most basic automation scenarios, the API rate limit is more than sufficient and requires no special attention. However, for applications expecting usage spikes, we recommend implementing a queue mechanism to distribute API requests over time.
Concurrency
Render concurrency refers to the number of videos or images processed simultaneously. While you can enqueue 30 videos every 10 seconds (within the API rate limit), this doesn't guarantee immediate processing. If many requests are already in progress, some videos may be queued. This queue has no limit, so as long as you adhere to the API rate limit, all renders will eventually complete.
The subscription plan determines your account's concurrency level, with higher plans receiving priority in the render queue. Generally, each customer can use about 20% of their monthly quota within 24 hours. For example, with 200,000 credits, the render concurrency allows for 40,000 credits per day. This flexibility helps accommodate usage spikes, enabling you to use your entire 30-day allowance in about 5 days if needed.
Output resolution
A render is never larger than 3840 pixels on either side: a render_scale that would take it past that is lowered to fit. On the free plan, the output is scaled down further so that neither its width nor its height exceeds 480 pixels, a preview resolution; rendering at full resolution needs a paid plan.