Passer au contenu principal

Endpoint

POST /api/v1/messages/send

Important — comment obtenir instanceId

instanceId est obligatoire pour envoyer un message. Ne pas utiliser à la place :
  • name
  • waNumber
Pour obtenir le bon instanceId :
  1. appeler GET /api/v1/instances
  2. sélectionner l’instance voulue
  3. récupérer data[n].id
  4. envoyer cette valeur dans le champ instanceId
Exemple :
  • id = identifiant technique requis par l’API
  • name = libellé lisible
  • waNumber = numéro connecté affiché à l’utilisateur

Body

ChampTypeRequisDescription
instanceIdUUIDouiIdentifiant technique de l’instance MsgFlash, obtenu via GET /api/v1/instances
tostringouiNuméro E.164
typeenumoui si pas de templateIdtext, image, video, audio, document, voice_note, location, contact, buttons
templateIdUUIDoui si pas de typeTemplate à rendre
textstringselon typeCorps du message
mediaUrlstringselon typeURL publique du media
latitudenumbersi locationLatitude
longitudenumbersi locationLongitude
locationNamestringnonNom du lieu
locationAddressstringnonAdresse
contactIdUUIDnonContact partagé ou contexte template
variablesobjectnonValeurs custom.*
titlestringsi buttonsTitre du message boutons
descriptionstringsi buttonsDescription du message boutons
footerstringnonPied de page du message boutons
buttonsarraysi buttonsListe des boutons (max 2)

Boutons

Chaque bouton doit être structuré ainsi :
{
  "title": "reply", // reply | url | call | copy | pix
  "displayText": "Texte du bouton",
  "id": "button_id",
  "url": "https://example.com", // pour type url
  "phoneNumber": "+5511999999999", // pour type call
  "copyCode": "dGV4dA==", // pour type copy
  "currency": "BRL", // pour type pix
  "name": "John Doe", // pour type pix
  "keyType": "random", // pour type pix
  "key": "0ea59ac5-f001-4f0e-9785-c7..." // pour type pix
}

Exemple de requête

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": "INSTANCE_UUID",
    "to": "+33612345678",
    "type": "text",
    "text": "Bonjour"
  }'

Messages avec boutons

Les messages avec boutons nécessitent un compte WhatsApp Business. Ils permettent d’ajouter jusqu’à 2 boutons interactifs.

Types de boutons supportés

TypeDescriptionChamps requis
replyBouton de réponse rapidedisplayText, id
copyBouton pour copier du textedisplayText, copyCode
urlBouton ouvrant une URLdisplayText, url
callBouton pour appelerdisplayText, phoneNumber
pixBouton de paiement Pix (Brésil)displayText, currency, name, keyType, key

Exemple de message avec boutons

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": "INSTANCE_UUID",
    "to": "+33612345678",
    "type": "buttons",
    "title": "Choisissez une option",
    "description": "Que souhaitez-vous faire ?",
    "footer": "Répondez rapidement",
    "buttons": [
      {
        "title": "reply",
        "displayText": "Voir le menu",
        "id": "menu_option"
      },
      {
        "title": "url",
        "displayText": "Visiter le site",
        "url": "https://example.com"
      }
    ]
  }'

Réponse succès 201

{
  "data": {
    "id": "msg_uuid",
    "instanceId": "inst_uuid",
    "contactId": null,
    "campaignId": null,
    "type": "text",
    "to": "+33612345678",
    "body": "Bonjour",
    "mediaUrl": null,
    "status": "queued",
    "warnings": [
      "This instance is still in the warmup phase."
    ],
    "safety": {
      "decision": "warn",
      "riskLevel": "medium",
      "state": "warming",
      "score": 56,
      "reasons": [
        "This instance is still in the warmup phase."
      ],
      "recommendations": [
        "Start with previously engaged contacts before scaling volume."
      ]
    },
    "error": null,
    "providerMessageId": null,
    "createdAt": "2026-04-01T10:00:00.000Z",
    "updatedAt": "2026-04-01T10:00:00.000Z"
  }
}
En V1, les warnings safety n’empêchent pas l’envoi. Ils servent uniquement de guidance.

Erreurs courantes

HTTPCodeQuand
400VALIDATION_ERRORBody invalide
400TEMPLATE_INVALIDTemplate invalide
400TEMPLATE_VARIABLES_MISSINGVariables requises manquantes
400TEMPLATE_CONTEXT_UNAVAILABLEContact ou instance de contexte invalide
403SUBSCRIPTION_INACTIVESouscription non exploitable
403UNSUPPORTED_FEATUREFonctionnalité non supportée (boutons sans WhatsApp Business)
404NOT_FOUNDInstance, contact ou template introuvable
429MONTHLY_OUTBOUND_QUOTA_EXCEEDEDQuota d’envoi épuisé