Skip to main content
Templates stay in Omni Channel. The API only lists them and sends.
1

Dashboard (once)

Omni Channel: verified email mailbox and/or WhatsApp profile + templates.Start an API / Custom CRM campaign. Copy campaignId.
2

Lead setup - does this campaign’s template exist?

Paste campaignId into Lead setup (Try it).
Read checks: ok: true means that profile/template exists. readyFor.email / readyFor.whatsapp tells you which channels you can send.Copy email.lead or whatsapp.lead. Fill email / phone (and whatsappParams using paramLabels).Optional: Validate lead with that body - nothing is created. ok: true means POST /leads will pass.To browse every template: GET /api/v1/omni/templates (add ?campaignId= to mark selected). Copy email.templates[].lead or whatsapp.templates[].lead.
3

POST /leads

templateVariables keys are dynamic: only include keys that appear as {{…}} in your selected template (copy from Lead setup). Not every template has contact_name / company_name / agent_name - if none, send "templateVariables": {}.Use one channel per request.WhatsApp example (fill whatsappParams in the same order as Lead setup paramLabels - [0] → {{1}}, [1] → {{2}}, …):
Passing a wrong emailTemplateId / whatsappTemplateId returns 422 (*_not_found) instead of silently using another template.
4

Check status

201 repeats the template ids. Poll GET /api/v1/contacts/{contactId} for whatsappQueueStatus / emailStatus.Sandbox keys accept but never send.
Omit clocks to send as soon as Calling_system1 picks up the queue. Required on email: emailProfileId, emailTemplateId, templateVariables (object - keys = your template’s {{placeholders}} only; use {} if none). Required on WhatsApp: whatsappProfileId, whatsappTemplateId, whatsappParams. Get ids and exact keys/params from Lead setup.