# Errors

URL: /evidence/errors · Id: `page:/evidence/errors`

> Every Problem an API answers a Customer with, each with a stable code and a page of its own.

A failed call answers a Problem with a stable code, and every code below has a page of its own.

## Codes
| Code | Status | Cause |
| --- | --- | --- |
| [`invalid_key`](/evidence/errors/invalid_key) | 401 | The [Key](/callers/keys) the call presented is not one the platform accepts. |
| [`key_required`](/evidence/errors/key_required) | 401 | The Offer requires a Key, and the call presented none. |
| [`bad_environment`](/evidence/errors/bad_environment) | 400 | The call asked a test or dev Key to act on live records. |
| [`not_entitled`](/evidence/errors/not_entitled) | 403 | The [Entitlement](/reference/concepts#entitlement) of the Key does not cover this operation. |
| [`customer_unresolved`](/evidence/errors/customer_unresolved) | 503 | The Customer behind the Key could not be resolved, so the call has nowhere to be kept. |
| [`customer_unplaced`](/evidence/errors/customer_unplaced) | 503 | The calls of the Customer have no namespace to live in. |
| [`limit_exceeded`](/evidence/errors/limit_exceeded) | 403 | The call is over a [Limit](/callers/keys#checks), so it was refused before it ran. |
| [`limits_unavailable`](/evidence/errors/limits_unavailable) | 503 | The Limits could not be checked, so the call did not run. |
| [`missing_param`](/evidence/errors/missing_param) | 400 | A required parameter is missing. |
| [`invalid_param`](/evidence/errors/invalid_param) | 400 | A parameter is not of its type, misses its pattern, or is not one of its values. |
| [`not_found`](/evidence/errors/not_found) | 404 | No record matches the input, so the call is a miss. |
| [`invalid_batch`](/evidence/errors/invalid_batch) | 400 | The [Batch](/reference/concepts#batch) body is not a list of 1 to 100 calls. |
| [`no_route`](/evidence/errors/no_route) | 404 | The path is not an operation of the API. |
| [`method_not_allowed`](/evidence/errors/method_not_allowed) | 405 | The API serves the path, but not with that HTTP method. |
| [`invalid_call`](/evidence/errors/invalid_call) | 400 | An MCP tool call named an unknown operation or sent input it cannot read. |
| [`internal`](/evidence/errors/internal) | 500 | The operation failed inside the platform. |