Drafts.
Save half a thought without shipping it. Draft posts are author-only — stripped from feeds, lists, and getById for everyone except the author. Promote by PATCHing { status: 'published' }, and the post_count counter is bumped at the transition.
1
Save a draft
Use the existing post-create endpoint with status: "draft". Body / title / url content rules are the same as a published post — at least one of the three must be non-empty.
curl -X POST \
-H "Authorization: Bearer pcft_live_..." \
-H "Content-Type: application/json" \
-d '{"actor_id":"<actorId>","body":"WIP — half a thought…","status":"draft"}' \
"https://social.productcraft.co/v1/communities/<communityId>/posts"{
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"community_id": "...",
"actor_id": "...",
"kind": "text",
"title": null,
"body": "WIP — half a thought…",
"url": null,
"attributes": {},
"visibility": "public",
"status": "draft",
"reaction_counts": {},
"comment_count": 0,
"expires_at": null,
"pinned": false,
"created_at": "2026-05-11T19:50:00.000Z",
"updated_at": "2026-05-11T19:50:00.000Z"
}2
List drafts
Per-actor, cursor-paginated newest-first. Drafts do not appear in the regular post list, the actor feed, or getById for non-author callers — you have to come here for them.
The PAK lane has no end-user principal, so the customer's backend is responsible for ensuring the actorId in the path matches the end-user behind the request before exposing the response.
curl -H "Authorization: Bearer pcft_live_..." \
"https://social.productcraft.co/v1/communities/<communityId>/actors/<actorId>/drafts?limit=20"3
Edit the draft
PATCH the post like any other — body / title / url / attributes / visibility / pinned all editable. While the status stays draft, the post is still author-only.
curl -X PATCH \
-H "Authorization: Bearer pcft_live_..." \
-H "Content-Type: application/json" \
-d '{"body":"Now with a real point."}' \
"https://social.productcraft.co/v1/communities/<communityId>/posts/<postId>"4
Publish
Same PATCH endpoint with {"status":"published"}. The post immediately becomes visible per its visibility setting, lands in the feeds of people who follow the author, and the post_count counter is bumped by 1.
curl -X PATCH \
-H "Authorization: Bearer pcft_live_..." \
-H "Content-Type: application/json" \
-d '{"status":"published"}' \
"https://social.productcraft.co/v1/communities/<communityId>/posts/<postId>"Behaviour
What to expect
- Drafts are author-only. The post list, feed, and getById all return
404 Post not foundto anyone else — even with the post id and a valid PAK. - Counter accounting follows publish state. Creating a draft does NOT bump
post_count. Promoting via PATCH does. Going back to draft (rare, but supported) decrements again. - Notifications still suppressed. No follow / mention / reaction emits while
status=draft— the post is invisible, so there's nothing to notify about. - No expiry. Drafts have no TTL. They live until the author publishes or deletes them.