- Guides
- Rate limits and errors
Rate limits and errors
Each key has a one-minute and a one-day bucket. Every response says how much of each is left.
Limits by plan#
| Plan | Per minute | Per day |
|---|---|---|
| Premium | 100 | 5,000 |
| Annual | 500 | 25,000 |
| Lifetime | 500 | 25,000 |
| Starter (MCP only) | 100 | 5,000 |
Organization keys carry the per-minute limit and monthly quota in their contract. An OAuth connection counts as your account.
Response headers · production, 16 Oct 2026 10:18 UTC
HTTP/2 200
x-ratelimit-limit: 100
x-ratelimit-remaining: 99
x-ratelimit-reset: 1792232333
x-ratelimit-window: 60
x-ratelimit-limit-day: 5000
x-ratelimit-remaining-day: 4999
x-request-id: …When you hit a limit#
You get 429 with Retry-After in seconds and both buckets in the body. Wait that long; do not retry in a loop.
429 · values illustrative, fields from rate_limit.py
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please slow down.",
"status": 429,
"retry_after": 12,
"limit_minute": 100,
"remaining_minute": 0,
"limit_day": 5000,
"remaining_day": 4211
}
}Errors#
Route errors use the envelope {"success": false, "error": {code, message, status}}. Authentication and validation errors come from FastAPI as {"detail": …}. Both shapes are documented as they are; nothing changes for existing integrations.
| Status | Codes | Meaning |
|---|---|---|
| 400 | INVALID_SYMBOL · INVALID_ID · INVALID_JOB_ID · INVALID_URL · INVALID_EVENTS · MAX_WEBHOOKS_REACHED | Bad input, or the webhook cap. |
| 401 | detail | Missing, invalid or revoked key, or a locked account. |
| 403 | detail · WATCHLIST_LIMIT_REACHED | Plan or subscription, or the tracked-asset cap. |
| 404 | SYMBOL_NOT_FOUND · NOT_AVAILABLE_FOR_ASSET · EVENT_NOT_FOUND · JOB_NOT_FOUND · NO_DATA · NO_PREDICTION · DATA_UNAVAILABLE · NOT_FOUND | Nothing to return. |
| 422 | detail[] | A query or body value is outside its range (FastAPI validation). |
| 429 | RATE_LIMIT_EXCEEDED · ON_DEMAND_RATE_LIMIT | Slow down; read Retry-After. |
| 500 | FETCH_FAILED · CREATE_FAILED · UPDATE_FAILED · DELETE_FAILED · DELIVERY_FAILED | Our side. Retry with backoff. |
| 502 / 503 | UPSTREAM_UNAVAILABLE · DATA_UNAVAILABLE · SERVICE_UNAVAILABLE · TONE_UNAVAILABLE | Temporarily unavailable; some carry Retry-After. |
Envelope · route errors
{
"success": false,
"error": {
"code": "NOT_AVAILABLE_FOR_ASSET",
"message": "COT data is not available for AAPL. COT reports only cover CFTC-reported futures (FX, commodities, indices).",
"status": 404
}
}FastAPI detail · authentication
{
"detail": "Missing or invalid API key. Include X-API-Key header with your te_pub_ key."
}Educational market research, not investment advice; not for fully automated trade execution. Questions about the API or the MCP server: support@tradeeasyai.net.
