Hopp til innholdet

API for meldingsgateway

Ett API for alle meldingskanaler

Send meldinger via WhatsApp Business, SMS, Telegram, Messenger, Instagram og TikTok gjennom ett enkelt REST-endepunkt. Forhåndsbetalt, belastes per utgående melding, med leveringswebhooker og en testmodus.

Fra
0,0003 $
per utgående melding
Ved registrering
100
gratis meldinger
Bindingstid
Ingen
forhåndsbetalt, uten avtale
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 bak ett og samme endepunkt
  • Meldingstyper9, fra tekst til interaktive lister
  • Pris fra0,0003 $ per utgående melding
  • Forespørselsgrense100 forespørsler per sekund per nøkkel
  • BatchstørrelseOpptil 100 meldinger per forespørsel
  • Nye webhookforsøk8, med økende ventetid fra 30 sekunder til 24 timer
  • Idempotensvindu24 timer
  • TestmodusGratis, ingen kanal kreves
  • Mislykkede meldingerRefunderes automatisk
  • Innkommende meldingerGratis

Slik fungerer det

Fra registrering til levert melding i fire steg

Ingen salgssamtale og ingen minsteforpliktelse. Du kan gjøre ditt første API-kall i testmodus ett minutt etter at du har opprettet en konto.

  1. Steg 01

    Opprett en konto

    Registrer deg, bekreft e-postadressen din og opprett en API-nøkkel i konsollen. Testnøkler fungerer umiddelbart, før noen kanal er koblet til.

  2. Steg 02

    Koble til en kanal

    Logg inn med Facebook eller TikTok i konsollen for å koble til et WhatsApp-nummer, en side eller en bedriftskonto. Legg til en Telegram-bot eller et Twilio-nummer med påloggingsopplysningene, i konsollen eller med POST /v1/channels.

  3. Steg 03

    Send gjennom ett endepunkt

    POST /v1/messages tar imot en kanal-ID, en mottaker og et typet innholdsobjekt. Forespørselsformatet er det samme for alle kanaler.

  4. Steg 04

    Følg hver levering

    Signerte webhooker rapporterer sendt, levert, lest og mislykket. Den samme historikken finnes i konsollen og via GET /v1/messages.

Meldingstyper

Det du sender, er det mottakeren ser

Hver melding har en type og et innholdsobjekt under en nøkkel med typens navn. Velg en type for å se forespørselens innhold ved siden av meldingen den gir.

POST /v1/messages
{
  "channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
  "to": "+971501234567",
  "type": "text",
  "text": {
    "body": "Bestillingen din #1042 er sendt. Følg den på https://example.com/t/1042",
    "preview_url": true
  },
  "reference": "order-1042"
}

Ren tekst, som alle kanaltyper godtar. Angi preview_url hvis kanalen skal vise en forhåndsvisning av lenken.

KanalerWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram og TikTok

Konsoll

En konsoll for alt som ikke er kode

Opprett nøkler, koble til kanaler, søk i meldingsloggen, send webhookleveringer på nytt og administrer faktureringen. Alt konsollen viser, er også tilgjengelig via API-et.

Oversikt. Lommeboksaldo, gjenværende pakkekreditter og utgående volum de siste 30 dagene, per konto og per modus. Bildene på denne siden er tegnet med eksempeldata.
Meldingslogg. Filtrer på kanal, status, mottaker eller din egen referanse, og åpne en melding for å se statushistorikken og hva den ble belastet med.
Fakturering. Fyll på lommeboken, kjøp pakker, sett opp automatisk påfylling og last ned kvitteringer. Pakkekreditter viser hva som er igjen, og når det utløper.

Priser

Betal per melding, eller kjøp meldinger i pakker

Fyll på en forhåndsbetalt lommebok fra 10 $ og betal prisen per melding for hver kanal, eller kjøp en pakke med meldingskreditter for volum på de dyreste kanalene dine.

10k meldinger

8 $

0,0008 $ per melding

  • 10 000 utgående meldinger
  • Gyldig i 3 måneder fra kjøpet
  • Gyldig for alle kanaltyper
Start med 10k

100k meldinger

Anbefalt

60 $

0,0006 $ per melding

  • 100 000 utgående meldinger
  • Gyldig i 6 måneder fra kjøpet
  • Gyldig for alle kanaltyper
Start med 100k

1 mill. meldinger

400 $

0,0004 $ per melding

  • 1 000 000 utgående meldinger
  • Gyldig i 12 måneder fra kjøpet
  • Gyldig for alle kanaltyper
Start med 1 mill.

Betal etter forbruk

Pris etter forbruk per utgående melding og kanaltype, i amerikanske dollar
KanalPer melding
WhatsApp Business0,001 $
SMS0,0005 $
SMS OTP0,0005 $
Telegram0,0003 $
Messenger0,0005 $
Instagram0,0005 $
TikTok0,0005 $

Hva prisen dekker

  • BelastesUtgående meldinger som API-et godtar, i det øyeblikket de godtas.
  • GratisInnkommende meldinger, meldinger i testmodus, webhooker og konsollen.
  • RefunderesEnhver melding som ender som mislykket, tilbake til pakken eller lommeboken den ble trukket fra.
  • SeparatAvgifter som Meta, operatører eller andre leverandører krever for selve kanalen.

Utvikleropplevelse

Bygget for å integreres én gang og så passe seg selv

Signerte webhooker, trygge nye forsøk, en sandkasse som oppfører seg som produksjon, og feil du kan forgrene koden på.

Webhooker du kan verifisere

Hver levering signeres med HMAC-SHA256 over tidsstempelet og den rå meldingskroppen, i headeren OmniMessage-Signature. Svar med en hvilken som helst 2xx-kode innen 10 sekunder. Mislykkede leveringer forsøkes på nytt åtte ganger med økende ventetid, fra 30 sekunder opptil 24 timer.

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

En testmodus som ikke koster noe

Testnøkler bruker innebygde sandkassekanaler, så det er ingenting å koble til. De siste sifrene i mottakeren avgjør det simulerte utfallet, og webhookene dine kalles akkurat som i produksjon.

Sandkasseforespørsel, ender som lest
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" }
  }'

Feil med en type og en kode

Alle svar som ikke er 2xx, har det samme innholdet: en type for feilklassen, en stabil code å forgrene på, den aktuelle param der det finnes en, og en request_id til kundestøtte.

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-kall

    Send headeren Idempotency-Key, så returnerer et nytt forsøk innen 24 timer det lagrede svaret med Idempotent-Replayed: true, uten at noe sendes eller belastes to ganger.

  • Forutsigbare grenser

    100 forespørsler per sekund per nøkkel på POST /v1/messages, 20 ellers. Hvert svar inneholder RateLimit-Remaining, og et 429-svar inneholder Retry-After.

  • Batchsending

    POST /v1/messages/batch tar imot opptil 100 meldinger. Hvert element godtas, avvises og belastes for seg, og 207-svaret rapporterer dem etter indeks.

  • Nøkler med avgrenset tilgang

    Gi hver nøkkel bare de omfangene den trenger, for eksempel messages:write eller billing:read, og begrens den til en liste over tillatte IP-adresser.

Spørsmål

Før du integrerer

De korte svarene. De lange finner du i dokumentasjonen.

Trenger jeg mitt eget WhatsApp-nummer, min egen bot eller mitt eget SMS-nummer?

Ja. OmniMessage er en gateway der du tar med din egen kanal: du kobler til ditt eget WhatsApp Cloud API-nummer, din Telegram-bot, ditt Twilio-nummer eller din konto i sosiale medier, og du beholder eierskapet til den. Kanalsiden viser hva hver type krever.

Hva nøyaktig blir jeg belastet for?

Én belastning per utgående melding som API-et godtar: en pakkekreditt hvis du har en, ellers kanaltypens pris per melding fra lommeboken din. Innkommende meldinger og meldinger i testmodus er gratis, og en melding som ender som mislykket, refunderes automatisk.

Er avgifter til Meta, operatører eller leverandører inkludert?

Nei. Gatewayavgiften dekker API-et, leveringssporingen, webhookene og konsollen. Avgifter som Meta, Twilio eller en annen leverandør krever for selve kanalen, er en sak mellom deg og den leverandøren.

Hvordan tester jeg uten å sende ekte meldinger?

Bruk en nøkkel som begynner med om_test_. Hver konto har en sandkassekanal per type, for eksempel ch_test_whatsapp. Ingenting leveres eller belastes, og statusene simuleres: en mottaker som slutter på 0000, mislykkes, 0001 blir stående som sendt, 0002 blir i tillegg lest, og alt annet leveres innen omtrent to sekunder.

Hva skjer når saldoen min er brukt opp?

API-et svarer 402 insufficient_balance, og ingenting legges i kø, så du blir aldri skyldig penger i etterkant. Du kan abonnere på hendelsen balance.low eller slå på automatisk påfylling, slik at lommeboken fylles på når saldoen faller under en terskel du selv velger.

Trenger jeg en SDK?

Nei. API-et er JSON over HTTPS med bearer-autentisering, så enhver HTTP-klient fungerer. Dokumentasjonen har eksempler i cURL, Node, Python og PHP.

Send din første melding i testmodus allerede i dag

Opprett en konto, kopier en testnøkkel og kall API-et før du har koblet til en eneste kanal. Alle nye kontoer starter med 100 gratis meldinger.