API bramki wiadomości
Jedno API do wszystkich kanałów komunikacji
Wysyłaj wiadomości przez WhatsApp Business, SMS, Telegram, Messenger, Instagram i TikTok za pomocą jednego endpointu REST. Przedpłata, rozliczenie za każdą wiadomość wychodzącą, webhooki dostarczenia i tryb testowy.
- Od
- 0,0003 $
- za wiadomość wychodzącą
- Na start
- 100
- bezpłatnych wiadomości
- Zobowiązanie
- Brak
- przedpłata, bez umowy
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
}Kanały
Siedem typów kanałów, jeden kształt żądania
Podłącz nadawców, którzy już należą do Ciebie. Każdy z nich staje się identyfikatorem kanału przekazywanym do tego samego endpointu i każdy zwraca te same statusy.
- 0,001 $WhatsApp BusinessSzablony, wiadomości interaktywne i multimedia na Twoim własnym numerze Cloud API.Tekst · Załączniki · Szablon · Przyciski odpowiedzi · Lista · Przycisk URL · Lokalizacja · Kontakty
- 0,0005 $SMSWiadomości tekstowe i multimedialne z Twojego własnego numeru Twilio.Tekst · Załączniki
- 0,0005 $SMS OTPTrasa wyłącznie tekstowa dla kodów jednorazowych.Tekst
- 0,0003 $TelegramWiadomości od bota z przyciskami, ankietami, lokalizacjami i multimediami.Tekst · Załączniki · Przyciski odpowiedzi · Lokalizacja · Kontakty · Ankieta
- 0,0005 $MessengerRozmowy z osobami, które piszą do Twojej strony na Facebooku.Tekst · Załączniki · Przyciski odpowiedzi
- 0,0005 $InstagramWiadomości prywatne dla profesjonalnego konta na Instagramie.Tekst · Załączniki · Przyciski odpowiedzi
- 0,0005 $TikTokWiadomości prywatne dla konta firmowego na TikToku.Tekst · Załączniki · Przyciski odpowiedzi
- Podłącz własny kanałTwoje numery i boty pozostają TwojeSprawdź, czego wymaga każdy kanał
Jak to działa
Od rejestracji do dostarczonej wiadomości w czterech krokach
Bez rozmowy z handlowcem i bez minimalnego zobowiązania. Pierwsze wywołanie API w trybie testowym wykonasz minutę po założeniu konta.
- Krok 01
Załóż konto
Zarejestruj się, potwierdź adres e-mail i utwórz klucz API w konsoli. Klucze testowe działają od razu, zanim podłączysz jakikolwiek kanał.
- Krok 02
Podłącz kanał
Zaloguj się w konsoli przez Facebooka lub TikToka, aby podłączyć numer WhatsApp, stronę albo konto firmowe. Bota Telegram lub numer Twilio dodasz, podając dane uwierzytelniające w konsoli albo wywołując
POST /v1/channels. - Krok 03
Wysyłaj przez jeden endpoint
POST /v1/messagesprzyjmuje identyfikator kanału, odbiorcę i typowany obiekt treści. Kształt żądania jest taki sam w każdym kanale. - Krok 04
Śledź każde dostarczenie
Podpisane webhooki informują o statusach: wysłana, dostarczona, przeczytana i nieudana. Tę samą historię znajdziesz w konsoli i pod
GET /v1/messages.
Typy wiadomości
Odbiorca widzi dokładnie to, co wysyłasz
Każda wiadomość ma typ oraz obiekt treści pod kluczem tego typu. Wybierz jeden z nich, aby zobaczyć treść żądania obok wiadomości, która z niego powstaje.
{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": {
"body": "Twoje zamówienie nr 1042 zostało wysłane. Śledź przesyłkę: https://example.com/t/1042",
"preview_url": true
},
"reference": "order-1042"
}Zwykły tekst, przyjmowany przez każdy typ kanału. Ustaw preview_url, aby kanał wyświetlił podgląd linku.
KanałyWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram i TikTok
Konsola
Konsola do wszystkiego, co nie jest kodem
Twórz klucze, podłączaj kanały, przeszukuj dziennik wiadomości, ponawiaj dostarczenia webhooków i zarządzaj rozliczeniami. Wszystko, co pokazuje konsola, jest też dostępne przez API.
Cennik
Płać za wiadomość albo kupuj wiadomości hurtowo
Doładuj przedpłacony portfel kwotą od 10 $ i płać cenę za wiadomość obowiązującą w danym kanale albo kup pakiet kredytów na wiadomości, jeśli wysyłasz dużo w najdroższych kanałach.
10 tys. wiadomości
8 $
0,0008 $ za wiadomość
- Wiadomości wychodzące: 10 000
- Ważny przez 3 miesiące od zakupu
- Ważny dla każdego typu kanału
100 tys. wiadomości
Polecany60 $
0,0006 $ za wiadomość
- Wiadomości wychodzące: 100 000
- Ważny przez 6 miesięcy od zakupu
- Ważny dla każdego typu kanału
1 mln wiadomości
400 $
0,0004 $ za wiadomość
- Wiadomości wychodzące: 1 000 000
- Ważny przez 12 miesięcy od zakupu
- Ważny dla każdego typu kanału
Rozliczenie według zużycia
| Kanał | Za wiadomość |
|---|---|
| WhatsApp Business | 0,001 $ |
| Telegram | 0,0003 $ |
| SMS | 0,0005 $ |
| SMS OTP | 0,0005 $ |
| Messenger | 0,0005 $ |
| 0,0005 $ | |
| TikTok | 0,0005 $ |
Co obejmuje cena
- PłatneWiadomości wychodzące przyjęte przez API – w chwili ich przyjęcia.
- BezpłatneWiadomości przychodzące, wiadomości w trybie testowym, webhooki i konsola.
- ZwracaneKażda wiadomość zakończona statusem „nieudana” – zwrot trafia do pakietu lub portfela, z którego pobrano opłatę.
- OsobnoOpłaty, które Meta, operatorzy lub inni dostawcy pobierają za sam kanał.
Z myślą o deweloperach
Integrujesz raz i masz spokój
Podpisane webhooki, bezpieczne ponowienia, sandbox zachowujący się jak produkcja i błędy, na podstawie których można sterować logiką.
Webhooki, które można zweryfikować
Każde dostarczenie jest podpisywane algorytmem HMAC-SHA256 na podstawie znacznika czasu i surowej treści; podpis trafia do nagłówka OmniMessage-Signature. Odpowiedz dowolnym kodem 2xx w ciągu 10 sekund. Nieudane dostarczenia są ponawiane osiem razy w rosnących odstępach – od 30 sekund do 24 godzin.
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"
}
}
}Tryb testowy, który nic nie kosztuje
Klucze testowe korzystają z wbudowanych kanałów sandbox, więc nie trzeba niczego podłączać. O symulowanym wyniku decydują ostatnie cyfry odbiorcy, a Twoje webhooki są wywoływane tak samo jak na produkcji.
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" }
}'Błędy z typem i kodem
Każda odpowiedź inna niż 2xx ma tę samą treść: type określający klasę błędu, stabilny code, od którego można uzależnić logikę, błędny param, jeśli występuje, oraz request_id na potrzeby wsparcia.
{
"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"
}
}Idempotentne żądania POST
Wyślij nagłówek
Idempotency-Key, a ponowienie w ciągu 24 godzin zwróci zapisaną odpowiedź zIdempotent-Replayed: true– bez podwójnej wysyłki i podwójnej opłaty.Przewidywalne limity
100 żądań na sekundę na klucz dla
POST /v1/messages, 20 dla pozostałych endpointów. Każda odpowiedź zawieraRateLimit-Remaining, a odpowiedź 429 –Retry-After.Wysyłka partiami
POST /v1/messages/batchprzyjmuje do 100 wiadomości. Każda pozycja jest przyjmowana, odrzucana i rozliczana osobno, a odpowiedź 207 opisuje je według indeksu.Klucze z ograniczonymi uprawnieniami
Nadaj każdemu kluczowi tylko te uprawnienia, których potrzebuje, na przykład
messages:writelubbilling:read, i ogranicz go do listy dozwolonych adresów IP.
Pytania
Zanim zaczniesz integrację
Krótkie odpowiedzi. Te długie znajdziesz w dokumentacji.
Czy potrzebuję własnego numeru WhatsApp, bota lub numeru SMS?
Tak. OmniMessage to bramka, do której podłączasz własne kanały: swój numer WhatsApp Cloud API, bota Telegram, numer Twilio lub konto w mediach społecznościowych – i pozostajesz ich właścicielem. Na stronie kanałów opisano, czego wymaga każdy typ.
Za co dokładnie płacę?
Jedna opłata za każdą wiadomość wychodzącą przyjętą przez API: kredyt z pakietu, jeśli go masz, a w przeciwnym razie cena za wiadomość dla danego typu kanału pobierana z portfela. Wiadomości przychodzące i wiadomości w trybie testowym są bezpłatne, a opłata za wiadomość zakończoną statusem „nieudana” jest zwracana automatycznie.
Czy opłaty Meta, operatorów lub dostawców są wliczone w cenę?
Nie. Opłata za bramkę obejmuje API, śledzenie dostarczenia, webhooki i konsolę. Opłaty, które Meta, Twilio lub inny dostawca pobiera za sam kanał, rozliczasz bezpośrednio z tym dostawcą.
Jak testować bez wysyłania prawdziwych wiadomości?
Użyj klucza zaczynającego się od om_test_. Każde konto ma po jednym kanale sandbox dla każdego typu, na przykład ch_test_whatsapp. Nic nie jest dostarczane ani naliczane, a statusy są symulowane: wiadomość do odbiorcy kończącego się na 0000 kończy się niepowodzeniem, na 0001 pozostaje wysłana, na 0002 zostaje także przeczytana, a każda inna jest dostarczana w ciągu około dwóch sekund.
Co się dzieje, gdy skończą mi się środki?
API odpowiada 402 insufficient_balance i nic nie trafia do kolejki, więc nigdy nie powstaje zaległość do zapłaty po fakcie. Możesz zasubskrybować zdarzenie balance.low albo włączyć automatyczne doładowanie, które zasili portfel, gdy saldo spadnie poniżej wybranego przez Ciebie progu.
Czy potrzebuję SDK?
Nie. API to JSON przesyłany przez HTTPS z uwierzytelnianiem typu bearer, więc wystarczy dowolny klient HTTP. W dokumentacji znajdziesz przykłady w cURL, Node, Pythonie i PHP.
Wyślij pierwszą wiadomość w trybie testowym jeszcze dziś
Załóż konto, skopiuj klucz testowy i wywołaj API, zanim podłączysz choćby jeden kanał. Każde nowe konto otrzymuje na start 100 bezpłatnych wiadomości.