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.
pf-api-keyRate limit: 300 requests per hourWhat 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 0Page number (0-based indexing).
limitintegeroptionaldefault 20Number of items per page (min 1, max 50).
platformsstringoptionalComma-separated platform values, e.g. INSTAGRAM,TIKTOK.
TIKTOKINSTAGRAMFACEBOOKTHREADSsocialMediaIdsstringoptionalComma-separated connected-account UUIDs, to scope the list to specific accounts.
statusesstringoptionalComma-separated triage states.
OPENSNOOZEDCLOSEDunreadOnlybooleanoptionalWhen true, returns only conversations with unread comments.
assignedToUserIdstring (UUID)optionalReturns only conversations assigned to that workspace member.
Error codes
| `message` | Meaning |
|---|---|
inbox.readForbidden | The API key is not allowed to read the inbox. |
inbox.replyForbidden | The API key is not allowed to send replies. |
inbox.moderateForbidden | The API key is not allowed to hide, unhide, or delete comments. |
inbox.conversationNotFound | No conversation with that id in this workspace. |
inbox.itemNotFound | No comment item with that id in this workspace. |
inbox.accountNotFound | The conversation's connected account is gone. |
inbox.replyEmpty | text was empty. |
inbox.replyTooLong | text exceeded the conversation's maxReplyLength. |
inbox.replyNotSupported | This conversation cannot take a public reply. |
inbox.replyNotSupportedOnPlatform | Public replies are unavailable on this platform. |
inbox.replyInProgress | A reply to this comment is already being sent. |
inbox.replyFailed | The platform rejected the reply. |
inbox.rateLimited | The platform rate-limited the action. Retry later. |
inbox.privateReplyNotSupported | This comment is not eligible for a private reply. |
inbox.privateReplyWindowExpired | More than 7 days have passed since the comment. |
inbox.privateReplyAlreadySent | A private reply was already sent for this comment. |
inbox.privateReplyFailed | The platform rejected the private reply. |
inbox.hideNotSupported | Hiding is unavailable for this comment. |
inbox.deleteNotSupported | Deleting is unavailable for this comment (Threads). |
inbox.assigneeNotMember | assigneeUserId is not a member of this workspace. |
inbox.unsupportedAction | The 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[]requiredThe conversations on this page.
idstring (UUID)requiredConversation id. Use it on the read, status, and assign routes.
socialMediaIdstring (UUID)requiredThe connected account the comments arrived on, as returned by /social-media/my-social-accounts.
platformstringrequiredNetwork the conversation belongs to.
TIKTOKINSTAGRAMFACEBOOKTHREADSkindstringrequiredConversation type. Always COMMENT_THREAD today.
externalConversationIdstringrequiredThe platform's id for the post the thread hangs off.
contactIdstring (UUID) | nulloptionalPostFast contact record for the participant, when one exists.
socialPostIdstring (UUID) | nulloptionalSet when the post was published through PostFast, so you can join back to /social-posts. null for posts published elsewhere.
externalPostIdstring | nulloptionalThe platform's own post id, when known.
statusstringrequiredTriage state, changed via the status route.
OPENSNOOZEDCLOSEDassignedToUserIdstring (UUID) | nulloptionalWorkspace member the conversation is assigned to, or null.
lastItemAtISO 8601 | nulloptionalWhen the newest item in the thread arrived or was sent.
lastInboundAtISO 8601 | nulloptionalWhen the newest inbound comment arrived.
lastReadAtISO 8601 | nulloptionalWhen the conversation was last marked read.
unreadCountnumberrequiredUnread inbound comments in this conversation.
lastItemPreviewstring | nulloptionalRoughly 140-character snippet of the newest item.
participantUsernamestring | nulloptionalLatest commenter's username. May be null briefly after arrival.
participantDisplayNamestring | nulloptionalLatest commenter's display name, when the platform exposes it.
participantAvatarUrlstring | nulloptionalLatest commenter's avatar, when the platform exposes it.
windowStatestringrequiredReply-window state. Always NOT_APPLICABLE for comment threads.
canReplybooleanrequiredAuthoritative: whether a public reply can be sent in this conversation right now. Gate your UI on this, not on platform assumptions.
maxReplyLengthnumberrequiredAuthoritative per-conversation character cap for a public reply. Validate against this value, not a hardcoded per-platform number.
maxPrivateReplyLengthBytesnumber | nulloptionalByte cap for a private reply. 1000 on Instagram conversations, null everywhere else.
disabledReasonstring | nulloptionalWhy replying is unavailable when canReply is false, as a stable code such as inbox.replyNotSupportedOnPlatform. null when replying is available.
postPreviewobject | nulloptionalLightweight preview of the post the thread belongs to.
captionstringoptionalPost caption, when available.
thumbnailUrlstringoptionalThumbnail image, when available.
permalinkstringoptionalLink to the post on the platform, when available.
totalCountnumberrequiredTotal number of matching rows across all pages.
pageInfoobjectrequiredPagination metadata.
hasNextPagebooleanrequiredWhether another page is available.
pagenumberrequired1-based display number of the returned page. Requesting page=0 returns page: 1 here.
perPagenumberrequiredPage size actually applied.