Getting started
How do I get an API key for fund data?
Sign up with e-mail or Google at fundfactsapi.com/signup, copy the key from the dashboard, send it as Authorization: Bearer on every request. Free plan, 15 lookups a month, no card.Updated 12 September 2026 · by FundFacts APIShort answer
Sign up at fundfactsapi.com/signup with an e-mail address or Google; the dashboard shows your key immediately. It starts with ffk_ and goes in the Authorization: Bearer header (or X-Api-Key) of every request. The Free plan is 15 lookups a month with no card. Keep the key server-side, read it from an environment variable, and revoke it from the dashboard if it leaks.
Steps
- Go to /signup and sign up with e-mail or Google. No card, no company details.
- The dashboard shows the key (
ffk_...). Copy it into an environment variable:
bashexport FUNDFACTS_API_KEY=ffk_...
- Make the first call:
bashcurl -s --max-time 300 https://fundfactsapi.com/api/v1/funds/IE00B4L5Y983 -H "Authorization: Bearer $FUNDFACTS_API_KEY" | jq '{name, ter: .data.headlineMetrics.ter}'
GET https://fundfactsapi.com/api/v1/me(free) confirms the plan, the allowance and month-to-date usage.
Handling the key
- Never put it in a browser bundle or a public repository; call the API from a server route.
- The Free plan allows one key, Starter two, Pro and Scale ten, so you can keep separate keys per environment or per integration (a dedicated key for an MCP connector, for example).
- Revoke and re-create keys from the dashboard at any time; revoked keys return
401 revoked_api_key.
Without a key
GET https://fundfactsapi.com/api/v1/demo/funds/{isin} returns funds already in the store, 30 calls a minute per IP, and never loads a new one. Use it to look at the shape before signing up.
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.bashcurl -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]}'
Reference
Frequently asked questions
Do I need a credit card to try it?
No. The Free plan is 15 lookups per month with no card; sign up with an e-mail address or Google and the key is shown in the dashboard.Which ISINs work?
Any share class of a UCITS fund, ETF, money-market fund or open-end fund whose management company publishes a product page, factsheet and KID. Each share class has its own ISIN and is looked up on its own. Stocks, bonds and indices are not funds and return 404 fund_not_found.How current are the figures?
Each ISIN is re-read from the fund house's documents at most every 24 hours. data.dataAsOf is the as-of date printed on the documents, typically the last month end for a factsheet and the last trading day for holdings files.Try it on your own ISINs
One request returns key facts, holdings, risk and performance as JSON. Free plan, no card.Related questions
Getting started
Is there a free API for fund and ETF data?
Yes. FundFacts API has a free plan with 15 lookups a month and no card: any UCITS fund or ETF ISIN returns TER, risk indicator, holdings, exposures and returns as JSON. What it includes and where paid plans start.Getting started
Can I test the fund data API without signing up?
Yes: GET /api/v1/demo/funds/{isin} returns the full JSON for any fund already in the store without a key, and the free ISIN validator, ETF overlap and portfolio look-through tools run on the same data.By language & tool
How do I get fund or ETF data by ISIN in curl?
Working curl example that turns an ISIN into fund name, TER, risk indicator, holdings, sector and country weights and returns as JSON. Free key, no card.Getting started