Hoppa till innehållet

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"
  }'
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
}
  • Kanaltyper7 bakom en och samma slutpunkt
  • Meddelandetyper9, från text till interaktiva listor
  • Pris från0,0003 $ per utgående meddelande
  • Anropsgräns100 anrop per sekund och nyckel
  • BatchstorlekUpp till 100 meddelanden per anrop
  • Nya webhookförsök8, med växande väntetid från 30 sekunder till 24 timmar
  • Idempotensfönster24 timmar
  • TestlägeKostnadsfritt, ingen kanal krävs
  • Misslyckade meddelandenÅterbetalas automatiskt
  • Inkommande meddelandenKostnadsfria

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.

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

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

  3. Steg 03

    Skicka genom en enda slutpunkt

    POST /v1/messages tar emot ett kanal-ID, en mottagare och ett typat innehållsobjekt. Anropsformatet är detsamma för alla kanaler.

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

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

Översikt. Plånbokssaldo, återstående paketkrediter och de senaste 30 dagarnas utgående volym, per konto och per läge. Bilderna på den här sidan är ritade med exempeldata.
Meddelandelogg. Filtrera på kanal, status, mottagare eller din egen referens, och öppna ett meddelande för att se dess statushistorik och vad det debiterades.
Fakturering. Fyll på plånboken, köp paket, ställ in automatisk påfyllning och ladda ned kvitton. Paketkrediter visar vad som återstår och när det går ut.

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
Börja med 10 tn

100 tn meddelanden

Rekommenderas

60 $

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
Börja med 100 tn

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
Börja med 1 mn

Löpande betalning

Löpande pris per utgående meddelande och kanaltyp, i amerikanska dollar
KanalPer meddelande
WhatsApp Business0,001 $
SMS0,0005 $
SMS OTP0,0005 $
Telegram0,0003 $
Messenger0,0005 $
Instagram0,0005 $
TikTok0,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.

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;
}
Händelsen 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"
    }
  }
}

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.

Sandlådeanrop, slutar som läst
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.

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"
  }
}
  • Idempotenta POST-anrop

    Skicka huvudet Idempotency-Key, så returnerar ett nytt försök inom 24 timmar det sparade svaret med Idempotent-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åller RateLimit-Remaining, och ett 429-svar innehåller Retry-After.

  • Batchsändning

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