> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenrip.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read Changes

> GET /v0/workspaces/:id/changes — A bounded, audience-filtered page of workspace changes after your acknowledged position

Returns the next page of the workspace change feed (artifact, folder, task, and workspace events, in commit order) after **this API key's** acknowledged position. Reading never acknowledges: call [Acknowledge](/api-reference/workspaces/ack) with the page's `deliveryToken` to move forward. Works on archived workspaces. MCP: `workspace_changes`. CLI: `rip workspace changes <workspace-id> [--limit --delivery-token]`.

**Auth:** `Authorization: Bearer tr_...` (an account API key). `{id}` is the workspace UUID.

## Query parameters

| Parameter | Type | Description |
| - | - | - |
| `limit` | integer | 1–100, default 50 |
| `deliveryToken` | string | Replay the outstanding page instead of asking for a new one |

## Response

```json theme={null}
{
  "ok": true,
  "data": {
    "items": [
      { "id": "…", "type": "artifact.updated",
        "actor": { "type": "account", "id": "rip1…", "surface": "claude-code" },
        "subject": { "type": "artifact", "id": "…" },
        "payload": { "workspaceSessionId": "3e4f…" },
        "createdAt": "2026-09-15T09:00:00.000Z" }
    ],
    "deliveryToken": "q8Hc…", "hasMore": false, "historyGap": false, "refresh": "none"
  }
}
```

| Field | Description |
| - | - |
| `items` | Changes you may see: the event's audience must be one of yours **and** its subject must still be visible to you, so an external member never sees internal work. Payloads never carry folder paths or counts |
| `deliveryToken` | Acknowledge or replay this page with it. Valid for 10 minutes. `null` when `items` is empty |
| `hasMore` | More changes wait after this page |
| `historyGap` | Retention pruned changes past your position; rebuild state from [Load](/api-reference/workspaces/load) |
| `refresh` | `required` when your access changed since your last read; refetch authorized state before continuing |

Only one page is outstanding at a time. While it is, a read without its `deliveryToken` is refused; a read with it returns the same page. Once the token expires, the next read issues a fresh page from your acknowledged position.

## Errors

| Status | Code | Cause |
| - | - | - |
| `409` | `WORKSPACE_PAGE_UNACKNOWLEDGED` | A delivered page is outstanding; replay it with its `deliveryToken` or acknowledge it |
| `400` | `INVALID_WORKSPACE_DELIVERY` | The token is wrong, expired, or belongs to another reader |
| `400` | `INVALID_INPUT` / `INVALID_LIMIT` | `limit` is not an integer / not between 1 and 100 |
| `404` | `WORKSPACE_NOT_FOUND` | No workspace with that id |
| `403` | `WORKSPACE_FORBIDDEN` | You are not a member |
