---
title: "List Channel Snapshots Route"
method: GET
path: "/apps/{app_id}/channels/{channel_id}/postgres/snapshots"
---

# List Channel Snapshots Route

`GET /apps/{app_id}/channels/{channel_id}/postgres/snapshots`

## Request

- Base URL: `https://api.xhostd.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.xhostd.com/apps/{app_id}/channels/{channel_id}/postgres/snapshots`
- Auth: none declared

List the snapshots of one channel the caller can reach.

The route only reads, so it runs on ``run_read_in_thread``. It costs
the access check, the schema row, the snapshots, one query for the
channel's blob-aligned snapshot ids, and one for the channel's
restores. It adds one more query only when a marker row names an
instance, to read that instance's WAL-G window.

## Path parameters

- `app_id` string, uuid, required
- `channel_id` string, uuid, required

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- SnapshotListItem[]
  - `snapshot_id` string, uuid, required
  - `deploy_id` string, uuid, nullable, required
  - `kind` string, required
  - `git_sha` string, nullable, required
  - `created_at` string, date-time, required
  - `aligned_blob` boolean, required
  - `recoverable` boolean, nullable, required
  - `restores` SnapshotRestoreItem[], required
    - `restore_id` string, uuid, required
    - `status` 'queued' | 'extracting' | 'loading' | 'swapping' | 'succeeded' | 'failed', required
    - `during_restore` 'read_only' | 'maintenance' | 'live', required: What the channel's app can do with its database while the restore runs, from the claim to the swap. ``read_only``: the ``hold`` step makes every new transaction of ``r_<ch32>`` in ``ch_<ch32>`` read-only, so a write fails with SQLSTATE 25006 rather than vanish at the swap. ``maintenance``: the same hold, and the edge serves a page in place of the app (``proxy/maintenance.py``), the restore's ``maintenance_channel_id`` parameter naming a static channel for the page or ``None`` for the platform's own. ``live``: the app keeps writing, and the swap discards those writes.
    - `started_at` string, date-time, nullable, required
    - `swapped_at` string, date-time, nullable, required
    - `finished_at` string, date-time, nullable, required

## Other responses

- `422`: Validation Error

---

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