---
title: "What does a fund factsheet look like as JSON?"
description: "The envelope and every section of the data object: key facts, fees, risk indicator, profile, holdings, breakdowns, returns, series, metrics, KID costs and as-of date, with a real example."
canonical: https://fundfactsapi.com/answers/what-is-the-json-shape-of-a-fund-factsheet
published: 2026-09-12
updated: 2026-09-12
publisher: FundFacts API
---

# What does a fund factsheet look like as JSON?

**Short answer:** One object per ISIN: an envelope (isin, name, cached, generatedAt, expiresAt, plan, quota) around a data object with keyFacts, headlineMetrics, riskRating, profile, topHoldings, sector, geography, region, assetAllocation, creditQuality, maturity, calendarReturns, annualisedReturns, cumulativePerformance, indexedPerformance, metrics, sfdrArticle, costs, investmentObjective, benchmarkName and dataAsOf. Breakdowns are arrays of { label, weight }; money and percentages are strings as printed.

## Envelope

| Key | Meaning |
|---|---|
| `isin`, `name` | Canonical ISIN and official share-class name |
| `cached` | Whether this call reused the stored payload |
| `generatedAt`, `expiresAt` | When it was produced and when it is due for a refresh (24 h); past it, `stale: true` |
| `plan`, `quota` | Your plan and the monthly / burst allowance left |
| `data` | The factsheet |

## The `data` object

| Section | Keys | Shape |
|---|---|---|
| Identity | `investmentObjective`, `securityType`, `structure`, `shareClass`, `benchmarkName` | strings |
| Key facts | `keyFacts.{assetClass, subAsset, currency, aum, inception, distribution, holdings, manager}` | strings / number |
| Fees & risk | `headlineMetrics.{ter, aum, volatility3y, sharpe3y, yieldToMaturity, modifiedDuration}`, `riskRating` | strings, number 1–7 |
| Profile | `profile.{kind, category, riskBand, concentration, regionFocus, regionTilt, sectorTilt, valuation, creditQuality, rateSensitivity, equityShare, rules}` | derived labels |
| Breakdowns | `topHoldings[]`, `sector[]`, `geography[]`, `region[]`, `assetAllocation[]`, `creditQuality[]`, `maturity[]`, `instrument[]` | `{ label, weight }` (`name` for holdings) |
| Returns | `calendarReturns.{years, fund, benchmark}`, `annualisedReturns[]`, `cumulativePerformance[]`, `indexedPerformance.points[]` | numbers in percent; series `{ date, fund, index }` |
| Metrics | `metrics.{peRatio, incomeYield, maxDrawdown, effectiveDuration, averageRating, sevenDayYield, wam, wal, …}` | strings as printed |
| Regulation | `sfdrArticle`, `costs.{entry, exit, ongoing, transaction, performanceFee, riy1y, riyRhp, recommendedHoldingPeriod}` | number, strings |
| Freshness | `dataAsOf`, `generatedAt` | dates |

Money and percentages arrive as the fund house prints them, as strings such as `"0.20%"` or `"USD 151.7bn"`. Breakdown weights and return series are plain numbers in percent. Fields that do not apply to the fund's asset class are empty strings, `null` or empty arrays, never missing keys; treat empty as "not disclosed", not as zero.

## A real one

`GET https://fundfactsapi.com/api/v1/demo/funds/IE00B4L5Y983` returns the live payload for iShares Core MSCI World UCITS ETF without a key. The [field reference](https://fundfactsapi.com/docs/fields) documents every key with type, meaning and example, and the [OpenAPI spec](https://fundfactsapi.com/openapi.json) carries the same as a schema for code generation.

## Bond and money-market funds

The shape is identical; the sections that apply differ. Bond funds populate `creditQuality`, `maturity`, `instrument`, `headlineMetrics.yieldToMaturity` and `modifiedDuration`; money-market funds `metrics.sevenDayYield`, `wam` and `wal`; equity funds `metrics.peRatio` and `sector`. Unused sections are empty, never absent.

## FAQ

### Is there a JSON Schema?

The OpenAPI 3.1 document at /openapi.json contains the schemas for every endpoint's request and response, and the TypeScript SDK ships the generated types.

### 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.

## About FundFacts API

FundFacts turns any fund or ETF ISIN into one dated factsheet (fees and KID costs, the 1–7 risk indicator, holdings, sector and country exposure, returns) read from the fund house's own documents: as a client-ready PDF under your firm's name for advisers and wealth managers, as JSON through its API for developers, or inside ChatGPT and Claude through its MCP server.

FundFacts works inside ChatGPT and Claude as a connector (a remote MCP server): ask about any fund or ETF by ISIN, ticker or name and the assistant answers from FundFacts' dated figures, fees, risk, holdings, exposure and returns, with fund cards, side-by-side comparisons, holdings overlap and portfolio look-through.

- Free API key, no card: https://fundfactsapi.com/signup
- Documentation: https://fundfactsapi.com/docs (OpenAPI: https://fundfactsapi.com/openapi.json)
- MCP server: https://fundfactsapi.com/api/mcp (set-up for every client: https://fundfactsapi.com/mcp-server)
- Pricing: https://fundfactsapi.com/pricing
- Site index for AI assistants: https://fundfactsapi.com/llms.txt
- Informational data, not investment advice.
