Getting started

What are the rate limits of the fund data API?

Monthly requests per plan (5 to 10,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.Published September 12, 2026 · Updated October 13, 2026 · by FundFacts API

Short answer

Two limits: a monthly allowance (Free 5, Starter 60, Pro 1,000, Scale 10,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.

For quota_exhausted and overage_cap the body also carries upgrade: the next plan up with its monthly allowance, price and URL, and message spells out what it gives, so a script or an agent can pass the offer on without knowing the price list.

What is counted

One request per fund found 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]}'

Terms used on this page

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.