Documentation / Getting started
Requests & errors
Build retry-safe integrations with predictable responses, idempotency, and rate limits.
Response envelope
Successful responses include data and a request ID. Errors use application/problem+json with a stable code, detail, and requestId.
{
"data": {
"items": [],
"nextCursor": null
},
"meta": {
"requestId": "11111111-1111-4111-8111-111111111111"
}
}Idempotency
Send an Idempotency-Key of 8–128 characters and Content-Type: application/json on every mutation, including DELETE. Store the key before sending. Reuse it with the exact same input after a network failure; changed input returns 409. Receipts are retained for at least 24 hours. Unknown outcomes remain reserved until investigated.
HTTP errors
400 / 422Invalid request
Check JSON, parameters, resource IDs, and field validation errors.
401Authentication required
Check your bearer token, expiry, and revocation status.
402Access or allowance required
Check Unlimited access and remaining API export credits.
403Permission denied
Check key scopes and project access.
404Not found
Check the endpoint and resource ID.
409Conflict
Check idempotency input and the resource’s current state.
429Rate limited
Respect Retry-After before trying again.
500 / 503Server unavailable
Keep the request ID. Retry mutations with the same idempotency key.
Pagination & rate limits
List projects and renders with limit (1–100) and an opaque cursor. Follow data.nextCursor until null. Render lists also require projectId. Account-wide per-minute limits are 120 requests, 30 content mutations, and 10 render mutations. Respect Retry-After on 429 responses and render status polls.