3d5897270d8a
Exposure model
🔒 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.
{
"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
Fund ticker symbol (ETF or mutual fund). Identify the entity by exactly one of: symbol, cik, cusip, composite_figi, or share_class_figi. At least one is required.
SEC Central Index Key (CIK).
CUSIP identifier (9 characters).
Composite OpenFIGI identifier.
Share-class OpenFIGI identifier.
Response
Model is ready. Full exposure model JSON with per-claim SEC-filing citations.