All releases
Fix

Social — reliable pagination, idempotent unfollows, and mutes that stick

Social list endpoints no longer skip or duplicate rows past page 1, unfollow/unmute/unblock are idempotent, muted actors are now actually excluded from the home feed, and comment visibility updates persist. Cursor tokens changed format — restart any saved pagination state from page 1.

A correctness batch across the Social API, live in production since July 13:

  • Pagination. The followers, following, mutes, blocks, and restricts lists, GET /actors, and the close-friends list could silently skip or duplicate rows after the first page. All of them now paginate exactly. As part of the fix, their next_cursor values switched to the same opaque token format the rest of the API uses — previously-saved raw-id cursors are rejected with 400 INVALID_CURSOR; restart from the first page and follow pagination.next_cursor.
  • Idempotent edge deletes. Retrying an unfollow / unmute / unblock / unrestrict now returns 204 instead of a surprise 404 when the edge is already gone. Missing actors still 404.
  • Mutes now bite. Muting an actor was documented as hiding their posts from your feed but didn't — muted authors are now excluded from the home feed in both orders, and muted terms also filter the discover feed.
  • Comment visibility. PATCH /comments/:id with visibility now persists the value instead of silently ignoring it.
  • DM inbox paging. The conversation list with status=inbox|requests could strand pages behind a null cursor; deep inboxes now page through completely.

Full details on cursor handling live in the Social API reference.