Response envelope
Every Public API response wraps its payload in a fixed envelope.
Every successful response is wrapped in a data object:
{ "data": { "status": "ok", "service": "public_api" } }
data may be an object, an array, or, for paginated endpoints, an object with items plus pagination. Error responses use a different wrapper. See Errors.
Variants you will see
Object payload:
{ "data": { "valid": true, "tier": "starter" } }
Array payload:
{ "data": [ { "name": "Stripe" }, { "name": "OpenAI" } ] }
Cursor-paginated payload:
{
"data": {
"items": [],
"pagination": { "cursor": null, "next_cursor": "abc123", "has_more": true }
}
}
Page-paginated payload:
{
"data": {
"items": [],
"pagination": { "page": 1, "per_page": 25, "total": 142, "has_more": true, "next_page": 2 }
}
}
See Pagination for which endpoints use which style.
Response headers
Typical response headers returned by the API:
x-request-id: req_abc123
x-ratelimit-limit: 300
x-ratelimit-remaining: 287
x-ratelimit-reset: 41
content-type: application/json; charset=utf-8
x-request-id is unique per request. Include it in any support ticket so we can trace the call end to end. The x-ratelimit-* headers describe the current rate limit window for your API key.