Rate limits
When you exceed a limit the API returns
429 Too Many Requests with a Retry-After header (seconds).
The read limit and the date-window ceiling apply to API-key callers. They are abuse brakes: 300 reads a minute is far above what an integration needs, and a 92-day window covers any report. To read a longer period, move the window and page through it. A wider window is refused up front with 400 VALIDATION_FAILED naming startDate and maxDays, before anything is queried.
Error response format
Every error is JSON with a human-readablemessage. Newer endpoints add a stable code you can branch on, and where useful a field naming what was wrong:
message. Branch on code where present; treat it as optional on the older endpoints. There is no errors[] array or nested envelope.
Stable codes
HTTP status codes
Common causes
- 400 Bad Request
- 403 Forbidden
- 404 Not Found
- 409 Conflict
- 429 Too Many Requests
- 500 Internal Server Error
- Required field omitted (
fileUrl,projectId,buildId). - Wrong type or out-of-range value; enums are case-sensitive (
H264, noth264). - A settings field that is not on the allow-list, such as
regionorallowedUsers. - Cross-field conflict:
minBitrateabove the storedmaxBitrate, oddresX. - Webhook URL pointing at a private address.
Retry strategy
- Retry on
429(afterRetry-Afteror the seconds in the message) and on5xx, with exponential backoff and jitter. - Do not retry other
4xxresponses; the request is wrong and retrying will not fix it. - Control actions are idempotent: repeating
enable,disableorsessions/endafter a timeout is safe. Repeatingactive-buildre-queues distribution, which is harmless but wasteful. RepeatingPATCH /settingswith the same body is safe.