Send a message
Send text, one or more media attachments, or both to a conversation participant.
Send text, one or more media attachments, or both to a conversation participant. At least one of content or media_urls is required.
Async delivery: the request returns 202 Accepted immediately with a pending message. Final outcome arrives via the message.sent / message.failed webhook, or by polling GET /v1/conversations/:id/messages.
Scheduling: pass scheduled_at to deliver the message at a future time instead of immediately. The message is returned as pending with scheduled_at set, and the delivery webhook fires when it goes out.
Quick replies: pass instagram.quick_replies to show up to 13 buttons under the text for the contact to tap. A tap arrives as an inbound message whose content is the button's title and whose interaction.id is the button's id, on both the stored message and its message.received webhook.
Buttons: pass instagram.buttons to show up to 3 buttons under the text. A postback button is tapped like a quick reply and arrives the same way, with interaction.type set to button; a url button opens its link.
Replying to stories: Instagram has no way to reply to a story itself. When a contact replies to your story or mentions you in theirs, it arrives as an inbound message with story set, and it opens the 24-hour window like any other message. Pass that message's id as instagram.reply_to to answer it: the reply is shown quoting the contact's message. instagram.reply_to works with any delivered message in the conversation.
Free-form text messages are only allowed within 24 hours of the contact's last inbound message. Pass instagram.tag as HUMAN_AGENT to reply for up to 7 days after the contact's last message. The tag is enabled per organization on request - contact support; otherwise the request is rejected with 403. The window check is always synchronous, so you receive a 422 immediately - for a scheduled message it is applied to scheduled_at, so a send that would land outside the window is rejected up front.
Permissions: Requires conversations:send. Access is limited by the API key creator's current organization membership and stored key ceiling. See Organization permissions.
id*stringapplication/json- body
Send a text message, one or more media attachments, or both to a conversation participant
content?stringText body of the message. Either non-blank content or at least one media URL is required.
1 <= lengthinstagram?Instagram-specific message options.
media_urls?array<>Media to attach to the message. Either non-blank content or at least one media URL is required.
scheduled_at?stringISO 8601 timestamp to deliver the message at, instead of on submit. Must be in the future. The messaging window is checked against this time, so scheduling past the end of the contact's window is rejected with 422.
date-timeMessage accepted — delivery is in progress asynchronously
application/json- response
Message sent successfully
success*booleanmessage*A message within a conversation
curl -X POST 'https://api.outstand.so/v1/conversations/string/messages' \ -H 'Content-Type: application/json' \ -d '{}'{ "success": true, "message": { "id": "string", "conversationId": "string", "platformMessageId": "string", "direction": "inbound", "source": "api", "senderId": "string", "content": "string", "mediaUrls": [ "string" ], "quickReplies": [ { "title": "string", "id": "string" } ], "buttons": [ { "type": "postback", "title": "string", "id": "string" } ], "interaction": { "type": "quick_reply", "id": "string" }, "story": { "type": "reply", "id": "string", "url": "string" }, "replyTo": { "messageId": "string" }, "reaction": "string", "status": "pending", "error": "string", "scheduledAt": "2019-08-24T14:15:22Z", "platformSentAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z" }}