GET/social-inbox/conversations

Lists comment conversations across your connected accounts, newest activity first. Each row carries the server-computed reply capability, unread count, and triage state.

https://api.postfa.st/Auth: pf-api-keyRate limit: 300 requests per hour

What the Social Inbox covers

The Social Inbox is a comments inbox: comments left on your workspace's own published posts, on TikTok, Instagram, Facebook Pages, and Threads.

Comments arrive from the moment the account is connected onward and usually show up within seconds of being posted. Comments made before that are not imported, so an account you just connected starts with an empty list.

Facebook and Threads accounts connected before the Social Inbox launched need a single reconnect in the app before their comments start arriving.

Reply capability is server-computed

canReply, maxReplyLength, maxPrivateReplyLengthBytes, and disabledReason are computed per conversation by PostFast. Gate your UI and your validation on those fields rather than on hardcoded platform rules, so your integration keeps working when a platform changes its limits.

For context, public reply caps are currently 150 characters on TikTok, 2,200 on Instagram, 8,000 on Facebook, and 500 on Threads. maxReplyLength is the authoritative value.

Pagination

Request page=0 for the first page. The response reports pageInfo.page: 1 for that request, because pageInfo.page is a 1-based display number while the query parameter is 0-based.

limit is capped at 50. Use pageInfo.hasNextPage to decide whether to fetch another page.

Query parameters

pageintegeroptionaldefault 0

Page number (0-based indexing).

limitintegeroptionaldefault 20

Number of items per page (min 1, max 50).

platformsstringoptional

Comma-separated platform values, e.g. INSTAGRAM,TIKTOK.

TIKTOKINSTAGRAMFACEBOOKTHREADS
socialMediaIdsstringoptional

Comma-separated connected-account UUIDs, to scope the list to specific accounts.

statusesstringoptional

Comma-separated triage states.

OPENSNOOZEDCLOSED
unreadOnlybooleanoptional

When true, returns only conversations with unread comments.

assignedToUserIdstring (UUID)optional

Returns only conversations assigned to that workspace member.

Error codes

`message`Meaning
inbox.readForbiddenThe API key is not allowed to read the inbox.
inbox.replyForbiddenThe API key is not allowed to send replies.
inbox.moderateForbiddenThe API key is not allowed to hide, unhide, or delete comments.
inbox.conversationNotFoundNo conversation with that id in this workspace.
inbox.itemNotFoundNo comment item with that id in this workspace.
inbox.accountNotFoundThe conversation's connected account is gone.
inbox.replyEmptytext was empty.
inbox.replyTooLongtext exceeded the conversation's maxReplyLength.
inbox.replyNotSupportedThis conversation cannot take a public reply.
inbox.replyNotSupportedOnPlatformPublic replies are unavailable on this platform.
inbox.replyInProgressA reply to this comment is already being sent.
inbox.replyFailedThe platform rejected the reply.
inbox.rateLimitedThe platform rate-limited the action. Retry later.
inbox.privateReplyNotSupportedThis comment is not eligible for a private reply.
inbox.privateReplyWindowExpiredMore than 7 days have passed since the comment.
inbox.privateReplyAlreadySentA private reply was already sent for this comment.
inbox.privateReplyFailedThe platform rejected the private reply.
inbox.hideNotSupportedHiding is unavailable for this comment.
inbox.deleteNotSupportedDeleting is unavailable for this comment (Threads).
inbox.assigneeNotMemberassigneeUserId is not a member of this workspace.
inbox.unsupportedActionThe requested action is not recognized.

Errors come back as { "statusCode": <number>, "message": "<code>" }. These codes are stable, so match on message rather than parsing prose. A 429 raised by PostFast's own throttles returns { "statusCode": 429, "message": "Too many requests. Please try again later." } instead of an inbox.* code.

Response

200 OK A paginated envelope of conversations, ordered by most recent activity first.

dataConversation[]required

The conversations on this page.

idstring (UUID)required

Conversation id. Use it on the read, status, and assign routes.

socialMediaIdstring (UUID)required

The connected account the comments arrived on, as returned by /social-media/my-social-accounts.

platformstringrequired

Network the conversation belongs to.

TIKTOKINSTAGRAMFACEBOOKTHREADS
kindstringrequired

Conversation type. Always COMMENT_THREAD today.

externalConversationIdstringrequired

The platform's id for the post the thread hangs off.

contactIdstring (UUID) | nulloptional

PostFast contact record for the participant, when one exists.

socialPostIdstring (UUID) | nulloptional

Set when the post was published through PostFast, so you can join back to /social-posts. null for posts published elsewhere.

externalPostIdstring | nulloptional

The platform's own post id, when known.

statusstringrequired

Triage state, changed via the status route.

OPENSNOOZEDCLOSED
assignedToUserIdstring (UUID) | nulloptional

Workspace member the conversation is assigned to, or null.

lastItemAtISO 8601 | nulloptional

When the newest item in the thread arrived or was sent.

lastInboundAtISO 8601 | nulloptional

When the newest inbound comment arrived.

lastReadAtISO 8601 | nulloptional

When the conversation was last marked read.

unreadCountnumberrequired

Unread inbound comments in this conversation.

lastItemPreviewstring | nulloptional

Roughly 140-character snippet of the newest item.

participantUsernamestring | nulloptional

Latest commenter's username. May be null briefly after arrival.

participantDisplayNamestring | nulloptional

Latest commenter's display name, when the platform exposes it.

participantAvatarUrlstring | nulloptional

Latest commenter's avatar, when the platform exposes it.

windowStatestringrequired

Reply-window state. Always NOT_APPLICABLE for comment threads.

canReplybooleanrequired

Authoritative: whether a public reply can be sent in this conversation right now. Gate your UI on this, not on platform assumptions.

maxReplyLengthnumberrequired

Authoritative per-conversation character cap for a public reply. Validate against this value, not a hardcoded per-platform number.

maxPrivateReplyLengthBytesnumber | nulloptional

Byte cap for a private reply. 1000 on Instagram conversations, null everywhere else.

disabledReasonstring | nulloptional

Why replying is unavailable when canReply is false, as a stable code such as inbox.replyNotSupportedOnPlatform. null when replying is available.

postPreviewobject | nulloptional

Lightweight preview of the post the thread belongs to.

captionstringoptional

Post caption, when available.

thumbnailUrlstringoptional

Thumbnail image, when available.

permalinkstringoptional

Link to the post on the platform, when available.

totalCountnumberrequired

Total number of matching rows across all pages.

pageInfoobjectrequired

Pagination metadata.

hasNextPagebooleanrequired

Whether another page is available.

pagenumberrequired

1-based display number of the returned page. Requesting page=0 returns page: 1 here.

perPagenumberrequired

Page size actually applied.