Getting started

What are the rate limits of the fund data API?

Monthly requests per plan (15 to 60,000), a per-minute burst limit (10 to 600), the X-RateLimit and X-Burst headers on every response, and what a 429 with reason burst, quota_exhausted or overage_cap means.Updated 12 September 2026 · by FundFacts API

Short answer

Two limits: a monthly allowance (Free 15, Starter 500, Pro 9,000, Scale 60,000 requests) and a burst limit per minute (10, 30, 120 and 600 respectively; 1,200 on Enterprise). Every response carries X-RateLimit-Limit / -Remaining / -Reset for the month and X-Burst-Limit / -Remaining for the minute. A 429 rate_limited response includes reason (burst, quota_exhausted or overage_cap) and Retry-After in seconds.

Headers on every response

HeaderMeaning
X-RateLimit-LimitRequests per month on your plan
X-RateLimit-RemainingLeft this month after this call (0 while on overage)
X-RateLimit-ResetUnix time of the next monthly reset (first of the month, UTC)
X-Burst-Limit / X-Burst-RemainingRequests allowed per minute, and how many are left
Retry-AfterOnly on 429: seconds to wait

The same numbers are in the quota object of the JSON body.

The 429 body

json
{ "error": { "code": "rate_limited", "reason": "burst", "message": "…", "retryAfter": 42, "resetAt": "2026-10-01T00:00:00.000Z" } }
  • burst: slow down; wait Retry-After (60 seconds at most).
  • quota_exhausted: the monthly allowance is used and the plan has no overage (Free, Starter); wait for the reset or upgrade.
  • overage_cap: Pro or Scale ran past the allowance up to the cap (two months' subscription); upgrade or wait.

What is counted

One request per ISIN answered on /funds/{isin}, POST /funds, /portfolio and /overlap; 5 per document on /extract; 1 or 2 per factsheet. /search, /me, /changes and the demo endpoint are free. Rejected calls (401, 429) and invalid ISINs are not counted.

Client rules

Read X-RateLimit-Remaining and stop before zero; on 429 sleep Retry-After; never retry 4xx otherwise; retry 502 upstream_error at most twice with a minute between. The SDKs do the burst retry for you.

Verify it yourself

The demo endpoint returns the live payload for a fund that is already in the store, without a key. Everything on this page can be checked against it.
bash
curl -s https://fundfactsapi.com/api/v1/demo/funds/IE00B4L5Y983 | jq '{name, asOf: .data.dataAsOf, ter: .data.headlineMetrics.ter, risk: .data.riskRating, top: .data.topHoldings[:3]}'

Frequently asked questions

Are limits per key or per account?

Per account. Several keys on one account share the same monthly allowance and burst limit.

Try it on your own ISINs

One request returns key facts, holdings, risk and performance as JSON. Free plan, no card.