---
title: "Get a financial statement"
method: GET
path: "/v1/financial_statements/{financial_statement_id}"
tags: ["financial_statements"]
---

# Get a financial statement

`GET /v1/financial_statements/{financial_statement_id}`

## Request

- Base URL: `https://api.angellist.com`
- URL: `https://api.angellist.com/v1/financial_statements/{financial_statement_id}`
- Auth: OAuth 2
  - Authorization code: `https://gateway.angellist.com/oauth/authorize`
  - Client credentials
  - Token URL: `https://gateway.angellist.com/oauth/token` scopes: `financial_statements:read`

Returns a single financial-statement workbook by ID, with its full parsed JSON body. The `vehicle` query parameter is required for authorization — the caller must have access to the vehicle the statement belongs to.

## Path parameters

- `financial_statement_id` string, required

## Query parameters

- `vehicle` string, required

## Response `200`

The financial statement.

- FinancialStatement: One financial-statement workbook (parsed JSON projection of the underlying xlsx) stored for a vehicle at a point in time, and the source of truth for fund performance metrics — MOIC, TVPI, DPI, RVPI, IRR, NAV, paid-in / called / distributed, J-curve, gross vs. net of fees/carry. Pull those off the `body` here rather than reconstructing them from `/v1/assets` fields. The `body` is opaque — a passthrough of the upstream JSON rendering of the workbook's sheets and cells (e.g. `Fund Summary`, `unaudited_SOI`, `SOC`, `Realizations`). Consumers should treat unknown keys gracefully; the upstream shape may grow new sheets and columns over time. `/v1/assets` reads its rows from the vehicle's most recent statement.
  - `as_of` integer, nullable, required: The date this financial statement is "as of" — the period-end date the workbook was generated for. Measured in seconds since the Unix epoch. Null when the upstream record lacks an as-of date.
  - `body` object, required: Parsed contents of the financial-statement workbook. Values are expressed in whole units of the fund's currency, not integer cents. The internal structure (sheet names, row shapes, cell values) is per-fund and may evolve; do not assume a fixed schema beyond "JSON object."
  - `created` integer, required: Time at which the financial-statement record was created in the upstream system. Measured in seconds since the Unix epoch. Approximates the workbook's "as of" date for most statements but is the upstream record creation time, not a period-end date.
  - `document_id` string, nullable, required: Public ID of the document backing this statement's workbook file. Pass it to `getDocument` for the file's metadata and a short-lived download URL, or to `downloadDocument` to stream the file bytes. Null when no backing document exists. Statement documents are only addressable this way; they do not appear in `searchDocuments` results.
  - `id` string, required: Unique identifier for this financial statement. The underlying record id is encoded through a salted Sqid alphabet so the internal database identifier is never on the wire.
  - `livemode` boolean, required: Whether this object exists in live mode (`true`) or test mode (`false`).
  - `object` 'financial_statement', required: Object type identifier.
  - `period_type` 'interim' | 'closed', required: Whether this statement is for the current open period (`interim`) or a finalized, closed quarter (`closed`). Use `closed` rows for historical EOQ snapshots and `interim` for the latest in-progress period.
  - `vehicle` object, required: The vehicle this financial statement belongs to.
    - `id` string, required: Encoded vehicle identifier.

## Other responses

- `400`: The request was malformed or contained invalid parameters.
- `401`: Authentication required or token invalid.
- `403`: The authenticated user does not have permission to access this resource, or the vehicle's data is not available through the API. Vehicle-scoped financial-data endpoints return code `not_available` when a vehicle's data isn't served through the API yet — the API returns verified data or none, never partial data. One account can hold a mix of covered and uncovered vehicles; support for uncovered vehicles is on the roadmap and will be added in the coming months.
- `404`: Resource not found.
- `429`: Rate limit exceeded.
- `500`: An unexpected error occurred.

---

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