Send message
Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp rich interactive messages (list, CTA URL, Flow) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
API key authentication - use your Zernio API key as a Bearer token
In: header
Path Parameters
The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
Social account ID
Message text
URL of the attachment to send (image, video, audio, or file). The URL must be publicly accessible. For binary file uploads, use multipart/form-data instead.
Type of attachment. Defaults to file if not specified.
"image" | "video" | "audio" | "file"Quick reply buttons. Mutually exclusive with buttons. Max 13 items.
items <= 13Action buttons. Mutually exclusive with quickReplies. Max 3 items.
items <= 3Generic template for carousels (Instagram/Facebook only, ignored on Telegram).
WhatsApp-only. Rich interactive payload for list messages, CTA URL
buttons, and Flow prompts. When set, takes priority over buttons
and quickReplies. The shape mirrors Meta's Cloud API interactive
object verbatim, so any payload that works against Meta directly
will also work here.
Use buttons / quickReplies for simple button replies
(WhatsApp's interactive.type: "button") — the abstraction caps at
3 buttons and handles the auto-conversion for you. Use this field
only for list, cta_url, or flow messages.
Tap events come back via the message.received webhook with
metadata.interactiveType set to list_reply or nfm_reply.
Telegram-native keyboard markup. Ignored on other platforms.
Facebook messaging type. Required when using messageTag.
"RESPONSE" | "UPDATE" | "MESSAGE_TAG"Facebook message tag for messaging outside 24h window. Requires messagingType MESSAGE_TAG. Instagram only supports HUMAN_AGENT.
"CONFIRMED_EVENT_UPDATE" | "POST_PURCHASE_UPDATE" | "ACCOUNT_UPDATE" | "HUMAN_AGENT"Platform message ID to quote-reply to. For WhatsApp, pass the wamid (available in message.platformMessageId from webhooks). For Telegram, pass the Telegram message ID.
Response Body
application/json
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.messages.sendInboxMessage({ path: { conversationId: 'conversation_abc123', }, body: { accountId: 'account_abc123', },});console.log(data);{
"success": true,
"data": {
"messageId": "string",
"conversationId": "string",
"sentAt": "2019-08-24T14:15:22Z",
"message": "string"
}
}{
"error": "string",
"code": "PLATFORM_LIMITATION"
}{
"error": "Unauthorized"
}Remove reaction DELETE
Remove a reaction from a message. Platform support: - Telegram: Send empty reaction array to clear - WhatsApp: Send empty emoji to remove - All others: Returns 400 (not supported)
Send typing indicator POST
Show a typing indicator in a conversation. Platform support: - Facebook Messenger: Shows "Page is typing..." for 20 seconds - Telegram: Shows "Bot is typing..." for 5 seconds - All others: Returns 200 but no-op (platform doesn't support it) Typing indicators are best-effort. The endpoint always returns 200 even if the platform call fails.