Comments

Send a private reply to a comment

Send a private reply: a direct message to the person who left a public comment on your Instagram post or Facebook Page post.

Pass Meta's own comment id in the path — the value your comment.received webhook delivers. The comment does not have to be stored in your workspace; if it is not, supply channel_id in the body.

What a private reply may contain

The two platforms differ, and this endpoint enforces the difference rather than letting a field be silently dropped:

ContentInstagramFacebook Messenger
textyesyes
buttonsyes (up to 3, url or postback)yes (up to 3, url or postback)
quick_repliesyes (up to 13)yes (up to 13)
image_urlno — 400yes

Buttons and quick replies are supported on both platforms — verified on live accounts: they render for the recipient and taps arrive back as inbound messages.

Images on Instagram are not accepted at all. On either platform, content the private reply cannot carry belongs in a follow-up message: once the recipient answers, the standard 24-hour messaging window opens and the normal send API accepts buttons and media.

Buttons

Each button is one of two kinds:

  • URL button — {"type": "url", "title": "Shop now", "url": "https://…"}. Opens the link. Absolute https only. Nothing comes back to you.
  • Postback button — {"type": "postback", "title": "Get the code", …}. Sends a value back to you when tapped, arriving as meta.button_id on the resulting inbound message. Either:
    • "action": "start_flow", "flow_id": "…" — the tap starts that flow for the person who tapped, or
    • "payload": "your-own-value" — an opaque value you match yourself.

A start_flow button may target any published flow except one whose trigger is "Comment received": that trigger is reserved for the first message, and this comment's single allowed private reply was already spent on the message carrying the button.

Rules Meta enforces

  • One private reply per comment, ever. A second attempt returns 409.
  • 7-day window from when the comment was created. After that, 410.
  • Not available on ad comments (Facebook). This is invisible until you send, so it surfaces as 422.

Billing

A private reply is a real Instagram/Messenger direct message and is billed exactly like any other outbound message on that channel.

🔐 Required Scopes: messages:create

post/api/v1/comments/{comment_id}/private-reply

Request

  • Base URL: https://api.sendseven.com
  • URL: https://api.sendseven.com/api/v1/comments/{comment_id}/private-reply
  • Auth: HTTP bearer

Path parameters

comment_idstring required

Meta's comment id (Instagram: numeric; Facebook: {post_id}_{comment_id}) — exactly as delivered by the webhook.

Request body

textstring required

The message body — or the button template's body when buttons is set.

channel_idstring nullable

The Instagram or Facebook Messenger channel whose post was commented on. Optional when the comment is already stored in your workspace (the stored channel wins); required otherwise — for example when you received the comment id from a comment.received webhook before it was persisted.

image_urlstring nullable

Facebook Messenger only. Publicly reachable image URL sent as an attachment. Rejected with 400 on Instagram. Cannot be combined with buttons.

Response

Successful Response

comment_idstring required

Meta's comment id this reply answered.

channel_idstring required

Channel the reply was sent from.

platformstring required

instagram or messenger.

statusstring

Always sent — this endpoint sends synchronously.

message_idstring nullable

Id of the messages row created for this reply. Null in the rare case where Meta accepted the reply but the commenter could not be resolved to a contact; the reply was still delivered.

conversation_idstring nullable

Conversation the reply was filed into.

contact_idstring nullable

The commenter, as a contact in your workspace.

external_idstring nullable

Meta's message id for the delivered reply.

recipient_idstring nullable

The commenter's platform-scoped id (IGSID / PSID), as returned by Meta. For a comment you had not stored, this is the first time it becomes known.

social_comment_idstring nullable

Id of the stored comment record, when the comment was persisted in your workspace.

statestring nullable

The stored comment's new reply state (replied), when persisted.

sent_atstring date-time nullable

When the reply was sent.

Changes

No recorded changes to this operation across all 3 revisions of this API.