List a topic's version history

Search Documentation

Search across all developer documentation

topics

List a topic's version history

GET /v1/topics/{name}/versions
Auth required api.topics.view

Every recorded edit to this topic, newest first, with who made it — a person, an API key or an OAuth client — and a one-line summary of how each version differs from the one before it. History is capped at the 50 most recent edits.

Version N is the state the definition was in BEFORE update N+1 was applied: a snapshot is written by the edit that replaces it, so the newest row is the state immediately before the most recent edit and the current state has no row until the next one. Workflows are the exception: a workflow snapshots its POST-update state, so its newest version row is its current definition and its numbering runs one ahead of every other kind's.

Path parameters

name string required

The topic's org-unique name (its SES key).

Query parameters

limit integer optional

Page size (1–200). Default 50.

cursor string optional

Opaque cursor returned from the previous page.

Responses

Errors follow the RFC 7807 problem format — see the error reference.

200 The version history, newest first application/json
data array<object> required

Each entry in data:

version_number integer required
created_at string<date-time> required

When the snapshot was taken, which is when the edit that REPLACED this state was made — not when this state was authored.

actor object required

Who made one edit. The label is resolved server-side — a person's name, an API key's name, an OAuth client's name — because the name lives in a different table per kind and a client can read none of them. It never carries a key, a token or a client secret; a revoked credential falls back to a short form of its id rather than rendering blank.

Fields of actor:

kind string enum required

unknown is an honest value rather than an error: it is what rows predating actor recording carry, and what a write reached with no credential records.

One of: user, api_key, oauth_client, system, unknown

id string optional

The users / api_keys / oauth_clients id, per kind. Absent for system and unknown.

label string required
session string optional

The HTTP request id of the edit — the same value on the matching audit row, so the two can be joined. It is NOT an MCP session id: the MCP transport is stateless and reads no session header.

content_hash string optional
summary string required

How this version differs from the one before it — +3 −1 lines for a source kind, renamed, type string→number for a schema kind. The oldest row says first recorded version.

pagination object required

Fields of pagination:

has_more boolean required
next_cursor string | null optional
401 Missing, malformed, or unknown API key application/problem+json
403 Key lacks the required scope or plan limit violated application/problem+json
404 Resource not found application/problem+json
429 Per-org rate limit exceeded application/problem+json
500 Unexpected server-side failure. The code is internal_error. The request_id field can be quoted to SendOps support to investigate. application/problem+json