POST/social-inbox/items/{id}/reply
Replies publicly under a comment. Pass the comment item id, not the conversation id.
pf-api-keyRate limit: 7,200 requests per day, 720 per hour, 180 per minuteCheck the capability first
Read canReply and maxReplyLength from the conversation before you send. They are computed per conversation and are authoritative; validating against a hardcoded platform limit will eventually be wrong.
When canReply is false, disabledReason explains why as a stable code such as inbox.replyNotSupportedOnPlatform.
One reply in flight at a time
Sending a second reply to the same comment while the first is still being delivered returns inbox.replyInProgress. Wait for the first response instead of retrying immediately.
If you do need to retry after a network timeout, pass the same idempotencyKey so the reply cannot be posted twice.
Repeated identical replies are rejected
Sending the same reply text over and over across a workspace returns inbox.repetitiveReply. The check ignores case and spacing, counts only replies that were actually sent, and resets on a rolling 24-hour window.
Short courtesy replies such as Thanks! are exempt, so this only bites on the pattern platforms treat as spam: mass identical comments. If you are generating replies programmatically, vary the wording rather than retrying the same text.
A restricted account pauses replies for 24 hours
When Facebook or Instagram refuses a reply because it has restricted the account (a spam or abuse block), PostFast pauses replies from that account for 24 hours. The refused reply fails with inbox.replyPaused, and so does every further reply from that account until the pause ends, without reaching the platform. PostFast holds them because calls that reach a platform during its block can extend it.
description carries the platform's own reason and the time the pause ends, as an ISO 8601 UTC timestamp. If you send replies in bulk, stop sending from that account until then: every call fails the same way and still counts against your rate limit. Other accounts are unaffected, and hiding, deleting, and private replies keep working.
After the pause, the next reply shows whether the block has lifted; if the account is still restricted, a new 24-hour pause starts. Retrying a reply that already went out, with the same idempotencyKey, still returns the stored reply during a pause.
{
"statusCode": 400,
"message": "inbox.replyPaused",
"error": "BAD_REQUEST",
"description": "Facebook restricted this account, so replies from it are paused until 2026-08-07T09:16:05.000Z. Facebook said: You're temporarily restricted from commenting until 8 August."
}Path parameters
idstring (UUID)requiredThe comment item id, from /social-inbox/conversations/{id}/items. This is the item id, not the conversation id.
Request body
textstringrequiredThe reply body. Must fit the conversation's maxReplyLength, or the request fails with inbox.replyTooLong.
idempotencyKeystringoptionalOptional client-supplied key. A retry that carries the same key will not send a second time, so it is safe to retry after a network timeout.
Public reply character limits
| Platform | Characters |
|---|---|
| TikTok | 1,200 |
| 2,200 | |
| 8,000 | |
| Threads | 500 |
Shown for context only. Always validate against the conversation's maxReplyLength, which is the value the API enforces.
Response
201 Created The created OUTBOUND item. deliveryStatus is SENT once the platform accepted it.
idstring (UUID)requiredItem id. This is the value the reply, private-reply, and state routes take as their path parameter.
conversationIdstring (UUID)requiredConversation the item belongs to.
kindstringrequiredItem type. Always COMMENT today.
directionstringrequiredINBOUND for a comment you received, OUTBOUND for a reply you sent.
INBOUNDOUTBOUNDexternalItemIdstring | nulloptionalThe platform's comment id. null on an outbound reply that is still sending.
parentExternalItemIdstring | nulloptionalPlatform id of the parent comment, for threading.
authorUsernamestring | nulloptionalAuthor's username, when the platform exposes it.
textstring | nulloptionalComment or reply body.
statestringrequiredModeration state on the platform, changed via the state route.
VISIBLEHIDDENDELETEDdeliveryStatusstring | nulloptionalOutbound items only: how far the send got. null on inbound comments.
PENDINGSENTFAILEDauthoredByUserIdstring (UUID) | nulloptionalWorkspace member who sent an outbound item. null for replies sent with an API key, because keys are workspace-scoped rather than user-scoped.
platformCreatedAtISO 8601requiredWhen the platform recorded the comment.
createdAtISO 8601requiredWhen PostFast stored the item.
canPrivateReplyboolean | nulloptionalInstagram inbound comments: whether this comment is still eligible for /social-inbox/items/{id}/private-reply. null elsewhere.