Template
Create, list and manage your approved WhatsApp templates, and send a template to one number with your own header, body variables and button values. Use this for utility / marketing sends that need a pre-approved template — including one with a PDF / document header (pass the file's public URL as the header, e.g. from the Media endpoint).
httpAuthorizationBearer <token>application/json- response
data*array<array<unknown>>meta*curl -X GET 'https://aexrux.com/api/v1/templates'{ "data": [ [ null ] ], "meta": { "count": 0 }}httpAuthorizationBearer <token>application/json- body
Create a WhatsApp message template. Scramble reads these rules to document the request body. Mirrors the existing TemplateController::store validation.
template_name*stringTemplate name. Required.
length <= 191template_type?|Template type. Defaults to "standard".
"standard""carousel""media""auth"category*stringCategory — Meta numeric id (1/2/3), meta slug, or industry bucket. Required.
header?|Optional header text (max 255 chars).
length <= 255template_body?|Body text (required for standard templates, max 4096 chars).
length <= 4096footer?|Optional footer text (max 255 chars).
length <= 255language?|Language code (e.g. en_US). Defaults to en_US.
length <= 16buttons?|Buttons — CTA / quick-reply array (or parallel-array form).
quick_replies?|Quick-reply buttons (folded into buttons[]).
carousel_data?|Carousel cards payload (for carousel templates).
latitude?|LOCATION header — send a map pin. Provide latitude + longitude (both required together) with an optional name + address.
-90 <= value <= 90longitude?|-180 <= value <= 180location_name?|length <= 191location_address?|length <= 255application/json- response
data*array<unknown>meta*stringcurl -X POST 'https://aexrux.com/api/v1/templates' \ -H 'Content-Type: application/json' \ -d '{ "template_name": "string", "category": "string"}'{ "data": [ null ], "meta": "string"}httpAuthorizationBearer <token>application/json- response
data*string|array<string>meta*stringcurl -X GET 'https://aexrux.com/api/v1/templates/categories'{ "data": "string", "meta": "string"}httpAuthorizationBearer <token>id*integermultipart/form-data- body
to*stringRecipient phone in international format — digits or +E.164 (e.g. 919812345678). Required.
length <= 32header_text?|Value for a {{1}} in a TEXT header. Only for text-header templates.
length <= 1024header_media_url?|Public https URL for an IMAGE / VIDEO / DOCUMENT header. Only for media-header templates.
urilength <= 2048header_media?|OR attach the header file (PDF / image / video) directly in ONE multipart/form-data
request — field name header_media, up to 16 MB. We host it and use it as the header,
so you don't need a separate upload call. Takes precedence over header_media_url.
binarylength <= 16384header_filename?|Display filename the recipient sees for a DOCUMENT header (e.g. "Invoice-2045.pdf"). Optional — when you attach header_media we default it to the uploaded file's own name.
length <= 255body?array<|>|BODY variables, positional -> {{1}}, {{2}}, ... Send a list ["John","12345"] or a 1-indexed map {"1":"John","2":"12345"}. Omit if the body has no variables.
buttons?array<>|Dynamic button parameters, one object per variable button, e.g. [{"index":0,"sub_type":"url","value":"ORDER123"}].
application/json- response
data*meta*stringcurl -X POST 'https://aexrux.com/api/v1/templates/0/send' \ -F 'to=string'{ "data": { "wamid": "string", "status": "sent", "template_id": 0, "template_name": "string", "to": null }, "meta": "string"}httpAuthorizationBearer <token>id*integerapplication/json- response
data*array<unknown>meta*stringcurl -X GET 'https://aexrux.com/api/v1/templates/0'{ "data": [ null ], "meta": "string"}httpAuthorizationBearer <token>id*integerapplication/json- response
data*meta*stringcurl -X DELETE 'https://aexrux.com/api/v1/templates/0'{ "data": { "deleted": true, "message": "string" }, "meta": "string"}httpAuthorizationBearer <token>id*integerapplication/json- body
Update a WhatsApp message template. Scramble reads these rules to document the request body. Mirrors the existing TemplateController::update validation.
template_name*stringTemplate name. Required.
length <= 191template_type?|Template type. Defaults to the existing value.
"standard""carousel""media""auth"category*stringCategory — Meta numeric id (1/2/3), meta slug, or industry bucket. Required.
header?|Optional header text (max 255 chars).
length <= 255template_body*stringBody text. Required (max 4096 chars).
length <= 4096footer?|Optional footer text (max 255 chars).
length <= 255language?|Language code (e.g. en_US). Defaults to the existing value.
length <= 16buttons?|Buttons — CTA / quick-reply array (or parallel-array form).
quick_replies?|Quick-reply buttons (folded into buttons[]).
carousel_data?|Carousel cards payload (for carousel templates).
latitude?|LOCATION header — send a map pin. Provide latitude + longitude (both required together) with an optional name + address.
-90 <= value <= 90longitude?|-180 <= value <= 180location_name?|length <= 191location_address?|length <= 255application/json- response
data*array<unknown>meta*stringcurl -X PUT 'https://aexrux.com/api/v1/templates/0' \ -H 'Content-Type: application/json' \ -d '{ "template_name": "string", "category": "string", "template_body": "string"}'{ "data": [ null ], "meta": "string"}Scheduled
Schedule a WhatsApp send for a future time, list upcoming scheduled messages, and cancel one before it goes out.
Webhook
Register and manage webhook endpoints so Aexrux POSTs real-time events to your server — including inbound messages on EVERY channel (WhatsApp, Facebook, Instagram, Telegram and more): subscribe to `conversation.received` and read `data.channel` + `data.message`. Also message sent / delivered / read / failed, plus campaign and contact events. When you set a signing secret each delivery carries an HMAC-SHA256 signature header you can verify.