---
title: "Get a fund letter"
method: GET
path: "/v1/fund-letters/{letterId}"
tags: ["Fund Letters"]
---

# Get a fund letter

`GET /v1/fund-letters/{letterId}`

## Request

- Base URL: `https://api.fiscal.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.fiscal.ai/v1/fund-letters/{letterId}`
- Auth: API key in query parameter `apiKey`

Returns the full extracted content of one fund letter: identity (investor, fund), the reporting period, letter-level narratives (market backdrop, portfolio positioning, performance summary), structured performance figures, and a thesis for every security the letter materially discusses — each with the resolved company attached.

Thesis fields are extracted verbatim-faithful from the letter (the sourceQuote field carries a representative quote). The original document is available at /v1/fund-letters/{letterId}/pdf.

Free-trial keys can read the letters of the investors listed by /v1/fund-letters/investors; other letters return 403.

## Path parameters

- `letterId` string, required: Letter identifier (fscl_document_…).

## Query parameters

- `apiKey` string: API Key (alternatively send via X-Api-Key header)

## Response `200`

The letter detail.

- object
  - `letterId` string, required
  - `investor` object, required
    - `investorId` string, required
    - `investorName` string, required
    - `investorType` string, required
  - `fund` object, required
    - `fundId` string, required
    - `fundName` string, required
    - `fundType` string, required
  - `title` string, required
  - `reportPeriod` string, required: Canonical reporting period (YYYYQn).
  - `reportPeriodYear` number, required
  - `reportPeriodQuarter` number, required
  - `reportPeriodType` string, required
  - `periodLabel` string, required: Period as stated. Nullable.
  - `publicationDate` string, required: Nullable.
  - `letterType` string, required
  - `keyTopics` string[], required
  - `marketBackdrop` string, required: The letter's market commentary, summarized. Nullable.
  - `portfolioPositioning` string, required: How the letter says the portfolio is positioned. Nullable.
  - `performanceSummary` string, required: The letter's own performance narrative, summarized. Nullable.
  - `performanceFigures` object[], required: Structured performance figures stated in the letter.
    - `period` string, required: Period label for the figure, as stated. Nullable.
    - `fundReturnPercent` number, required: Fund return for the period, in percent. Nullable.
    - `benchmarkReturnPercent` number, required: Benchmark return, in percent. Nullable.
    - `excessReturnPercent` number, required: Fund minus benchmark, in percent. Nullable.
    - `benchmarkName` string, required: Benchmark used. Nullable.
    - `basis` string, required: Return basis: net, gross, nav, price, or unknown. Nullable.
  - `theses` object[], required: One entry per security the letter materially discusses, with the resolved company attached.
    - `materialityBasis` string[], required: Why this company discussion is material: substantive_thesis, performance_attribution, portfolio_action, meaningful_position_size, valuation_discussion, catalyst_discussion, risk_or_bear_case, substantive_negative_view, mistake_or_exit_review.
    - `relationship` string, required: The investor's relationship to the company in this letter: long, short, new_position, added, trimmed, sold, exited, watchlist, negative_research, or issuer.
    - `stance` string, required: Overall stance: bullish, bearish, mixed, or neutral.
    - `conviction` string, required: Conviction the letter expresses: high, medium, low, or unknown.
    - `positionSizePercent` number, required: Disclosed position size in percent, only when the letter states it for this security individually. Nullable.
    - `positionSizeBasis` string, required: What the percentage is measured against (portfolio, fund, nav, aum, net, gross, other). Nullable.
    - `positionSizeDescription` string, required: Qualitative sizing language when no number is disclosed. Nullable.
    - `timeHorizon` string, required: Stated investment horizon: short_term, medium_term, or long_term. Nullable.
    - `thesisSummary` string, required: Concise summary of the investment thesis as argued in the letter.
    - `sourceQuote` string, required: Representative verbatim quote from the letter. Nullable.
    - `variantPerception` string, required: Where the investor believes they differ from consensus. Nullable.
    - `riskSummary` string, required: Risks the letter itself flags for this position. Nullable.
    - `catalystSummary` string, required: Catalysts the letter identifies. Nullable.
    - `valuationSummary` string, required: The letter's valuation argument. Nullable.
    - `businessQualitySummary` string, required: The letter's view on business quality/moat. Nullable.
    - `managementAssessment` string, required: The letter's assessment of management. Nullable.
    - `capitalAllocationSummary` string, required: The letter's view on capital allocation. Nullable.
    - `financialExpectations` string, required: Financial expectations the letter states (growth, margins, earnings power). Nullable.
    - `performanceOrActionSummary` string, required: What the position did for performance and/or what action the investor took. Nullable.
    - `decisionRelevantTakeaways` string[], required: Decision-relevant takeaways extracted from the discussion.
    - `monitoringPoints` string[], required: What the investor says they are watching from here.
    - `company` object, required
      - `companyFiscalIdentifier` string, required: Fiscal.ai stable company identifier (usable with every company endpoint).
      - `companyKey` string, required: Fiscal.ai company key (exchangeCode_ticker).
      - `displayNameEnglish` string, required: Common display name.
      - `sector` string, required: GICS sector
      - `industryGroup` string, required: GICS industry group
      - `industry` string, required: GICS industry
      - `subIndustry` string, required: GICS sub-industry
      - `headquartersCountryCode` string, required: Headquarters country (ISO 3166-1 alpha-2)
      - `headquartersCountryName` string, required: Headquarters country
      - `marketCapUsd` number, required: USD market cap as of the latest publish — served only when computed from shares outstanding × prices (as on the v3 companies list); null otherwise.
      - `primaryListing` object, required
        - `ticker` string, required
        - `exchangeCode` string, required: Listing exchange code
        - `exchangeName` string, required
        - `operatingMic` string, required: Operating MIC of the listing exchange
  - `firstPublishedAt` string, required: When this letter first became available through the API (ISO 8601, UTC).
  - `updatedAt` string, required: When this letter's content or PDF last changed (ISO 8601, UTC); equal to firstPublishedAt until the letter is revised. Refreshed company data on each thesis (names, classification, market cap) is not a revision and does not move it.
  - `pdfSha256` string, required: SHA-256 of the PDF served by /v1/fund-letters/{letterId}/pdf; it changes when the document is replaced. Nullable.

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found

## Changes

- **2026-10-20** `eb2f5f533070`: 3 info
  - added the required property `firstPublishedAt` to the response with the `200` status
  - added the required property `pdfSha256` to the response with the `200` status
  - added the required property `updatedAt` to the response with the `200` status

[Operation history](https://skmtc.dev/fiscal/apis/fiscal-api/changes/v1/fund-letters/:letterId/get.md)

---

[API](https://skmtc.dev/fiscal/apis/fiscal-api.md) - [All operations](https://skmtc.dev/fiscal/apis/fiscal-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fiscal/apis/fiscal-api/revisions/85026fdfc8b8?raw)
