Comment
The unified comment object. Every field, its type, and which platforms fill it.
Any endpoint that returns comments or replies returns them in this shape, whichever platform they came from. One parser reads comments from every platform that has them.
Fields
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string | No | The platform's ID for the comment, always as a string. |
url | string | Yes | Link to the comment on the platform. |
parent_id | string | Yes | ID of the comment this one replies to. null on top-level comments. |
post_id | string | Yes | ID of the post the comment belongs to. |
text | string | Yes | The comment text. Placeholders such as [deleted] or [removed] become null, so you never see them as text. |
author.username | string | Yes | The commenter's handle. null when the comment was removed. |
author.display_name | string | Yes | The commenter's display name. |
author.avatar_url | string | Yes | The commenter's profile picture. |
author.verified | boolean | Yes | Whether the commenter is verified. |
engagement.likes | integer | Yes | Likes or upvotes. |
engagement.replies | integer | Yes | Number of replies. 0 when the platform reports the count and there are none; null only when the platform gives no reply count. |
flags.pinned | boolean | Yes | Pinned by the post's author. null when the platform does not say. |
flags.deleted | boolean | No | The comment was deleted or removed. Always present, including when false. |
published_at | string or integer | Yes | When the comment was posted, as an ISO 8601 UTC string. If the platform sent a Unix timestamp, it is converted and the original is kept in ext.published_at_epoch. |
replies | object[] | Yes | Nested replies, each a full comment object with its own replies. Filled on threaded platforms such as Reddit; absent where comments are flat and linked only by parent_id. |
Extension fields (ext)
Platform-specific extras. Each one appears only where the platform provides it, so treat every ext field as optional.
| Field | Type | Nullable | Description |
|---|---|---|---|
ext.replies_token | string | Yes | YouTube token for loading replies. Pass it to /v1/youtube/video/comment/replies?continuationToken=. |
ext.replies_cursor | string | Yes | Reddit cursor for a reply branch that was cut short. Pass it as cursor to /v1/reddit/post/comments to fetch the replies that were left out. |
ext.depth | integer | Yes | Reddit nesting level: 0 for a top-level comment, 1 for a direct reply, and so on. Present when a flat thread was rebuilt into replies[], so you can check the nesting yourself. |
ext.published_at_epoch | integer | Yes | The original Unix timestamp, present only when one was converted into published_at. |
ext.feedback_id | string | Yes | Facebook comment ID used by /v1/facebook/post/comment/replies. |
ext.expansion_token | string | Yes | Facebook token used by /v1/facebook/post/comment/replies. |
ext.author_id | string | Yes | The commenter's numeric platform ID, where available. |
ext.ip_location | string | Yes | Location the platform displays for the commenter, where shown. |
ext.urn | string | Yes | LinkedIn comment URN. |
ext.reaction_counts | string[] | Yes | Counts broken down by reaction type. |
ext.is_edited | boolean | Yes | true when the comment was edited. |
ext.previous_replies_token | string | Yes | Token for loading earlier replies. |
ext.author_headline | string | Yes | LinkedIn headline of the commenter. |
ext.updated_at | string | Yes | When the comment was last updated. |
ext.author_channel_id | string | Yes | YouTube channel ID of the commenter. |
ext.author_url | string | Yes | Link to the commenter's profile. |
ext.viewer_rating | string | Yes | YouTube viewer rating value. |
ext.text_original | string | Yes | The comment text in its original, unformatted form. |
ext.preview_replies | string[] | Yes | A few replies shown with the comment. |
ext.lookup | string | Yes | Details of how a single comment was located, on single-comment endpoints. |
ext.post_title | string | Yes | Title of the parent post. |
ext.post_url | string | Yes | Link to the parent post. |
ext.subreddit | string | Yes | Subreddit of the parent post. |
ext.subreddit_subscribers | integer | Yes | Subscriber count of that subreddit. |
ext.post_score | integer | Yes | Score of the parent post. |
ext.post_comment_count | integer | Yes | Comment count of the parent post. |
ext.post_author | string | Yes | Author of the parent post. |
ext.post_published_at | string | Yes | When the parent post was published. |
ext.post_flair | string | Yes | Flair on the parent post. |
ext.is_submitter | boolean | Yes | true when the commenter also wrote the post. |
ext.edited_at | string | Yes | When the comment was edited. |
ext.controversiality | integer | Yes | Reddit controversiality flag. |
ext.content_language | string | Yes | The comment's ISO 639-1 language as the platform reports it. X's codes for "no language" (zxx, und) become null. |
ext.author_followers | integer | Yes | The commenter's follower count as included in the row. A snapshot, not live. Present on every /v1/twitter/tweet/replies row. |
ext.author_following | integer | Yes | The commenter's following count as included in the row. Also a snapshot. |
ext.author_posts_count | integer | Yes | The commenter's post count as included in the row. Also a snapshot. |
ext.quote_count | integer | Yes | Number of quote posts of this comment, where reported. On X a reply is itself a post. |
ext.views | integer | Yes | Views of the comment, where reported. Public on X replies from about 2022 onward. |
ext.saves | integer | Yes | Bookmarks of the comment, where reported (X). |
Which platforms fill which fields
Eight of the 9 platforms return this shape. id and flags.deleted are never null. yes means the platform can fill the field (it may still be null on a given row); a blank means it never does.
| Platform | parent_id | author.verified | flags.pinned | url | post_id | author.avatar_url | author.display_name | engagement.replies | author.username | engagement.likes |
|---|---|---|---|---|---|---|---|---|---|---|
| yes | yes | yes | yes | yes | ||||||
| yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | |
| yes | yes | yes | ||||||||
| yes | yes | yes | yes | yes | yes | yes | yes | yes | ||
| Threads | yes | yes | yes | yes | yes | yes | yes | |||
| TikTok | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
| Twitter/X | yes | yes | yes | yes | yes | yes | yes | yes | ||
| YouTube | yes | yes | yes | yes | yes |
On Reddit, replies are nested in replies[] rather than counted. On TikTok, parent_id is null on top-level comments because only replies have a parent.
Returned by
Endpoints that return a comment or a list of comments use this shape on:
Facebook · Instagram · LinkedIn · Reddit · Threads · TikTok · Twitter/X · YouTube
Comment lists also carry labels by default; see Labels. To see which native platform field feeds each unified field, read Field equivalence.