API för meddelandegateway
Ett API för alla meddelandekanaler
Skicka meddelanden via WhatsApp Business, SMS, Telegram, Messenger, Instagram och TikTok genom en enda REST-slutpunkt. Förbetalt, debiteras per utgående meddelande, med leveranswebhookar och ett testläge.
- Från
- 0,0003 $
- per utgående meddelande
- Vid registrering
- 100
- kostnadsfria meddelanden
- Bindningstid
- Ingen
- förbetalt, utan avtal
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
Sju kanaltyper, ett anropsformat
Anslut de avsändare du redan äger. Var och en blir ett kanal-ID som du skickar till samma slutpunkt, och alla rapporterar samma statusar tillbaka.
- 0,001 $WhatsApp BusinessMallar, interaktiva meddelanden och media på ditt eget Cloud API-nummer.Text · Bilagor · Mall · Svarsknappar · Lista · URL-knapp · Plats · Kontakter
- 0,0005 $SMSText- och mediemeddelanden från ditt eget Twilio-nummer.Text · Bilagor
- 0,0005 $SMS OTPEn väg med enbart text för engångskoder.Text
- 0,0003 $TelegramBotmeddelanden med knappar, omröstningar, platser och media.Text · Bilagor · Svarsknappar · Plats · Kontakter · Omröstning
- 0,0005 $MessengerKonversationer med dem som skriver till din Facebook-sida.Text · Bilagor · Svarsknappar
- 0,0005 $InstagramDirektmeddelanden för ett professionellt Instagram-konto.Text · Bilagor · Svarsknappar
- 0,0005 $TikTokDirektmeddelanden för ett TikTok-företagskonto.Text · Bilagor · Svarsknappar
- Ta med din egen kanalDina nummer och botar förblir dinaSe vad varje kanal kräver
Så fungerar det
Från registrering till levererat meddelande i fyra steg
Inget säljsamtal och inget minimiåtagande. Du kan göra ditt första API-anrop i testläge en minut efter att du har skapat ett konto.
- Steg 01
Skapa ett konto
Registrera dig, verifiera din e-postadress och skapa en API-nyckel i konsolen. Testnycklar fungerar direkt, innan någon kanal är ansluten.
- Steg 02
Anslut en kanal
Logga in med Facebook eller TikTok i konsolen för att ansluta ett WhatsApp-nummer, en sida eller ett företagskonto. Lägg till en Telegram-bot eller ett Twilio-nummer med dess autentiseringsuppgifter, i konsolen eller med
POST /v1/channels. - Steg 03
Skicka genom en enda slutpunkt
POST /v1/messagestar emot ett kanal-ID, en mottagare och ett typat innehållsobjekt. Anropsformatet är detsamma för alla kanaler. - Steg 04
Följ varje leverans
Signerade webhookar rapporterar skickat, levererat, läst och misslyckat. Samma historik finns i konsolen och via
GET /v1/messages.
Meddelandetyper
Det du skickar är det mottagaren ser
Varje meddelande har en typ och ett innehållsobjekt under en nyckel med typens namn. Välj en typ för att se anropets innehåll bredvid meddelandet det ger upphov till.
{
"channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
"to": "+971501234567",
"type": "text",
"text": {
"body": "Din beställning #1042 har skickats. Följ den på https://example.com/t/1042",
"preview_url": true
},
"reference": "order-1042"
}Ren text, som alla kanaltyper tar emot. Ange preview_url om kanalen ska visa en länkförhandsvisning.
KanalerWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram och TikTok
Konsol
En konsol för allt det som inte är kod
Skapa nycklar, anslut kanaler, sök i meddelandeloggen, skicka om webhookleveranser och hantera faktureringen. Allt som konsolen visar är också tillgängligt via API:et.
Priser
Betala per meddelande eller köp meddelanden i paket
Fyll på en förbetald plånbok från 10 $ och betala respektive kanals pris per meddelande, eller köp ett paket med meddelandekrediter för volym på dina dyraste kanaler.
10 tn meddelanden
8 $
0,0008 $ per meddelande
- 10 000 utgående meddelanden
- Gäller i 3 månader från köpet
- Gäller för alla kanaltyper
100 tn meddelanden
Rekommenderas60 $
0,0006 $ per meddelande
- 100 000 utgående meddelanden
- Gäller i 6 månader från köpet
- Gäller för alla kanaltyper
1 mn meddelanden
400 $
0,0004 $ per meddelande
- 1 000 000 utgående meddelanden
- Gäller i 12 månader från köpet
- Gäller för alla kanaltyper
Löpande betalning
| Kanal | Per meddelande |
|---|---|
| WhatsApp Business | 0,001 $ |
| SMS | 0,0005 $ |
| SMS OTP | 0,0005 $ |
| Telegram | 0,0003 $ |
| Messenger | 0,0005 $ |
| 0,0005 $ | |
| TikTok | 0,0005 $ |
Vad priset omfattar
- DebiterasUtgående meddelanden som API:et accepterar, i samma ögonblick som de accepteras.
- KostnadsfrittInkommande meddelanden, meddelanden i testläge, webhookar och konsolen.
- ÅterbetalasVarje meddelande som slutar som misslyckat, tillbaka till det paket eller den plånbok det drogs från.
- SeparatAvgifter som Meta, operatörer eller andra leverantörer tar ut för själva kanalen.
Utvecklarupplevelse
Byggt för att integreras en gång och sedan sköta sig självt
Signerade webhookar, säkra omförsök, en sandlåda som beter sig som produktion och fel som du kan förgrena koden på.
Webhookar som du kan verifiera
Varje leverans signeras med HMAC-SHA256 över tidsstämpeln och den råa meddelandekroppen, i huvudet OmniMessage-Signature. Svara med valfri 2xx-kod inom 10 sekunder. Misslyckade leveranser försöks på nytt åtta gånger med växande väntetid, från 30 sekunder upp till 24 timmar.
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"
}
}
}Ett testläge som inte kostar något
Testnycklar använder inbyggda sandlådekanaler, så det finns inget att ansluta. Mottagarens sista siffror avgör det simulerade utfallet, och dina webhookar anropas precis som 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" }
}'Fel med en typ och en kod
Varje svar som inte är 2xx har samma innehåll: en type för felklassen, en stabil code att förgrena på, den felande param när det finns en, och ett request_id för supporten.
{
"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"
}
}Idempotenta POST-anrop
Skicka huvudet
Idempotency-Key, så returnerar ett nytt försök inom 24 timmar det sparade svaret medIdempotent-Replayed: true, utan att något skickas eller debiteras två gånger.Förutsägbara gränser
100 anrop per sekund och nyckel på
POST /v1/messages, 20 på övriga. Varje svar innehållerRateLimit-Remaining, och ett 429-svar innehållerRetry-After.Batchsändning
POST /v1/messages/batchtar emot upp till 100 meddelanden. Varje post accepteras, avvisas och debiteras för sig, och 207-svaret redovisar dem per index.Nycklar med avgränsad behörighet
Ge varje nyckel bara de omfång den behöver, till exempel
messages:writeellerbilling:read, och begränsa den till en lista med tillåtna IP-adresser.
Frågor
Innan du integrerar
De korta svaren. De långa finns i dokumentationen.
Behöver jag ett eget WhatsApp-nummer, en egen bot eller ett eget SMS-nummer?
Ja. OmniMessage är en gateway där du tar med din egen kanal: du ansluter ditt eget WhatsApp Cloud API-nummer, din Telegram-bot, ditt Twilio-nummer eller ditt konto i sociala medier, och du behåller äganderätten till det. På kanalsidan står vad varje typ kräver.
Vad exakt debiteras jag för?
En debitering per utgående meddelande som API:et accepterar: en paketkredit om du har en, annars kanaltypens pris per meddelande från din plånbok. Inkommande meddelanden och meddelanden i testläge är kostnadsfria, och ett meddelande som slutar som misslyckat återbetalas automatiskt.
Ingår avgifter till Meta, operatörer eller leverantörer?
Nej. Gatewayavgiften täcker API:et, leveransspårningen, webhookarna och konsolen. Avgifter som Meta, Twilio eller en annan leverantör tar ut för själva kanalen är en sak mellan dig och den leverantören.
Hur testar jag utan att skicka riktiga meddelanden?
Använd en nyckel som börjar med om_test_. Varje konto har en sandlådekanal per typ, till exempel ch_test_whatsapp. Inget levereras eller debiteras, och statusarna simuleras: en mottagare som slutar på 0000 misslyckas, 0001 stannar på skickat, 0002 blir dessutom läst, och allt annat levereras inom ungefär två sekunder.
Vad händer när mitt saldo tar slut?
API:et svarar 402 insufficient_balance och inget läggs i kö, så du blir aldrig skyldig pengar i efterhand. Du kan prenumerera på händelsen balance.low eller slå på automatisk påfyllning, så fylls plånboken på när saldot sjunker under ett tröskelvärde som du väljer.
Behöver jag ett SDK?
Nej. API:et är JSON över HTTPS med bearer-autentisering, så vilken HTTP-klient som helst fungerar. Dokumentationen har exempel i cURL, Node, Python och PHP.
Skicka ditt första meddelande i testläge redan i dag
Skapa ett konto, kopiera en testnyckel och anropa API:et innan du har anslutit en enda kanal. Varje nytt konto börjar med 100 kostnadsfria meddelanden.