A valid request URL is required to generate request examples{
"post": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"slug": "<string>",
"body_markdown": "<string>",
"published": true,
"published_at": "2023-11-07T05:31:56Z",
"segment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"feedback_post_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Write a changelog post
Requires engagement:manage. Always created as a draft — there is no published on this body, because publishing announces the release to every webhook subscriber and moves the post into a document a CDN may keep. It is POST /v1/organization/changelog/{id}/publish, an act a client makes on purpose, so that a form submitted twice cannot announce the same release twice.
segment_id aims the post at an audience and must name a segment of the same environment; null or absent means everybody. A post aimed at nobody in particular is the only kind the public document carries — see GET /v1/changelog/{publishable_key} for why the targeting is dropped there rather than honoured.
body_markdown is stored as you wrote it and rendered by whoever displays it. One canonical source keeps what your customer read and what your editor wrote the same bytes.
A valid request URL is required to generate request examples{
"post": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"slug": "<string>",
"body_markdown": "<string>",
"published": true,
"published_at": "2023-11-07T05:31:56Z",
"segment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"feedback_post_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Authorizations
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
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.
Query Parameters
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test Body
200100000Optional. The post's address on the public release page — lowercase letters, digits and single hyphens. Omitted, one is folded from the title and suffixed if it is taken; supplied, it is used as given and refused with 409 if another post in the environment holds it.
200The audience, or null for everybody. Must belong to the same environment.
The other audience: the people who voted for that feedback post — how "we shipped the thing you asked for" reaches exactly them. Mutually exclusive with segment_id; setting one clears the other. The audience is a join at read time, so somebody who votes after publication still receives it.
Response
The draft.
One release note. Written as a draft, aimed at a segment or at everybody, and published by an act of its own — published_at is a moment rather than a flag, because the list is ordered by it and the unread badge compares a contact's arrival against it.
Show child attributes
Show child attributes