Skip to main content
GET
cURL

Authorizations

Authorization
string
header
required

Project-scoped API key, e.g. nohead_sk_k7fz0a9c3m2q_<secret>, or nohead_pk_… for a published-only key. Used by servers, CI, the CLI and coding agents.

Path Parameters

revision_id
string
required

Response

The revision with its snapshot and changes.

id
string
required
Example:

"rev_01J9ZQ3F8X5W2K7M4N6P0R1S2T"

object
any
required
record_id
string
required
revision
integer
required
operation
enum<string>
required

What made the revision; merge is a draft's changes.

Available options:
create,
update,
publish,
unpublish,
delete,
restore,
revert,
migrate,
merge
actor
object
required
via
enum<string>
required

The client a change came through; scheduler for scheduled changes.

Available options:
ui,
api,
cli,
sdk,
mcp,
system,
scheduler
note
string | null
required
schema_version
integer
required
reverted_to_revision
integer | null
required
changed_fields
string[]
required

Keys of changed fields, and changed attributes.

redacted_fields
string[]
required

Keys of fields whose values in this revision were redacted (owners and admins redact them in the web app); those values read {"$redacted": true}.

draft
object | null
required

For a merge, the draft it merged, with who started and edited it; null otherwise.

created_at
string<date-time>
required

ISO 8601 timestamp in UTC.

Example:

"2026-09-27T12:00:00.000Z"

published_at
string<date-time> | null
required
data
object
required

Field values keyed by field key.

A rich text value is written as Markdown (GitHub Flavored, a string) or as a ProseMirror JSON document ({"type": "doc", "content": [...]}), and stored and read as the document (rich_text reads it as HTML or Markdown). Markdown is converted as closely as the vocabulary allows: headings below h3 become h3, task list items plain items, footnotes and raw HTML text. A document uses the web editor's vocabulary (Tiptap's StarterKit and tables) and nothing else; another name is refused with invalid_format, naming ours where one fits (strong is bold):

  • blocks: paragraph, heading (level 1-3), blockquote, bulletList and orderedList (start, type) of listItem (starting with a paragraph), codeBlock (language), horizontalRule, and table of tableRow of tableHeader or tableCell (colspan, rowspan, colwidth, align); any block may have dir (auto, ltr, rtl);
  • inline: text (non-empty) and hardBreak;
  • marks on text: bold, italic, strike, underline, code (alone), and link (href, and target, rel, class, title); a link's href is an http, https, mailto, tel or relative URL.

An image of an asset is {"type": "image", "attrs": {"asset_id": "ast_...", "alt": "..."}} (in Markdown ![alt](ast_...), or the asset's image_url), between the document's blocks (not inside a list, quote or table), at most 100 per document (too_many_images); a newly shown image must be an uploaded JPEG, PNG, GIF, WebP, AVIF or SVG of the project (invalid_reference, type_not_accepted). expand embeds the assets, and published-only keys can read the images of published records. A record holds at most 2,000,000 bytes of values, all fields together (too_large on data); one already larger can still be edited without growing.

Example:
changes
object[]
required