# Comment

Schemas

Public comments and replies with their author, text, place in the thread, and like and reply counts.

## Endpoints

15 endpoints return comments on Bluesky, Facebook, Instagram, Reddit, Rumble, Snapchat, Threads, TikTok and YouTube.

- [GETBluesky Comments API`/v1/bluesky/comments`](https://socialtap.dev/docs/reference/bluesky/comments/index.md)
- [GETFacebook Comments API`/v1/facebook/comments`](https://socialtap.dev/docs/reference/facebook/comments/index.md)
- [GETFacebook Comment Replies API`/v1/facebook/replies`](https://socialtap.dev/docs/reference/facebook/replies/index.md)
- [GETInstagram Comment API`/v1/instagram/comment`](https://socialtap.dev/docs/reference/instagram/comment/index.md)
- [GETInstagram Comments API`/v1/instagram/comments`](https://socialtap.dev/docs/reference/instagram/comments/index.md)
- [GETReddit Comments API`/v1/reddit/comments`](https://socialtap.dev/docs/reference/reddit/comments/index.md)
- [GETReddit User Comments API`/v1/reddit/profile_comments`](https://socialtap.dev/docs/reference/reddit/profile_comments/index.md)
- [GETReddit Comment Search API`/v1/reddit/search_comments`](https://socialtap.dev/docs/reference/reddit/search_comments/index.md)
- [GETRumble Comments API`/v1/rumble/comments`](https://socialtap.dev/docs/reference/rumble/comments/index.md)
- [GETSnapchat Comments API`/v1/snapchat/comments`](https://socialtap.dev/docs/reference/snapchat/comments/index.md)
- [GETThreads Comments API`/v1/threads/comments`](https://socialtap.dev/docs/reference/threads/comments/index.md)
- [GETTikTok Comment API`/v1/tiktok/comment`](https://socialtap.dev/docs/reference/tiktok/comment/index.md)
- [GETTikTok Comments API`/v1/tiktok/comments`](https://socialtap.dev/docs/reference/tiktok/comments/index.md)
- [GETTikTok Comment Replies API`/v1/tiktok/replies`](https://socialtap.dev/docs/reference/tiktok/replies/index.md)
- [GETYouTube Comments API`/v1/youtube/comments`](https://socialtap.dev/docs/reference/youtube/comments/index.md)

## Schema

Single-item endpoints return this object as `data`; list endpoints return an array of them as `data` with a [`page`](https://socialtap.dev/docs/pagination/index.md) object. The standard [`meta`](https://socialtap.dev/docs/reference/index.md#meta) comes with every response.

| Field | Type | Description |
| --- | --- | --- |
| `platform` | `string` | Platform ID (tiktok, youtube, …). |
| `id` | `string` | Platform-native comment ID (string; Reddit with its t1_ prefix). |
| `post_id` | `string` | ID of the post commented on (equals post.id). |
| `parent_id` | `string` or `null` | ID of the comment this replies to; null for top-level comments. |
| `url` | `string` (uri) or `null` | Permalink, when the platform has one. |
| `text` | `string` | Comment body as plain text. |
| `author` | `object` | The commenting account. An account the platform no longer names (a deleted account) has a null id and username and the platform's label as display_name (Reddit: \[deleted\]). |
| `author.id` | `string` or `null` | Platform-native account ID; null when only the handle is known. |
| `author.username` | `string` or `null` | Handle without the @; null when the account has none. |
| `author.display_name` | `string` or `null` | Display name shown on the profile. |
| `author.url` | `string` (uri) or `null` | Canonical profile URL. |
| `author.avatar_url` | `string` (uri) or `null` | Profile picture URL. Platform CDN URLs can expire within hours. |
| `author.is_verified` | `boolean` or `null` | Platform verification badge; null where the platform has no badge. |
| `published_at` | `string` (date-time) or `null` | When the comment was posted, RFC 3339 UTC. Where the platform shows only a relative time ("3 weeks ago"), the latest time that label allows (the fetch time minus the stated amount), listed in approximate_fields. |
| `edited_at` | `string` (date-time) or `null` | When the comment was last edited, RFC 3339 UTC; null when never edited or when the platform marks edits without a time (see is_edited). |
| `is_edited` | `boolean` or `null` | The comment was edited after posting (the platform's edited mark); null when the platform does not say. |
| `is_pinned` | `boolean` or `null` | Pinned by the post's author. |
| `is_liked_by_author` | `boolean` or `null` | Liked or hearted by the post's author. |
| `is_by_post_author` | `boolean` or `null` | Written by the post's author (the creator's own comment, marked as such by the platform). |
| `metrics` | `object` | Counts at fetch time; null = hidden or not exposed, 0 = zero. |
| `metrics.like_count` | `integer` or `null` | Likes or upvotes; never negative. |
| `metrics.reply_count` | `integer` or `null` | Direct replies. |
| `platform_specific` | `object` | Fields only this platform has, under its ID (platform_specific.\<platform>); each null when unknown. |
| `platform_specific.tiktok` | `object` or `null` | TikTok's own comment fields. |
| `platform_specific.tiktok.author_sec_uid` | `string` or `null` | The commenter's secUid, TikTok's account key that survives a rename. |
| `platform_specific.tiktok.language` | `string` or `null` | The comment's language as TikTok detected it, an ISO 639-1 code (en, fr); null when TikTok could not tell (emoji, a name) or does not say. |
| `platform_specific.tiktok.thread_id` | `string` or `null` | For a reply: the ID of its top-level comment (parent_id may name another reply it answers); null for a top-level comment. |
| `platform_specific.rumble` | `object` or `null` | Rumble's own comment fields. |
| `platform_specific.rumble.dislike_count` | `integer` or `null` | Thumbs-down votes on the comment. Exact below 1,000; from 1,000 Rumble shows a label such as "1.31K", taken to be cut to three significant digits as Rumble's other counts are (not checked against an exact count), and listed in approximate_fields. |
| `platform_specific.rumble.author_badges` | `string[]` | The badges Rumble shows beside the commenter's name, by their label as Rumble writes it (seen: Verified, Admin, Moderator, Supporter, Supporter+, Supporter++, Sub, Locals Supporter; new labels may appear). \[\] when none. |
| `platform_specific.threads` | `object` or `null` | Threads' own reply fields. |
| `platform_specific.threads.repost_count` | `integer` or `null` | Times the reply was reposted; never negative. |
| `platform_specific.threads.quote_count` | `integer` or `null` | Times the reply was quoted in another post; never negative. |
| `platform_specific.threads.language` | `string` or `null` | The reply's language as Threads detected it, a BCP-47 tag (en, pt, zh-TW); null when Threads could not tell (an emoji, a link, media only) or does not say. |
| `platform_specific.reddit` | `object` or `null` | Reddit's own comment fields. |
| `platform_specific.reddit.subreddit` | `object` or `null` | The subreddit of the post the comment is on; for a post on a user's profile, the profile's own subreddit (u_\<username>). |
| `platform_specific.reddit.subreddit.id` | `string` or `null` | Reddit's subreddit ID (t5_…). |
| `platform_specific.reddit.subreddit.name` | `string` or `null` | The subreddit's name without r/. |
| `platform_specific.reddit.subreddit.url` | `string` (uri) or `null` | The subreddit's URL. |
| `platform_specific.reddit.score` | `integer` or `null` | Net score as Reddit shows it: upvotes minus downvotes, fuzzed by Reddit; negative for a comment most votes are against. Null when Reddit hides it (a subreddit that hides recent comments' scores, a deleted comment). |
| `platform_specific.reddit.depth` | `integer` or `null` | How deep in the post's thread the comment is: 0 for a comment on the post, 1 for a reply to one, and so on. |
| `platform_specific.reddit.award_count` | `integer` or `null` | Awards the comment received. |
| `platform_specific.reddit.distinguished` | `string` or `null` | The role the author spoke in, when they marked the comment with it: moderator or admin; null for an ordinary comment. |
| `platform_specific.reddit.is_collapsed` | `boolean` or `null` | Reddit shows the comment collapsed (a low score, a moderator's or crowd-control setting, or a subreddit's rule). |
| `platform_specific.reddit.is_deleted` | `boolean` or `null` | The comment's body was deleted by its author or removed by a moderator or Reddit; text is then empty. Reddit keeps such a comment in the thread when it has replies. |
| `platform_specific.reddit.more_replies_count` | `integer` or `null` | Replies under this comment (with their own replies) that the page leaves out, as Reddit counts them in its "N more replies" link: request the comment's url to page through them. 0 when every reply Reddit has is included. |
| `platform_specific.reddit.reply_to_author` | `object` or `null` | The author of the comment this one replies to, where the list names them (a user's comments: Reddit's "replied to u/…"); null where Reddit does not name them (a comment on the post, a deleted parent account) and where parent_id places the comment in its thread. |
| `platform_specific.reddit.reply_to_author.id` | `string` or `null` | Platform-native account ID; null when only the handle is known. |
| `platform_specific.reddit.reply_to_author.username` | `string` or `null` | Handle without the @; null when the account has none. |
| `platform_specific.reddit.reply_to_author.display_name` | `string` or `null` | Display name shown on the profile. |
| `platform_specific.reddit.reply_to_author.url` | `string` (uri) or `null` | Canonical profile URL. |
| `platform_specific.reddit.reply_to_author.avatar_url` | `string` (uri) or `null` | Profile picture URL. Platform CDN URLs can expire within hours. |
| `platform_specific.reddit.reply_to_author.is_verified` | `boolean` or `null` | Platform verification badge; null where the platform has no badge. |
| `platform_specific.reddit.post` | `object` or `null` | The post the comment is on, as Reddit shows it beside the comment (search results); null where the endpoint does not show it. |
| `platform_specific.reddit.post.title` | `string` or `null` | The post's title. |
| `platform_specific.reddit.post.url` | `string` (uri) or `null` | The post's permalink. |
| `platform_specific.reddit.post.score` | `integer` or `null` | The post's net score as Reddit shows it (floored at 0 on display). |
| `platform_specific.reddit.post.comment_count` | `integer` or `null` | Comments on the post. |
| `platform_specific.reddit.post.published_at` | `string` (date-time) or `null` | When the post was submitted, RFC 3339 UTC. |
| `platform_specific.reddit.post.is_nsfw` | `boolean` or `null` | The post is marked NSFW (18+). |
| `platform_specific.reddit.post.is_spoiler` | `boolean` or `null` | The post is marked as a spoiler. |
| `platform_specific.instagram` | `object` or `null` | Instagram's own comment fields. |
| `platform_specific.instagram.gif_url` | `string` (uri) or `null` | The GIF the comment is (Instagram's GIPHY picker; text is then usually empty), on Meta's CDN; the URL is signed and expires within days. null when the comment has no GIF or the source does not show it (the post page's first comments). |
| `platform_specific.facebook` | `object` or `null` | Facebook's own comment fields. |
| `platform_specific.facebook.reactions` | `object[]` | Reactions by type, most first, as Facebook lists them under the comment; \[\] when none. |
| `platform_specific.facebook.reactions[].type` | `string` | Reaction type. New values may be added.<br>One of `like`, `love`, `care`, `haha`, `wow`, `sad`, `angry` |
| `platform_specific.facebook.reactions[].count` | `integer` or `null` | How many people reacted with it. |
| `platform_specific.facebook.author_gender` | `string` or `null` | The commenter's gender as Facebook states it to logged-out visitors; null when it states none (Pages, most accounts that chose not to). New values may be added.<br>One of `male`, `female` |
| `platform_specific.facebook.image_url` | `string` (uri) or `null` | The photo the comment attaches, on Facebook's CDN (signed, expires within days); null when it attaches none. |
| `platform_specific.bluesky` | `object` or `null` | Bluesky's own reply fields. |
| `platform_specific.bluesky.repost_count` | `integer` or `null` | Times the reply was reposted; never negative. |
| `platform_specific.bluesky.quote_count` | `integer` or `null` | Times the reply was quoted in another post; never negative. |
| `platform_specific.bluesky.save_count` | `integer` or `null` | Times the reply was bookmarked; never negative. |
| `platform_specific.bluesky.is_hidden` | `boolean` or `null` | Bluesky folds the reply under the thread's "Show more replies" button: the post's author hid it, or Bluesky's own ranking set it aside. Null when the thread was read from the route that does not say. |
| `platform_specific.bluesky.is_hidden_by_post_author` | `boolean` or `null` | The post's author hid this reply from their thread. |
| `platform_specific.bluesky.reply_root_post_id` | `string` or `null` | The at:// ID of the post that started the thread: post_id itself unless the post asked about is a reply. |
| `platform_specific.bluesky.cid` | `string` or `null` | The content hash (CID) of this version of the reply's record. |
| `platform_specific.bluesky.indexed_at` | `string` (date-time) or `null` | When Bluesky's AppView first saw the reply, RFC 3339 UTC. |
| `platform_specific.bluesky.created_at` | `string` (date-time) or `null` | The time the reply's own record states, RFC 3339 UTC: the author's client writes it, so it can be earlier than the reply went public. |
| `platform_specific.bluesky.languages` | `string[]` | Every language the author tagged the reply with, in the author's order; \[\] when none. |
| `platform_specific.bluesky.labels` | `string[]` | Moderation and self labels on the reply (porn, sexual, nudity, graphic-media, spam, …), as Bluesky names them; \[\] when none. |
| `platform_specific.bluesky.is_nsfw` | `boolean` or `null` | The reply carries an adult or sensitive label. |
| `platform_specific.bluesky.hashtags` | `string[]` | Hashtags in the reply, without the #; \[\] when none. |
| `platform_specific.bluesky.mentions` | `string[]` | Accounts the reply mentions, by handle; \[\] when none. |
| `platform_specific.bluesky.links` | `string[]` | The full URLs the reply's text links to, in text order; the text itself shows them shortened. \[\] when none. |
| `platform_specific.bluesky.media` | `object[]` | The reply's images and video; \[\] when none. |
| `platform_specific.bluesky.media[].type` | `string` | Kind of file. New values may be added; treat unknown values as other.<br>One of `image`, `video`, `audio`, `gif` |
| `platform_specific.bluesky.media[].url` | `string` (uri) or `null` | Direct file URL; null when the platform withholds it, or when the link would only work from SocialTap's network or with a login. Often signed and expiring: see expires_at. |
| `platform_specific.bluesky.media[].expires_at` | `string` (date-time) or `null` | When url stops working, RFC 3339 UTC, read from the platform's signed URL; null when unknown or when it does not expire. |
| `platform_specific.bluesky.media[].thumbnail_url` | `string` (uri) or `null` | Poster or preview image URL. |
| `platform_specific.bluesky.media[].width` | `integer` or `null` | Width in pixels. |
| `platform_specific.bluesky.media[].height` | `integer` or `null` | Height in pixels. |
| `platform_specific.bluesky.media[].duration_ms` | `integer` or `null` | Duration in milliseconds (video and audio only). |
| `platform_specific.bluesky.media[].alt_text` | `string` or `null` | Accessibility text provided by the author or platform. |
| `platform_specific.bluesky.link_card` | `object` or `null` | The link preview card the reply shows; null when none. |
| `platform_specific.bluesky.link_card.url` | `string` (uri) or `null` | The page it links to. |
| `platform_specific.bluesky.link_card.title` | `string` or `null` | The card's title. |
| `platform_specific.bluesky.link_card.description` | `string` or `null` | The card's description. |
| `platform_specific.bluesky.link_card.thumbnail_url` | `string` (uri) or `null` | The card's image. |
| `platform_specific.bluesky.quoted_post_id` | `string` or `null` | The at:// ID of the post this reply quotes; null when it quotes none. Stays set when the quoted post can't be shown. |
| `platform_specific.bluesky.quoted_post` | `object` or `null` | The post this reply quotes, as Bluesky embeds it; null when it quotes none, or when the quoted post was deleted, is blocked, was detached by its author, or is by an account shown only to signed-in people. |
| `platform_specific.bluesky.quoted_post.id` | `string` or `null` | Its at:// ID. |
| `platform_specific.bluesky.quoted_post.url` | `string` (uri) or `null` | Its URL. |
| `platform_specific.bluesky.quoted_post.text` | `string` or `null` | Its text. |
| `platform_specific.bluesky.quoted_post.published_at` | `string` (date-time) or `null` | When it went public, RFC 3339 UTC. |
| `platform_specific.bluesky.quoted_post.author` | `object` | Its author. |
| `platform_specific.bluesky.quoted_post.author.id` | `string` or `null` | Platform-native account ID; null when only the handle is known. |
| `platform_specific.bluesky.quoted_post.author.username` | `string` or `null` | Handle without the @; null when the account has none. |
| `platform_specific.bluesky.quoted_post.author.display_name` | `string` or `null` | Display name shown on the profile. |
| `platform_specific.bluesky.quoted_post.author.url` | `string` (uri) or `null` | Canonical profile URL. |
| `platform_specific.bluesky.quoted_post.author.avatar_url` | `string` (uri) or `null` | Profile picture URL. Platform CDN URLs can expire within hours. |
| `platform_specific.bluesky.quoted_post.author.is_verified` | `boolean` or `null` | Platform verification badge; null where the platform has no badge. |
| `platform_specific.bluesky.quoted_post.media` | `object[]` | Its images and video; \[\] when none. |
| `platform_specific.bluesky.quoted_post.media[].type` | `string` | Kind of file. New values may be added; treat unknown values as other.<br>One of `image`, `video`, `audio`, `gif` |
| `platform_specific.bluesky.quoted_post.media[].url` | `string` (uri) or `null` | Direct file URL; null when the platform withholds it, or when the link would only work from SocialTap's network or with a login. Often signed and expiring: see expires_at. |
| `platform_specific.bluesky.quoted_post.media[].expires_at` | `string` (date-time) or `null` | When url stops working, RFC 3339 UTC, read from the platform's signed URL; null when unknown or when it does not expire. |
| `platform_specific.bluesky.quoted_post.media[].thumbnail_url` | `string` (uri) or `null` | Poster or preview image URL. |
| `platform_specific.bluesky.quoted_post.media[].width` | `integer` or `null` | Width in pixels. |
| `platform_specific.bluesky.quoted_post.media[].height` | `integer` or `null` | Height in pixels. |
| `platform_specific.bluesky.quoted_post.media[].duration_ms` | `integer` or `null` | Duration in milliseconds (video and audio only). |
| `platform_specific.bluesky.quoted_post.media[].alt_text` | `string` or `null` | Accessibility text provided by the author or platform. |
| `platform_specific.bluesky.quoted_post.metrics` | `object` | Its own counts at fetch time. |
| `platform_specific.bluesky.quoted_post.metrics.view_count` | `integer` or `null` | Views or plays. |
| `platform_specific.bluesky.quoted_post.metrics.like_count` | `integer` or `null` | Likes, hearts, total reactions or upvotes; never negative. Null when hidden by the owner. |
| `platform_specific.bluesky.quoted_post.metrics.comment_count` | `integer` or `null` | Comments and replies. |
| `platform_specific.bluesky.quoted_post.metrics.share_count` | `integer` or `null` | Shares or sends (not reposts). |
| `platform_specific.bluesky.quoted_post.metrics.repost_count` | `integer` or `null` | Reposts, retweets or reshares. |
| `platform_specific.bluesky.quoted_post.metrics.quote_count` | `integer` or `null` | Quote posts. |
| `platform_specific.bluesky.quoted_post.metrics.save_count` | `integer` or `null` | Saves, bookmarks or favorites. |
| `platform_specific.bluesky.embedded_record_uri` | `string` or `null` | The at:// URI of a custom feed, list or starter pack the reply embeds; null when it embeds none. |
| `platform_specific.bluesky.bridged_from_url` | `string` (uri) or `null` | The link Bridgy Fed records for a reply it brought to Bluesky from the fediverse or the web, usually where it was first published; null when it was written on Bluesky. |
| `platform_specific.snapchat` | `object` or `null` | Snapchat's own comment fields. |
| `platform_specific.snapchat.author_user_id` | `string` or `null` | The commenter's user ID, the same as platform_specific.snapchat.user_id of their snapchat.profile. It stays when they replace their public profile, which changes author.id; null when Snapchat names no account for the comment. |
| `approximate_fields` | `string[]` | JSON paths of values rounded by the platform or parsed from display text. A list path (external_links) means the list may be incomplete. \[\] when all exact. |
| `unknown_fields` | `string[]` | JSON paths of lists whose \[\] means unknown rather than none (a source that cannot see them); null already means unknown for every other field. \[\] when every list is known. |

## Item errors

Besides the [request-level errors](https://socialtap.dev/docs/errors/index.md) every endpoint can return, comment endpoints return:

| Code | HTTP | Retry | Meaning | What to do |
| --- | --- | --- | --- | --- |
| `not_found` | 404 | No | The item does not exist or was deleted. On GET /v1/requests/{id}/response: the response was not kept (details.reason says why). | Check the link or ID. Do not retry. |
| `private_or_unavailable` | 403 | No | The item exists but is not public: it is private, age- or region-restricted, or needs a login to view. It shares 403 with forbidden (which is about the key), so branch on the code. | Only public items can be fetched. Do not retry. |

---

[HTML version](https://socialtap.dev/resources/comment/) · [Docs index for AI agents](https://socialtap.dev/llms.txt) · [All docs in one file](https://socialtap.dev/llms-full.txt)
