API voor een messaging-gateway
Eén API voor elk berichtenkanaal
Verstuur berichten via WhatsApp Business, SMS, Telegram, Messenger, Instagram en TikTok via één REST-endpoint. Prepaid, afgerekend per uitgaand bericht, met afleverwebhooks en een testmodus.
- Vanaf
- $ 0,0003
- per uitgaand bericht
- Bij aanmelding
- 100
- gratis berichten
- Verplichting
- Geen
- prepaid, zonder contract
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
}Kanalen
Zeven kanaaltypen, één verzoekvorm
Koppel de afzenders die al van jou zijn. Elke afzender wordt een kanaal-ID dat je aan hetzelfde endpoint meegeeft, en elk kanaal meldt dezelfde statussen terug.
- $ 0,001WhatsApp BusinessSjablonen, interactieve berichten en media op je eigen Cloud API-nummer.Tekst · Bijlagen · Sjabloon · Antwoordknoppen · Lijst · URL-knop · Locatie · Contacten
- $ 0,0005SMSTekst- en mediaberichten vanaf je eigen Twilio-nummer.Tekst · Bijlagen
- $ 0,0005SMS OTPEen route met alleen tekst voor eenmalige toegangscodes.Tekst
- $ 0,0003TelegramBotberichten met knoppen, peilingen, locaties en media.Tekst · Bijlagen · Antwoordknoppen · Locatie · Contacten · Peiling
- $ 0,0005MessengerGesprekken met mensen die je Facebook-pagina een bericht sturen.Tekst · Bijlagen · Antwoordknoppen
- $ 0,0005InstagramDirecte berichten voor een professioneel Instagram-account.Tekst · Bijlagen · Antwoordknoppen
- $ 0,0005TikTokDirecte berichten voor een zakelijk TikTok-account.Tekst · Bijlagen · Antwoordknoppen
- Gebruik je eigen kanaalJe nummers en bots blijven van jouBekijk wat elk kanaal nodig heeft
Zo werkt het
In vier stappen van aanmelding naar een afgeleverd bericht
Geen verkoopgesprek en geen minimale afname. Een minuut nadat je een account hebt aangemaakt, kun je in de testmodus je eerste API-aanroep doen.
- Stap 01
Maak een account aan
Meld je aan, verifieer je e-mailadres en maak in de console een API-sleutel aan. Testsleutels werken meteen, nog voordat er een kanaal is gekoppeld.
- Stap 02
Koppel een kanaal
Log in de console in met Facebook of TikTok om een WhatsApp-nummer, een pagina of een zakelijk account te koppelen. Voeg een Telegram-bot of een Twilio-nummer toe met de bijbehorende toegangsgegevens, in de console of met
POST /v1/channels. - Stap 03
Verzend via één endpoint
POST /v1/messagesverwacht een kanaal-ID, een ontvanger en een getypeerd content-object. De vorm van het verzoek is op elk kanaal gelijk. - Stap 04
Volg elke aflevering
Ondertekende webhooks melden verzonden, afgeleverd, gelezen en mislukt. Dezelfde geschiedenis vind je in de console en via
GET /v1/messages.
Berichttypen
Wat je verstuurt, is wat zij zien
Elk bericht heeft een type en een content-object onder de sleutel van dat type. Kies er een om de request-body te zien naast het bericht dat eruit voortkomt.
{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": {
"body": "Je bestelling #1042 is verzonden. Volg je pakket via https://example.com/t/1042",
"preview_url": true
},
"reference": "order-1042"
}Platte tekst, geaccepteerd door elk kanaaltype. Stel preview_url in om het kanaal een linkvoorbeeld te laten tonen.
KanalenWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram en TikTok
Console
Een console voor alles wat geen code is
Maak sleutels aan, koppel kanalen, doorzoek het berichtenlogboek, speel webhookafleveringen opnieuw af en beheer je facturering. Alles wat de console toont, is ook via de API beschikbaar.
Prijzen
Betaal per bericht of koop berichten in bulk
Waardeer een prepaid wallet op vanaf $ 10 en betaal de prijs per bericht van elk kanaal, of koop een pakket met berichtcredits voor volume op je duurste kanalen.
10K berichten
$ 8
$ 0,0008 per bericht
- 10.000 uitgaande berichten
- 3 maanden geldig vanaf aankoop
- Geldig op elk kanaaltype
100K berichten
Aanbevolen$ 60
$ 0,0006 per bericht
- 100.000 uitgaande berichten
- 6 maanden geldig vanaf aankoop
- Geldig op elk kanaaltype
1 mln. berichten
$ 400
$ 0,0004 per bericht
- 1.000.000 uitgaande berichten
- 12 maanden geldig vanaf aankoop
- Geldig op elk kanaaltype
Betalen naar gebruik
| Kanaal | Per bericht |
|---|---|
| WhatsApp Business | $ 0,001 |
| Telegram | $ 0,0003 |
| SMS | $ 0,0005 |
| SMS OTP | $ 0,0005 |
| Messenger | $ 0,0005 |
| $ 0,0005 | |
| TikTok | $ 0,0005 |
Wat de prijs dekt
- BerekendUitgaande berichten die de API accepteert, op het moment van acceptatie.
- GratisInkomende berichten, berichten in de testmodus, webhooks en de console.
- TerugbetaaldElk bericht dat als mislukt eindigt, terug naar het pakket of de wallet waaruit het is betaald.
- ApartKosten die Meta, providers of andere aanbieders voor het kanaal zelf rekenen.
Voor ontwikkelaars
Gebouwd om één keer te integreren en er daarna niet meer naar om te kijken
Ondertekende webhooks, veilige nieuwe pogingen, een sandbox die zich gedraagt als productie en fouten waarop je kunt vertakken.
Webhooks die je kunt verifiëren
Elke aflevering wordt ondertekend met HMAC-SHA256 over het tijdstempel en de onbewerkte body, in de header OmniMessage-Signature. Antwoord binnen 10 seconden met een willekeurige 2xx. Mislukte afleveringen worden acht keer opnieuw geprobeerd met backoff, van 30 seconden tot 24 uur.
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"
}
}
}Een testmodus die niets kost
Testsleutels gebruiken ingebouwde sandboxkanalen, dus je hoeft niets te koppelen. De laatste cijfers van de ontvanger bepalen de gesimuleerde uitkomst, en je webhooks gaan af zoals ze dat in productie zouden doen.
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" }
}'Fouten met een type en een code
Elke niet-2xx-respons heeft dezelfde body: een type voor de foutklasse, een stabiele code om op te vertakken, de betreffende param als die er is, en een request_id voor support.
{
"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"
}
}Idempotente POST’s
Stuur een
Idempotency-Key-header mee en een nieuwe poging binnen 24 uur geeft de opgeslagen respons terug metIdempotent-Replayed: true, zonder dubbel te verzenden of af te rekenen.Voorspelbare limieten
100 verzoeken per seconde per sleutel op
POST /v1/messages, 20 elders. Elke respons bevatRateLimit-Remaining, en een 429 bevatRetry-After.Verzenden in batches
POST /v1/messages/batchaccepteert tot 100 berichten. Elk item wordt afzonderlijk geaccepteerd, geweigerd en afgerekend, en de 207-respons rapporteert ze per index.Sleutels met scopes
Geef elke sleutel alleen de scopes die hij nodig heeft, zoals
messages:writeofbilling:read, en beperk hem tot een lijst met toegestane IP-adressen.
Vragen
Voordat je integreert
De korte antwoorden. De lange staan in de documentatie.
Heb ik een eigen WhatsApp-nummer, bot of SMS-nummer nodig?
Ja. OmniMessage is een gateway waarop je je eigen kanalen aansluit: je koppelt je eigen WhatsApp Cloud API-nummer, Telegram-bot, Twilio-nummer of socialmedia-account en blijft daar eigenaar van. Op de kanalenpagina staat wat elk type nodig heeft.
Waarvoor betaal ik precies?
Eén afschrijving per uitgaand bericht dat de API accepteert: een pakketcredit als je die hebt, en anders de prijs per bericht van het kanaaltype uit je wallet. Inkomende berichten en berichten in de testmodus zijn gratis, en een bericht dat als mislukt eindigt, wordt automatisch terugbetaald.
Zijn de kosten van Meta, providers of aanbieders inbegrepen?
Nee. Het gatewaytarief dekt de API, het volgen van afleveringen, webhooks en de console. Kosten die Meta, Twilio of een andere aanbieder voor het kanaal zelf rekent, blijven een zaak tussen jou en die aanbieder.
Hoe test ik zonder echte berichten te versturen?
Gebruik een sleutel die begint met om_test_. Elk account heeft per type een sandboxkanaal, zoals ch_test_whatsapp. Er wordt niets afgeleverd of afgerekend en de statussen worden gesimuleerd: een ontvanger die eindigt op 0000 mislukt, 0001 blijft op verzonden staan, 0002 wordt ook gelezen, en al het andere wordt binnen ongeveer twee seconden afgeleverd.
Wat gebeurt er als mijn saldo op is?
De API antwoordt met 402 insufficient_balance en er wordt niets in de wachtrij gezet, dus je bent achteraf nooit geld verschuldigd. Je kunt je abonneren op het event balance.low of automatisch opwaarderen inschakelen, zodat de wallet wordt aangevuld zodra het saldo onder een door jou gekozen drempel komt.
Heb ik een SDK nodig?
Nee. De API is JSON over HTTPS met bearer-authenticatie, dus elke HTTP-client werkt. In de documentatie staan voorbeelden in cURL, Node, Python en PHP.
Verstuur vandaag nog je eerste bericht in de testmodus
Maak een account aan, kopieer een testsleutel en roep de API aan voordat je ook maar één kanaal koppelt. Elk nieuw account begint met 100 gratis berichten.