Follow a hashtag.
Per-actor follow list for hashtags. Posts using any of the followed tags get unioned into the actor's feed alongside posts from people they follow — both chronological and ranked modes pick them up.
1
Follow a tag
Idempotent: re-following the same tag refreshes followed_at but doesn't error. Returns 201 either way.
tag is 1–32 chars and normalised server-side: a leading # is stripped and the rest is lowercased, so "#StoryMode" and "storymode" are the same follow. The same normalisation applies to the tag in the DELETE path.
curl -X POST \
-H "Authorization: Bearer pcft_live_..." \
-H "Content-Type: application/json" \
-d '{"tag":"storymode"}' \
"https://social.productcraft.co/v1/communities/<communityId>/actors/<actorId>/hashtag-follows"The tag must already exist in the community directory — i.e. some post has used it. Following a never-used tag is usually a typo, so the endpoint returns 404 with Hashtag '<tag>' not found in this community and the customer can prompt the user to refine.
2
Unfollow
Idempotent 204 either way.
curl -X DELETE \
-H "Authorization: Bearer pcft_live_..." \
"https://social.productcraft.co/v1/communities/<communityId>/actors/<actorId>/hashtag-follows/storymode"3
List my follows
Cursor-paginated newest-first by followed_at.
curl -H "Authorization: Bearer pcft_live_..." \
"https://social.productcraft.co/v1/communities/<communityId>/actors/<actorId>/hashtag-follows?limit=20"{
"data": [
{
"actor_id": "aaaaaaaa-...",
"community_id": "cccccccc-...",
"tag": "storymode",
"followed_at": "2026-05-01T12:00:00.000Z"
}
],
"pagination": { "next_cursor": null, "has_more": false }
}4
What changes in the feed
Once you follow at least one tag, your GET /actors/:actorId/feed response includes posts using those tags — even from authors you don't follow. Both order=ranked and order=chronological pick them up. The existing visibility filters still apply:
publicposts: always surface.followersposts: surface only if the author IS in your follow pool. A hashtag-followed post authored by a non-followee withvisibility="followers"stays hidden — by design.close_friends: surfaces only when you're on the author's close-friends list.- Block / mute filters apply uniformly: a post by an actor you blocked or muted never surfaces, regardless of tag follows.
Internals
Candidate cap
The feed pulls a recent slice of post ids per followed tag and unions at most 200 of them into the author-pool query — one query, one cursor, sorted by the existing chronological / ranked rules. Following dozens of high-volume tags therefore surfaces a recent sample per tag rather than every match; the author-pool path still fills the rest of the page.
Permissions
PAK scopes
- POST:
social.createonpcft:agora:community/<communityId>. - DELETE:
social.deleteon the same URN. - GET:
social.liston the same URN.