| Plan | Per minute | Quota | Routes |
|---|---|---|---|
| Free | 30/min | 100/day | search, coverage, snapshot, valuation |
| Starter | 60/min | 10,000/month | all routes |
| Builder | 300/min | 75,000/month | all routes |
Route access
Free covers the proof loop: discover a symbol with/v2/search, confirm what it supports with /v2/coverage, pull a /v2/snapshot, and run a /v2/valuation. Every other route requires Starter or Builder.
A Free key that calls a paid route gets HTTP 403 with PLAN_UPGRADE_REQUIRED:
Rate-limit headers
Every response that passes key verification carries three headers describing your current minute bucket, successes and post-auth errors alike (400, 403, 404 SYMBOL_UNKNOWN, 429). Only a pre-auth 401 or an unmatched-route 404 NOT_FOUND omits them, since both fail before the key is checked:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed in the current minute window. |
X-RateLimit-Remaining | Requests left in that window. |
X-RateLimit-Reset | Unix epoch seconds when the window resets. |
X-RateLimit-Remaining to pace yourself before you ever hit a 429.
Hitting a ceiling
When you exceed the per-minute rate or exhaust your quota, requests return HTTP429 with RATE_LIMITED until the window resets: the daily window for Free, the monthly window for Starter and Builder. A 429 adds a Retry-After header (seconds) and sets X-RateLimit-Remaining to 0.
The headers on a 429 describe whichever window tripped. A minute-bucket 429 shows your per-minute limit and a Retry-After of seconds. A quota 429 flips X-RateLimit-Limit to the quota itself (100 on Free), sets X-RateLimit-Reset to the window’s end, and sends a Retry-After of hours: a Free daily 429 reports the seconds until midnight UTC. There is no header that counts the daily or monthly budget down during normal operation; if quota matters to your job, count requests yourself.
This is a minute-bucket 429:
429 captured 2026-06-05
RATE_LIMITED is retryable. Stop sending for that key, wait Retry-After (21 seconds in this capture) or until X-RateLimit-Reset, then resume at lower concurrency and cache repeat reads. The same gating applies to the hosted MCP tools, since they call the same routes. For retry mechanics across every error, see error codes.