API til beskedgateway
Ét API til alle beskedkanaler
Send beskeder via WhatsApp Business, SMS, Telegram, Messenger, Instagram og TikTok gennem ét REST-endpoint. Forudbetalt, afregnet pr. udgående besked, med leveringswebhooks og testtilstand.
- Fra
- 0,0003 $
- pr. udgående besked
- Ved oprettelse
- 100
- gratis beskeder
- Binding
- Ingen
- forudbetalt, ingen kontrakt
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
}Kanaler
Syv kanaltyper, ét anmodningsformat
Tilslut de afsendere, du allerede har. Hver af dem bliver et kanal-id, som du sender til det samme endpoint, og hver af dem melder de samme statusser tilbage.
- 0,001 $WhatsApp BusinessSkabeloner, interaktive beskeder og medier på dit eget Cloud API-nummer.Tekst · Vedhæftninger · Skabelon · Svarknapper · Liste · URL-knap · Placering · Kontakter
- 0,0005 $SMSTekst- og mediebeskeder fra dit eget Twilio-nummer.Tekst · Vedhæftninger
- 0,0005 $SMS OTPEn rute kun til tekst, beregnet til engangskoder.Tekst
- 0,0003 $TelegramBotbeskeder med knapper, afstemninger, placeringer og medier.Tekst · Vedhæftninger · Svarknapper · Placering · Kontakter · Afstemning
- 0,0005 $MessengerSamtaler med personer, der skriver til din Facebook-side.Tekst · Vedhæftninger · Svarknapper
- 0,0005 $InstagramDirekte beskeder til en professionel Instagram-konto.Tekst · Vedhæftninger · Svarknapper
- 0,0005 $TikTokDirekte beskeder til en TikTok-virksomhedskonto.Tekst · Vedhæftninger · Svarknapper
- Medbring din egen kanalDine numre og bots forbliver dineSe, hvad hver kanal kræver
Sådan fungerer det
Fra oprettelse til leveret besked i fire trin
Der er intet salgsmøde og intet minimumsforbrug. Du kan lave dit første API-kald i testtilstand et minut efter, at du har oprettet en konto.
- Trin 01
Opret en konto
Tilmeld dig, bekræft din e-mail, og opret en API-nøgle i konsollen. Testnøgler virker med det samme, før der er tilsluttet nogen kanal.
- Trin 02
Tilslut en kanal
Log ind med Facebook eller TikTok i konsollen for at tilslutte et WhatsApp-nummer, en Side eller en virksomhedskonto. Tilføj en Telegram-bot eller et Twilio-nummer med de tilhørende legitimationsoplysninger, i konsollen eller med
POST /v1/channels. - Trin 03
Send gennem ét endpoint
POST /v1/messagestager et kanal-id, en modtager og et typebestemt indholdsobjekt. Anmodningsformatet er det samme på alle kanaler. - Trin 04
Følg hver levering
Signerede webhooks melder sendt, leveret, læst og mislykket. Den samme historik findes i konsollen og på
GET /v1/messages.
Beskedtyper
Det, du sender, er det, de ser
Hver besked har en type og et indholdsobjekt under nøglen for den type. Vælg en for at se anmodningens body ved siden af den besked, den giver.
{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": {
"body": "Din ordre #1042 er afsendt. Følg den på https://example.com/t/1042",
"preview_url": true
},
"reference": "order-1042"
}Ren tekst, som accepteres af alle kanaltyper. Sæt preview_url for at lade kanalen vise en linkforhåndsvisning.
KanalerWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram og TikTok
Konsol
En konsol til alt det, der ikke er kode
Opret nøgler, tilslut kanaler, søg i beskedloggen, afspil webhook-leveringer igen, og administrer fakturering. Alt, hvad konsollen viser, er også tilgængeligt via API’et.
Priser
Betal pr. besked, eller køb beskeder i større mængder
Tank en forudbetalt tegnebog op fra 10 $, og betal prisen pr. besked for hver kanal, eller køb en pakke beskedkreditter til volumen på dine dyreste kanaler.
10 t beskeder
8 $
0,0008 $ pr. besked
- 10.000 udgående beskeder
- Gyldig i 3 måneder fra købet
- Gyldig på alle kanaltyper
100 t beskeder
Fremhævet60 $
0,0006 $ pr. besked
- 100.000 udgående beskeder
- Gyldig i 6 måneder fra købet
- Gyldig på alle kanaltyper
1 mio. beskeder
400 $
0,0004 $ pr. besked
- 1.000.000 udgående beskeder
- Gyldig i 12 måneder fra købet
- Gyldig på alle kanaltyper
Betal efter forbrug
| Kanal | Pr. besked |
|---|---|
| WhatsApp Business | 0,001 $ |
| SMS | 0,0005 $ |
| SMS OTP | 0,0005 $ |
| Telegram | 0,0003 $ |
| Messenger | 0,0005 $ |
| 0,0005 $ | |
| TikTok | 0,0005 $ |
Det dækker prisen
- FaktureresUdgående beskeder, som API’et accepterer, i det øjeblik de accepteres.
- GratisIndgående beskeder, beskeder i testtilstand, webhooks og konsollen.
- RefunderesEnhver besked, der ender som mislykket, tilbage til den pakke eller tegnebog, den blev trukket fra.
- SeparatGebyrer, som Meta, teleoperatører eller andre udbydere opkræver for selve kanalen.
Udvikleroplevelse
Bygget til at blive integreret én gang og så passe sig selv
Signerede webhooks, sikre genforsøg, en sandbox, der opfører sig som produktion, og fejl, du kan forgrene på.
Webhooks, du kan verificere
Hver levering er signeret med HMAC-SHA256 over tidsstemplet og den rå body i headeren OmniMessage-Signature. Svar med en hvilken som helst 2xx inden for 10 sekunder. Mislykkede leveringer forsøges igen otte gange med stigende ventetid, fra 30 sekunder op til 24 timer.
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"
}
}
}En testtilstand, der ikke koster noget
Testnøgler bruger indbyggede sandbox-kanaler, så der er ikke noget at tilslutte. De sidste cifre i modtageren afgør det simulerede udfald, og dine webhooks udløses, som de ville i produktion.
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" }
}'Fejl med en type og en kode
Alle svar, der ikke er 2xx, har samme body: en type for fejlklassen, en stabil code at forgrene på, den problematiske param, hvor der er en, og et request_id til 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-anmodninger
Send en
Idempotency-Key-header, så returnerer et genforsøg inden for 24 timer det gemte svar medIdempotent-Replayed: true, uden at der sendes eller opkræves to gange.Forudsigelige grænser
100 anmodninger pr. sekund pr. nøgle på
POST /v1/messages, 20 på de øvrige endpoints. Alle svar indeholderRateLimit-Remaining, og et 429-svar indeholderRetry-After.Batchafsendelse
POST /v1/messages/batchaccepterer op til 100 beskeder. Hvert element accepteres, afvises og faktureres for sig, og 207-svaret rapporterer dem efter indeks.Nøgler med afgrænsede rettigheder
Giv hver nøgle kun de rettigheder, den har brug for, såsom
messages:writeellerbilling:read, og begræns den til en liste over tilladte IP-adresser.
Spørgsmål
Før du integrerer
De korte svar. De lange står i dokumentationen.
Skal jeg have mit eget WhatsApp-nummer, min egen bot eller mit eget SMS-nummer?
Ja. OmniMessage er en gateway, hvor du medbringer dine egne kanaler: Du tilslutter dit eget WhatsApp Cloud API-nummer, din Telegram-bot, dit Twilio-nummer eller din konto på et socialt medie og beholder ejerskabet. På siden om kanaler kan du se, hvad hver type kræver.
Hvad bliver jeg helt præcist faktureret for?
Én opkrævning pr. udgående besked, som API’et accepterer: en pakkekredit, hvis du har en, og ellers kanaltypens pris pr. besked fra din tegnebog. Indgående beskeder og beskeder i testtilstand er gratis, og en besked, der ender som mislykket, refunderes automatisk.
Er gebyrer til Meta, teleoperatører eller udbydere inkluderet?
Nej. Gatewaygebyret dækker API’et, leveringssporing, webhooks og konsollen. Gebyrer, som Meta, Twilio eller en anden udbyder opkræver for selve kanalen, er et anliggende mellem dig og den pågældende udbyder.
Hvordan tester jeg uden at sende rigtige beskeder?
Brug en nøgle, der begynder med om_test_. Hver konto har en sandbox-kanal pr. type, for eksempel ch_test_whatsapp. Intet bliver leveret eller faktureret, og statusser er simulerede: En modtager, der ender på 0000, mislykkes, 0001 forbliver sendt, 0002 bliver også læst, og alt andet leveres inden for cirka to sekunder.
Hvad sker der, når min saldo er brugt op?
API’et svarer 402 insufficient_balance, og intet sættes i kø, så du kommer aldrig til at skylde penge bagefter. Du kan abonnere på hændelsen balance.low eller slå automatisk optankning til, så tegnebogen tankes op, når den kommer under en grænse, du selv vælger.
Skal jeg bruge et SDK?
Nej. API’et er JSON over HTTPS med bearer-autentificering, så enhver HTTP-klient kan bruges. Dokumentationen har eksempler i cURL, Node, Python og PHP.
Send din første besked i testtilstand i dag
Opret en konto, kopiér en testnøgle, og kald API’et, før du har tilsluttet en eneste kanal. Alle nye konti starter med 100 gratis beskeder.