---
title: "Get a delta between two captures"
method: GET
path: "/v1/db-snapshots/deltas/{deltaId}"
tags: ["DB Snapshots"]
---

# Get a delta between two captures

`GET /v1/db-snapshots/deltas/{deltaId}`

## Request

- Base URL: `https://api.talonic.com`
- URL: `https://api.talonic.com/v1/db-snapshots/deltas/{deltaId}`
- Auth: HTTP bearer

Totals, per-table stats and the column-transition profile for one
delta.

Two readings that must not be flattened into "nothing changed":
`status: partial` means the counts are still a floor, and a table
listed with `examined: false` was DEFERRED by the scan cadence rather
than found clean. A table examined and found clean is absent from
`tables` entirely.

## Path parameters

- `deltaId` string, uuid, required

## Response `200`

Delta detail.

- DbSnapshotDeltaDetail
  - `delta` object
    - `id` string, uuid
    - `connection_id` string, uuid
    - `from_snapshot_id` string, uuid
    - `to_snapshot_id` string, uuid
    - `computed_at` string, date-time
    - `status` 'partial' | 'complete': Whether the counts below are final or still a floor.
    - `last_complete_delta_id` string, uuid, nullable: The connection's newest delta with final counts — served here so a `partial` delta needs no second call to find the trustworthy read. Equals `id` when `status` is `complete`.
    - `totals` DbSnapshotDeltaTotals
      - `added` integer
      - `modified` integer
      - `removed` integer
      - `tables_touched` integer
      - `tables_total` integer
      - `tables_skipped` integer: Tables the scan cadence deferred; they are excluded from every other count here.
      - `drift` boolean
    - `tables` DbSnapshotDeltaTable[]: One entry per table this delta has something to say about. A table examined and found clean is ABSENT; an entry with `examined: false` was not looked at.
      - `table_key` string, required: `schema.table` (mysql sources: the bare table name).
      - `added` integer, required
      - `modified` integer, required
      - `removed` integer, required
      - `changes_truncated` boolean: Persisted change rows were capped for this table; the counts above stay exact.
      - `examined` boolean, required: False when the scan cadence DEFERRED this table — its zero counts mean "not looked at", not "unchanged". `last_full_scan_at` says when it was last really examined.
      - `last_full_scan_at` string, date-time, nullable
      - `mode` 'full' | 'incremental' | 'changefeed' | 'skipped', nullable: How the capture read this table.
      - `fallback_reason` string, nullable: Which faster path the table lost this capture; diagnostic only, and null when the fastest configured path ran.
      - `columns_added` string[]
      - `columns_removed` string[]
  - `from_snapshot` object
    - `id` string, uuid
    - `captured_at` string, date-time
  - `to_snapshot` object
    - `id` string, uuid
    - `captured_at` string, date-time
    - `status` 'capturing' | 'ready' | 'failed'
  - `column_profile` object[]: Most common old→new value transitions per column, or one aggregate line when too diverse.
    - `table_key` string
    - `column` string
    - `before` string
    - `after` string
    - `count` integer
    - `aggregate` boolean: True when transitions were too diverse to enumerate and this line is their total.

## Other responses

- `401`: Missing or invalid API key.
- `404`: The requested resource was not found.
- `429`: Daily rate limit exceeded.

---

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