> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jointransfer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors and rate limits

> Handle REST failures and retry safely.

REST errors use this shape:

```json theme={"theme":{"light":"github-light","dark":"vesper"}}
{
  "errors": [{
    "status": "401",
    "code": "unauthenticated",
    "detail": "Invalid or expired agent key."
  }]
}
```

| HTTP status | Code | Action |
| - | - | - |
| 401 | `unauthenticated` | Check or replace the bearer key. |
| 403 | `forbidden` | Use a trusted backend; cross-origin browser access is blocked. |
| 404 | `not_found` | Use a wallet ID accessible to this agent. |
| 429 | `rate_limited` | Wait for the `Retry-After` interval (60 seconds). |
| 503 | `unavailable` | Retry with backoff. |

The per-key limit is 120 authorization/tool checks per minute, shared across access through that key. REST reads use one check; MCP tool requests normally use two.

MCP transport failures use an `error` response; tool execution failures are returned with `isError: true` and a text explanation. Do not assume that an HTTP success means a simulated purchase succeeded. Read the tool result.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.