Skip to main content
POST
Error

Authorizations

Authorization
string
header
required

A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.

Headers

X-Organization-Id
string

The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.

Body

application/json
collection_id
string<uuid>
required
slug
string
required
Example:

"how-refunds-work"

title
string
required
body_markdown
string

Response

The article, still a draft.

An article's identity: slug, collection, and the pointer to whichever version is public. The words live in versions — published_version_id null is a draft, invisible on every public surface.

id
string<uuid>
slug
string

The public URL segment, unique per organization case-insensitively.

collection_id
string<uuid>
published_version_id
string<uuid> | null

Which version the public page reads. Null is a draft.

latest_version
integer

The newest version's number — what the editor opens. Present on list and create responses.

latest_title
string

The newest version's title. Present on list and create responses.

published_version
integer | null

The published version's number, on list responses. Null is a draft.

created_at
string<date-time>
updated_at
string<date-time>