err:{system}:{category}:{specific}, and every code has a page here at /errors/{system}/{category}/{specific}. Each page tells you what the error means, shows an example response, and lists the likely causes and how to fix them.
Reading an error code
The first part tells you where the error came from.
The second part groups codes by kind, and the third names the exact problem. Always read the whole code, because some names appear in two categories.
err:unkey:authentication:key_not_found is about the root key you authenticated with. err:unkey:data:key_not_found is about a key you referenced in the request.
What the API error body looks like
The API returns errors as JSON:meta.requestIdidentifies the request. Include it when you contact support.error.typeis the error’s page in this catalog.error.statusrepeats the HTTP status.error.titleis a short label. Match onerror.type, never on the title.error.detailexplains what went wrong this time, often with the exact value or permission.
Not found
err:unkey:application:invalid_input) add an errors array. Each entry has a location, such as /required, and a message, such as missing property 'apiId'. Some entries also have a fix that says what to change.
Validation failure
err:unkey:data:*_not_found code is 404, but err:unkey:authentication:key_not_found and err:unkey:authentication:portal_session_not_found are 401, because what’s missing is your credential.
A 5xx status means the failure is on our side, not in your request. Retry with backoff if the request is safe to repeat, and contact support with the request ID if it keeps happening.
What the gateway error body looks like
The gateway in front of apps on Compute returns a smaller body: a request ID, acode, and a message. Each error’s page gives its status.
Gateway error
Accept header of application/json, application/*, or */* without text/html. Plain curl sends */*, so it gets JSON. Everything else, including a browser, gets an HTML page with the same code, message, and request ID.