Skip to docs content

Reference

Limits and errors

What the API allows, and what each refusal means.

Limits

  • 120 requests a minute per key, REST and MCP together, and 120 a minute per signed-in app. Over it, the answer is 429 with a Retry-After header in seconds.
  • Up to 1,000 rows a page.
  • An MCP request body of up to 64 KiB, or 256 KiB for a change tool from a signed-in app.

HTTP errors

Every error is JSON: { "error": "..." }.

  • 401: the key is missing, malformed, unknown or revoked, or the workspace's subscription does not currently allow access (for example, cancelled, or past due beyond its grace period).
  • 403: a change tool called by an app that was not allowed to propose changes (insufficient_scope); sign in again and turn changes on.
  • 404: no such route, or an entity the key cannot read. An account id that is not in the entity returns no rows rather than an error.
  • 405: a method other than GET on the REST API, or other than POST on the MCP endpoint.
  • 422: a parameter is invalid; the message names it.
  • 413: an MCP request body is too large.
  • 429: the rate limit; wait for Retry-After.
  • 500: the request did not complete. Retry later.

MCP errors

The key and the rate limit are checked first, as HTTP 401 and 429. After that, errors are JSON-RPC: -32700 the body is not JSON, -32600 not a request, -32601 unknown method, -32602 an unknown tool or invalid arguments (with the REST message). A database failure is a tool result with isError set.

A change tool that 42six refuses (an expired plan, busy books, an ambiguous account, nothing to change) is a tool result with isError set whose text is JSON: { "error": "...", "error_description": "..." }, plus choices or exclusions where they apply.