Rate limits
Per-plan limits, rate classes and response headers.
Limits are per API key, per endpoint class, and depend on your organization's plan. Every authenticated response tells you where you stand, so you never have to guess.
Rate limit headers
Response headersHTTP
HTTP/1.1 200 OK
X-FomoData-Request-Id: req_6Yq1Hn0bVx3LmT8sRk2Wc4
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1759831512| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed in the current window for this endpoint class. |
X-RateLimit-Remaining | Requests left in the window. |
X-RateLimit-Reset | Unix time (seconds) when the window resets. |
Retry-After | On 429 and 503: seconds to wait before retrying. |
Endpoint classes
| Class | Endpoints | Limit |
|---|---|---|
standard | Profiles, theses, tokens, events, /v1/me, webhook management | rate_limit_per_minute |
search | /v1/search, /v1/search/semantic | search_per_minute |
verify | /v1/verify/thesis | Plan rate limit, tracked separately |
heavy | Requests that may trigger a paid upstream sync, such as resolving a profile FomoData hasn't seen yet | Plan rate limit, tracked separately |
On top of per-key limits, all keys in a project share an aggregate ceiling of twice the per-key limit. Failed authentication is limited per IP (20 per minute) and flagged for abuse review.
Plan limits
These numbers come straight from the live plan configuration. See pricing for plan details.
| Free | Builder | Pro | Enterprise | |
|---|---|---|---|---|
| Requests / month | 10k | 250k | 2M | Custom |
| Rate limit / min | 60 | 300 | 1,200 | 6,000 |
| Burst | 20 | 60 | 200 | 1,000 |
| Search / min | 20 | 60 | 240 | 1,200 |
| Stream connections | 2 | 10 | 50 | 500 |
| Webhook endpoints | 2 | 10 | 50 | 500 |
| History | 7 days | 30 days | 90 days | 1 year |
| Over quota | Hard stop | Hard stop | Overage, never a surprise | Overage, never a surprise |
When you hit a limit
- Per-minute limits return
429 RATE_LIMITEDwithRetry-After. Back off and retry. - Plans without overage stop at the monthly quota with
429 QUOTA_EXCEEDEDuntil the next period. Nothing is billed beyond your plan. - Too many concurrent streams returns
429 STREAM_CONNECTION_LIMIT(SSE) or close code4029(WebSocket). - Queries older than your history window return
403 HISTORY_LIMIT.
No surprises
The dashboard shows usage, limit and projected usage for the month. Overage, where a plan allows it, is configured up front and visible before it applies. We never surprise you with a bill.