Aller au contenu

API de passerelle de messagerie

Une seule API pour tous les canaux de messagerie

Envoyez des messages WhatsApp Business, SMS, Telegram, Messenger, Instagram et TikTok par un seul point de terminaison REST. Prépayé, facturé au message sortant, avec webhooks de distribution et mode test.

À partir de
0,0003 $
par message sortant
À l’inscription
100
messages gratuits
Engagement
Aucun
prépayé, sans contrat
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
}
  • Types de canaux7 derrière un seul point de terminaison
  • Types de messages9, du texte aux listes interactives
  • Prix à partir de0,0003 $ par message sortant
  • Limite de débit100 requêtes par seconde et par clé
  • Taille des lotsJusqu’à 100 messages par requête
  • Nouvelles tentatives de webhook8, avec un délai croissant de 30 secondes à 24 heures
  • Fenêtre d’idempotence24 heures
  • Mode testGratuit, aucun canal requis
  • Messages en échecRemboursés automatiquement
  • Messages entrantsGratuits

Fonctionnement

De l’inscription au message distribué en quatre étapes

Pas d’appel commercial, pas d’engagement minimum. Vous pouvez effectuer votre premier appel API en mode test une minute après avoir créé votre compte.

  1. Étape 01

    Créez un compte

    Inscrivez-vous, vérifiez votre adresse e-mail et créez une clé API dans la console. Les clés de test fonctionnent immédiatement, avant même qu’un canal soit connecté.

  2. Étape 02

    Connectez un canal

    Connectez-vous avec Facebook ou TikTok dans la console pour connecter un numéro WhatsApp, une Page ou un compte professionnel. Ajoutez un bot Telegram ou un numéro Twilio avec ses identifiants, dans la console ou avec POST /v1/channels.

  3. Étape 03

    Envoyez par un seul point de terminaison

    POST /v1/messages prend un ID de canal, un destinataire et un objet de contenu typé. La forme de la requête est la même sur tous les canaux.

  4. Étape 04

    Suivez chaque distribution

    Des webhooks signés signalent les statuts envoyé, distribué, lu et échec. Le même historique est disponible dans la console et avec GET /v1/messages.

Types de messages

Ce que vous envoyez est ce qu’ils voient

Chaque message a un type et un objet de contenu placé sous la clé de ce type. Choisissez-en un pour voir le corps de la requête à côté du message qu’il produit.

POST /v1/messages
{
  "channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
  "to": "+971501234567",
  "type": "text",
  "text": {
    "body": "Votre commande n° 1042 a été expédiée. Suivez-la sur https://example.com/t/1042",
    "preview_url": true
  },
  "reference": "order-1042"
}

Du texte brut, accepté par tous les types de canaux. Définissez preview_url pour laisser le canal afficher un aperçu du lien.

CanauxWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram et TikTok

Console

Une console pour tout ce qui n’est pas du code

Créez des clés, connectez des canaux, recherchez dans le journal des messages, rejouez des livraisons de webhooks et gérez la facturation. Tout ce qu’affiche la console est également disponible par l’API.

Vue d’ensemble. Solde du portefeuille, crédits de forfait restants et volume sortant des 30 derniers jours, par compte et par mode. Les écrans de cette page sont illustrés avec des données d’exemple.
Journal des messages. Filtrez par canal, statut, destinataire ou par votre propre référence, et ouvrez n’importe quel message pour voir l’historique de ses statuts et ce qu’il a coûté.
Facturation. Rechargez le portefeuille, achetez des forfaits, configurez la recharge automatique et téléchargez vos reçus. Les crédits de forfait indiquent ce qu’il reste et la date d’expiration.

Tarifs

Payez au message, ou achetez des messages en volume

Rechargez un portefeuille prépayé à partir de 10 $ et payez le prix par message de chaque canal, ou achetez un forfait de crédits de messages pour vos volumes sur vos canaux les plus chers.

10 k messages

8 $

0,0008 $ par message

  • 10 000 messages sortants
  • Valable 3 mois à compter de l’achat
  • Valable sur tous les types de canaux
Commencer avec le forfait 10 k

100 k messages

Recommandé

60 $

0,0006 $ par message

  • 100 000 messages sortants
  • Valable 6 mois à compter de l’achat
  • Valable sur tous les types de canaux
Commencer avec le forfait 100 k

1 M messages

400 $

0,0004 $ par message

  • 1 000 000 messages sortants
  • Valable 12 mois à compter de l’achat
  • Valable sur tous les types de canaux
Commencer avec le forfait 1 M

Paiement à l’usage

Prix à l’usage par message sortant selon le type de canal, en dollars américains
CanalPar message
WhatsApp Business0,001 $
Telegram0,0003 $
SMS0,0005 $
SMS OTP0,0005 $
Messenger0,0005 $
Instagram0,0005 $
TikTok0,0005 $

Ce que couvre le prix

  • FacturéLes messages sortants acceptés par l’API, au moment où ils sont acceptés.
  • GratuitLes messages entrants, les messages en mode test, les webhooks et la console.
  • RembourséTout message qui se termine en échec, sur le forfait ou le portefeuille d’où il provenait.
  • À partLes frais que Meta, les opérateurs ou d’autres fournisseurs facturent pour le canal lui-même.

Expérience développeur

Conçu pour être intégré une fois, puis oublié

Des webhooks signés, des nouvelles tentatives sans risque, un bac à sable qui se comporte comme la production et des erreurs sur lesquelles votre code peut s’appuyer.

Des webhooks vérifiables

Chaque livraison est signée en HMAC-SHA256 sur l’horodatage et le corps brut, dans l’en-tête OmniMessage-Signature. Répondez avec n’importe quel statut 2xx dans un délai de 10 secondes. Les livraisons en échec font l’objet de huit nouvelles tentatives à intervalles croissants, de 30 secondes à 24 heures.

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;
}
Événement 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"
    }
  }
}

Un mode test qui ne coûte rien

Les clés de test utilisent des canaux bac à sable intégrés : il n’y a donc rien à connecter. Les derniers chiffres du destinataire déterminent le résultat simulé, et vos webhooks se déclenchent comme en production.

Requête bac à sable, se termine à l’état lu
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" }
  }'

Des erreurs dotées d’un type et d’un code

Toute réponse autre que 2xx a le même corps : un type pour la catégorie d’échec, un code stable sur lequel fonder votre logique, le param en cause lorsqu’il y en a un, et un request_id pour l’assistance.

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"
  }
}
  • Des POST idempotents

    Envoyez un en-tête Idempotency-Key : une nouvelle tentative dans les 24 heures renvoie la réponse enregistrée avec Idempotent-Replayed: true, sans envoyer ni facturer deux fois.

  • Des limites prévisibles

    100 requêtes par seconde et par clé sur POST /v1/messages, 20 ailleurs. Chaque réponse contient RateLimit-Remaining, et une réponse 429 contient Retry-After.

  • Envoi par lots

    POST /v1/messages/batch accepte jusqu’à 100 messages. Chaque élément est accepté, rejeté et facturé séparément, et la réponse 207 les détaille par indice.

  • Des clés à portée limitée

    Donnez à chaque clé uniquement les portées dont elle a besoin, par exemple messages:write ou billing:read, et restreignez-la à une liste d’adresses IP autorisées.

Questions

Avant d’intégrer

Les réponses courtes. La documentation contient les réponses détaillées.

Ai-je besoin de mon propre numéro WhatsApp, bot ou numéro SMS ?

Oui. OmniMessage est une passerelle à laquelle vous apportez vos propres canaux : vous connectez votre propre numéro WhatsApp Cloud API, bot Telegram, numéro Twilio ou compte social, et vous en restez propriétaire. La page Canaux indique ce qu’il faut pour chaque type.

Qu’est-ce qui m’est facturé exactement ?

Un débit par message sortant accepté par l’API : un crédit de forfait si vous en avez un, sinon le prix par message du type de canal, prélevé sur votre portefeuille. Les messages entrants et les messages en mode test sont gratuits, et un message qui se termine en échec est remboursé automatiquement.

Les frais de Meta, des opérateurs ou des fournisseurs sont-ils inclus ?

Non. Les frais de passerelle couvrent l’API, le suivi de distribution, les webhooks et la console. Les frais que Meta, Twilio ou un autre fournisseur facturent pour le canal lui-même restent entre vous et ce fournisseur.

Comment tester sans envoyer de vrais messages ?

Utilisez une clé commençant par om_test_. Chaque compte dispose d’un canal bac à sable par type, par exemple ch_test_whatsapp. Rien n’est distribué ni facturé et les statuts sont simulés : un destinataire se terminant par 0000 échoue, 0001 reste à l’état envoyé, 0002 est en plus lu, et tout autre destinataire est distribué en deux secondes environ.

Que se passe-t-il lorsque mon solde est épuisé ?

L’API répond 402 insufficient_balance et rien n’est mis en file d’attente : vous ne devez donc jamais d’argent après coup. Vous pouvez vous abonner à l’événement balance.low ou activer la recharge automatique pour recharger le portefeuille lorsqu’il passe sous le seuil de votre choix.

Ai-je besoin d’un SDK ?

Non. L’API utilise du JSON sur HTTPS avec une authentification par jeton bearer : n’importe quel client HTTP convient. La documentation propose des exemples en cURL, Node, Python et PHP.

Envoyez votre premier message en mode test dès aujourd’hui

Créez un compte, copiez une clé de test et appelez l’API avant même de connecter un canal. Chaque nouveau compte démarre avec 100 messages gratuits.