Errors
Errors use a consistent envelope with a stable machine-readable type:
{
"errors": [
{
"type": "org_not_owned_by_partner",
"code": 403,
"message": "Organization not found or not owned by this partner"
}
]
}HTTP | Type | Meaning |
400 |
| Request body or query failed validation (details in |
400 |
|
|
400 |
| SSO |
401 |
| Missing, malformed, unknown or revoked partner key |
401 |
| Missing, malformed, unknown or expired access token. Tokens also become invalid the moment the partner key that minted them is revoked. |
403 |
| Request IP is not in your allowlist (applies to organization-scoped calls too) |
403 |
| Organization does not belong to your account |
404 |
| Resource does not exist in this organization. Unknown paths and unsupported methods also return |
409 |
| The request conflicts with current state: a duplicate |
429 |
| Too many requests — see |
500 |
| Something went wrong on our side |
503 |
| The rate-limiting service is temporarily unavailable; retry shortly |
Rate limits
Limits are applied in a rolling 1-second window:
Partner API key: 20 requests/second per key
Organization access token: 10 requests/second per organization. The bucket is shared by every live token for that organization, so two tokens minted for the same organization do not double the limit.
Exceeding a limit returns 429 rate_limited with a Retry-After header in seconds (currently always 1). Higher limits are available on request.
Region codes
GET /regions | Partner API key
{
"data": [
{ "code": "CA", "name": "California", "country": { "code": "US", "name": "United States" } },
{ "code": "ON", "name": "Ontario", "country": { "code": "CA", "name": "Canada" } }
]
}This endpoint is the authoritative list of region codes accepted in purchasedRegions. Codes are bare, not prefixed with a country: today they cover US states and territories (CA, NY, TX, PR …) and Canadian provinces (AB, BC, ON, QC …). Codes not in this list are rejected with 400 validation_error.
Partner API documentation:
Reference (Errors, Rate Limits, Regions)