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:
| Content | Facebook Messenger | |
|---|---|---|
| text | yes | yes |
| buttons | yes (up to 3, url or postback) | yes (up to 3, url or postback) |
| quick_replies | yes (up to 13) | yes (up to 13) |
| image_url | no — 400 | yes |
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
Request
- Base URL: https://api.sendseven.com
- URL: https://api.sendseven.com/api/v1/comments/{comment_id}/private-reply
- Auth: HTTP bearer
Path parameters
Meta's comment id (Instagram: numeric; Facebook: {post_id}_{comment_id}) — exactly as delivered by the webhook.
Request body
Response
Successful Response
Changes
No recorded changes to this operation across all 3 revisions of this API.