Skip to content

Channels

Channels

A channel is one of your own senders, connected to OmniMessage by signing in with the provider or with its credentials. You send from channels and receive on them.

Bring your own channels#

OmniMessage does not rent you numbers or accounts. You connect senders that you own: a WhatsApp Business number, a Telegram bot, an SMS number, a Facebook Page, an Instagram or TikTok business account. Your brand, your number and your provider relationship stay yours.

The OmniMessage fee is charged per outbound message. Fees charged by the provider itself, such as WhatsApp conversation fees or carrier fees for SMS, remain between you and that provider and are not part of your OmniMessage balance.

Channel types#

TypeChannelIdentifierRecipient (to)Connect through
whatsappWhatsApp BusinessPhone number (E.164)Phone number (E.164)Console (Facebook login or credentials), API (credentials)
telegramTelegramBot username (read from Telegram)Chat IDConsole or API (bot token)
smsSMSPhone number (E.164)Phone number (E.164)Console or API (credentials)
sms_otpSMS OTPSender IDPhone number (E.164)Console or API (credentials)
messengerMessengerFacebook Page IDPage-scoped user IDConsole (Facebook login)
instagramInstagramInstagram account IDInstagram-scoped user IDConsole (Facebook login)
tiktokTikTokTikTok business IDTikTok conversation user IDConsole (TikTok login)

The channel object#

Channel
{
  "id": "ch_7Hq2mN5vB8cX1zL0pK3j",
  "object": "channel",
  "mode": "live",
  "type": "whatsapp",
  "name": "Support line",
  "identifier": "+971800123456",
  "status": "active",
  "connection_status": "connected",
  "capabilities": [
    "text",
    "attachments",
    "template",
    "button",
    "list",
    "cta_url",
    "location",
    "contacts",
    "flow",
    "product",
    "product_list",
    "catalog",
    "carousel",
    "location_request"
  ],
  "created_at": "2026-10-01T08:00:00.000Z"
}
FieldDescription
typeThe channel type. Decides the recipient format, the supported message types and the per-message price.
identifierThe sender identity on the channel. Outbound messages carry it as from. Unique per channel type.
statusactive or suspended. A suspended channel cannot send.
connection_statusState of the link to the provider. See below.
capabilitiesThe message types this channel accepts as type. Read it instead of hard-coding support.
modelive for channels you connected, test for the built-in sandbox channels.

Connect a channel#

In the console, open Channels, choose Connect channel and pick a type. The type decides how the sender is authorised:

ChannelIn the consoleWith an API key
WhatsApp BusinessContinue with Facebook: Meta Embedded Signup creates or selects the WhatsApp Business account and the number. A number that is already on the Cloud API can be connected with its IDs and a system user token instead.POST /v1/channels with the IDs and a system user token.
MessengerContinue with Facebook, then pick the Page.Not available.
InstagramContinue with Facebook, then pick the Page the Instagram professional account is linked to.Not available.
TikTokContinue with TikTok and approve access.Not available.
TelegramPaste the bot token. The bot username is read from Telegram.POST /v1/channels with the bot token.
SMSPaste the Twilio account SID, auth token and phone number SID.POST /v1/channels with the same values.
SMS OTPPaste the API key of the OTP route and the sender ID.POST /v1/channels with the same values.

Messenger, Instagram and TikTok are authorised by a person signing in to the provider and granting access in a pop-up window, so they cannot be created with an API key. The sign-in window is opened by the console; allow pop-ups for it if your browser blocks the window.

curl https://api.omnimessage.co/v1/channels \
  -H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "whatsapp",
    "name": "Support line",
    "identifier": "+971800123456",
    "credentials": {
      "wab_account_id": "104857600123456",
      "phone_number_id": "209715200654321",
      "access_token": "EAAG..."
    }
  }'
201 Created
{
  "id": "ch_7Hq2mN5vB8cX1zL0pK3j",
  "object": "channel",
  "mode": "live",
  "type": "whatsapp",
  "name": "Support line",
  "identifier": "+971800123456",
  "status": "active",
  "connection_status": "pending",
  "capabilities": [
    "text",
    "attachments",
    "template",
    "button",
    "list",
    "cta_url",
    "location",
    "contacts",
    "flow",
    "product",
    "product_list",
    "catalog",
    "carousel",
    "location_request"
  ],
  "created_at": "2026-10-01T08:00:00.000Z"
}
  • A new channel is pending and becomes connected when the provider confirms the link, usually within seconds. The console shows this while you wait.
  • Tokens, authorisation codes and credentials are passed to the delivery layer once. They are not stored by the API or returned by any endpoint.
  • An identifier can be connected once per channel type. A second attempt fails with 409 channel_identifier_taken.
  • If the provider refuses the credentials, the request fails with 422 upstream_rejected and the provider reason in message.
  • To renew an expired token or changed permissions, open the channel in the console and choose Reconnect. It repeats the same sign-in or credential step and keeps the channel ID.

Connection status#

connection_statusMeaningCan send
pendingThe channel was created and the provider has not confirmed the link yet.No
connectedThe link is healthy.Yes
reconnectingThe link dropped or a new authorisation was sent, and the provider has not confirmed it yet.No
disconnectedThe link is down, typically because a token expired or was revoked. Open the channel in the console and choose Reconnect.No
blockedThe provider blocked the sender. Resolve it with the provider.No

Sending on a channel that is not connected fails with 422 channel_not_connected and nothing is charged. Subscribe to channel.connected and channel.disconnected to follow changes without polling.

Capabilities#

Each channel type supports a set of message types. The support matrix shows the common ones; the channel object lists them all.

ChannelMessage types
WhatsApp Businesstext, attachments, template, button, list, cta_url, location, contacts, flow, product, product_list, catalog, carousel, location_request
Telegramtext, attachments, button, location, contacts, poll
SMStext, attachments
SMS OTPtext
Messengertext, attachments, button, carousel, product_list, receipt
Instagramtext, attachments, button, carousel, product_list
TikToktext, attachments, button

Sandbox channels#

In test mode you do not connect anything. Every account has a sandbox channel per type with the ID ch_test_<type>, for example ch_test_whatsapp. See Test mode.

Rename or delete#

PATCH /v1/channels/{id} changes the display name. DELETE /v1/channels/{id} disconnects the sender and removes the channel; messages already sent remain retrievable.

    Loading