Reply to Instagram DMs via API
Within 24 hours of the customer's last message.
Check whose 24-hour window is still open with GET /messaging-window — see Messaging window.
POST/v1/messagesmessages:sendThe API key needs the messages:send permission. Without it the call is refused with 403 insufficient_scope.Sign in to try Text
Request
curl -X POST "https://api.iotabot.com/v1/messages" \
-H "Authorization: Bearer $IOTABOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation_id": "6a4b9e21c3f1a2b3c4d5e6f7",
"text": "Yes, it comes in blue!"
}' \
-H "Idempotency-Key: order-1042-shipped"Response · 202
{
"data": {
"id": "6a4ba0f1c3f1a2b3c4d5e733",
"object": "message",
"status": "queued",
"channel": "instagram",
"conversation_id": "6a4b9e21c3f1a2b3c4d5e6f7",
"created_at": "2026-10-01T09:16:10.004Z"
}
}Errors
window_closedconversation_closedintegration_pausedprivate_reply_expiredprivate_reply_usedrecipient_opted_outunsupported_attachmentfile_already_usedattachments_too_largeapi_quota_exceededidempotency_key_reusedidempotency_in_progress
POST/v1/messagesmessages:sendThe API key needs the messages:send permission. Without it the call is refused with 403 insufficient_scope.Sign in to try With an image
Images, video and audio — no documents.
Request
curl -X POST "https://api.iotabot.com/v1/messages" \
-H "Authorization: Bearer $IOTABOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation_id": "6a4b9e21c3f1a2b3c4d5e6f7",
"text": "Here it is",
"attachments": [
{
"file_id": "6a4ba1c0c3f1a2b3c4d5e741"
}
]
}' \
-H "Idempotency-Key: order-1042-shipped"Response · 202
{
"data": {
"id": "6a4ba0f1c3f1a2b3c4d5e733",
"object": "message",
"status": "queued",
"channel": "instagram",
"conversation_id": "6a4b9e21c3f1a2b3c4d5e6f7",
"created_at": "2026-10-01T09:16:10.004Z"
}
}Errors
window_closedconversation_closedintegration_pausedprivate_reply_expiredprivate_reply_usedrecipient_opted_outunsupported_attachmentfile_already_usedattachments_too_largeapi_quota_exceededidempotency_key_reusedidempotency_in_progress