Naar de inhoud

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"
  }'
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
}
  • Kanaaltypen7 achter één endpoint
  • Berichttypen9, van tekst tot interactieve lijsten
  • Prijs vanaf$ 0,0003 per uitgaand bericht
  • Snelheidslimiet100 verzoeken per seconde per sleutel
  • BatchgrootteTot 100 berichten per verzoek
  • Nieuwe webhookpogingen8, met backoff van 30 seconden tot 24 uur
  • Idempotentievenster24 uur
  • TestmodusGratis, geen kanaal nodig
  • Mislukte berichtenAutomatisch terugbetaald
  • Inkomende berichtenGratis

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.

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

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

  3. Stap 03

    Verzend via één endpoint

    POST /v1/messages verwacht een kanaal-ID, een ontvanger en een getypeerd content-object. De vorm van het verzoek is op elk kanaal gelijk.

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

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

Overzicht. Walletsaldo, resterende pakketcredits en het uitgaande volume van de afgelopen 30 dagen, per account en per modus. De schermen op deze pagina zijn getekend met voorbeeldgegevens.
Berichtenlogboek. Filter op kanaal, status, ontvanger of je eigen referentie, en open een bericht om de statusgeschiedenis en de kosten te zien.
Facturering. Waardeer de wallet op, koop pakketten, stel automatisch opwaarderen in en download betaalbewijzen. Bij pakketcredits zie je wat er over is en wanneer ze verlopen.

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
Begin met 10K

100K berichten

Aanbevolen

$ 60

$ 0,0006 per bericht

  • 100.000 uitgaande berichten
  • 6 maanden geldig vanaf aankoop
  • Geldig op elk kanaaltype
Begin met 100K

1 mln. berichten

$ 400

$ 0,0004 per bericht

  • 1.000.000 uitgaande berichten
  • 12 maanden geldig vanaf aankoop
  • Geldig op elk kanaaltype
Begin met 1 mln.

Betalen naar gebruik

Prijs voor betalen naar gebruik per uitgaand bericht, per kanaaltype, in Amerikaanse dollars
KanaalPer bericht
WhatsApp Business$ 0,001
Telegram$ 0,0003
SMS$ 0,0005
SMS OTP$ 0,0005
Messenger$ 0,0005
Instagram$ 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.

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;
}
Event 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"
    }
  }
}

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.

Sandboxverzoek, eindigt als gelezen
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.

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"
  }
}
  • Idempotente POST’s

    Stuur een Idempotency-Key-header mee en een nieuwe poging binnen 24 uur geeft de opgeslagen respons terug met Idempotent-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 bevat RateLimit-Remaining, en een 429 bevat Retry-After.

  • Verzenden in batches

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