Skip to main content

Endpoint

POST /api/v1/messages/send
Authentification : x-api-key: <api_key> Le message est accepté en queued, puis envoyé de façon asynchrone.

Paramètres

Body

ChampTypeRequisDescription
instanceIdUUIDouiInstance WhatsApp source
tostringouiNuméro E.164
typeenumoui si pas de templateIdType du message libre
templateIdUUIDoui si pas de typeTemplate MsgFlash à utiliser
textstringselon typeCorps du message libre
mediaUrlstringselon typeURL publique du media
latitudenumbersi type=locationLatitude
longitudenumbersi type=locationLongitude
locationNamestringnonNom du lieu
locationAddressstringnonAdresse du lieu
contactIdUUIDnonContact partagé ou contexte template
variablesobjectnonValeurs injectées dans custom.*
Il n’y a ni path params ni query params sur cette route.

Mode 1 — Message libre

Texte

curl -X POST https://srv.msgflash.com/api/v1/messages/send \
  -H "x-api-key: msgf_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "instanceId": "YOUR_INSTANCE_ID",
    "to": "+22912345678",
    "type": "text",
    "text": "Bonjour, votre commande est prête."
  }'

Media, localisation et contact

{
  "instanceId": "YOUR_INSTANCE_ID",
  "to": "+22912345678",
  "type": "image",
  "mediaUrl": "https://cdn.example.com/banner.jpg",
  "text": "Nouvelle collection"
}

Mode 2 — Envoi via template

Vous pouvez envoyer un message en fournissant templateId à la place de type.
curl -X POST https://srv.msgflash.com/api/v1/messages/send \
  -H "x-api-key: msgf_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "instanceId": "YOUR_INSTANCE_ID",
    "to": "+22912345678",
    "contactId": "CONTACT_UUID",
    "templateId": "TEMPLATE_UUID",
    "variables": {
      "app": "MsgFlash",
      "coupon": "PROMO10"
    }
  }'
Le backend :
  • charge le template
  • résout contact.*, user.*, instance.*
  • injecte vos valeurs libres dans custom.*
  • enregistre le texte rendu final dans Message.body
Exemple de template :
Bonjour {{contact.firstName}}, bienvenue sur {{custom.app}} depuis {{instance.name}}.
Variables supportées :
  • contact.*
  • user.*
  • instance.*
  • custom.*
Pour les variables contact.*, fournissez contactId si vous voulez un contexte contact enrichi.

Réponse succès

{
  "data": {
    "id": "msg_uuid",
    "instanceId": "inst_uuid",
    "contactId": "cnt_uuid",
    "campaignId": null,
    "type": "text",
    "to": "+22912345678",
    "body": "Bonjour Awa, bienvenue sur MsgFlash depuis Boutique Porto-Novo.",
    "mediaUrl": null,
    "status": "queued",
    "providerMessageId": null,
    "createdAt": "2026-04-01T10:00:00.000Z",
    "updatedAt": "2026-04-01T10:00:00.000Z"
  }
}

Erreurs courantes

CodeHTTPQuand
VALIDATION_ERROR400Body invalide
TEMPLATE_INVALID400Placeholder ou template invalide
TEMPLATE_VARIABLES_MISSING400Variables template manquantes
TEMPLATE_CONTEXT_UNAVAILABLE400contactId ou instanceId de contexte invalide
NOT_FOUND404Instance, contact ou template introuvable
SUBSCRIPTION_INACTIVE403Souscription non exploitable
MONTHLY_OUTBOUND_QUOTA_EXCEEDED429Quota mensuel épuisé

Statuts possibles

queued → sent → delivered → read
                   └──────→ failed
StatutDescription
queuedMessage accepté et mis en file
sentTransmis à WhatsApp
deliveredLivré sur l’appareil
readLu par le destinataire
failedÉchec d’envoi

Suivre le statut

  1. GET /api/v1/messages/{id}
  2. Webhooks message.sent, message.delivered, message.read, message.failed
Voir Webhooks.