Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.msgflash.com/llms.txt

Use this file to discover all available pages before exploring further.

Endpoint

POST /api/v1/messages/schedule
Authentication: x-api-key: <api_key> The difference from /messages/send is the scheduledAt field.

Parameters

Body

FieldTypeRequiredDescription
instanceIdUUIDyesInstance WhatsApp
tostringyesNumber destinataire
scheduledAtISO 8601yesDate future d’envoi
typeenumyes if no templateIdDirect message type
templateIdUUIDyes if no typeTemplate to render
variablesobjectnocustom.* values
Pas de path params ni query params.

Example

curl -X POST https://srv.msgflash.com/api/v1/messages/schedule \
  -H "x-api-key: msgf_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "instanceId": "YOUR_INSTANCE_ID",
    "to": "+33612345678",
    "templateId": "TEMPLATE_UUID",
    "contactId": "CONTACT_UUID",
    "variables": {
      "code": "PROMO10"
    },
    "scheduledAt": "2026-04-02T08:00:00.000Z"
  }'

Other fields follow the same rules as Send a message.

Response

{
  "data": {
    "id": "msg_uuid",
    "status": "queued",
    "body": "Hello Awa, votre code PROMO10 est prêt."
  }
}
Le message reste en queued jusqu’au traitement effectif.

Common errors

CodeHTTPWhen
VALIDATION_ERROR400Invalid body
TEMPLATE_INVALID400Template invalid
TEMPLATE_VARIABLES_MISSING400Variables template missing
NOT_FOUND404Instance, contact, or template not found
MONTHLY_OUTBOUND_QUOTA_EXCEEDED429Quota already exhausted au moment de la planification

Important rules

  • scheduledAt est attendu en UTC
  • une date passée est acceptée et conduit à un envoi immediat
  • le quota monthly est vérifié à la planification puis au moment de l’envoi effectif
  • si l’instance est déconnectée lors du traitement, le message passe en failed
  • les messages planifiés survivent à un redémarrage grâce à BullMQ + Redis