---
title: "Change hints for live tables (held read)"
method: GET
path: "/live/v1/changes"
tags: ["Live"]
---

# Change hints for live tables (held read)

`GET /live/v1/changes`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/live/v1/changes`
- Auth: API key in header `apikey`

tenant-live-changes. Hints since `cursor`, or with `wait` (clamped 1..25 s) hold until the first hint arrives, woken by the notification path rather than by polling. `resync: true` (with `tables`) means the cursor could not be answered: refetch. The held read is not counted against the live connection cap. Also served on every tenant host at `/_run402/live/changes`.

## Query parameters

- `project_id` string, required
- `tables` string, required
- `cursor` string
- `wait` integer

## Response `200`

Hints since the cursor.

- object
  - `changes` object[], required
    - `table` string, required
    - `op` 'insert' | 'update' | 'delete', required
    - `pk` object[], nullable: Primary keys touched by the statement; null is a table-level hint (refetch the table).
    - `n` integer, required
    - `cursor` string, required
  - `cursor` string, required: Continue from here.
  - `resync` boolean, required
  - `tables` string[]: Present when resync is true: the tables to refetch.
  - `waited_seconds` integer

## Other responses

- `400`: VALIDATION_FAILED: bad tables, cursor or wait.
- `401`: AUTH_REQUIRED: an owner-scoped table needs an identity.
- `403`: TABLE_NOT_LIVE (or FORBIDDEN on a project_id mismatch).

---

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