Skip to main content
POST
Create Content Update
Records an entry in your workspace’s Content Updates ledger. Use this to log publishes, refreshes, or drafts from any system outside of Slate — a custom CMS, a static site generator, a deploy pipeline, or your own internal tooling — so the entry shows up in the Update History and Performance tabs alongside workflow- and manually-logged updates. Entries created through this endpoint appear with the source label API.
This is the only Content Updates endpoint accessible via API tokens. To list, edit, or delete entries, use the Slate dashboard.

Parameters

string
required
Bearer token. Format: Bearer slat_<your-token>. See Authentication.
string
required
Canonical URL of the page being recorded. Use the full URL including the protocol (for example, https://example.com/blog/post). To get accurate matching across runs, drop tracking parameters and use the same canonical form everywhere.
string
The kind of event to record. One of: publish, refresh. If you omit it, Slate uses refresh when the page already has update entries and publish otherwise. To record a draft, set is_draft to true.
string
ISO-8601 timestamp for when the update happened (for example, 2026-05-06T14:30:00Z). Defaults to the time the request is received.
boolean
default:"false"
Set to true to record the entry as a draft. Drafts stay in the ledger but do not count toward Published or Refreshed totals on the Performance tab.
string
Optional UID of the Slate artifact this update came from. The artifact must exist in the token’s workspace. Otherwise the request fails with 400 and unknown content_artifact_uid. To store your own IDs, such as a build ID, use metadata instead.
object
Optional JSON object stored alongside the entry. Use it for context fields your reporting may need later — for example, the deploy ID, the author, the model that generated the content. Must be a JSON object; arrays and primitives are rejected.

Response

Returns 201 Created with the recorded event details.
integer
required
Unique identifier for the recorded event.
integer
Identifier for the daily rollup row this event belongs to. null for draft entries, since drafts do not roll up into daily counts.
boolean
required
true if the page already had another update event on the same day. Slate still records this event, and both events roll into the same daily entry. false otherwise.

Example

Response

Status codes

See Errors for error response formats.

Update types and drafts

The combination of update_type and is_draft decides how the entry shows up in reporting:

Same-day events and retries

Every request records a new event, even if the page already has an event that day. When it does, the response has deduped: true, and the events share one daily entry in reporting.
Retrying a request that already succeeded records another event. Only retry when the first request failed.

What’s next