WhatsApp messaging capabilities
This page lists what an integration can send and receive on WhatsApp through Tyxter today, and what is not supported yet. Check it before designing a feature or asking support whether something exists. The request and response shapes live in the Messages API reference, the inbound shapes in the webhooks guide, and attachments in the media guide.
Send
Every send is POST /v1/messages with channel: "whatsapp", a sender, a recipient and a message whose type is text, template, media, interactive or flow. Free-form types (everything except template) are accepted only inside the 24-hour customer-service window that the recipient's own inbound message opens; outside it, send an approved template.
| What you want to send | Supported | How |
|---|---|---|
| Text | Yes | message: { "type": "text", "text": { "body": "…" } } |
| Image, document, audio, video, sticker | Yes | message: { "type": "media", "media": { "kind": "image", "link": "https://…", "caption": "…" } }; the source is exactly one of link, asset_id, inline, id or, for audio, a TTS source. caption applies to image, document and video |
| Voice note | Yes | media.kind: "audio" with voice: true and an OGG/Opus mono file |
| Approved template | Yes | message.type: "template"; required outside the customer-service window |
| Reply buttons and lists | Yes | message.type: "interactive" with interactive.type button or list |
| Native Pix order details | Yes | message.type: "interactive" with interactive.type: "order_details" |
| WhatsApp Flow | Yes | message.type: "flow", see the flows guide |
| Mark as read and show typing | Yes | POST /v1/messages/{message_id}/typing on the inbound message you are answering; not billed |
| Reaction emoji on a message | Yes | type: "reaction", reaction: { message_id: "<Tyxter inbound ID>", emoji: "👍" }; empty emoji removes it. Same conversation, target at most 30 days old, open 24-hour service window. Normal outbound billing; status stops at sent. |
| Reply quoting a specific message | Yes | Top-level reply_to: { message_id: "<Tyxter message ID>" } on any WhatsApp message type. The target must belong to the same environment and conversation |
| Location, contact card | Not yet | No outbound type |
| Message into a group | No | POST /v1/messages takes an individual recipient; see WhatsApp Business groups for the separate beta |
Receive
Inbound messages arrive as the message.received webhook, and every one can also be read with GET /v1/messages/{message_id}. content.type says which block carries the content.
| What the customer sends | Supported | What you get |
|---|---|---|
| Text | Yes | content.type: "text", content.text.body |
| Image, document, audio, video | Yes | content.type: "media" with media.kind, media.asset_id and media.download, the method and path that mint a five-minute download URL |
| Sticker | Yes | content.type: "media" with media.kind: "sticker" and mime_type: "image/webp"; download it like any other attachment and pass the WebP to your own vision model. Tyxter does not describe images |
| Voice note or audio | Yes | media.kind: "audio", with optional media.voice; speech-to-text is an opt-in call, POST /v1/messages/{message_id}/transcription |
| Button or list reply, template quick reply | Yes | content.type: "interactive", the selection under content.interactive |
| Reaction to a message in the conversation | Yes | Yours or the customer's own, as in WhatsApp. message.reaction_received preserves the target snapshot and adds data.reaction: { emoji, removed, from, reacted_message_id }. Sandbox inbound simulation supports the same shape. |
| Reply quoting an earlier message, forward | Yes | content.context carries reply_to: { message_id, provider_message_id } (or null), forwarded and frequently_forwarded. An unresolved target has message_id: null. Detail and include=payload list reads expose top-level context |
| Location, contact card, order, system notice | Partly | content.type: "unknown" with unknown.provider_type; read the raw provider envelope with GET /v1/messages/{message_id} |
| Video note, poll, some view-once content | No | content.type: "unsupported": Meta does not deliver these (error 131051), so there is nothing to fetch; ask the customer for a regular video, audio or text |
Not supported yet
Outbound locations and contact cards are not yet supported. Instagram quoted replies are not supported. Tell us what you need with POST /v1/feedback.