REST and MCP share a single daily request limit per account. Every response carries headers so you can track usage, and errors follow a consistent JSON shape.
Daily limits
One counter covers both the REST API and MCP tool calls. It resets at 00:00 UTC.
| Plan | Requests / day | Scope |
|---|---|---|
| Free | 100 | REST + MCP combined |
| Pro | 10,000 | REST + MCP combined |
Need more? Compare plans.
Rate-limit headers
Every counted response includes these headers:
| Header | Meaning |
|---|---|
X-RateLimit-Limit |
Your plan's daily request limit. |
X-RateLimit-Remaining |
Requests left today. |
X-RateLimit-Reset |
Unix time (seconds) when the counter resets — next UTC midnight. |
Retry-After |
Seconds to wait — sent only on a 429. |
When you hit the limit
Over the limit, the REST API returns 429 Too Many Requests with the error envelope below. The MCP server instead returns a normal tool result whose text explains the limit and links to upgrade — so your agent can relay it in the conversation rather than surfacing an opaque transport error.
{ "error": { "code": "rate_limited", "message": "Daily call limit exceeded.", "status": 429 } }
Error format
Every non-2xx REST response uses the same envelope:
{
"error": {
"code": "not_found",
"message": "Stock not found.",
"status": 404
}
}
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_parameter |
A query parameter is missing or malformed. |
| 401 | unauthorized |
Missing or invalid API key. |
| 403 | forbidden |
Your plan doesn't allow this request. |
| 404 | not_found |
No matching resource. |
| 429 | rate_limited |
Daily limit exceeded — retry after reset. |
| 500 | internal_error |
Something went wrong on our side. |