Skip to content

WhatsApp Messaging API

Send and receive WhatsApp Business messages from your own backend. One HTTP endpoint, one API key, and none of Meta’s apparatus to stand up.

https://vaarto.com/api/v1

Every example on these pages uses it. It is also printed at the top of Dashboard → Using the API, alongside your own numbers and templates.

HTTPS, JSON in and JSON out. Send Content-Type: application/json on every request that has a body.

Every response is wrapped. Success carries data; failure carries error.

{ "data": … } // success
{ "error": { "code": "…", "message": "…" } } // failure

Lists add a meta block:

{ "data": [ … ], "meta": { "page": 1, "perPage": 20, "total": 134 } }

The one exception is downloading an attachment, which answers with the file itself — see Media.

Dashboard → API Keys → Create key. Pick the scopes you need.

Templates must be approved by Meta, and you can only send from a number registered to your workspace. Nothing needs hard-coding: ask.

Terminal window
# Approved templates, and the variables each one needs.
curl "https://vaarto.com/api/v1/templates?status=APPROVED" \
-H "Authorization: Bearer $KEY"
# Numbers you may send from. isDefault is used when you omit "from".
curl "https://vaarto.com/api/v1/numbers" \
-H "Authorization: Bearer $KEY"
Terminal window
curl -X POST "https://vaarto.com/api/v1/messages/whatsapp" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+919876543210",
"template": {
"name": "order_shipped",
"language": "en_US",
"variables": {
"name": "Ravi",
"order_id": "BLR-4471"
}
},
"idempotencyKey": "order-4471-shipped"
}'

201 Created comes back with the message id and status: "SENT" — which means Meta accepted it, not that it has arrived. Delivery follows as a webhook.

That is the whole integration for a backend that sends order updates. Everything after this page is detail you reach for when you need it.