---
title: "Every record version across the Network"
method: GET
path: "/api/network/changes"
---

# Every record version across the Network

`GET /api/network/changes`

## Request

- Base URL: `https://trooth.co`
- URL: `https://trooth.co/api/network/changes`
- Auth: none required

Every published record version across the Trooth Network after a position, oldest first, at most 100 per page: the company, the version, its SHA-256 digest and the previous one, and where to read it. No record body and no personal fact. Without after or since, the page starts 24 hours back. next is the cursor to send as after, and also the id of the last event, so a client can move between this feed and the event stream without losing its place. Order is by recorded time, ties broken by event id; delivery is at least once across a reconnect (drop repeats by event_id); a company that withdraws its profile stops appearing. A position older than the retention window is 410 beyond_retention. Errors are always RFC 9457 problem details. Never cached. Readable cross-origin: the response carries Access-Control-Allow-Origin: * and never Access-Control-Allow-Credentials, so a browser on any site may read it without cookies.

## Query parameters

- `after` string
- `since` string
- `limit` integer

## Response `200`

A page of change events.

- NetworkChanges: A page of change events. Canonical JSON Schema: https://trooth.co/schemas/network-changes.v1.schema.json; embedded here with its $defs as NetworkChanges_* components.
  - `format` 'trooth.network-changes.v1', required: Names this shape.
  - `events` NetworkChangesEvent[], required: The events, oldest first.
    - `id` string, required: The event's cursor: send as after, or as Last-Event-ID to the stream.
    - `type` 'record.version', required: The event type.
    - `event_id` string, required: The version's event identity; drop repeats by it.
    - `kind` 'published' | 'withdrawn', required: What happened to the record.
    - `subject` object, required: The company.
      - `slug` string, required: Profile slug.
      - `domain` string, nullable, required: Domain.
    - `version` integer, required: The record version, per company.
    - `recorded_at` string, required: When the version was recorded, ISO 8601.
    - `digest` string, required: A SHA-256 digest, 64 lowercase hex characters.
    - `previous_digest` string, nullable, required: A SHA-256 digest, 64 lowercase hex characters.
    - `corrects_version` integer, nullable, required: Version.
    - `record_url` string, required: Where to read the record now.
    - `history_url` string, required: The company's own change feed.
  - `next` string, required: Send as after to continue. Also the id of the last event, so the stream can resume from it.
  - `has_more` boolean, required: True when more events follow at once.
  - `stream` string, required: The Server-Sent Events address for the same feed.
  - `guarantees` object, required: What the feed promises and does not.
    - `order` string, required: Ordering rule.
    - `delivery` string, required: Delivery rule.
    - `withdrawal` string, required: What a withdrawal does.
    - `retention_days` integer, required: Days of history kept.
    - `body` string, required: What an event leaves out.

## Other responses

- `400`: A position or limit that cannot be used.
- `410`: The position is older than the feed keeps (beyond_retention); read the records in full and resume from a fresh position.
- `429`: Rate limited.
- `503`: The feed could not be read, or history is not set up on this database.

---

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