Coverage & rules

What happens if I send a stock, bond or index ISIN?

The API only knows funds. A valid ISIN that is a stock, bond, certificate or index returns 404 fund_not_found with an empty data skeleton and is counted as one request. How to tell the cases apart and avoid spending requests.Updated 12 September 2026 · by FundFacts API

Short answer

A syntactically valid ISIN that is not a covered fund (a share, bond, certificate, index or a delisted fund) returns 404 fund_not_found with the empty data skeleton, and it counts as one request because the documents were searched. A malformed ISIN returns 400 invalid_isin and costs nothing. Validate the format locally first, treat 404 as "not a fund" rather than as a bug, and do not retry it.

The two errors

Statuserror.codeWhenCounted
400invalid_isinNot 12 characters, wrong pattern or bad check digitNo
404fund_not_foundValid ISIN, but no fund documents found: stock, bond, index, structured product, delisted or not-yet-covered fundYes
json
{ "error": { "code": "fund_not_found", "message": "No public fund data could be retrieved for US0378331005" } }

Why a 404 is counted

The API cannot know an ISIN is a stock without trying: it resolves the ISIN against the fund-house adapters and searches the published documents. That work is the same as for a fund that exists, so it is counted once. Pending and invalid entries are not.

Avoiding it

  • Validate locally. 12 characters, two letters, nine alphanumerics, one Luhn check digit; the ISIN validator page shows the algorithm and the SDKs include it.
  • Know the prefixes. Fund ISINs are mostly IE, LU, FR, DE, GB, CH, AT, NL, BE, DK, FI, SE, NO, IT, ES; a US-prefixed ISIN is usually a stock, though US-listed ETFs also exist.
  • Search first. GET /search?q= (free) confirms a fund is in the store before you spend a request.
  • Remember the answer. Store the 404 and do not re-send the ISIN; review the list weekly in case a new adapter now covers it.

A real fund that returns 404

It happens when the fund house is not yet covered or the share class is delisted. Report it with the ISIN; adapters are added by demand. For a PDF you already have, POST /extract (Pro and above) returns the same JSON shape.

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

Reference

Frequently asked questions

What does 502 upstream_error mean?

The fund house's site or document could not be fetched at that moment. Retry after a minute, at most twice; the request is counted because the load was attempted.

Try it on your own ISINs

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