WhatsApp quickstart
Send your first WhatsApp message in about five minutes — one API key does everything: find your channel, send a text, and receive replies, all with copy-paste curl.
1. Create an API key
In the dashboard, go to Developers → API keys and create a key with the developer role (admin or owner work too — a viewer key can only read). The secret looks like vai_live_xxxxxxxxxxxxxxxx and is shown once — copy it now. Send it in the X-API-Key header on every call below, from your server only.
Check the key and get your organization id — every WhatsApp route below has it in the path:
curl https://api.telenow.ai/api/v1/me \
-H "X-API-Key: vai_live_…"
{
"org_id": "7f3c9a12-…",
"org_name": "Acme Corp",
"key_id": "c41e…",
"key_name": "WhatsApp server",
"key_role": "developer"
}
Use org_id as {orgId} below. What the key can reach, and its limits, are in Authentication & channels.
2. Find your channel
A channel is one of your connected WhatsApp numbers. List them and read the id:
curl https://api.telenow.ai/api/orgs/{orgId}/whatsapp-hub/channels \
-H "X-API-Key: vai_live_…"
{
"success": true,
"data": {
"channels": [
{ "id": "b1e2c3d4-…", "label": "Acme Support", "phone": "+14155550100" }
]
}
}
Each channel carries more fields than shown here; id is the one you need — it goes in the path of every send. (Empty list? Connect a number first — see the WhatsApp guide.)
3. Send a text
Post the recipient's E.164 number in to and your text in body:
curl -X POST https://api.telenow.ai/api/orgs/{orgId}/whatsapp-hub/channels/{channelId}/send \
-H "X-API-Key: vai_live_…" \
-H "Content-Type: application/json" \
-d '{
"to": "+919876543210",
"body": "Hi Asha! Your order #1234 has shipped and will arrive Thursday."
}'
{ "success": true, "data": { "wamid": "wamid.HBgLMTQxNTU1MDEwMBUCABIYFj…" } }
That's your first WhatsApp message. The returned wamid is the durable handle on it — you'll match it against delivery events. Free-form text like this only works inside the 24-hour window; outside it, send an approved template on the same channel:
curl -X POST https://api.telenow.ai/api/orgs/{orgId}/whatsapp-hub/channels/{channelId}/send-template \
-H "X-API-Key: vai_live_…" \
-H "Content-Type: application/json" \
-d '{
"to": "+919876543210",
"template": "order_update",
"language": "en_US",
"variables": ["Asha", "#1234"]
}'
It answers with the same { "success": true, "data": { "wamid": … } }. Header media and button parameters go in components — see Template messages.
4. Receive replies
Inbound messages are pushed to your endpoint — you never poll. Subscribe with the same API key. (Events fire for Meta Cloud numbers — set up for you or your own Meta app; for partner and WhatsApp Web numbers, read new messages with GET …/threads.) The /api/v1 response is flat:
curl -X POST https://api.telenow.ai/api/v1/hooks \
-H "X-API-Key: vai_live_…" \
-H "Content-Type: application/json" \
-d '{
"events": ["whatsapp.message.received"],
"target_url": "https://example.com/telenow/whatsapp"
}'
{
"id": "hook_3a91f0",
"target_url": "https://example.com/telenow/whatsapp",
"events": ["whatsapp.message.received"],
"signing_secret": "wh_secret_9c1f7b2e4a…",
"secret": "wh_secret_9c1f7b2e4a…"
}
Save signing_secret now — it's shown once and you need it to verify deliveries. When a customer messages your number, Telenow POSTs a whatsapp.message.received payload to your target_url:
{
"event": "whatsapp.message.received",
"channelId": "b1e2c3d4-…",
"from": "+919876543210",
"wamid": "wamid.HBgLMTIxNTU1NTk4NzYVAgASGBQzQTdBQ0I…",
"type": "text",
"body": "Where is my order #1234?"
}
from— the customer's number, E.164. Reply by passing it astoon/send(step 3).wamid— Meta's message id; quote it withreply_toon/send(Meta Cloud numbers), or match it inwhatsapp.message.statusevents.type—text,image,interactive, and so on; richer types decode into acontentobject.body— the text (empty for non-text types).
Verify the X-VoiceAI-Signature header before trusting a delivery — see Webhooks & events.
Building an app that other orgs install?
Use an app key (vai_app_…) on the /api/app-whatsapp routes instead. It's issued per install and carries only the scopes each org approved. See Authentication & channels.
Next steps
- Authentication & channels — what the key reaches, rate limits, upload sizes.
- WhatsApp overview — the map: both surfaces, the envelope, message-type index.
- Media — images, documents, audio, and video.
- Template messages — re-open a thread outside the 24-hour window.
- Inbox, contacts & segments — assign and resolve conversations, contacts, saved audiences.
- Webhooks & events — every topic, signature verification, delivery semantics.