Credits & rate limits
Monthly credits, burst limits, overage, the quota headers and 429 handling.How credits work
Each plan comes with a number of credits per calendar month (UTC). One credit is spent per ISIN that receives an answer — found or not found — on GET /funds/{isin}, POST /funds, POST /portfolio and GET /overlap, whether the payload is served from the 24-hour store or loaded fresh. /search, /me and the demo endpoint are free. Invalid ISINs, pending entries, and 401 / 429 responses never cost anything. Credits are counted per account, across all keys.
Plans
| Plan | Price | Credits / month | Burst / minute | Batch size | Beyond the credits |
|---|---|---|---|---|---|
| Free | $0 | 150 | 10 | 1 | 429 until the reset |
| Starter | $9 / month | 1,500 | 30 | 10 | $0.015 per request, capped at $18.00 |
| Pro | $49 / month | 9,000 | 120 | 50 | $0.015 per request, capped at $98.00 |
| Scale | $249 / month | 60,000 | 600 | 200 | $0.015 per request, capped at $498.00 |
| Enterprise | $0.01 / request | Unlimited (metered) | 1200 | 1,000 | $0.01 per request |
Overage lets a paid account keep running after its credits: each extra request is billed at $0.015 on the next invoice, up to twice the plan price per month (ask us to raise the cap). The Free plan stops at its credits. Pricing has the full comparison.
Headers and the quota object
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Credits per month (absent on metered plans). |
X-RateLimit-Remaining | Credits left this month after this call; 0 while running on overage. |
X-RateLimit-Reset | Unix time (seconds) of the next monthly reset. |
X-Burst-Limit | Requests allowed per minute across all endpoints. |
X-Burst-Remaining | Requests left in the current minute. |
Retry-After | 429 only: seconds to wait (60 for a burst; until the reset for exhausted credits). |
Every successful response also carries a quota object: { limit, remaining, used, overageUsed, resetAt, burst: { limit, remaining } }.
Handling 429
A 429 rate_limited response carries reason: burst (slow down; retry after 60 seconds), credits_exhausted (Free plan: wait for the reset or upgrade) or overage_cap (paid plans: upgrade or contact us). Batch calls are refused as a whole when the remaining headroom is smaller than the number of ISINs sent, so nothing is half-charged.
429 Too Many Requests — json{"error": {"code": "rate_limited","message": "Monthly credits exhausted for the Free plan (150 credits / month). Upgrade at /dashboard/billing or wait for the reset on 2026-10-01.","plan": "free","reason": "credits_exhausted","limit": 150,"retryAfter": 1834000,"resetAt": "2026-10-01T00:00:00.000Z"}}