API шлюза сообщений
Единый API для всех каналов сообщений
Отправляйте сообщения в WhatsApp Business, SMS, Telegram, Messenger, Instagram и TikTok через один REST-эндпоинт. Предоплата, оплата за каждое исходящее сообщение, вебхуки о доставке и тестовый режим.
- От
- 0,0003 $
- за исходящее сообщение
- За регистрацию
- 100
- бесплатных сообщений
- Обязательства
- Нет
- предоплата, без контракта
curl https://api.omnimessage.co/v1/messages \
-H "Authorization: Bearer om_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042-shipped" \
-d '{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": { "body": "Your order #1042 has shipped." },
"reference": "order-1042"
}'{
"id": "msg_2b1Xw9aQ3rT8yU0pL4kZ",
"object": "message",
"mode": "live",
"channel_id": "ch_7Hq2mN5vB8cX1zL0pK3j",
"channel_type": "whatsapp",
"direction": "outbound",
"to": "+971501234567",
"from": "+971800123456",
"type": "text",
"content": {
"text": { "body": "Your order #1042 has shipped." }
},
"status": "queued",
"error": null,
"reference": "order-1042",
"metadata": {},
"billing": {
"source": "wallet",
"amount_micros": 1000,
"package_grant_id": null,
"refunded": false
},
"created_at": "2026-10-05T09:30:00.000Z",
"sent_at": null,
"delivered_at": null,
"read_at": null,
"failed_at": null
}Каналы
Семь типов каналов, один формат запроса
Подключайте отправителей, которые у вас уже есть. Каждый становится идентификатором канала, который вы передаёте на тот же эндпоинт, и каждый возвращает одинаковые статусы.
- 0,001 $WhatsApp BusinessШаблоны, интерактивные сообщения и медиа с вашего собственного номера Cloud API.Текст · Вложения · Шаблон · Кнопки ответа · Список · URL-кнопка · Геолокация · Контакты
- 0,0005 $SMSТекстовые и мультимедийные сообщения с вашего собственного номера Twilio.Текст · Вложения
- 0,0005 $SMS OTPИсключительно текстовый маршрут для одноразовых кодов.Текст
- 0,0003 $TelegramСообщения от бота с кнопками, опросами, геолокацией и медиа.Текст · Вложения · Кнопки ответа · Геолокация · Контакты · Опрос
- 0,0005 $MessengerПереписка с людьми, которые пишут на вашу Страницу Facebook.Текст · Вложения · Кнопки ответа
- 0,0005 $InstagramЛичные сообщения для профессионального аккаунта Instagram.Текст · Вложения · Кнопки ответа
- 0,0005 $TikTokЛичные сообщения для бизнес-аккаунта TikTok.Текст · Вложения · Кнопки ответа
- Подключайте собственные каналыВаши номера и боты остаются вашимиЧто нужно для каждого канала
Как это работает
От регистрации до доставленного сообщения за четыре шага
Никаких звонков с отделом продаж и минимальных обязательств. Первый вызов API в тестовом режиме можно сделать через минуту после создания аккаунта.
- Шаг 01
Создайте аккаунт
Зарегистрируйтесь, подтвердите электронную почту и создайте API-ключ в консоли. Тестовые ключи работают сразу, ещё до подключения каналов.
- Шаг 02
Подключите канал
Войдите через Facebook или TikTok в консоли, чтобы подключить номер WhatsApp, Страницу или бизнес-аккаунт. Бота Telegram или номер Twilio добавьте с помощью их учётных данных — в консоли или запросом
POST /v1/channels. - Шаг 03
Отправляйте через один эндпоинт
POST /v1/messagesпринимает идентификатор канала, получателя и типизированный объект с содержимым. Формат запроса одинаков для всех каналов. - Шаг 04
Отслеживайте каждую доставку
Подписанные вебхуки сообщают о статусах «отправлено», «доставлено», «прочитано» и «ошибка». Та же история доступна в консоли и по запросу
GET /v1/messages.
Типы сообщений
Что отправляете, то и видит получатель
У каждого сообщения есть тип и объект с содержимым под ключом этого типа. Выберите тип, чтобы увидеть тело запроса рядом с сообщением, которое он создаёт.
{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": {
"body": "Ваш заказ #1042 отправлен. Отследить его можно здесь: https://example.com/t/1042",
"preview_url": true
},
"reference": "order-1042"
}Обычный текст, который принимают все типы каналов. Установите preview_url, чтобы канал показал предпросмотр ссылки.
КаналыWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram и TikTok
Консоль
Консоль для всего, что не является кодом
Создавайте ключи, подключайте каналы, ищите в журнале сообщений, повторяйте доставки вебхуков и управляйте оплатой. Всё, что показывает консоль, доступно и через API.
Цены
Платите за каждое сообщение или покупайте сообщения оптом
Пополните предоплаченный кошелёк на сумму от 10 $ и платите за каждое сообщение по цене соответствующего канала или купите пакет кредитов сообщений для больших объёмов на самых дорогих каналах.
10 тыс. сообщений
8 $
0,0008 $ за сообщение
- Исходящих сообщений: 10 000
- Действует 3 месяца с момента покупки
- Действует для всех типов каналов
100 тыс. сообщений
Рекомендуем60 $
0,0006 $ за сообщение
- Исходящих сообщений: 100 000
- Действует 6 месяцев с момента покупки
- Действует для всех типов каналов
1 млн сообщений
400 $
0,0004 $ за сообщение
- Исходящих сообщений: 1 000 000
- Действует 12 месяцев с момента покупки
- Действует для всех типов каналов
Оплата по факту
| Канал | За сообщение |
|---|---|
| WhatsApp Business | 0,001 $ |
| SMS | 0,0005 $ |
| SMS OTP | 0,0005 $ |
| Telegram | 0,0003 $ |
| Messenger | 0,0005 $ |
| 0,0005 $ | |
| TikTok | 0,0005 $ |
Что входит в цену
- ОплачиваетсяИсходящие сообщения, принятые API, — в момент принятия.
- БесплатноВходящие сообщения, сообщения в тестовом режиме, вебхуки и консоль.
- ВозвращаетсяЛюбое сообщение, завершившееся ошибкой, — в тот пакет или кошелёк, из которого оно было оплачено.
- ОтдельноПлата, которую Meta, операторы связи или другие провайдеры взимают за сам канал.
Удобство для разработчиков
Интегрируйте один раз — и больше не возвращайтесь
Подписанные вебхуки, безопасные повторные запросы, песочница, которая ведёт себя как продакшен, и ошибки, по которым можно ветвить логику.
Вебхуки, которые можно проверить
Каждая доставка подписана с помощью HMAC-SHA256 от временной метки и сырого тела запроса; подпись передаётся в заголовке OmniMessage-Signature. Верните любой ответ 2xx в течение 10 секунд. Неудачные доставки повторяются восемь раз с интервалом, растущим от 30 секунд до 24 часов.
import { createHmac, timingSafeEqual } from 'node:crypto';
// header is "t=<unix seconds>,v1=<hex hmac-sha256>"
export function verifySignature(rawBody, header, secret) {
const parts = header.split(',').map((part) => part.split('='));
const { t, v1 = '' } = Object.fromEntries(parts);
const expected = createHmac('sha256', secret)
.update(`${t}.${rawBody}`)
.digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
const matches =
v1.length === expected.length &&
timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
return fresh && matches;
}{
"id": "evt_8Kd2pQ7wN4xB1zR6mT3c",
"object": "event",
"type": "message.delivered",
"mode": "live",
"created_at": "2026-10-05T09:30:02.900Z",
"data": {
"object": {
"id": "msg_2b1Xw9aQ3rT8yU0pL4kZ",
"object": "message",
"status": "delivered",
"reference": "order-1042",
"delivered_at": "2026-10-05T09:30:02.871Z"
}
}
}Тестовый режим, который ничего не стоит
Тестовые ключи работают со встроенными каналами-песочницами, поэтому подключать ничего не нужно. Последние цифры получателя определяют имитируемый результат, а ваши вебхуки срабатывают так же, как в продакшене.
curl https://api.omnimessage.co/v1/messages \
-H "Authorization: Bearer om_test_..." \
-H "Content-Type: application/json" \
-d '{
"channel": "ch_test_whatsapp",
"to": "+971501230002",
"type": "text",
"text": { "body": "Hello from the sandbox" }
}'Ошибки с типом и кодом
У каждого ответа, отличного от 2xx, одинаковое тело: type — класс ошибки, стабильный code для ветвления логики, параметр param, вызвавший ошибку (если он есть), и request_id для обращения в поддержку.
{
"error": {
"type": "billing_error",
"code": "insufficient_balance",
"message": "Not enough wallet balance or package credits.",
"request_id": "req_5Vn1cH8jL3qW6yD9sF2k",
"doc_url": "https://omnimessage.co/docs/errors#insufficient_balance"
}
}Идемпотентные POST-запросы
Добавьте заголовок
Idempotency-Key, и повторный запрос в течение 24 часов вернёт сохранённый ответ сIdempotent-Replayed: true— без повторной отправки и списания.Предсказуемые лимиты
100 запросов в секунду на ключ для
POST /v1/messagesи 20 — для остальных эндпоинтов. Каждый ответ содержитRateLimit-Remaining, а ответ 429 —Retry-After.Пакетная отправка
POST /v1/messages/batchпринимает до 100 сообщений. Каждый элемент принимается, отклоняется и оплачивается отдельно, а ответ 207 сообщает результаты по индексам.Ключи с ограниченными разрешениями
Выдавайте каждому ключу только нужные разрешения, например
messages:writeилиbilling:read, и ограничивайте его списком разрешённых IP-адресов.
Вопросы
Прежде чем интегрировать
Здесь короткие ответы. Подробные — в документации.
Нужен ли мне собственный номер WhatsApp, бот или номер для SMS?
Да. OmniMessage — шлюз, к которому вы подключаете собственные каналы: свой номер WhatsApp Cloud API, бота Telegram, номер Twilio или аккаунт в соцсети — и сохраняете право владения ими. На странице каналов описано, что нужно для каждого типа.
За что именно я плачу?
Одно списание за каждое исходящее сообщение, принятое API: кредит пакета, если он у вас есть, а если нет — цена сообщения для этого типа канала из кошелька. Входящие сообщения и сообщения в тестовом режиме бесплатны, а средства за сообщение, завершившееся ошибкой, возвращаются автоматически.
Входит ли в цену плата Meta, операторов связи или провайдеров?
Нет. Плата за шлюз покрывает API, отслеживание доставки, вебхуки и консоль. Плата, которую Meta, Twilio или другой провайдер взимает за сам канал, остаётся между вами и этим провайдером.
Как тестировать, не отправляя настоящих сообщений?
Используйте ключ, который начинается с om_test_. В каждом аккаунте есть канал-песочница для каждого типа, например ch_test_whatsapp. Ничего не доставляется и не оплачивается, а статусы имитируются: для получателя, который оканчивается на 0000, сообщение завершается ошибкой, на 0001 — остаётся отправленным, на 0002 — ещё и прочитывается, а в остальных случаях доставляется примерно за две секунды.
Что будет, когда баланс закончится?
API ответит 402 insufficient_balance и ничего не поставит в очередь, так что задолженности задним числом у вас не возникнет. Можно подписаться на событие balance.low или включить автопополнение, чтобы кошелёк пополнялся, как только баланс опустится ниже выбранного вами порога.
Нужен ли SDK?
Нет. API — это JSON поверх HTTPS с аутентификацией по bearer-токену, поэтому подойдёт любой HTTP-клиент. В документации есть примеры для cURL, Node, Python и PHP.
Отправьте первое сообщение в тестовом режиме уже сегодня
Создайте аккаунт, скопируйте тестовый ключ и вызовите API ещё до подключения первого канала. Каждый новый аккаунт получает 100 бесплатных сообщений.