---
title: "Fund letter change feed"
method: GET
path: "/v1/fund-letters/changes"
tags: ["Fund Letters"]
---

# Fund letter change feed

`GET /v1/fund-letters/changes`

## Request

- Base URL: `https://api.turos.app`
- URL: `https://api.turos.app/v1/fund-letters/changes`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Metered as fund_letter_lookup. The cursor is an opaque keyset token minted by this endpoint (never an offset); malformed cursors 400 as invalid_cursor. nextCursor pins the last returned row whenever the page is non-empty, so pollers resume from it regardless of hasMore.

## Query parameters

- `types` string
- `since` string
- `ticker` string
- `manager_id` string
- `fund_id` string
- `cik` string
- `cursor` string
- `limit` integer

## Response `200`

Successful response

- FundLetterChangeList
  - `object` 'list', required
  - `data` object[], required
    - `object` 'fund_letter_change', required
    - `id` string, required
    - `createdAt` string, required
    - `livemode` boolean, required
    - `type` 'letter.published' | 'letter.updated' | 'letter.superseded' | 'thesis.extracted' | 'manager.added', required
    - `letterId` string, nullable, required
    - `thesisId` string, nullable, required
    - `managerId` string, nullable, required
    - `fundId` string, nullable, required
    - `ticker` string, nullable, required
    - `cik` string, nullable, required
    - `data` object, required
  - `hasMore` boolean, required
  - `nextCursor` string, nullable, required
  - `responseMode` 'compact' | 'standard' | 'verbose', nullable
  - `include` string[], nullable
  - `requestId` string, required

## Other responses

- `default`: Contract-aware error response

---

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