---
title: "Get Snapshot Progress"
method: GET
path: "/snapshots/{snapshot_id}/progress"
tags: ["snapshots"]
---

# Get Snapshot Progress

`GET /snapshots/{snapshot_id}/progress`

Live progress for one snapshot, shaped for polling.

This exists so the browser stops reading the `snapshots` table directly.
That read gave the client a standing view of every column the table will
ever grow, and pinned the poll's shape to a frontend deploy.

Read-only and cheap by construction: one narrow projection, no row cache,
no per-caller computation. Rate limiting is the global SlowAPI backstop --
`tier_rate_limit` depends on `get_current_user` and would refuse the
anonymous viewers who can legitimately watch a public repo index.

## Path parameters

- `snapshot_id` string, required

## Response `200`

Successful Response

- SnapshotProgressResponse — Everything the indexing UI polls for, and nothing else. Deliberately NOT part of :class:`SnapshotResponse`. That model is cached, embedded in several list endpoints, and carries a per-caller ``can_write``; a five-second poll should not drag the whole snapshot row through all of that. This is a separate, flat, uncached shape served by ``GET /snapshots/{id}/progress``. Replaces a direct browser-to-Supabase read of the ``snapshots`` table. That read made every future column on the table implicitly public to the browser and pinned the poll's shape to a frontend deploy.
  - `snapshot_id` string, required
  - `short_id` string, required
  - `status` 'queued' | 'indexing' | 'ready' | 'failed', required
  - `error_message` string, nullable
  - `created_at` string, date-time, required
  - `completed_at` string, date-time, nullable
  - `server_time` string, date-time, required
  - `elapsed_seconds` integer, required
  - `stale_after_seconds` integer, required
  - `is_stale` boolean, required
  - `stage` string, nullable
  - `current` integer, nullable
  - `total` integer, nullable
  - `cost_cents` integer, nullable
  - `docs_status` string, nullable
  - `docs_pages_ready` integer, nullable
  - `docs_pages_total` integer, nullable
  - `docs_pages_reused` integer, nullable
  - `embeddings_status` string, nullable
  - `file_count` integer, nullable
  - `findings` ProgressFinding[]
    - `text` string, required
    - `at` string, nullable
  - `expected_seconds` integer, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/repowise/apis/repowise-hosted-api.md) · [All operations](https://skmtc.dev/repowise/apis/repowise-hosted-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/repowise/repowise-hosted-api/revisions/1e57283a9737/schema)
