# Change data feed between two versions (both included, end defaults to latest): one entry

`POST /datanotes/operations/table_changes/` (operation `table_changes`)

Change data feed between two versions (both included, end defaults to latest): one entry
per row change with its values plus `_change_type` (insert, delete, update_preimage,
update_postimage, metadata), `_commit_version`, `_commit_timestamp`, `_operation`, `path`.
Use it to answer "what changed since …" without diffing full tables.

## Request body

`application/json`, required

| Property | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `table` | `string` | yes |  |  |
| `start_version` | `integer` | yes |  |  |
| `end_version` | `integer \| null` | no | `null` |  |

## Responses

| Status | Description | Body |
| --- | --- | --- |
| 200 | Done. | `object` (application/json) |
| 400 | Bad input: the body is not a JSON object, or an argument is unknown, missing or of the wrong type. | `Error` (application/json) |
| 401 | Missing or wrong bearer token. | `Error` (application/json) |
| 404 | Unknown table, view, migration, note or folder. | `Error` (application/json) |
| 409 | Ambiguous table name: it matches several tables (`paths` or `tables` lists them). | `AmbiguousName` (application/json) |
| 500 | Unexpected error. | `Error` (application/json) |

The schemas named here are in [openapi.json](https://datanotes.dev/openapi.json) (`components.schemas`).
