Channels

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"
}
FieldMeaning
sendTextCan send a text message at all
sendMediaCan attach a file (image, document, audio, video)
sendTemplatesCan send an approved WhatsApp template
sendInteractiveCan send buttons, lists or quick replies
quotedRepliesCan send a reply that quotes an earlier message
startConversationsCan send with to or contactId (a new or existing person) rather than only into an existing conversationId
broadcastCan be used for campaigns (bulk sends)
deliveryimmediate: 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.

ChannelkindStatusTextMediaTemplatesStart a conversationDelivery
WhatsApp Cloud APIwhatsapp_cloudLiveYesWhen enabledWhen enabledWith a template, when templates are enabledQueued when media is enabled, else immediate
WhatsApp Webwhatsapp_webLiveYesYesNoYesQueued
EmailemailLiveYesNoNoYesImmediate or queued
Web chatwebchatLiveYesNoNoNoImmediate
InstagraminstagramLiveYesNoNoNoImmediate or queued
MessengermessengerLiveYesNoNoNoImmediate or queued
SMSsmsComing soon
VoicevoiceComing 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_action with reason outside_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.

On this page