Replies Endpoint - Response Shape Migration

The GET /v1/posts/:id/replies response now returns a consistent comment shape across every network under a new `data` key. The old per-network `replies` key still works and is deprecated.

GET /v1/posts/{id}/replies used to return a different response shape per social network. Nested replies made that untenable, so the endpoint now returns one consistent comment shape for every network under a new data key.

Nothing has broken. The old replies key still returns exactly what it returned before, per network, and will keep doing so until the sunset date announced below. New integrations should read data; existing integrations should migrate when convenient.

What changed

The response now carries both keys:

{
  "success": true,
  "data": [ /* consistent across every network - read this */ ],
  "replies": [ /* or { "comments": [...] } - the old per-network shape, deprecated */ ]
}

data is the same for every network:

fieldtypenotes
idstringPlatform comment ID or URN
authorstringUsername, display name, or platform URN
textstringComment content
created_atstring or nullISO timestamp, null when the platform does not report one
like_countnumber, optionalPresent when the platform reports it
repliesarray, optionalNested replies. Only present when you pass include_replies=true
platform_specificobject, optionalThe raw platform payload

Nested replies (include_replies=true) appear only in data. The deprecated replies key never carries them.

Per-network migration

Four networks had a shape that differed from the new one. If you integrate against any of these, these are the fields to remap.

Facebook and Instagram

Both returned an object envelope rather than an array.

// Deprecated `replies` key
{ "comments": [ { "id": "...", "text": "...", "timestamp": "...", "from": { "id": "...", "name": "..." }, "like_count": 5 } ] }
deprecated repliesnew data
replies.comments[]data[] (a plain array, no envelope)
texttext
timestampcreated_at
from (Facebook: object with id and name)author (the name); the full object stays in platform_specific.from
username (Instagram)author; also in platform_specific.username
like_countlike_count
replies (Instagram: raw Graph edge, always present)replies in data, only with include_replies=true

Bluesky

An array in both, but several fields were renamed. Note the replies field changed meaning: in the deprecated key it is a reply count; in data it is the array of nested replies.

deprecated repliesnew data
likeslike_count
replies (a number - the reply count)platform_specific.replyCount
repostsplatform_specific.repostCount
author_display_nameplatform_specific.author.displayName
author_avatarplatform_specific.author.avatar
id, author, text, created_atunchanged

Vimeo

The deprecated key returns Vimeo's raw comment objects.

deprecated repliesnew data
uriid
createdOncreated_at
user.nameauthor
texttext
the whole raw objectplatform_specific

Every other network

X, Threads and LinkedIn already returned the new shape. For those, replies and data are identical and you can switch keys with no other changes.

Deprecation and sunset

Responses from this endpoint carry a Deprecation: true header and a Link header pointing at this page. The header describes the replies key, not the endpoint itself - the endpoint is not going anywhere.

The replies key will be removed in a future release. Until then it is frozen: it will not gain fields, and it will not change shape again.

If you are unsure whether your integration reads replies, search your code for .replies on this endpoint's response, and for .comments if you integrate Facebook or Instagram.