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 Read
campaignId into Lead setup (Try it).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.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.
