Quickstart
Send a message in four steps. You need a workspace with at least one active WhatsApp number and one approved template.
1. Create an API key
Dashboard → API keys → +. Pick the label and the scopes:
| Scope | Why |
|---|---|
messages:send | to send |
messages:read | to read statuses |
templates:read | to list approved templates |
Copy the key now — it starts with wsk_ and is shown once.
2. Find your template
curl https://api.msgpanda.com/v1/templates \
-H "Authorization: Bearer $API_KEY"
{
"templates": [
{
"id": "2c0a8c9d-dcbf-42b1-b0eb-0c05fe619599",
"name": "order_update",
"language": "en",
"category": "utility",
"status": "approved"
}
]
}
Only status: "approved" templates can be sent.
3. Send
curl -X POST https://api.msgpanda.com/v1/messages \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"to": "919811100010",
"category": "utility",
"template": {
"name": "order_update",
"language": "en",
"components": [
{ "type": "body", "parameters": [
{ "type": "text", "text": "Ravi" },
{ "type": "text", "text": "A-102" }
]}
]
}
}'
{ "id": "ea62acf4-2973-4fec-884a-ddab50214a48", "status": "queued" }
202 Accepted means we queued it. Delivery happens asynchronously.
4. Read the status
curl https://api.msgpanda.com/v1/messages/ea62acf4-2973-4fec-884a-ddab50214a48 \
-H "Authorization: Bearer $API_KEY"
{
"id": "ea62acf4-2973-4fec-884a-ddab50214a48",
"to": "919811100010",
"category": "utility",
"kind": "template",
"status": "sent",
"meta_msg_id": "wamid.HBgM…",
"error": null,
"events": [
{ "kind": "sent", "at": "2026-11-04T21:16:14+05:30" }
]
}
The one rule that matters
Always send an Idempotency-Key. Retry the exact same request with the same key and you get the
original message back instead of a second one:
{ "id": "ea62acf4-…", "status": "sent", "idempotent_replay": true }
Generate a new UUID per logical message, and reuse it across retries (including across process restarts).