Docs/ Credits & rate limits

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

PlanPriceCredits / monthBurst / minuteBatch sizeBeyond the credits
Free$0150101429 until the reset
Starter$9 / month1,5003010$0.015 per request, capped at $18.00
Pro$49 / month9,00012050$0.015 per request, capped at $98.00
Scale$249 / month60,000600200$0.015 per request, capped at $498.00
Enterprise$0.01 / requestUnlimited (metered)12001,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

HeaderMeaning
X-RateLimit-LimitCredits per month (absent on metered plans).
X-RateLimit-RemainingCredits left this month after this call; 0 while running on overage.
X-RateLimit-ResetUnix time (seconds) of the next monthly reset.
X-Burst-LimitRequests allowed per minute across all endpoints.
X-Burst-RemainingRequests left in the current minute.
Retry-After429 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 Requestsjson
{
"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"
}
}