---
title: "Composed fund snapshot (PDF)"
method: GET
path: "/funds/snapshot.pdf/{bw_fund_id}"
tags: ["Funds"]
---

# Composed fund snapshot (PDF)

`GET /funds/snapshot.pdf/{bw_fund_id}`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/funds/snapshot.pdf/{bw_fund_id}`
- Auth: HTTP bearer

Server-rendered F1 fund tearsheet PDF (Stage D.2.b). Same composition as `/api/funds/snapshot/{bw_fund_id}` (JSON), rendered via Playwright through `app/(print)/render-snapshot/funds/[bw_fund_id]/page.tsx`. Letter landscape, single page.
**Caching:** Content-keyed on `(user, bw_fund_id, report_date)` for 24h. Cache hits return $0 with `X-Cache: HIT`.

## Path parameters

- `bw_fund_id` string, required

## Response `200`

PDF tearsheet (Letter landscape).

## Other responses

- `401`: Authentication required.
- `402`: Insufficient prepaid balance.
- `404`: Fund not found, or no funds_latest row.
- `422`: Long-short fund; the F1 sheet is not available and nothing is billed. Returned when the latest filed book has a short leg of at least 5% of N-PORT net assets, a net book under 50% of net assets with a short leg of at least 1%, or (no NET_ASSETS header) a short leg of at least 5% of gross. Body: `error` = "long-short fund: sheet not available", `code` = `long_short_sheet_unavailable`, `detail` with the rule and the book ratios. Use `/api/funds/{bw_fund_id}/holdings` for the signed book.
- `503`: PDF rendering disabled (`PLAYWRIGHT_PDF_ENABLED` is not `true` on the runtime).

---

[API](https://skmtc.dev/riskmodels/apis/riskmodels-api.md) · [All operations](https://skmtc.dev/riskmodels/apis/riskmodels-api/llms.txt) · [OpenAPI document](https://skmtc.dev/riskmodels/apis/riskmodels-api/revisions/1a034cad408a?raw)
