---
title: "List catalog snapshot diff changes."
method: GET
path: "/v1/catalog/diffs/{diff_id}/changes"
tags: ["Catalog"]
---

# List catalog snapshot diff changes.

`GET /v1/catalog/diffs/{diff_id}/changes`

## Request

- Base URL: `https://api.tlmtr.io`
- URL: `https://api.tlmtr.io/v1/catalog/diffs/{diff_id}/changes`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/docs/v1/catalog/diffs/:diff_id/changes/get.ts> (a function with typed inputs; its response is checked against the schema)

Credits keys: 0.001 credits per successful page.

Retrieve a page of internal channel IDs for either `added` or `removed` changes
in a stored diff. IDs can be used with channel info endpoints; they are not
Telegram numeric IDs. `count` is the total for the selected change type, not
this page's length. The result is fixed at diff creation time.
Use `next_cursor` as `cursor` with the same diff ID and change type for the next page.
Page size is 1–1000 (default 100). Catalog and snapshot access must both be enabled.

## Path parameters

- `diff_id` string, required

## Query parameters

- `change_type` 'added' | 'removed', required
- `limit` integer
- `cursor` string

## Response `200`

- CatalogSnapshotChangesResponse
  - `diff_id` string, required: Unique diff identifier. Pass it unchanged to diff endpoints.
  - `change_type` string, required: Selected change type: added or removed, relative to the original snapshot.
  - `channel_ids` string[], required: Internal channel IDs on this page, compatible with channel info endpoints. These are not Telegram numeric IDs.
  - `count` integer, required: Total channels for the selected change type across all pages, not the current page length.
  - `next_cursor` string, nullable: Opaque token for the next page, or null when no more results remain.

## Other responses

- `400`: Invalid filters, pagination parameters, or cursor.
- `402`: Insufficient credits
- `403`: Catalog and snapshot access must both be enabled.
- `404`: Resource not found or not owned by your user.
- `410`: Resource has expired.
- `503`: Snapshot storage is temporarily unavailable.

## Changes

- **2026-10-09** `6c2bfd66c5f2`: 4 breaking, 1 info
  - the response's body type changed from `object` to no type for status `402`
  - removed the required property `available_mc` from the response with the `402` status
  - removed the required property `shortfall_mc` from the response with the `402` status
  - removed the required property `total_cost_mc` from the response with the `402` status
  - …1 more
- **2026-09-10** `80951ad7b3fb`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/changes/v1/catalog/diffs/:diff_id/changes/get.md)

---

[API](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api.md) - [All operations](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/revisions/98f399867856?raw)
