Skip to main content
PUT
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.

Headers

Idempotency-Key
string

A unique value (1-255 printable ASCII characters) that makes retrying this request safe. The first response (below 500) is stored for 24 hours per user or API key; retries with the same key and the same request get it again with an Idempotent-Replayed: true header. The same key with a different request is refused with 400; a retry while the first request is still running gets 409.

Required string length: 1 - 255
Nohead-Client
string

First-party client identifier recorded in history (e.g. cli/0.3.1). Informational only.

Path Parameters

draft_id
string
required

Query Parameters

rich_text
enum<string>
default:document

How rich text fields read in the records and drafts returned (and in records they embed with expand): document, the stored ProseMirror JSON document; html, an HTML fragment of known elements with every text and attribute escaped, to put in a page as it is; or markdown (GitHub Flavored), which reads back as the same document when written. Images render with their URLs, so they need no expand: in HTML a WebP rendition at most 1600 pixels wide with its width and height (an SVG as itself), in Markdown the asset's image_url. An image whose asset was deleted is left out of HTML, and written as its asset ID in Markdown. Record history keeps documents.

Available options:
document,
html,
markdown

Body

application/json
merge_at
string<date-time>
required

ISO 8601 timestamp in UTC.

Example:

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

Response

The draft.

Changes to a record's content that wait until they are merged into it, now or at schedule.merge_at. Content only: whether the record is live is its publication and schedule.

id
string
required
Example:

"drf_01J9ZQ3F8X5W2K7M4N6P0R1S2T"

object
any
required
record_id
string
required
collection_id
string
required
collection
string
required

The collection slug.

base_revision
integer
required

The record's revision when the draft started. Fields the record changed since keep their values at the merge, unless the draft changes them too; compare with GET /v1/records/{id}/diff?from=<base_revision>.

revision
integer
required

The draft's own revision, 1 when started and one more per change; also returned as the ETag.

data
object
required

The record's values as they read after the merge.

Example:
changed_fields
string[]
required

Keys of the fields the draft changes.

schedule
object
required

When the draft merges on its own (within a minute of the time), set with PUT /v1/drafts/{draft_id}/schedule. last_error explains the last scheduled merge that could not be made, until a new one is set.

created_by
object
required
edited_by
object[]
required

Everyone who changed it since, in order.

created_at
string<date-time>
required

ISO 8601 timestamp in UTC.

Example:

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

updated_at
string<date-time>
required

ISO 8601 timestamp in UTC.

Example:

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

expanded
object

Only with expand, as on a record, for the values after the merge.