Skip to Content
API ReferenceInbox — Comments

Inbox — Comments

Retrieve and manage comments left on content published through VoxBurst. Comments are synced from each platform’s API and stored against the connected account and, where resolvable, the originating VoxBurst post.

Access status: pending approval. These endpoints are currently available to authenticated VoxBurst app sessions only. Public API key access is disabled pending VoxBurst API program approval. This documentation is provided for transparency.

Base URL

https://api.voxburst.io/v1/inbox/comments

List Comments

GET /v1/inbox/comments

Returns comments across all connected accounts in the active workspace, most recent first. Pagination is cursor-based.

Auth: Bearer token (user session)

Query Parameters

ParameterTypeDefaultDescription
platformstringFilter by platform (e.g. instagram, facebook). Case-insensitive
accountIdstringFilter by a specific connected account ID
sincestring (ISO 8601)Only return comments created on the platform at or after this timestamp
repliedbooleantrue returns only replied comments, false only unreplied. Omit for both
hiddenOnlybooleanfalseWhen true, returns only hidden comments. When omitted or false, hidden comments are excluded. See Hidden comments
limitinteger20Results per page (1–100)
cursorstringPass the nextCursor from the previous response to fetch the next page
curl "https://api.voxburst.io/v1/inbox/comments?platform=instagram&replied=false" \ -H "Authorization: Bearer eyJexample..."

Response (200)

{ "data": [ { "id": "cmt_example123", "accountId": "acc_example456", "postId": "pst_example789", "platformPostId": "17851234567890123", "platformCommentId": "17891234567890456", "platform": "instagram", "author": { "id": "9876543210", "username": "janedoe", "avatarUrl": "https://cdn.example.com/avatars/janedoe.jpg" }, "content": "This is exactly what I needed, thanks!", "createdAt": "2026-08-01T14:23:05.000Z", "platformCreatedAt": "2026-08-01T14:23:00.000Z", "isReply": false, "parentCommentId": null, "replied": false, "permalinkUrl": "https://www.instagram.com/p/ABC123/c/17891234567890456/", "account": { "id": "acc_example456", "username": "yourbrand", "displayName": "Your Brand", "avatarUrl": "https://cdn.example.com/avatars/yourbrand.jpg", "platform": "instagram" }, "post": { "id": "pst_example789", "content": "Exciting updates coming next week — stay tuned!", "status": "PUBLISHED", "scheduledFor": null, "publishedAt": "2026-08-01T12:00:00.000Z", "mediaUrl": "https://cdn.example.com/media/launch.jpg", "mediaContentType": "image/jpeg" } } ], "pagination": { "hasMore": true, "nextCursor": "cmt_example123" } }

Response Fields

FieldTypeDescription
idstringVoxBurst comment ID
accountIdstringID of the connected account the comment was left on
postIdstring | nullID of the originating VoxBurst post, when resolvable
platformPostIdstringPlatform ID of the post the comment belongs to
platformCommentIdstringPlatform ID of the comment itself
platformstringLowercased platform slug
authorobjectComment author — id (string), username (string), avatarUrl (string, optional)
contentstringText of the comment
createdAtstring (ISO 8601)When VoxBurst recorded the comment
platformCreatedAtstring (ISO 8601)When the comment was created on the platform
isReplybooleanWhether this comment is a reply to another comment
parentCommentIdstring | nullVoxBurst ID of the parent comment when isReply is true
repliedbooleanWhether the comment has been replied to or marked as replied
repliedAtstring (ISO 8601)Present only when replied is true
ourReplyIdstringPlatform ID of the reply VoxBurst posted. Present only when a reply was sent through the API
permalinkUrlstring | nullDirect public web permalink to the comment on the source platform. null where the platform does not expose one
accountobjectSummary of the connected account — id, username, displayName, avatarUrl, platform
postobjectSummary of the originating VoxBurst post. Omitted when postId is null. post.content is truncated to the first 100 characters

pagination.nextCursor is the id of the last item in data. It is only present when hasMore is true. Pass it back as cursor to page forward.


Account and Post Scoped Lists

GET /v1/accounts/:accountId/comments GET /v1/posts/:postId/comments

Return comments for a single connected account or a single VoxBurst post. Both accept the same query parameters as the workspace-wide list and return the same response shape.

hiddenOnly is accepted but not applied on these two endpoints. Passing hiddenOnly=true to the account-scoped or post-scoped list is silently ignored and the response still excludes hidden comments. To retrieve hidden comments, use GET /v1/inbox/comments?hiddenOnly=true and filter client-side on accountId or postId.

curl "https://api.voxburst.io/v1/accounts/acc_example456/comments" \ -H "Authorization: Bearer eyJexample..."

Error Responses

StatusCodeDescription
404NOT_FOUNDThe account or post does not exist in the active workspace

Get Comment Stats

GET /v1/inbox/comments/stats

Returns aggregate comment counts for the active workspace.

Auth: Bearer token (user session)

curl "https://api.voxburst.io/v1/inbox/comments/stats" \ -H "Authorization: Bearer eyJexample..."

Response (200)

{ "total": 128, "unreplied": 17, "repliedToday": 5, "byPlatform": { "INSTAGRAM": 92, "FACEBOOK": 36 } }

Stats counts include hidden comments. They are not affected by the default hidden-exclusion applied to the list endpoints.


Get a Comment

GET /v1/inbox/comments/:commentId

Returns a single comment by its VoxBurst ID, in the same shape as a list item.

Auth: Bearer token (user session)

Error Responses

StatusCodeDescription
404NOT_FOUNDComment does not exist or does not belong to the active workspace

Reply to a Comment

POST /v1/inbox/comments/:commentId/reply

Posts a reply to the comment on the source platform and marks the comment as replied.

Auth: Bearer token (user session)

Request Body

FieldTypeRequiredDescription
contentstringYesReply text, 1–10,000 characters
curl -X POST "https://api.voxburst.io/v1/inbox/comments/cmt_example123/reply" \ -H "Authorization: Bearer eyJexample..." \ -H "Content-Type: application/json" \ -d '{ "content": "Thanks for the kind words!" }'

Response (200)

{ "success": true, "replyId": "17891234567890999", "replyUrl": "https://www.instagram.com/p/ABC123/c/17891234567890999/" }

replyId and replyUrl are platform-supplied and may be absent on platforms that do not return them.

Error Responses

StatusCodeDescription
400VALIDATION_ERRORReply text failed validation, or the platform rejected the reply
404NOT_FOUNDComment does not exist or does not belong to the active workspace

Mark a Comment as Replied

POST /v1/inbox/comments/:commentId/mark-replied DELETE /v1/inbox/comments/:commentId/mark-replied

Mark a comment as replied without sending a reply, or undo that marking. Use this when the reply was handled outside VoxBurst.

Both return the updated comment. Neither call contacts the source platform.

curl -X POST "https://api.voxburst.io/v1/inbox/comments/cmt_example123/mark-replied" \ -H "Authorization: Bearer eyJexample..."

Error Responses

StatusCodeDescription
404NOT_FOUNDComment does not exist or does not belong to the active workspace

Hide a Comment

POST /v1/inbox/comments/:commentId/hide

Soft-hides a comment. The comment is retained in full and is not deleted from VoxBurst or from the source platform — it is only excluded from the default inbox list.

Auth: Bearer token (user session)

curl -X POST "https://api.voxburst.io/v1/inbox/comments/cmt_example123/hide" \ -H "Authorization: Bearer eyJexample..."

Unhide a Comment

DELETE /v1/inbox/comments/:commentId/hide

Reverses a hide, returning the comment to the default list.

curl -X DELETE "https://api.voxburst.io/v1/inbox/comments/cmt_example123/hide" \ -H "Authorization: Bearer eyJexample..."

Response (200) — both endpoints

The hide and unhide endpoints return the stored comment record, not the formatted comment object returned by the list and get endpoints. The shape differs: author fields are flat (authorId, authorUsername, authorAvatarUrl) rather than nested under author, platform is uppercase, timestamps are raw, and permalinkUrl, account, and post are absent. Do not feed this response into code written against the list response shape — re-fetch the comment via GET /v1/inbox/comments/:commentId if you need the formatted form.

{ "data": { "id": "cmt_example123", "accountId": "acc_example456", "postId": "pst_example789", "platformPostId": "17851234567890123", "platformCommentId": "17891234567890456", "platform": "INSTAGRAM", "authorId": "9876543210", "authorUsername": "janedoe", "authorAvatarUrl": "https://cdn.example.com/avatars/janedoe.jpg", "contactId": null, "content": "This is exactly what I needed, thanks!", "createdAt": "2026-08-01T14:23:05.000Z", "platformCreatedAt": "2026-08-01T14:23:00.000Z", "isReply": false, "parentCommentId": null, "replied": false, "repliedAt": null, "ourReplyId": null, "hidden": true, "hiddenAt": "2026-08-19T09:15:00.000Z" } }
FieldTypeDescription
hiddenbooleantrue after POST, false after DELETE
hiddenAtstring (ISO 8601) | nullWhen the comment was hidden. null after unhiding

Error Responses

StatusCodeDescription
404NOT_FOUNDComment does not exist or does not belong to the active workspace

Hidden comments

Hiding is a VoxBurst-side visibility control. It does not hide, delete, or otherwise modify the comment on the social platform.

The filter is binary — there is no value of hiddenOnly that returns hidden and non-hidden comments together:

hiddenOnlyReturns
omittedNon-hidden comments only
falseNon-hidden comments only
trueHidden comments only

Hidden comments are excluded from list responses by default, and total / hasMore reflect only the visible set. No tombstone or placeholder is returned for a hidden comment. An integration performing a full sync must issue two requests — one with hiddenOnly=true and one without — and merge the results. A single unqualified request will silently under-report.


Sync Comments

POST /v1/inbox/sync

Triggers a comment sync across every active connected account in the workspace.

Response (200)

{ "success": true, "totalSynced": 14, "totalErrors": 0, "accounts": [ { "accountId": "acc_example456", "platform": "INSTAGRAM", "synced": 14, "errors": [], "message": "Synced 14 comments" } ] }

POST /v1/accounts/:accountId/comments/sync

Syncs a single account. Returns { "synced": number, "errors": string[], "message": string }.

Sync is best-effort per account. A failure on one account does not fail the whole request — it is reported in that account’s errors array with totalErrors incremented.

Last updated on