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

# Get catalog snapshot diff.

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

## Request

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

Credits keys: 0.001 credits per successful metadata read; no recalculation.

Retrieve a stored diff's source snapshot ID, added and removed channel counts,
creation time, and expiration time. Use List diff changes to retrieve channel IDs.
Reading a diff does not recompute it. An unavailable diff returns 404;
a retained but expired diff returns 410.
Catalog and snapshot access must both be enabled.

## Path parameters

- `diff_id` string, required

## Response `200`

- CatalogSnapshotDiffResponse
  - `diff_id` string, required: Unique diff identifier. Pass it unchanged to diff endpoints.
  - `snapshot_id` string, required: Unique identifier of the original snapshot. Pass it unchanged to snapshot endpoints.
  - `added_count` integer, required: Channels matching at diff creation that were absent from the original snapshot.
  - `removed_count` integer, required: Channels in the original snapshot that no longer matched at diff creation. This does not necessarily mean deletion from Telegram.
  - `created_at` string, required: Creation timestamp in UTC, formatted as RFC 3339.
  - `expires_at` string, required: Expiration timestamp in UTC, formatted as RFC 3339. Resources expire 30 days after their own creation.

## Other responses

- `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/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)
