|
account
string · in body
Required
|
The name of your active WhatsApp account, as shown under WhatsApp → Accounts. |
|
template
string · in body
Required
|
The name of an active, approved template. |
|
to
array · in body
Required
|
List of WhatsApp numbers as numbers (not text), for example [255712345678]. Every per-recipient list below follows this order. |
|
personalisation
array · in body
Required if the template body has {placeholders}
|
One object per recipient, in "to" order. Keys are the body placeholders without braces, e.g. {"name": "Asha", "number": "123456"} for "Hi {name}, your order {number}…". No value may be empty. |
|
header.image
object · in body
Required if the template header is an image
|
One image for every recipient. Use header.images instead to give each recipient their own image; do not send both. |
|
header.image.file
string · in body
Required with header.image
|
A public https link to the image, or base64 data. PNG or JPEG, up to 3 MB. |
|
header.image.name
string · in body
Optional
|
Optional file name for the image. Can be empty. |
|
header.image.personalisation.qr_code_url
object · in body
Required if the template prints a QR code on the image
|
Draws a QR code on the image for each recipient, e.g. an event ticket. The QR code holds the template's QR link with {par} replaced by that recipient's value. All four fields below are required. |
|
header.image.personalisation.qr_code_url.x_start
number · in body
Required with qr_code_url
|
Left edge of the QR code, as a percentage (0–100) of the image width. |
|
header.image.personalisation.qr_code_url.y_start
number · in body
Required with qr_code_url
|
Top edge of the QR code, as a percentage (0–100) of the image height. |
|
header.image.personalisation.qr_code_url.size
number · in body
Required with qr_code_url
|
Width and height of the QR code, as a percentage (0–100) of the image's shorter side. A QR code that would go past the edge is moved inside the image. |
|
header.image.personalisation.qr_code_url.parameters
array · in body
Required with qr_code_url
|
The value put into the QR link for each recipient, in "to" order, e.g. their ticket number. |
|
header.images
array · in body
Required for one image per recipient
|
A different image for each recipient, in "to" order: [{"file": "...", "name": ""}, ...]. Same file rules as header.image.file. The number of entries must equal the number of recipients. |
|
header.document
object · in body
Required if the template header is a document
|
One PDF for every recipient. Use header.documents instead to give each recipient their own PDF; do not send both. |
|
header.document.file
string · in body
Required with header.document
|
A public https link to the PDF, or base64 data. PDF only, up to 1 MB. |
|
header.document.name
string · in body
Optional
|
The file name the recipient sees, e.g. "Invoice.pdf". |
|
header.document.caption
string · in body
Optional
|
Optional text shown under the document. |
|
header.documents
array · in body
Required for one document per recipient
|
A different PDF for each recipient, in "to" order: [{"file": "...", "name": "Invoice-Asha.pdf", "caption": ""}, ...]. Same rules as header.document. The number of entries must equal the number of recipients. |
|
header.location
object · in body
Required if the template header is a location
|
A map pin shown at the top of the message. All four fields below are required. |
|
header.location.latitude
string · in body
Required with header.location
|
Latitude in decimal degrees. |
|
header.location.longitude
string · in body
Required with header.location
|
Longitude in decimal degrees. |
|
header.location.name
string · in body
Required with header.location
|
Name of the place. |
|
header.location.address
string · in body
Required with header.location
|
Address of the place. |
|
header.text.personalisation.parameters
array · in body
Required if the header text has a placeholder
|
For a text header with a placeholder, e.g. "Order {par}": the value for each recipient, in "to" order. |
|
button.personalisation.url_link.parameters
array · in body
Required if the link button is dynamic
|
For a "Visit website" button whose link ends with a placeholder: the end of the link for each recipient, in "to" order. |
|
button.personalisation.copy_code.parameters
array · in body
Required if the template has a copy-code button
|
For a "Copy offer code" button (marketing templates): the coupon code each recipient copies, in "to" order. |
|
button.personalisation.copy_otp_code.parameters
array · in body
Required if the template has a copy-OTP button
|
For a "Copy code" button on authentication (one-time password) templates: the OTP code for each recipient, in "to" order. |
|
button.personalisation.quick_reply.parameters
object · in body
Optional
|
Optional custom payloads for quick-reply buttons. Keys are the button's position among the quick-reply buttons ("0" = first, "1" = second, …); each value is a list with one payload per recipient, in "to" order. When the person taps that button, the payload comes back to you in the reply callback, so you know who answered what. Without it, the button works with no payload. |
|
reference
string · in body
Optional
|
Your own label for this send (up to 50 characters, no spaces). |
|
date
string · in body
Required with time
|
Send later on this date, format YYYY-MM-DD (East Africa Time). Must be today or later. |
|
time
string · in body
Required with date
|
Send later at this time, 24-hour format HH:MM (East Africa Time, UTC+3). |