Référence
Messages Envoi transactionnel WhatsApp (texte, média, petit lot). Par défaut le destinataire n’est pas ajouté à la base contacts — passez saveContact: true pour un find-or-create. Quota messages dashboard inchangé. En-tête optionnel Idempotency-Key sur send / send-media.
Base URL : https://sandbox-api.reachflow.me/api/v1
Modèle de données Champs Nom Type Description messageId string (uuid) Identifiant du message sortant API. status enum queued, processing, sent, delivered, failed, cancelled. to string Destinataire (format international). providerId string (uuid) Channel provider utilisé. queuedAt timestamp Date de mise en file. sentAt timestamp | null Date d’envoi effectif. deliveredAt timestamp | null Accusé de livraison WhatsApp.
POST /api/v1/messages/send
Envoyer un message texte Met en file un message texte vers un destinataire. Le provider doit être connecté.
Scope requis : messages:send
Attributs requis Nom Type Description providerId* string (uuid) Provider expéditeur. to* string Numéro destinataire (8–20 car.). message* string Corps du message (1–4096 car.). variables object Variables pour modèle {{clé}}. scheduleAt string (ISO 8601) Envoi différé optionnel. saveContact boolean false (défaut) : envoi sans créer de contact. true : find-or-create en base (quota contacts).
Requête cURL Node.js PHP
curl --request POST \
"https://sandbox-api.reachflow.me/api/v1/messages/send" \
--header "X-API-Key: rfl_live_VOTRE_CLE" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
--data '{ "providerId": "a3f1b2c4-1234-4abc-9def-000011112222", "to": "22996123456", "message": "Bonjour depuis ReachFlow !" }'Réponse {
"messageId": "7f9e1234-abcd-4ef0-8765-aabbccddeeff",
"status": "queued",
"queuedAt": "2026-05-30T10:45:00.000Z"
}POST /api/v1/messages/send-media
Envoyer un média Envoie une image, vidéo, audio ou document via URL publique.
Scope requis : messages:send
Attributs requis Nom Type Description providerId* string (uuid) Provider expéditeur. to* string Numéro destinataire. mediaUrl* string (url) URL HTTPS du fichier. mediaType* enum image, document, audio, video. caption string Légende optionnelle.
Requête cURL Node.js PHP
curl --request POST \
"https://sandbox-api.reachflow.me/api/v1/messages/send-media" \
--header "X-API-Key: rfl_live_VOTRE_CLE" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
--data '{ "providerId": "a3f1b2c4-1234-4abc-9def-000011112222", "to": "22996123456", "mediaUrl": "https://example.com/photo.jpg", "mediaType": "image", "caption": "Votre reçu" }'POST /api/v1/messages/send-bulk
Envoi en lot Envoie le même modèle à plusieurs destinataires (limites selon plan). Les refus partiels sont listés dans rejections.
Scope requis : messages:send
Attributs requis Nom Type Description providerId* string (uuid) Provider expéditeur. messageTemplate* string Texte avec variables {{clé}}. recipients* array Liste { to, variables? }. scheduleAt string (ISO 8601) Planification optionnelle.
Requête cURL Node.js PHP
curl --request POST \
"https://sandbox-api.reachflow.me/api/v1/messages/send-bulk" \
--header "X-API-Key: rfl_live_VOTRE_CLE" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
--data '{ "providerId": "a3f1b2c4-1234-4abc-9def-000011112222", "messageTemplate": "Bonjour {{name}}", "recipients": [ { "to": "22996111111", "variables": { "name": "Alice" } }, { "to": "22996222222", "variables": { "name": "Bob" } } ] }'Réponse {
"bulkId": "b1c2d3e4-5678-90ab-cdef-111122223333",
"accepted": 2,
"rejected": 0,
"rejections": [],
"messageIds": [
"…",
"…"
]
}GET /api/v1/messages/{id}
Statut d’un message Consulte le cycle de vie d’un message API précédemment accepté.
Scope requis : messages:read
Paramètres Nom Type Emplacement Description id* string (uuid) path Identifiant message (messageId).
Requête cURL Node.js PHP
curl --request GET \
--get "https://sandbox-api.reachflow.me/api/v1/messages/7f9e1234-abcd-4ef0-8765-aabbccddeeff" \
--header "X-API-Key: rfl_live_VOTRE_CLE" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Réponse {
"messageId": "7f9e1234-abcd-4ef0-8765-aabbccddeeff",
"status": "delivered",
"to": "22996123456",
"providerId": "a3f1b2c4-1234-4abc-9def-000011112222",
"queuedAt": "2026-05-30T10:45:00.000Z",
"sentAt": "2026-05-30T10:45:02.000Z",
"deliveredAt": "2026-05-30T10:45:08.000Z",
"failedAt": null,
"failureCode": null,
"failureReason": null
}