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.

Path Parameters

id
string<uuid>
required
versionID
string<uuid>
required

Body

application/json
effective_at
string<date-time> | null

When these words start governing. RFC 3339 with an offset. Omitted or null means now; a future moment keeps the previous version in force until then; the past is refused.

accept_by
string<date-time> | null

The far edge of the window where agreeing may WAIT. RFC 3339 with an offset, and after effective_at — a deadline that has already passed is a window nobody gets, refused with accept_by_before_effective.

Until it, the agreement is outstanding and the ask is deferrable: pending_agreements reports deferrable: true, the SDK's card offers a way out, and the person is asked again on their next visit. After it, that door closes. Omit it for the strict shape — outstanding the moment it takes force, with nothing offering to defer it.

It is frozen with the words: extending a deadline is benign and shortening one is hostile, so rather than encode which is which, changing the terms of the asking is publishing another version.

notify
boolean

Announce the publication in the in-app bell of everybody it puts in front of a checkbox: an action notification carrying a button that opens the agreement, rather than a link to somewhere else.

Only people who are actually PENDING are told — computed with the same floor the card uses, so a notice cannot disagree with what it tells somebody to open. Anonymous visitors never receive one. Defaults to false, and the default is the decision: a version published to fix a heading must not put a demand in anybody's notifications.

With a future effective_at the announcement WAITS for it. It goes out on the day the terms start governing, to whoever owes them on that day — announcing at publication would reach the people who owe the PREVIOUS version, about words that govern nobody yet, and nothing at all would happen on the date itself. A nightly sweep does it, so the notice lands within a day of the effective moment rather than at it.

Response

The published version.

version
object

One version's words. Frozen the moment it is published: body, summary, effective date and requires_reacceptance all become immutable, because an acceptance names this row.