Reposts.
Share a post with no commentary. Reposts are regular post rows with kind='repost' and a source_post_id — the entire feed / reaction / comment pipeline picks them up automatically.
1
Repost a post
Idempotent: re-reposting the same source returns the existing repost with created: false. Visibility is inherited from the source — reposting a followers-only post produces a repost that also has visibility="followers".
curl -X POST \
-H "Authorization: Bearer pcft_live_..." \
-H "Content-Type: application/json" \
-d '{"actor_id":"<actorId>"}' \
"https://social.productcraft.co/v1/communities/<communityId>/posts/<sourcePostId>/repost"{
"repost": {
"id": "bbbbbbbb-...",
"kind": "repost",
"actor_id": "aaaaaaaa-...",
"source_post_id": "bbbbbbbb-...",
"body": null,
"title": null,
"visibility": "public",
"status": "published",
"...": "..."
},
"source": {
"id": "bbbbbbbb-...",
"kind": "text",
"actor_id": "aaaaaaaa-other-...",
"body": "the original post",
"repost_count": 4,
"...": "..."
},
"created": true
}2
Undo a repost
Soft-deletes the repost row (status='removed') and decrements both counters. Idempotent — DELETE on a non-existent repost still 204s.
curl -X DELETE \
-H "Authorization: Bearer pcft_live_..." \
-H "Content-Type: application/json" \
-d '{"actor_id":"<actorId>"}' \
"https://social.productcraft.co/v1/communities/<communityId>/posts/<sourcePostId>/repost"3
See who reposted
Cursor-paginated newest-first. Each entry is the full repost post row — actor_id tells you who reposted, created_at when. Useful for an “X reposted this” UI line.
curl -H "Authorization: Bearer pcft_live_..." \
"https://social.productcraft.co/v1/communities/<communityId>/posts/<sourcePostId>/reposts?limit=20"What changes
Downstream effects
- Feed inclusion. Reposts are
postrows so the regular actor feed picks them up automatically — followers of the reposter see the repost interleaved with the reposter's own posts. Both chronological and ranked modes work without changes. - Source counter.
source.repost_countis bumped / decremented atomically. Visible on every read of the source post. - Author counter. The reposter's
post_countgoes up by 1 (reposts count as posts). - Notification. The source author gets a
kind: "repost"notification. Suppressed for self-reposts (refused at 422 anyway), blocked-pair, and recipients who've muted the repost kind via notification preferences. - Engagement on the repost itself. Reactions, comments, bookmarks all work — the repost is just a post.
Refusals
What 422s
- CANNOT_REPOST_SELF — reposting your own post.
- CANNOT_REPOST_PRIVATE — the source has
visibility="private". Private posts can't be shared by definition.
Cross-community / removed / draft / expired sources, and sources the reposter can't see (followers / close_friends), all return 404 (opaque) per the standard social boundary rule.
Permissions
PAK scopes
- POST:
social.createonpcft:agora:post/*. - DELETE:
social.deleteonpcft:agora:post/*. - GET:
social.liston the community URN.