ZingaConnect API v1

The ZingaConnect messaging endpoints — send WhatsApp messages and manage delivery webhooks, using ZingaConnect as your messaging provider. Authenticate with a zk_ key carrying the messaging:* scopes (separate from data scopes). CRM resources (contacts, lists, campaigns, templates, teams, agents) use the data:read / data:write:* scopes.

Channels

The messaging channels (WhatsApp numbers, etc.) you can send from.

GET/messaging/channelsList messaging channels

Requires messaging:read. Use a channel id as channelConfigId when sending.

Trial

Messages

Send WhatsApp messages and read their delivery status.

POST/messaging/whatsapp/sendSend a WhatsApp message

Requires messaging:send. Queued for delivery (202). type: text|template|media|interactive.

Trial
GET/messaging/messages/{id}Read message status

Requires messaging:read.

NameInTypeReqDescription
idpathstringyesMessage id
Trial

Webhooks

Receive delivery + inbound events. Requires `messaging:webhooks`.

GET/messaging/webhooksList webhooks
Trial
POST/messaging/webhooksRegister a webhook

Events are signed X-Zinga-Signature: sha256=… when a secret is set.

Trial
DELETE/messaging/webhooks/{id}Delete a webhook
NameInTypeReqDescription
idpathstringyesWebhook id
Trial

Contacts

The shared contact spine (identity + per-channel marketing consent).

GET/crm/contactsList contact
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/contacts/{id}Get a contact record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/contactsCreate a contact record
Trial
PATCH/crm/contacts/{id}Update a contact record
NameInTypeReqDescription
idpathstringyesRow id
Trial
DELETE/crm/contacts/{id}Delete a contact record
NameInTypeReqDescription
idpathstringyesRow id
Trial

Lists

Static or dynamic (filter-based) contact lists used as campaign audiences.

GET/crm/listsList list
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/lists/{id}Get a list record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/listsCreate a list record
Trial
PATCH/crm/lists/{id}Update a list record
NameInTypeReqDescription
idpathstringyesRow id
Trial
DELETE/crm/lists/{id}Delete a list record
NameInTypeReqDescription
idpathstringyesRow id
Trial

Campaigns

Campaign definitions (drip / calendar / broadcast). Build the shell here, wire steps, then activate (see Campaign steps & lifecycle). `status` is not writable here — use the activate/pause actions.

GET/crm/campaignsList campaign
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/campaigns/{id}Get a campaign record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/campaignsCreate a campaign record
Trial
PATCH/crm/campaigns/{id}Update a campaign record
NameInTypeReqDescription
idpathstringyesRow id
Trial
DELETE/crm/campaigns/{id}Delete a campaign record
NameInTypeReqDescription
idpathstringyesRow id
Trial

Campaign steps & lifecycle

Wire the drip sequence (which template fires at which delay) and activate/pause the campaign. Steps are children of a campaign.

GET/crm/campaigns/{campaign_id}/stepsList a campaign's steps
NameInTypeReqDescription
campaign_idpathstringyesCampaign id
Trial
POST/crm/campaigns/{campaign_id}/stepsAdd a step (template at a delay)

channel = email|sms|whatsapp; give messageTemplateId (email/sms) or waTemplateId (whatsapp) + delayAmount / delayUnit.

NameInTypeReqDescription
campaign_idpathstringyesCampaign id
Trial
PATCH/crm/campaigns/{campaign_id}/steps/{step_id}Update a step
NameInTypeReqDescription
campaign_idpathstringyesCampaign id
step_idpathstringyesStep id
Trial
DELETE/crm/campaigns/{campaign_id}/steps/{step_id}Delete a step
NameInTypeReqDescription
campaign_idpathstringyesCampaign id
step_idpathstringyesStep id
Trial
POST/crm/campaigns/{campaign_id}/activateActivate (enrol the audience)
NameInTypeReqDescription
campaign_idpathstringyesCampaign id
Trial
POST/crm/campaigns/{campaign_id}/pausePause or resume
NameInTypeReqDescription
campaign_idpathstringyesCampaign id
Trial

Email & SMS templates

Reusable email/SMS content with {{merge_field}} tokens (resource key `message-templates`).

GET/crm/message-templatesList template
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/message-templates/{id}Get a template record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/message-templatesCreate a template record
Trial
PATCH/crm/message-templates/{id}Update a template record
NameInTypeReqDescription
idpathstringyesRow id
Trial
DELETE/crm/message-templates/{id}Delete a template record
NameInTypeReqDescription
idpathstringyesRow id
Trial

Email headers

Reusable HTML header blocks (masthead / logo / banner) an email template prepends via `headerId`.

GET/crm/email-headersList email header
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/email-headers/{id}Get a email header record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/email-headersCreate a email header record
Trial
PATCH/crm/email-headers/{id}Update a email header record
NameInTypeReqDescription
idpathstringyesRow id
Trial
DELETE/crm/email-headers/{id}Delete a email header record
NameInTypeReqDescription
idpathstringyesRow id
Trial

WhatsApp templates

List templates + their Meta approval status, create a template (submits to Meta for review), edit it while it's still a LOCAL draft, and submit a draft. Once submitted to Meta a template is immutable.

GET/crm/whatsapp-templatesList WhatsApp template
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/whatsapp-templates/{id}Get a WhatsApp template record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/whatsapp-templatesCreate a WhatsApp template (submit to Meta)

Creates the template and, by default (submitNow: true), submits it to Meta for review. category = MARKETING | UTILITY | AUTHENTICATION; the name is normalized (lowercased, spaces to underscores). Provide sample values for the {{n}} variables in example.body (and example.header) — Meta requires a sample per variable; any you omit default to 'Sample'. The mapping is stored on the template.

Trial
PATCH/crm/whatsapp-templates/{id}Edit a LOCAL draft

Edit a template while it's still a LOCAL draft (not yet submitted). Returns 400 not_editable once it's been submitted to Meta. Pass submitNow: true to submit after editing.

NameInTypeReqDescription
idpathstringyesTemplate id
Trial
POST/crm/whatsapp-templates/{id}/submitSubmit a LOCAL draft to Meta
NameInTypeReqDescription
idpathstringyesTemplate id
Trial

Teams

Sales/agent teams.

GET/crm/teamsList team
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/teams/{id}Get a team record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/teamsCreate a team record
Trial
PATCH/crm/teams/{id}Update a team record
NameInTypeReqDescription
idpathstringyesRow id
Trial
DELETE/crm/teams/{id}Delete a team record
NameInTypeReqDescription
idpathstringyesRow id
Trial

Agents

Team members with CRM access (links a platform user to an access tier).

GET/crm/agentsList agent
NameInTypeReqDescription
limitqueryintegerPage size (1-200, default 50)
offsetqueryintegerRows to skip
qquerystringFree-text search
Trial
GET/crm/agents/{id}Get a agent record
NameInTypeReqDescription
idpathstringyesRow id
Trial
POST/crm/agentsCreate a agent record
Trial
PATCH/crm/agents/{id}Update a agent record
NameInTypeReqDescription
idpathstringyesRow id
Trial
DELETE/crm/agents/{id}Delete a agent record
NameInTypeReqDescription
idpathstringyesRow id
Trial

← All APIs