---
title: "Exposure model"
method: GET
path: "/api/fund/exposure-model"
tags: ["ETF/MF"]
---

# Exposure model

`GET /api/fund/exposure-model`

![ETF](https://img.shields.io/badge/ETF-14b8a6) ![Pro](https://img.shields.io/badge/Pro-8b5cf6)

## 🔒 Audit-grade by construction

**Every claim in this response is defensible in an IC meeting or audit.** Most competing "AI fund classification" APIs return plausible-sounding prose you cannot verify. This endpoint is different. For each claim you get:

- 🔗 a clickable URL to the exact authoritative document (SEC EDGAR prospectus, N-CSR shareholder report, N-CEN census),
- 📄 the document section the claim is drawn from (e.g., `Principal Investment Strategies`, `Principal Investment Risks`, `Expense Example`, `Portfolio Manager Commentary`),
- 💬 a **verbatim quote** from that section (20–400 characters, copied word-for-word),
- ✅ **machine-verified at generation time** — we fetch the filing, strip HTML, and confirm the quote literally appears in the document before we store it. Fabricated or paraphrased quotes are rejected and the model is regenerated.

An analyst can click a URL, jump to the section, `Ctrl-F` the quote, and have the source paragraph in front of them in ten seconds. No more "trust me, the AI read the prospectus."

## What's in the model

Summary, mandate (including benchmark), portfolio construction, exposures (risk drivers + key holdings/buckets), implementation (replication + derivatives + securities lending), distributions & taxes, costs & leakage, sensitivities (macro/market/mechanics), and use cases & failure modes (best/bad/failure).

Every section and array item carries a `sources` array of machine-verified citations.

## Source document types

Citations draw from: `prospectus` (485BPOS / 497 / N-1A), `N-CSR` / `N-CSRS` (annual / semi-annual shareholder reports), `N-CEN` (annual fund census), `N-PORT` (quarterly holdings), and `issuer-website`.

## Two possible response shapes

### ✅ `200 OK` — model is ready

Returns the full `ExposureModel` JSON. Stable and safe to cache client-side.

### ⏳ `202 Accepted` — model is being generated

The model for this fund has never been built. A background job has been queued (or one was already in flight).

**Generation takes a few minutes.** The job fetches the fund's latest prospectus, N-CSR, and N-CEN directly from SEC EDGAR, passes them to the AI along with strict citation requirements, verifies every quote against the filing text, and writes the result.

**Poll this same endpoint** with the same `symbol` — once the job completes you will start receiving the `200` response. A reasonable poll interval is every 30 seconds.

```json
{
  "status": "generating",
  "jobId": "64abfe1234567890abcdef12",
  "message": "Generating exposure model — this can take a few minutes. Call this endpoint again to retrieve the result."
}
```

## Deduplication

If a generation job is already in flight for this fund — regardless of which account queued it — this endpoint returns the existing `jobId`. You will never queue two generations for the same fund series.

## Cost

Generation runs server-side and does not count against your API request budget beyond the call to this endpoint.

## Query parameters

- `symbol` string
- `cik` integer
- `cusip` string
- `composite_figi` string
- `share_class_figi` string

## Response `200`

Model is ready. Full exposure model JSON with per-claim SEC-filing citations.

- object — Full AI-classified ETF exposure model. Every section and item carries a `sources` array of `{url, source, publisher, section, quote}` citations machine-verified against the embedded filing text at generation time.
  - `summary` object — Primary exposure, strategy type, who-it-is-for, what-it-is-not. Has sources[].
  - `mandate` object — Investment objective, benchmark, universe (asset class / geography / instruments), constraints. Has sources[].
  - `portfolioConstruction` object — Selection rules, weighting, rebalancing frequency + triggers, concentration notes. Has sources[].
  - `exposures` object — Risk drivers, factor tilts, key holdings or buckets (each with own sources[]), KPI mappings. Has sources[].
  - `implementation` object — Replication method, derivatives usage, securities lending, liquidity notes. Has sources[].
  - `distributionsAndTaxes` object — Distribution profile, tax notes, capital gains risk. Has sources[].
  - `costsAndLeakage` object — Expense ratio notes, implicit costs, tracking difference drivers. Has sources[].
  - `sensitivities` object — Macro, market, and portfolio-mechanics sensitivities. Has sources[].
  - `useCasesAndFailureModes` object — bestUseCases, badUseCases, failureModes — each an array of {text, sources[]}.
  - `provenance` object — Whole-model confidence + deduped source kinds that appear across citations.
    - `confidence` 'high' | 'medium' | 'low' — Confidence level: `high`, `medium`, or `low`.
    - `sources` string[]

## Other responses

- `202` — Model generation has been queued (or one is already in flight). Poll the same URL for the finished result.
- `400` — Invalid parameters or fund not found
- `401` — Missing or invalid API token
- `403` — Feature not available on current plan

---

[API](https://skmtc.net/stockfit/apis/stockfit-api.md) · [All operations](https://skmtc.net/stockfit/apis/stockfit-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/stockfit/stockfit-api/revisions/3d5897270d8a/schema)
