Response format
Every response uses the same envelope — a data object on success, an error object on failure.
Every endpoint returns JSON in a consistent envelope, so you can parse success and failure the same way everywhere.
Success
Successful responses carry a data object. List endpoints also include a meta object with pagination info.
{
"data": { "id": "uuid", "status": "processing" },
"meta": { "cursor": "abc...", "has_more": true }
}
data— the resource, or for lists, the array of resources.meta— present on paginated lists. See Pagination.
Error
Failed responses carry an error object with a stable code and a human-readable message. Some errors add context fields.
{
"error": {
"code": "insufficient_credits",
"message": "You need 3 credits but have 1 remaining",
"balance": 1,
"required": 3
}
}
Always branch on error.code, not on message — messages are for humans and may change. See Errors for the full list of codes and the status codes they pair with.