Errors
How a failed request answers, every error code, and what to do about each.
A successful request answers 200. A failed one answers with a 4xx or 5xx
status and a JSON body:
{
"errorCode": "insufficient_scope",
"errorMessage": "This API key does not have the scope required for this endpoint"
}errorCodeis stable: branch on it.errorMessageis a short explanation in English for people reading logs. It may change, and it is not sent with every code.
Handling errors#
| Status | What to do |
|---|---|
| 400 | Fix the request: a value is missing, has the wrong type, or is not accepted. Don't retry it as it is. |
| 401 | The item is not yours, or the request came from a website the key does not allow. |
| 402 | A payment is needed: the Open Guest budget is reached, or a seat could not be charged. |
| 403 | The key, its access or the subscription stops this request. Check the code. |
| 404 | The item does not exist, or is not on your account. |
| 409 | The request conflicts with your account's state, such as every seat being taken. |
| 429 | Slow down, then retry. See Rate limits. |
| 500 | Retry once after a pause. If it keeps failing, contact support with the time and the endpoint. |
Retry only what is safe to repeat: a GET always is; a POST that creates
something may have done it before the error reached you, so check first.
Every code#
| Status | errorCode | What it means |
|---|---|---|
| 400 | invalid_body | A value in the request body is missing, has the wrong type, is too long or is not one of the accepted values. |
| 400 | invalid_product_pricing | A product's prices are not complete or not valid. Check the unit, the currency, the type and every tier. |
| 400 | invalid_project_id | The project or folder ID in the path is missing or blank. |
| 400 | invalid_uid | The person's ID in the path is missing or blank. |
| 400 | pagination_invalid_page_limit | The limit query parameter is missing or not a number above 0. |
| 400 | pagination_invalid_page_number | The page query parameter is missing or not a number. |
| 400 | request_body_empty | The request needs a JSON body and none was sent. |
| 401 | unauthorized_action | The item is not on your account or your members', the request came from a web page on a website the key does not allow, or the action is not allowed for this person. |
| 402 | budget_limit_reached | Open Guest. Your budget limit for this billing period is reached, so no more guest projects are started until the next one or until you raise it. |
| 402 | enterprise_seat_payment_failed | Every seat is taken, and the payment for the extra seat your automatic seats setting asked for did not go through. |
| 403 | api_key_suspended | API access on your account has been suspended. Contact support. |
| 403 | insufficient_scope | The key does not have the access this endpoint needs. Create a key with that access. |
| 403 | invalid_api_key | No key was sent in the Authorization header, or the key is unknown, revoked, or past the time it kept working after being replaced. |
| 403 | invalid_subscription | Your plan has no API access. The API is part of the Enterprise and Open Guest plans. |
| 403 | scope_not_in_plan | Your plan does not include this endpoint, for example members on Open Guest. |
| 403 | subscription_expired | Your subscription is not active. Update your payment method in the app. |
| 404 | not_found | The folder or product does not exist, or is not in your catalogue. |
| 404 | project_not_found | The project does not exist. |
| 404 | user_not_found | The person does not exist or is not a member of your organisation. |
| 409 | enterprise_add_users_limit | Every seat of your Enterprise subscription is taken. Add seats in the app, or turn on automatic seats. |
| 409 | enterprise_transfer_required | Your organisation requires a member's projects to be transferred before their account is deleted. Transfer them in the app first. |
| 409 | user_email_already_exists | An account with this email address already exists. |
| 429 | too_many_requests | Your account asked for more than 600 tokens in an hour. Wait a little and try again. |
| 500 | server_error | The request could not be completed. Check the IDs you sent and try again; contact support if it persists. |
Each endpoint's page in the reference lists the codes it can answer with.