API reference index

A one-page cheatsheet of the whole WhatsApp API surface — each row links to the page with the full request/response detail.


App-key API

Base https://api.telenow.ai/api/app-whatsapp · auth Authorization: Bearer vai_app_… (or X-App-Key: vai_app_…). Works on Meta Cloud numbers; plain text also on WhatsApp Web numbers with the whatsapp:web scope.

MethodPathScopePurposeDocs
GET/channelswhatsappList Meta Cloud numbers (and WhatsApp Web numbers with whatsapp:web)wa-auth
POST/sendwhatsappSend one free-form messagewa-text
POST/send-templatewhatsappSend a pre-approved templatewa-send-template
POST/messages/readwhatsappRead receipt + typingwa-typing
POST/channels/{id}/mediawhatsappUpload/stage media (≤ 101 MB)wa-media
GET/media/{id}whatsappDownload media (by message UUID)wa-media
GET/channels/{id}/templateswhatsappList approved templateswa-send-template
POST/channels/{id}/templateswhatsapp:templatesCreate a templatewa-templates
POST/channels/{id}/templates/mediawhatsapp:templatesStage a media-header for a template defwa-templates
PATCH/templates/{tid}whatsapp:templatesEdit/resubmit a template (note: NOT nested under /channels)wa-templates
POST/campaignswhatsapp:campaignCreate + start a broadcastwa-broadcasts
GET/campaigns/{id}whatsapp:campaignBroadcast status (campaigns this app created)wa-broadcasts
POST/campaigns/{id}/pausewhatsapp:campaignPause a broadcastwa-broadcasts
POST/campaigns/{id}/cancelwhatsapp:campaignCancel a broadcastwa-broadcasts
GET/channels/{id}/threadswhatsappList conversationswa-conversations
GET/threads/{id}/messageswhatsappMessage history for a threadwa-conversations

Org API key routes

Base https://api.telenow.ai/api/orgs/{orgId} · auth X-API-Key: vai_live_… (or a dashboard login). The key is pinned to its own org; any non-GET needs an owner, admin or developer key. The Creator column is the role the key's creator must hold in the org: M any member, OA owner/admin, OAD owner/admin/developer. Bodies and responses use snake_case unless noted. See Use your org API key instead.

/whatsapp-hub — numbers, sending, inbox

MethodPathPurposeCreatorDocs
GET/channelsEvery number in your inboxMwa-quickstart
POST/channels/{id}/sendSend { to, body | mediaId (+caption) | location | reaction | contacts | interactive, reply_to? } → { wamid }Mwa-text
POST/channels/{id}/send-templateSend { to, template, language?, variables?, components? } → { wamid }Mwa-send-template
GET/channels/{id}/templatesTemplates this number can send (?for=broadcast|agent_tool)Mwa-send-template
POST/channels/{id}/mediaUpload media (multipart file, Meta Cloud only) → { mediaId, … }Mwa-media
GET/media/{messageId}Download a message's mediaMwa-media
GET/channels/{id}/threadsConversations (?status, assigned, q, tag, limit, offset)Mwa-conversations
GET/threads/{tid}/messagesLatest 200 messages — marks the thread readMwa-conversations
POST/threads/{tid}/send, /threads/{tid}/send-templateReply inside a conversation (same bodies, no to)Mwa-text
PUT/threads/{tid}/assign · /status · /pauseAssign { user_id }, set { status, snoozed_until? }, pause AI { paused }Mwa-inbox
GET/channels/{id}/inbox-healthResponse-time stats (?days, threshold_mins)Mwa-inbox
GET, PATCH/contacts, /contacts/tags, /contacts/{cid}, /contacts/by-phone/{phone}Contacts — list, labels, read, editMwa-inbox
GET, POST, DELETE/segments, /segments/{sid}, POST /segments/previewSaved audiences (save/delete need OAD)M / OADwa-inbox
GET, POST, PUT, DELETE/canned-replies, /canned-replies/{rid}Saved quick repliesMwa-inbox
PUT/channels/{id}/agentBind the AI agent { agent_id?, ai_enabled, agent_opener? }OAwa-agent
PUT/channels/{id}/calling-agentWhatsApp calling { agent_id?, calling_enabled }OAwa-agent
GET/channels/{id}/callsCall log (newest 100)Mwa-agent
PUT / GET/channels/{id}/csatCustomer ratings — set up / readOA / Mwa-agent
POST, DELETE/channels, /channels/{id}Add / remove a number in the inboxOAwa-inbox
GET/linkable-connections, /channels/removed, /channels/{id}/webhookConnections not yet in the inbox; removed numbers; inbound webhook settingsMwa-inbox
POST/channels/{id}/restore, /channels/{id}/purgeRestore a removed number; permanently delete it and its historyOAwa-inbox

Dashboard helpers you won't usually need: GET /channels/{id}/provider-webhook and POST /channels/{id}/register-webhook (pointing a partner at Telenow), and GET/POST /views, DELETE /views/{vid} (saved inbox filters).

/whatsapp-campaigns — broadcasts

MethodPathPurposeCreatorDocs
GET/, /{id}, /{id}/recipientsList campaigns; one campaign with status counts; recipients (?status, limit, offset)Mwa-broadcasts
POST/Create a draftOADwa-broadcasts
POST/{id}/recipients, /{id}/recipients-from-segmentAdd recipients (≤ 20,000 per call) or a saved audience (≤ 5,000, with capped)OADwa-broadcasts
POST/{id}/start, /{id}/pause, /{id}/cancelStart or resume, pause, cancelOADwa-broadcasts
GET / POST/opt-outsList / add opt-outsM / OADwa-broadcasts

/whatsapp-cloud/channels/{channelId} — Meta Cloud numbers

MethodPathPurposeCreatorDocs
GET/templatesEvery template, any status, re-read from MetaMwa-templates
POST/templates, /templates/mediaCreate a template (allow_category_change snake_case); upload a header sampleOAwa-templates
PATCH / DELETE/templates/{tid}Edit and resubmit; delete every language of that templateOAwa-templates
GET/healthAccount-health snapshotMwa-errors
GET / POST/profileRead / update the business profileM / OAwa-inbox

Dashboard login only

An org API key gets 401 on these: the rest of /whatsapp-cloud (config, onboard, accounts, registrations, number eligibility, WABA numbers, usage) — see the Onboarding API — and /whatsapp/sessions/* (linking WhatsApp Web by QR).

Webhooks (org key)

Base https://api.telenow.ai/api/v1 · X-API-Key · flat JSON (no success/data envelope).

MethodPathPurposeDocs
GET/meCheck a key; returns org_idwa-quickstart
GET/hooksList subscriptions → { hooks, total }wa-webhooks
POST/hooksSubscribe a target_url to events (201)wa-webhooks
DELETE/hooks/{id}Unsubscribe → { id, deleted }wa-webhooks
GET/events/sampleSample payload for an event typewa-webhooks

Scopes are declared in the app manifest — see App scopes. Every failure code and hard limit lives in Errors & limits.