Request limits
Each bucket is checked both per API key and per owning account. Multiple keys do not multiply the account allowance. Windows are fixed 60-second periods; unused capacity does not carry forward.
A connection to an event stream counts as one request; individual events are not separate HTTP requests. Other application surfaces can have their own limits. This is not a throughput or burst guarantee.
Concurrent work
- Up to two active managed image jobs per account, including sprite-sheet jobs.
- Up to four open execution event streams per API key. Close disconnected or unused streams before opening more.
- A closed stream does not cancel a job or release its credit hold. Check execution state and reconnect to the same execution.
Response headers
Errors includeX-Request-ID, Cache-Control: no-store, and Pragma: no-cache. Keep the request ID for support.
The current public contract does not promise Retry-After, remaining-request headers, or reset-time headers. Do not depend on their presence. If a future response includes Retry-After, honor it; otherwise use capped exponential backoff with jitter. A practical client policy starts at one second, doubles between attempts, caps at 60 seconds, and stops after a bounded number of retries. That is client guidance, not a server completion deadline.
Decide what to do
For/v1/execute, distinguish synchronous HTTP errors from later execution failures. A 202 or open SSE stream does not guarantee admission. Non-retryable admission errors are returned in canonical execution state and done; credit and quota failures do not return submit-time 402.
Keep the same uploaded
input_asset_id on a replay. Uploading the file again creates a different request, even when the local file is unchanged. A terminal failure is a completed attempt: submitting a replacement is a new operation that can incur a new charge.
See idempotency and retries, error details, and the multiple-image queue.