Przejdź do treści

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"
  }'
202 Accepted
{
  "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
}
  • Typy kanałów7 za jednym endpointem
  • Typy wiadomości9 – od tekstu po interaktywne listy
  • Cena od0,0003 $ za wiadomość wychodzącą
  • Limit żądań100 żądań na sekundę na klucz
  • Rozmiar partiiDo 100 wiadomości w jednym żądaniu
  • Ponowienia webhooków8, w rosnących odstępach od 30 sekund do 24 godzin
  • Okno idempotencji24 godziny
  • Tryb testowyBezpłatny, bez podłączania kanału
  • Nieudane wiadomościAutomatyczny zwrot
  • Wiadomości przychodząceBezpłatnie

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.

  1. 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ł.

  2. 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.

  3. Krok 03

    Wysyłaj przez jeden endpoint

    POST /v1/messages przyjmuje identyfikator kanału, odbiorcę i typowany obiekt treści. Kształt żądania jest taki sam w każdym kanale.

  4. 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.

POST /v1/messages
{
  "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.

Przegląd. Saldo portfela, pozostałe kredyty z pakietów i wolumen wiadomości wychodzących z ostatnich 30 dni – dla konta i dla trybu. Ekrany na tej stronie przedstawiają dane przykładowe.
Dziennik wiadomości. Filtruj według kanału, statusu, odbiorcy lub własnej referencji i otwórz dowolną wiadomość, aby zobaczyć historię jej statusów oraz naliczoną opłatę.
Rozliczenia. Doładuj portfel, kupuj pakiety, ustaw automatyczne doładowanie i pobieraj potwierdzenia płatności. Przy kredytach z pakietów widać, ile ich zostało i kiedy wygasają.

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
Zacznij od pakietu 10 tys.

100 tys. wiadomości

Polecany

60 $

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
Zacznij od pakietu 100 tys.

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
Zacznij od pakietu 1 mln

Rozliczenie według zużycia

Cena według zużycia za wiadomość wychodzącą dla każdego typu kanału, w dolarach amerykańskich
KanałZa wiadomość
WhatsApp Business0,001 $
Telegram0,0003 $
SMS0,0005 $
SMS OTP0,0005 $
Messenger0,0005 $
Instagram0,0005 $
TikTok0,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.

verify-signature.js
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;
}
Zdarzenie message.delivered
{
  "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.

Żądanie w sandboksie, kończy się statusem „przeczytana”
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.

402 Payment Required
{
  "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ź z Idempotent-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ź zawiera RateLimit-Remaining, a odpowiedź 429 – Retry-After.

  • Wysyłka partiami

    POST /v1/messages/batch przyjmuje 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:write lub billing: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.