Social guides
Guides

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.

bash
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.

bash
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.

bash
curl -H "Authorization: Bearer pcft_live_..." \
  "https://social.productcraft.co/v1/communities/<communityId>/actors/<actorId>/hashtag-follows?limit=20"
json
{
  "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:

  • public posts: always surface.
  • followers posts: surface only if the author IS in your follow pool. A hashtag-followed post authored by a non-followee with visibility="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.create on pcft:agora:community/<communityId>.
  • DELETE: social.delete on the same URN.
  • GET: social.list on the same URN.