--- title: "Errors and limits" source: "https://docs.palt.io/errors-and-limits" --- # Errors and limits ## Errors Every error has the same shape: ```json { "error": { "code": "not_found", "message": "Project not found." } } ``` `code` is stable, for programs; `message` is for people. Validation errors add `details`, the problem per field. | Status | Code | Meaning | | --- | --- | --- | | 400 | `invalid_request` | The body or a parameter is not valid. `details` says which. | | 401 | `unauthorized` | The API key is missing, invalid or expired. | | 403 | `forbidden` | Your role on the project does not allow this. | | 403 | `plan_limit` | Your plan does not include this. The message says what would. | | 404 | `not_found` | No project, spec or page you can see has that slug, version or id. | | 409 | `conflict` | The slug is taken. | | 429 | `rate_limited` | More than 600 requests in a minute. Retry after a minute. | | 500 | `internal_error` | Something went wrong on our side. | A project you have no role on answers `404`, not `403`, so the API never reveals which projects exist. ## Plan limits The API follows your plan, as the dashboard does: | | Free | Pro | | --- | --- | --- | | Projects | 3 | Unlimited | | Team members per project | 2 | Unlimited | | AI generations a month | 20 | 500 | | MCP bridge tool calls a month | 1,000 | 50,000 | `GET /me` returns your limits and this month's usage.