Send Messages Guide
This guide shows how to send WhatsApp messages via the Pilot Status API. All sends go through a single endpoint:x-api-key: ps_... header (or x-api-key-id) with a number-scoped key — see API Authentication. There is no Bearer-token auth.
The endpoint has three mutually exclusive modes: template send (templateId), free-form text (text), and direct media (media + mediaType). Full reference: POST /v1/messages/send.
Prerequisites
- A connected WhatsApp number (dashboard
/numbers). - An API key for that number (dashboard
/api-keys). - For template sends: a template created in
/templates(Meta numbers require Meta approval).
1. Send a template message
The most reliable mode — works at any time, including outside the 24h window on Meta numbers.2. Send free-form text
Send plain text with thetext field (no templateId).
buttons (and, with buttons, a header/footer) to free-form messages — see the send reference.
3. Send direct media
Send an image, video, document, or audio on its own — providemedia + mediaType, with no templateId and no text. An optional caption is allowed for image/video/document (not audio). mediaType: "audio" is delivered as a WhatsApp voice note (PTT).
Media sends require an active paid subscription (otherwise 402
SUBSCRIPTION_REQUIRED_FOR_MEDIA). Base64 data URIs are accepted on Meta Cloud API and Evolution v2; Evolution GO numbers require a public http(s) URL.4. Track delivery
The202 response returns an id. Persist it and:
- Poll
GET /v1/messages/{id}forQUEUED→SENT→DELIVERED→READ(orFAILED/CANCELED), or - Consume webhooks — the response
idmatchesinternalMessageIdinmessage.sent,message.delivered,message.read, andmessage.failed.
Next steps
- Full field reference and error codes: POST /v1/messages/send
- Scheduling with
deliverAtand canceling: DELETE /v1/messages/cancel - Failure diagnostics: Log Error Codes