Skip to main content
Comment import works for posts published through bundle.social and for posts returned by Post History Import. Use exactly one of postId or importedPostId.
With the Comments API you can:
  • import comments from a published post,
  • display comments as a real thread,
  • reply to imported comments on the original platform,
  • keep your comments list fresh after new activity.

Supported Platforms

Comment import is available for:
  • FACEBOOK
  • INSTAGRAM
  • LINKEDIN
  • YOUTUBE
  • TIKTOK
  • REDDIT
  • THREADS
  • MASTODON
  • BLUESKY
Comment creation is available for:
  • FACEBOOK
  • INSTAGRAM
  • LINKEDIN
  • YOUTUBE
  • TIKTOK
  • REDDIT
  • THREADS
  • MASTODON
  • DISCORD
  • SLACK
  • BLUESKY
Twitter / X is intentionally not supported in the Comments API. Pinterest and Google Business are not supported for comment creation or comment import.

Comment Text Limits


Before You Start

Use this quick checklist first:
  1. You already connected a social account to the team.
  2. The post was published through bundle.social or fetched through Post History Import.
  3. You have:
    • teamId
    • postId or importedPostId
    • socialAccountType
If one of these is missing, import will fail with validation error.

Flow of comments API

Think about import as a small background job:
  1. User clicks “Import comments”.
  2. Your app starts the import job on bundle.
  3. Your app checks status every 5/10 seconds.
  4. When completed, your app fetches comments and renders the thread.

Step 1: Start Import

Endpoint: POST /api/v1/comment/import
postId and importedPostId are mutually exclusive. Send postId for a post created in bundle.social, or importedPostId for a historical post returned by the import API.

Why Import Can Be Rejected

Import start can return validation errors if:
  • post does not belong to this team,
  • post is not published to selected platform yet,
  • this team has no connected account for that platform,
  • there is already an active import for this same post and platform.
If import is already running, you get 409.

Step 2: Track Progress

Endpoints:
  • GET /api/v1/comment/import?teamId=...&postId=...
  • GET /api/v1/comment/import?teamId=...&importedPostId=...
  • GET /api/v1/comment/import/:importId
Use these statuses for user-facing UI:

Step 3: Get Imported Comments

Endpoint: GET /api/v1/comment/import/comments Query params:
  • teamId (required)
  • exactly one of postId or importedPostId (required)
  • platform (optional)
  • socialAccountId (optional)
  • limit, offset
Example response:

What Exactly Gets Imported

Each imported comment includes:
  • externalId: unique platform comment ID.
  • externalParentId: parent comment ID on platform, or null for top-level.
  • externalPostId: platform post ID.
  • author metadata: authorName, authorExternalId, authorProfileUrl, authorAvatarUrl.
  • content and stats: text, likesCount, repliesCount, publishedAt.
Important detail:
  • the API returns a flat list,
  • your app rebuilds thread hierarchy using externalParentId.

How To Display Comments In Your App

Plain-Language Rule

If externalParentId is empty, this is top-level comment. If externalParentId points to another externalId, this is a reply.
  1. Create externalId -> comment map.
  2. Group comments by externalParentId.
  3. Start from root comments.
  4. Attach children recursively.
Sometimes platform APIs do not return full parent mapping for every nested reply. If parent is missing, treat this comment as root and still show it.

Replying To Imported Comments

To reply to imported comment, create normal comment with fetchedParentCommentId. Endpoint: POST /api/v1/comment Minimal body:

What Happens After You Send Reply

  1. API resolves correct platform and post from fetched parent.
  2. New comment is saved with SCHEDULED status.
  3. Queue publishes it to platform.
  4. Status becomes POSTED or ERROR.

Creating A Top-Level Comment

For first comments or top-level comments on a post published through bundle.social, provide the post, schedule fields, target platforms, and platform-specific comment text. Endpoint: POST /api/v1/comment
For internalParentCommentId, the reply is linked to a comment already created through bundle.social. For fetchedParentCommentId, the platform and post are inferred from the imported comment, so a minimal reply can use only teamId, fetchedParentCommentId, and text. For a top-level comment on a historical post, replace internalPostId with importedPostId. Do not send both fields.

List Created Comments

Endpoint: GET /api/v1/comment teamId is required. Optional filters include postId, importedPostId, status, q, platforms, orderBy, order, offset, and limit. Use this endpoint for comments created through bundle.social; use /comment/import/comments for comments fetched from a platform.

Actions On Fetched Comments

Endpoint: POST /api/v1/comment/import/comments/:commentId/action
Available actions depend on the platform and the permissions reported in platformData: Check platformData.canDelete, canHide, canLike, and canModerate before showing controls. The platform can still reject an action if the connected account does not own or moderate the target comment. For YouTube APPROVE or REJECT, optional banAuthor: true asks YouTube to ban the comment author as part of the moderation action.

Retry A Failed Comment

Endpoint: POST /api/v1/comment/:id/retry Use this for a comment whose status is ERROR. A successful retry returns the comment to the publishing queue. Comments in any other status return 400.

Limits Explained

Per Import Storage Limit (Per Post)

Import always runs, but stored comments are capped for each run. How this works in practice:
  • if platform has 900 comments and your cap is 200,
  • import completes successfully,
  • newest 200 are stored in this run.

Is There a Monthly Comment Import Quota?

No. Comment import does not use monthly counters. Limit is per run and per post.

Reply Text Limits By Platform


For global API rate limits, see Rate Limits.

Quick FAQ

”Why comments list is empty?”

Most common reasons:
  • post was not published to selected platform,
  • import still running,
  • no comments yet on that post.

”Why I see comment without parent?”

Because parent mapping from platform was not returned in this fetch window. Show as root and keep it visible.

”Do I need webhooks for comment import?”

No. Comment import is pull-based. You trigger it and then fetch results.

”Will you have webhooks for this?”

For live comment nortification? No, kinda not our limitation. For import status, yes in the future.