InsightSocial API
Unified schema

Comment

The schema-2 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. This page describes schema 2, which every key gets from October 4, 2026; what changed is on Schema 2.

Where comments sit in data

Endpoint returnsPath
One commentdata.comment
A list of comments or repliesdata.items[].comment

A list also carries data.total (the platform's own total, not the size of this page) and data.truncated, true when the platform cut the thread short (Reddit's "more replies" threshold). Both are null when the platform does not say. The next page is in pagination.next_cursor.

Example

One row from /v1/twitter/tweet/replies, shortened:

Response
{
  "success": true,
  "platform": "twitter",
  "endpoint": "/v1/twitter/tweet/replies",
  "schema_version": "2",
  "data": {
    "items": [
      {
        "comment": {
          "id": "2106150051978662105",
          "url": "https://x.com/bobcarter101/status/2106150051978662105",
          "parent_id": null,
          "post_id": "2106061652617568263",
          "text": "@NASA @Space_Station skills required; watching SpaceX’s live stream.",
          "author": {
            "id": null,
            "username": "bobcarter101",
            "display_name": "Bob Carter",
            "avatar_url": "https://pbs.twimg.com/profile_images/…",
            "verified": true
          },
          "engagement": { "likes": 3, "replies": 2 },
          "flags": { "pinned": null, "deleted": false },
          "published_at": "2026-10-02T22:31:17.000Z",
          "language": "en",
          "replies": null,
          "ext": { "author_followers": 4909, "quote_count": 0, "views": 681 }
        }
      }
    ],
    "total": null,
    "truncated": null
  },
  "pagination": { "next_cursor": "v2c.ouEEuPti…", "has_more": true, "page_size": 36 },
  "unavailable": ["items[].comment.author.id"],
  "credits_used": 10,
  "credits_remaining": 9990,
  "request_id": "req_48e49dfbad28",
  "cached": false,
  "idempotent_replay": false,
  "charge_reason": "miss",
  "free_call": false
}

X gives no author ID on replies, so every row has author.id: null and the response says so in unavailable.

Fields

Every field is always present; a value the platform does not give is null.

FieldTypeNullableDescription
idstringNoThe platform's ID for the comment, always a string.
urlstringYesLink to the comment on the platform.
parent_idstringYesID of the comment this one replies to. null on a top-level comment, on every platform. A reply carries its parent comment's ID, never the post's.
post_idstringYesID of the post the comment belongs to.
textstringYesThe comment text. Placeholders such as [deleted] or [removed] become null, so you never see them as text.
author.idstringYesThe commenter's platform ID. On Reddit it is the account's t2_… ID, prefix kept. null where the source gives none: on LinkedIn the source gives no member URN for commenters, so it is null there (join on username), and the numeric member id is in ext.author_member_id.
author.usernamestringYesThe commenter's handle. null when the comment was removed.
author.display_namestringYesThe commenter's display name. On Reddit usually null: Reddit shows a username, and the t2_… ID that arrives in this place goes to author.id.
author.avatar_urlstringYesThe commenter's profile picture.
author.verifiedbooleanYesWhether the commenter is verified.
engagement.likesintegerYesLikes or upvotes. null when not shown, and on Reddit when the score is below zero (see ext.score).
engagement.repliesintegerYesNumber of replies. 0 when the platform reports the count and there are none; null only when the platform gives no reply count.
flags.pinnedbooleanYesPinned by the post's author. null when the platform does not say.
flags.deletedbooleanNoThe comment was deleted or removed. Always true or false.
published_atstringYesWhen the comment was posted, as ISO 8601 in UTC, ending in Z.
languagestringYesThe comment's language as the platform states it, such as en. null when the platform gives no tag. We do not detect languages.
repliesobject[]YesReplies the platform returned inline, each a full comment object with its own replies. Filled on Reddit. null where the platform returns none inline: fetch them from the platform's replies endpoint with this comment's id.
extobjectYesPlatform-specific fields. See below.

Fetching replies

Replies endpoints take the platform's own identifiers, which every comment carries:

PlatformCall
YouTube/v1/youtube/video/comment/replies?continuationToken= with the top-level comment.id
Facebook/v1/facebook/post/comment/replies with the comment's ext.feedback_id and ext.expansion_token
RedditReplies arrive inline in replies. When data.truncated is true, page on with pagination.next_cursor.

Extension fields (ext)

Platform-specific extras. Each one appears only where the platform provides it, so treat every ext field as optional. ext is null when a comment has no extras. Keys are snake_case on every platform, _id values are strings and _at values are ISO 8601 UTC times. ext never carries our cursors or tokens.

FieldTypeNullableDescription
ext.depthintegerYesReddit 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.feedback_idstringYesFacebook comment ID used by /v1/facebook/post/comment/replies.
ext.expansion_tokenstringYesFacebook token used by /v1/facebook/post/comment/replies.
ext.ip_locationstringYesLocation the platform displays for the commenter, where shown.
ext.urnstringYesLinkedIn comment URN.
ext.reaction_countsstring[]YesCounts broken down by reaction type.
ext.is_editedbooleanYestrue when the comment was edited.
ext.author_headlinestringYesLinkedIn headline of the commenter.
ext.updated_atstringYesWhen the comment was last updated.
ext.author_urlstringYesLink to the commenter's profile.
ext.viewer_ratingstringYesYouTube viewer rating value.
ext.text_originalstringYesThe comment text in its original, unformatted form.
ext.preview_repliesobject[]YesA few replies shown with the comment.
ext.lookupstringYesDetails of how a single comment was located, on single-comment endpoints.
ext.post_titlestringYesTitle of the parent post.
ext.post_urlstringYesLink to the parent post.
ext.subredditstringYesSubreddit of the parent post.
ext.subreddit_subscribersintegerYesSubscriber count of that subreddit.
ext.post_scoreintegerYesScore of the parent post.
ext.post_comment_countintegerYesComment count of the parent post.
ext.post_authorstringYesAuthor of the parent post.
ext.post_published_atstringYesWhen the parent post was published.
ext.post_flairstringYesFlair on the parent post.
ext.is_submitterbooleanYestrue when the commenter also wrote the post.
ext.edited_atstringYesWhen the comment was edited.
ext.controversialityintegerYesReddit controversiality flag.
ext.author_followersintegerYesThe commenter's follower count as included in the row. A snapshot, not live. Present on every /v1/twitter/tweet/replies row.
ext.author_followingintegerYesThe commenter's following count as included in the row. Also a snapshot.
ext.author_posts_countintegerYesThe commenter's post count as included in the row. Also a snapshot.
ext.quote_countintegerYesNumber of quote posts of this comment, where reported. On X a reply is itself a post.
ext.viewsintegerYesViews of the comment, where reported. Public on X replies from about 2022 onward.
ext.savesintegerYesBookmarks of the comment, where reported (X).
ext.scoreintegerYesReddit only. A comment score below zero. engagement.likes is then null, because a negative score is not a like count.

Which platforms fill which fields

Every platform that returns comments uses this shape. id and flags.deleted are never null. The table covers the platforms the API launched with that return comments. The others return the same shape, and each response's unavailable list names the fields it could not fill. yes means the platform can fill the field (it may still be null on a given row); a blank means it never does.

Platformparent_idauthor.verifiedflags.pinnedurlpost_idauthor.avatar_urlauthor.display_nameengagement.repliesauthor.usernameengagement.likes
Facebookyesyesyesyes
Instagramyesyesyesyesyesyesyesyesyesyes
LinkedInyesyesyes
Reddityesyesyesyesyesyesyes
Threadsyesyesyesyesyesyesyes
TikTokyesyesyesyesyesyesyesyesyes
Twitter/Xyesyesyesyesyesyesyesyes
YouTubeyesyesyesyesyes

parent_id is filled on replies only; top-level comments carry null everywhere. On Reddit, replies are nested in replies[] rather than counted. On Facebook, an opaque pfbid… profile ID goes to author.id, not author.username. On Reddit, the account's t2_ ID goes to author.id.

unavailable

When a field the platform normally fills is null on every comment in a response, the response lists its path in unavailable, for example "items[].comment.author.id". Fields a platform never shows are never listed: the comment url on TikTok, author.username on Facebook and author.display_name on Reddit.

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

To see which native platform field feeds each unified field, read Field equivalence.

On this page