Channels and capabilities
What each channel can do over the API, how to read a connection's live capabilities, and WhatsApp's 24-hour window.
A connection is one connected channel account: a WhatsApp number, an email inbox, a web chat widget, an Instagram account. You connect channels in the console (Channels); the API reads them and sends through them.
Channels are not interchangeable. WhatsApp only allows a free-text message inside a 24-hour window, Instagram cannot carry an attachment from Gauge yet, a web chat visitor cannot be messaged until they open the chat. Gauge does not hide those differences behind a send that quietly drops something. It tells you up front, and refuses clearly when you ask for something a channel cannot do.
Read a connection's capabilities
GET /v2/connections and GET /v2/connections/{id} return each connection's effective
capabilities: what it can do over the API right now, with your workspace's settings applied. This is
the source of truth. Check it instead of hard-coding a channel's abilities.
"capabilities": {
"sendText": true,
"sendMedia": false,
"sendTemplates": false,
"sendInteractive": false,
"quotedReplies": false,
"startConversations": true,
"broadcast": false,
"delivery": "immediate"
}| Field | Meaning |
|---|---|
sendText | Can send a text message at all |
sendMedia | Can attach a file (image, document, audio, video) |
sendTemplates | Can send an approved WhatsApp template |
sendInteractive | Can send buttons, lists or quick replies |
quotedReplies | Can send a reply that quotes an earlier message |
startConversations | Can send with to or contactId (a new or existing person) rather than only into an existing conversationId |
broadcast | Can be used for campaigns (bulk sends) |
delivery | immediate: sent during the request. queued: accepted, sent just after; follow message.status_updated. none: cannot send. |
flags lists the workspace settings the capabilities were computed from, and warning is set when
a channel carries a risk you must accept (WhatsApp Web).
Asking a connection for something its capabilities say it cannot do answers
422 unsupported_channel_action. Nothing is sent, and nothing is silently dropped.
At a glance
The typical capabilities of each channel. Some depend on features being enabled for your workspace,
so the connection's own capabilities always win.
| Channel | kind | Status | Text | Media | Templates | Start a conversation | Delivery |
|---|---|---|---|---|---|---|---|
| WhatsApp Cloud API | whatsapp_cloud | Live | Yes | When enabled | When enabled | With a template, when templates are enabled | Queued when media is enabled, else immediate |
| WhatsApp Web | whatsapp_web | Live | Yes | Yes | No | Yes | Queued |
email | Live | Yes | No | No | Yes | Immediate or queued | |
| Web chat | webchat | Live | Yes | No | No | No | Immediate |
instagram | Live | Yes | No | No | No | Immediate or queued | |
| Messenger | messenger | Live | Yes | No | No | No | Immediate or queued |
| SMS | sms | Coming soon | |||||
| Voice | voice | Coming soon |
Reading connections and sending through them (messaging endpoints) are both
Live. GET /v2/connections/{id} also returns limits: the reply window in hours
(sessionWindowHours), whether a template is required outside it, the WhatsApp Web warm-up
sendCaps, and the largest file it accepts (maxMediaBytes).
The 24-hour window and templates
WhatsApp (Cloud API) lets a business send free-form messages only within 24 hours of the customer's last message. This is WhatsApp's rule, not Gauge's, and it protects customers from unsolicited messages.
- Inside the window (the customer wrote in the last 24 hours): send any text, media or interactive message the connection supports.
- Outside the window: you can only send an approved message template, a pre-written
message Meta has reviewed, with placeholders for your values. A free-text send answers
422 unsupported_channel_actionwith reasonoutside_24h_window. - Each customer reply reopens the window for another 24 hours.
The window is not a field on the conversation; compute it from the conversation's lastInboundAt
and the connection's limits.sessionWindowHours, or just send and handle the 422.
Someone who has never written to you has no window at all, so on WhatsApp Cloud a template is
how you start a conversation. With templates enabled, the connection reports
startConversations: true: send a template with to (a phone number) or contactId, and Gauge
finds or creates the contact and the conversation, sends the template, and the customer's reply
lands in that same conversation. Free text to someone with no conversation answers 422 with
reason outside_24h_window. Templates are created and submitted for approval in the console
(Templates); the API lists them and sends them. See
Start a conversation with a template.
Instagram and Messenger have Meta's own reply window where it is enforced for your workspace
(limits.sessionWindowHours says so); a send outside it answers 422 with reason
outside_session_window, and there is no template to reopen it. The other channels have no
window, but each has its own reach limits, listed on its page.