Update Blog Post
PUT
/api/v1/posts/{id}
Updates a blog post. CPT: custom_fields updatable; post_type locked; APPROVAL_REQUIRED may apply on publish.
Authorizations
SessionAuth
Session ID for authenticated requests
Type
API Key (header: X-Session-ID)
Parameters
Path Parameters
id*
Type
Requiredstring
Request Body
application/json
JSON "post_type": "string", "custom_fields": { "additionalProperties": "string" }, "title": "string", "slug": "string", "body": "string", "body_format": "string", "excerpt": "string", "status": "string", "visibility": "string", "password": "string", "category_ids": [ "string" ], "tag_ids": [ "string" ], "comments_enabled": true, "reactions_enabled": true, "scheduled_at": "string", "metadata": { "additionalProperties": "string" }, "additionalProperties": "string"
{
}
Responses
Post updated
Update an existing blog post.
Auth: session + owner/admin.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Post id |
Request Body
json
{
"title": "Updated title",
"body": "Updated body",
"custom_fields": { "client": "Acme Corp" }
}Response 200
json
{
"data": {
"id": "post_2",
"updated": true,
"post_type": "case-study",
"custom_fields": { "client": "Acme Corp" }
},
"user_context": { "authenticated": true },
"meta": {}
}Response Errors
400invalid update payload (CUSTOM_FIELDS_*,POST_TYPE_LOCKED, …)401missing session403not owner/admin orAPPROVAL_REQUIREDon publish404post not found
Notes
- Use this for content edits and metadata changes.
- Keep slug and visibility in sync with the publishing flow.
- CPT:
custom_fieldsare updatable; changingpost_typereturnsPOST_TYPE_LOCKED. - Type behaviors may still apply on publish (approval, scheduling, password visibility).