API reference
DialBots API
152 endpoints, generated from the OpenAPI description (version 0.1.0) when this site is built. Base URL: https://api.dialbots.ai.
Authentication
Send your API key as Authorization: Bearer db_live_... or in an X-Api-Key header. Keys carry scopes and a call to an endpoint outside the key’s scopes returns 403. See the quickstart.
Lists return { "data": [...], "next_cursor": "..." }. Errors return { "error": { "type", "code", "message" } }. Some actions, such as team management, API key management, buying phone numbers and connecting WhatsApp, are only available to signed-in users in the panel and are not listed here.
curl https://api.dialbots.ai/v1/calls?limit=10 \
-H "Authorization: Bearer db_live_YOUR_KEY"Calls
Place an outbound call with a published agent
POST
/v1/callsRequest body (JSON)
agent_idstring (uuid), requiredtostring, requiredfrom_number_idstring (uuid) (nullable)contact_idstring (uuid) (nullable)variablesobjectidempotency_keystring (nullable)
List calls (newest first)
GET
/v1/callsQuery parameters
limitintegercursorstring (nullable)agent_idstring (uuid) (nullable)campaign_idstring (uuid) (nullable)statusstring (nullable)end_reasonstring (nullable)is_testboolean (nullable)directionstring (nullable)dispositionstring (nullable)contact_idstring (uuid) (nullable)qstring (nullable)Contact name or phone contains
fromstring (date) (nullable)tostring (date) (nullable)
One call with transcript, cost, latency and a signed recording URL
GET
/v1/calls/{call_id}Path parameters
call_idstring (uuid), required
End a test call (anyone who may place calls) or a live call (admins) by closing its room
POST
/v1/calls/{call_id}/hangupPath parameters
call_idstring (uuid), required
Phone test of the DRAFT agent
POST
/v1/agents/{agent_id}/test-callPath parameters
agent_idstring (uuid), required
Request body (JSON)
tostring, required
Agents
Voice catalog (Gemini Live)
GET
/v1/voicesModel presets with latency / cost / quality labels
GET
/v1/model-presetsStarter templates for any industry
GET
/v1/agent-templatesCreate a draft agent from a template
POST
/v1/agent-templates/{key}/createPath parameters
keystring, required
Request body (JSON)
namestring (nullable)overridesobject
Describe your agent: generate instructions with an LLM
POST
/v1/agents/generate-instructionsRequest body (JSON)
descriptionstring, requiredlanguagesstring[] (nullable)industrystring (nullable)
Create an agent (the row is the draft)
POST
/v1/agentsRequest body (JSON)
namestring, requiredinstructionsanyopening_messageanylanguagesanyvoice_idanymodel_tieranymax_duration_sanysilence_timeout_sanyvoicemail_actionanyvoicemail_messageanyai_disclosureanytransfer_numberanytoolsanykb_idsanystt_vocabularyanypronunciationsanyextraction_schemaanydisposition_optionsanykb_fallbackanytransfer_fallbackany
List agents
GET
/v1/agentsQuery parameters
limitintegercursorstring (nullable)statusstringqstring (nullable)
Get an agent (draft + publish state)
GET
/v1/agents/{agent_id}Path parameters
agent_idstring (uuid), required
Edit the draft (never touches published versions)
PATCH
/v1/agents/{agent_id}Path parameters
agent_idstring (uuid), required
Request body (JSON)
namestring (nullable)instructionsanyopening_messageanylanguagesanyvoice_idanymodel_tieranymax_duration_sanysilence_timeout_sanyvoicemail_actionanyvoicemail_messageanyai_disclosureanytransfer_numberanytoolsanykb_idsanystt_vocabularyanypronunciationsanyextraction_schemaanydisposition_optionsanykb_fallbackanytransfer_fallbackany
Alias of archive (agents are never hard-deleted)
DELETE
/v1/agents/{agent_id}Path parameters
agent_idstring (uuid), required
Publish the draft as a new immutable version
POST
/v1/agents/{agent_id}/publishPath parameters
agent_idstring (uuid), required
Request body (JSON)
notestring (nullable)
Published versions, newest first
GET
/v1/agents/{agent_id}/versionsPath parameters
agent_idstring (uuid), required
Query parameters
limitintegerbeforeinteger (nullable)
One published version
GET
/v1/agents/{agent_id}/versions/{version}Path parameters
agent_idstring (uuid), requiredversioninteger, required
Copy an old version into the draft and publish it as a new version
POST
/v1/agents/{agent_id}/rollbackPath parameters
agent_idstring (uuid), required
Request body (JSON)
versioninteger, requirednotestring (nullable)
Duplicate as a new draft
POST
/v1/agents/{agent_id}/duplicatePath parameters
agent_idstring (uuid), required
Archive (soft delete); published versions are kept
POST
/v1/agents/{agent_id}/archivePath parameters
agent_idstring (uuid), required
Restore an archived agent
POST
/v1/agents/{agent_id}/restorePath parameters
agent_idstring (uuid), required
Knowledge bases
Create a knowledge base
POST
/v1/knowledge-basesRequest body (JSON)
namestring, requireddescriptionstring (nullable)
List knowledge bases
GET
/v1/knowledge-basesQuery parameters
limitintegercursorstring (nullable)
Get a knowledge base
GET
/v1/knowledge-bases/{kb_id}Path parameters
kb_idstring (uuid), required
Rename / describe a knowledge base
PATCH
/v1/knowledge-bases/{kb_id}Path parameters
kb_idstring (uuid), required
Request body (JSON)
namestring (nullable)descriptionstring (nullable)
Delete a knowledge base and its documents
DELETE
/v1/knowledge-bases/{kb_id}Path parameters
kb_idstring (uuid), required
Add a text, FAQ or URL document (ingested in the background)
POST
/v1/knowledge-bases/{kb_id}/documentsPath parameters
kb_idstring (uuid), required
Request body (JSON)
kindstring, requiredtitlestring (nullable)textstring (nullable)faqsFaqPair[] (nullable)urlstring (nullable)
List documents with ingest status
GET
/v1/knowledge-bases/{kb_id}/documentsPath parameters
kb_idstring (uuid), required
Query parameters
limitintegercursorstring (nullable)statusstring (nullable)
Upload a pdf, docx, txt, md or csv file
POST
/v1/knowledge-bases/{kb_id}/documents/filePath parameters
kb_idstring (uuid), required
One document (with chunk count)
GET
/v1/knowledge-bases/{kb_id}/documents/{doc_id}Path parameters
kb_idstring (uuid), requireddoc_idstring (uuid), required
Delete a document and its chunks
DELETE
/v1/knowledge-bases/{kb_id}/documents/{doc_id}Path parameters
kb_idstring (uuid), requireddoc_idstring (uuid), required
Re-run ingestion (e.g. after a failure or a page change)
POST
/v1/knowledge-bases/{kb_id}/documents/{doc_id}/reingestPath parameters
kb_idstring (uuid), requireddoc_idstring (uuid), required
Semantic search
POST
/v1/knowledge-bases/{kb_id}/searchPath parameters
kb_idstring (uuid), required
Request body (JSON)
querystring, requiredkinteger
Contacts
Create a contact
POST
/v1/contactsRequest body (JSON)
phonestring, requirednamestring (nullable)emailstring (nullable)whatsappstring (nullable)languagestring (nullable)timezonestring (nullable)owner_user_idstring (uuid) (nullable)sourcestring (nullable)attributesobjecttagsstring[]dndbooleanconsentobject
List contacts (cursor pagination, search, filters)
GET
/v1/contactsQuery parameters
limitintegercursorstring (nullable)qstring (nullable)matches name, email, phone
tagstring (nullable)list_idstring (uuid) (nullable)dndboolean (nullable)sourcestring (nullable)owner_user_idstring (uuid) (nullable)created_afterstring (date-time) (nullable)created_beforestring (date-time) (nullable)attrstring (nullable)custom attribute filter key:value
Get a contact
GET
/v1/contacts/{contact_id}Path parameters
contact_idstring (uuid), required
Update a contact
PATCH
/v1/contacts/{contact_id}Path parameters
contact_idstring (uuid), required
Request body (JSON)
phonestring (nullable)namestring (nullable)emailstring (nullable)whatsappstring (nullable)languagestring (nullable)timezonestring (nullable)owner_user_idstring (uuid) (nullable)sourcestring (nullable)attributesobject (nullable)tagsstring[] (nullable)dndboolean (nullable)consentobject (nullable)
Delete a contact
DELETE
/v1/contacts/{contact_id}Path parameters
contact_idstring (uuid), required
Bulk tag / untag / delete (max 1000 ids)
POST
/v1/contacts/bulkRequest body (JSON)
actionstring, requiredcontact_idsstring (uuid)[], requiredtagsstring[]
Timeline (notes, calls, messages, dispositions)
GET
/v1/contacts/{contact_id}/notesPath parameters
contact_idstring (uuid), required
Query parameters
limitintegercursorstring (nullable)kindstring (nullable)
Add a note
POST
/v1/contacts/{contact_id}/notesPath parameters
contact_idstring (uuid), required
Request body (JSON)
bodystring, requiredkindstring
Delete a tag (removes it from contacts)
DELETE
/v1/tags/{tag_id}Path parameters
tag_idstring (uuid), required
Create a contact list
POST
/v1/listsRequest body (JSON)
namestring, requireddescriptionstring (nullable)
List contact lists
GET
/v1/listsRename a list
PATCH
/v1/lists/{list_id}Path parameters
list_idstring (uuid), required
Request body (JSON)
namestring, requireddescriptionstring (nullable)
Delete a list (contacts stay)
DELETE
/v1/lists/{list_id}Path parameters
list_idstring (uuid), required
Add contacts to a list
POST
/v1/lists/{list_id}/membersPath parameters
list_idstring (uuid), required
Request body (JSON)
contact_idsstring (uuid)[], required
Contacts in a list
GET
/v1/lists/{list_id}/membersPath parameters
list_idstring (uuid), required
Query parameters
limitintegercursorstring (nullable)
Remove a contact from a list
DELETE
/v1/lists/{list_id}/members/{contact_id}Path parameters
list_idstring (uuid), requiredcontact_idstring (uuid), required
Define a custom contact field
POST
/v1/custom-fieldsRequest body (JSON)
keystring, requiredlabelstring, requiredtypestring, requiredoptionsstring[]requiredboolean
List custom field definitions
GET
/v1/custom-fieldsDelete a field definition (values stay on contacts)
DELETE
/v1/custom-fields/{field_id}Path parameters
field_idstring (uuid), required
Add a number to the workspace do-not-call list
POST
/v1/dndRequest body (JSON)
phonestring, requiredreasonstring (nullable)
Workspace do-not-call list
GET
/v1/dndQuery parameters
limitintegercursorstring (nullable)
Remove a do-not-call entry
DELETE
/v1/dnd/{entry_id}Path parameters
entry_idstring (uuid), required
Contact imports and exports
Upload a CSV; returns headers, sample rows and a suggested mapping
POST
/v1/contacts/importsRecent import jobs (resume a wizard after a refresh)
GET
/v1/contacts/importsQuery parameters
statusstring (nullable)limitinteger
Map columns and start the background import
POST
/v1/contacts/imports/{import_id}/startPath parameters
import_idstring (uuid), required
Request body (JSON)
mappingobject, requiredtarget -> CSV header. Targets: phone (required), name, email, whatsapp, language, timezone, source, tags, or attributes.<custom_field_key>
on_duplicatestringlist_idstring (uuid) (nullable)tagsstring[]tags applied to every imported contact
default_regionstring (nullable)
Progress and per-row errors
GET
/v1/contacts/imports/{import_id}Path parameters
import_idstring (uuid), required
Dry run: check every row with this mapping, change nothing
POST
/v1/contacts/imports/{import_id}/validatePath parameters
import_idstring (uuid), required
Request body (JSON)
mappingobject, requiredtarget -> CSV header. Targets: phone (required), name, email, whatsapp, language, timezone, source, tags, or attributes.<custom_field_key>
on_duplicatestringlist_idstring (uuid) (nullable)tagsstring[]tags applied to every imported contact
default_regionstring (nullable)
Row-level errors as a CSV (row, column, error + the original columns)
GET
/v1/contacts/imports/{import_id}/errors.csvPath parameters
import_idstring (uuid), required
Continue a failed or stalled import where it stopped
POST
/v1/contacts/imports/{import_id}/resumePath parameters
import_idstring (uuid), required
Start a contacts CSV export (runs in the background)
POST
/v1/contacts/exportsRequest body (JSON)
qstring (nullable)tagstring (nullable)list_idstring (uuid) (nullable)dndboolean (nullable)sourcestring (nullable)owner_user_idstring (uuid) (nullable)created_afterstring (date-time) (nullable)created_beforestring (date-time) (nullable)
Recent export jobs
GET
/v1/contacts/exportsQuery parameters
limitinteger
Export progress
GET
/v1/contacts/exports/{job_id}Path parameters
job_idstring (uuid), required
The finished CSV
GET
/v1/contacts/exports/{job_id}/downloadPath parameters
job_idstring (uuid), required
Campaigns
Create a draft campaign (optionally with its audience)
POST
/v1/campaignsRequest body (JSON)
namestring, requiredagent_idstring (uuid), requiredagent_versioninteger (nullable)pin a published version; omit to always use the latest
from_number_idstring (uuid) (nullable)audienceAudience (nullable)scheduleobject (nullable)daily_limitinteger (nullable)concurrencyinteger (nullable)daily_spend_limitnumber | string (nullable)retryobject (nullable)voice_configobject (nullable){whatsapp_fallback: {after_attempts, template, variables?, language?}}: after N unanswered attempts the approved template is sent on WhatsApp
List campaigns (newest first)
GET
/v1/campaignsQuery parameters
limitintegercursorstring (nullable)statusstring (nullable)
One campaign with its screening counts
GET
/v1/campaigns/{campaign_id}Path parameters
campaign_idstring (uuid), required
Edit a draft; a live campaign accepts schedule, limits, lines and retries
PATCH
/v1/campaigns/{campaign_id}Path parameters
campaign_idstring (uuid), required
Request body (JSON)
namestring (nullable)agent_idstring (uuid) (nullable)agent_versioninteger (nullable)from_number_idstring (uuid) (nullable)scheduleobject (nullable)daily_limitinteger (nullable)concurrencyinteger (nullable)daily_spend_limitnumber | string (nullable)retryobject (nullable)voice_configobject (nullable)
Delete a draft campaign
DELETE
/v1/campaigns/{campaign_id}Path parameters
campaign_idstring (uuid), required
Replace the audience of a draft (screened, deduplicated on E.164)
PUT
/v1/campaigns/{campaign_id}/audiencePath parameters
campaign_idstring (uuid), required
Request body (JSON)
list_idstring (uuid) (nullable)filterobject (nullable)contact_idsstring (uuid)[] (nullable)skip_called_within_daysinteger (nullable)
Add contacts to a draft, paused or running campaign
POST
/v1/campaigns/{campaign_id}/contactsPath parameters
campaign_idstring (uuid), required
Request body (JSON)
list_idstring (uuid) (nullable)filterobject (nullable)contact_idsstring (uuid)[] (nullable)skip_called_within_daysinteger (nullable)
Counts per screening reason
GET
/v1/campaigns/{campaign_id}/screeningPath parameters
campaign_idstring (uuid), required
Start now, or schedule with start_at (402 trial_campaigns_locked during the trial)
POST
/v1/campaigns/{campaign_id}/startPath parameters
campaign_idstring (uuid), required
Pause (reversible; calls in progress finish)
POST
/v1/campaigns/{campaign_id}/pausePath parameters
campaign_idstring (uuid), required
Resume a paused campaign
POST
/v1/campaigns/{campaign_id}/resumePath parameters
campaign_idstring (uuid), required
Cancel (cannot be resumed; calls in progress finish)
POST
/v1/campaigns/{campaign_id}/cancelPath parameters
campaign_idstring (uuid), required
Copy a campaign's settings and contacts into a new draft
POST
/v1/campaigns/{campaign_id}/duplicatePath parameters
campaign_idstring (uuid), required
Live progress, lines in use, dialer state, ETA, end-reason breakdown
GET
/v1/campaigns/{campaign_id}/progressPath parameters
campaign_idstring (uuid), required
Cost range and duration before starting
GET
/v1/campaigns/{campaign_id}/estimatePath parameters
campaign_idstring (uuid), required
Per-contact status, attempts, last end reason (filters: status, end_reason, attempts, outcome)
GET
/v1/campaigns/{campaign_id}/targetsPath parameters
campaign_idstring (uuid), required
Query parameters
limitintegercursorstring (nullable)statusstring (nullable)end_reasonstring (nullable)attemptsinteger (nullable)outcomestring (nullable)skip_reasonstring (nullable)
Results as CSV (streamed)
GET
/v1/campaigns/{campaign_id}/export.csvPath parameters
campaign_idstring (uuid), required
Phone numbers
Phone numbers this workspace can call from
GET
/v1/phone-numbersChoose the agent that answers inbound calls (empty = none)
PATCH
/v1/phone-numbers/{number_id}Path parameters
number_idstring (uuid), required
Request body (JSON)
inbound_agent_idstring (uuid) (nullable)
Calling-account status for buying numbers
GET
/v1/numbers/accountSet up the calling account (idempotent)
POST
/v1/numbers/accountIdentity-verification steps, fields, uploads and status for this workspace's country
GET
/v1/numbers/kycRefresh identity-verification status
GET
/v1/numbers/account/kycSubmit one identity-verification step (register, pan, aadhaar, gst, final)
POST
/v1/numbers/account/kyc/{step}Path parameters
stepstring, required
Kinds of numbers on offer
GET
/v1/numbers/typesNumbers available to buy
GET
/v1/numbers/inventoryQuery parameters
typeinteger, requiredmonthsintegernumberstring (nullable)pageintegerper_pageinteger
Price a number (locks it briefly)
POST
/v1/numbers/quoteRequest body (JSON)
did_idinteger, requirednumberstring, requiredmonthsintegerlinesinteger
Buy a quoted number from the wallet
POST
/v1/numbers/purchaseRequest body (JSON)
quote_idstring, required
Wallet
Wallet balance in the workspace currency
GET
/v1/walletSet the low-balance alert threshold (empty = off)
PATCH
/v1/walletRequest body (JSON)
low_balance_thresholdnumber | string (nullable)
Ledger (newest first)
GET
/v1/wallet/transactionsQuery parameters
limitintegercursorstring (nullable)sourcestring (nullable)
Analytics
Calls, answer rate, duration, minutes, spend, outcome and end-reason counts
GET
/v1/analytics/summaryQuery parameters
fromstring (date) (nullable)tostring (date) (nullable)agent_idstring (uuid) (nullable)campaign_idstring (uuid) (nullable)include_testsboolean
One metric per day (workspace timezone) or per hour
GET
/v1/analytics/seriesQuery parameters
metric"calls" | "answered" | "spend" | "minutes"interval"day" | "hour"fromstring (date) (nullable)tostring (date) (nullable)agent_idstring (uuid) (nullable)campaign_idstring (uuid) (nullable)include_testsboolean
Usage and spend grouped by agent, campaign or phone number
GET
/v1/usageQuery parameters
group_by"agent" | "campaign" | "number"fromstring (date) (nullable)tostring (date) (nullable)agent_idstring (uuid) (nullable)campaign_idstring (uuid) (nullable)include_testsboolean
Webhooks
Create an endpoint (signing secret shown once)
POST
/v1/webhooksRequest body (JSON)
urlstring, requiredeventsstring[], requireddescriptionstring (nullable)
List endpoints
GET
/v1/webhooksGet an endpoint
GET
/v1/webhooks/{ep_id}Path parameters
ep_idstring (uuid), required
Update an endpoint
PATCH
/v1/webhooks/{ep_id}Path parameters
ep_idstring (uuid), required
Request body (JSON)
urlstring (nullable)eventsstring[] (nullable)descriptionstring (nullable)activeboolean (nullable)
Delete an endpoint
DELETE
/v1/webhooks/{ep_id}Path parameters
ep_idstring (uuid), required
Rotate the signing secret (shown once)
POST
/v1/webhooks/{ep_id}/rotate-secretPath parameters
ep_idstring (uuid), required
Send a signed test ping now (not retried)
POST
/v1/webhooks/{ep_id}/testPath parameters
ep_idstring (uuid), required
Delivery log (cursor paginated)
GET
/v1/webhooks/{ep_id}/deliveriesPath parameters
ep_idstring (uuid), required
Query parameters
limitintegercursorstring (nullable)statusstring (nullable)
Queue a delivery again
POST
/v1/webhooks/deliveries/{delivery_id}/redeliverPath parameters
delivery_idstring (uuid), required
Workspace
Active workspace
GET
/v1/workspaceEdit workspace name / timezone
PATCH
/v1/workspaceRequest body (JSON)
namestring (nullable)timezonestring (nullable)
List members
GET
/v1/workspace/membersChange a member's role
PATCH
/v1/workspace/members/{user_id}Path parameters
user_idstring (uuid), required
Request body (JSON)
rolestring, required
Remove a member
DELETE
/v1/workspace/members/{user_id}Path parameters
user_idstring (uuid), required
Invite someone by email
POST
/v1/workspace/invitesRequest body (JSON)
emailstring (email), requiredrolestring
Pending invites
GET
/v1/workspace/invitesRevoke an invite
DELETE
/v1/workspace/invites/{invite_id}Path parameters
invite_idstring (uuid), required
WhatsApp numbers
WhatsApp numbers of the workspace
GET
/v1/whatsapp/accountsOne WhatsApp number
GET
/v1/whatsapp/accounts/{account_id}Path parameters
account_idstring (uuid), required
Rename a number (display label in DialBots only)
PATCH
/v1/whatsapp/accounts/{account_id}Path parameters
account_idstring (uuid), required
Request body (JSON)
display_namestring (nullable)
Disconnect a number (templates and history are kept)
DELETE
/v1/whatsapp/accounts/{account_id}Path parameters
account_idstring (uuid), required
Everything the Facebook JS SDK needs to launch Embedded Signup
GET
/v1/whatsapp/connect/configQuery parameters
mode"new" | "coexistence"
Finish Embedded Signup: exchange the code, subscribe the app, register the number
POST
/v1/whatsapp/connectRequest body (JSON)
codestring, requiredwaba_idstring, requiredphone_number_idstring, requiredmode"new" | "coexistence"business_idstring (nullable)redirect_uristring (nullable)
Connect a number through AiSensy (templates only)
POST
/v1/whatsapp/accounts/aisensyRequest body (JSON)
api_keystring, requireddisplay_namestring, requireddisplay_phonestring (nullable)
Re-read quality rating, messaging limit and status from Meta
POST
/v1/whatsapp/accounts/{account_id}/refreshPath parameters
account_idstring (uuid), required
Bot settings of a number
GET
/v1/whatsapp/accounts/{account_id}/botPath parameters
account_idstring (uuid), required
Bind the number to an agent and set the bot's behaviour
PUT
/v1/whatsapp/accounts/{account_id}/botPath parameters
account_idstring (uuid), required
Request body (JSON)
enabledboolean (nullable)agent_idstring (uuid) (nullable)settingsobject (nullable)
WhatsApp inbox
Conversations, newest message first
GET
/v1/whatsapp/conversationsQuery parameters
filterstringqstring (nullable)account_idstring (uuid) (nullable)contact_idstring (uuid) (nullable)cursorstring (nullable)limitinteger
One conversation
GET
/v1/whatsapp/conversations/{conv_id}Path parameters
conv_idstring (uuid), required
Messages, newest first (page back with next_cursor, then reverse for display)
GET
/v1/whatsapp/conversations/{conv_id}/messagesPath parameters
conv_idstring (uuid), required
Query parameters
cursorstring (nullable)limitinteger
Send a text (24-hour window only), media or template message
POST
/v1/whatsapp/conversations/{conv_id}/messagesPath parameters
conv_idstring (uuid), required
Request body (JSON)
textstring (nullable)templateTemplateRef (nullable)mediaMediaRef (nullable)reply_tostring (nullable)
Send to a phone or contact (starts the conversation if needed)
POST
/v1/whatsapp/messagesRequest body (JSON)
textstring (nullable)templateTemplateRef (nullable)mediaMediaRef (nullable)reply_tostring (nullable)tostring (nullable)contact_idstring (uuid) (nullable)account_idstring (uuid) (nullable)
Assign to a member (null to unassign)
POST
/v1/whatsapp/conversations/{conv_id}/assignPath parameters
conv_idstring (uuid), required
Request body (JSON)
user_idstring (uuid) (nullable), required
Take over from the AI (to=human) or give the conversation back (to=ai)
POST
/v1/whatsapp/conversations/{conv_id}/handoverPath parameters
conv_idstring (uuid), required
Request body (JSON)
to"human" | "ai", requiredreasonstring (nullable)
Mark the conversation read
POST
/v1/whatsapp/conversations/{conv_id}/readPath parameters
conv_idstring (uuid), required
Download a customer's media (proxied from Meta; the token never leaves the server)
GET
/v1/whatsapp/messages/{message_id}/mediaPath parameters
message_idstring (uuid), required
WhatsApp templates
Templates of the workspace
GET
/v1/whatsapp/templatesQuery parameters
account_idstring (uuid) (nullable)statusstring (nullable)categorystring (nullable)languagestring (nullable)limitinteger
Create a template and submit it for review (AiSensy: register an API campaign name)
POST
/v1/whatsapp/templatesRequest body (JSON)
account_idstring (uuid), requirednamestring, requiredlanguagestring, requiredcategory"marketing" | "utility" | "authentication", requiredcomponentsobject[], required
Pull templates and their review status from Meta
POST
/v1/whatsapp/templates/syncRequest body (JSON)
account_idstring (uuid), required
One template
GET
/v1/whatsapp/templates/{template_id}Path parameters
template_idstring (uuid), required
Delete a template (all its languages are removed at Meta)
DELETE
/v1/whatsapp/templates/{template_id}Path parameters
template_idstring (uuid), required
WhatsApp calling
Calling settings of a number (live from WhatsApp, cached copy if WhatsApp is unreachable)
GET
/v1/whatsapp/accounts/{account_id}/callingPath parameters
account_idstring (uuid), required
Change calling settings (enable, call button, callback requests, hours); saved to WhatsApp at once
PUT
/v1/whatsapp/accounts/{account_id}/callingPath parameters
account_idstring (uuid), required
Request body (JSON)
enabledboolean (nullable)call_icon_visibility"DEFAULT" | "DISABLE_ALL" (nullable)restrict_to_user_countriesstring[] (nullable)callback_permissionboolean (nullable)call_hoursHoursIn (nullable)
Call permission per contact: none / temporary (expiry) / permanent / declined
GET
/v1/whatsapp/accounts/{account_id}/calling/permissionsPath parameters
account_idstring (uuid), required
Query parameters
contact_idstring (uuid) (nullable)statusstring (nullable)limitinteger
Ask a customer for permission to call them on WhatsApp
POST
/v1/whatsapp/accounts/{account_id}/calling/permission-requestsPath parameters
account_idstring (uuid), required
Request body (JSON)
contact_idstring (uuid) (nullable)phonestring (nullable)templateobject (nullable)body_textstring (nullable)
Webhook-derived activity: call connected / ended, permission replies, account updates
GET
/v1/whatsapp/accounts/{account_id}/calling/eventsPath parameters
account_idstring (uuid), required
Query parameters
eventstring (nullable)cursorstring (nullable)limitinteger
WhatsApp call log: one row per call id (wacid), folded from its webhook events
GET
/v1/whatsapp/accounts/{account_id}/calling/callsPath parameters
account_idstring (uuid), required
Query parameters
limitinteger
Is calling available for this number, and why not
GET
/v1/whatsapp/accounts/{account_id}/calling/statusPath parameters
account_idstring (uuid), required
Test chat
Text chat with the DRAFT (or a published version) of an agent
POST
/v1/agents/{agent_id}/test-chatPath parameters
agent_idstring (uuid), required
Request body (JSON)
messagesChatMessage[]versioninteger (nullable)execute_toolsboolean
Browser voice test of the DRAFT (or a version) of an agent
POST
/v1/agents/{agent_id}/web-callPath parameters
agent_idstring (uuid), required
Request body (JSON)
versioninteger (nullable)