Help · Integrations
Zynqly sends events — a new lead, a message, a comment, a tag, an order — to any https URL as a signed JSON POST, and anything that can call an API can act back: send a message, add a tag, pause an automation. Zapier, Make and Pabbly Connect all listen on a URL, so the setup is the same three steps on each.
lead.createdNew lead — A new contact is captured on any channel.tag.addedTag added — A tag is added to a contact — by an automation, a teammate or the API.message.receivedNew message — A contact sends an inbound message (high volume).comment.receivedNew comment — Someone comments on one of your posts (Instagram, Facebook).conversation.assignedConversation assigned — A conversation is assigned to a teammate, or handed to a human by the AI.order.createdNew order — An order is placed — in chat, in your store, or through the API.order.paidOrder paid — An order is paid — a payment link, or your store reports payment.order.abandonedCart abandoned — A checkout is left unfinished (store connection or API).Every delivery has the same shape. id is per event, so a receiver that sees it twice can drop the duplicate — Zapier does this by default.
{
"id": "evt_sample_lead_created",
"event": "lead.created",
"data": {
"channel": "MESSENGER",
"leadId": "sample_lead_123",
"contactId": "sample_contact_123",
"name": "Ada Lovelace",
"email": "ada@example.com",
"phone": null,
"tags": [
"website-visitor"
]
},
"timestamp": "2026-09-09T09:41:00.000Z",
"test": true
}The Zynqly app is being submitted to the Zapier directory. Until it appears there, Zapier’s own webhook module (Webhooks by Zapier → Catch Hook) does the same job, and the Integrations page walks you through it.
Create a Zap and pick “Webhooks by Zapier” as the trigger, then “Catch Hook”.
Copy the URL Zapier shows and paste it into Settings → Integrations → Zapier, tick the events, add the webhook.
Press “Send a test event”. Zapier finds the request and shows every field, so you can map them before a real event arrives.
The Zynqly app is being submitted to the Make directory. Until it appears there, Make’s own webhook module (Webhooks → Custom webhook) does the same job, and the Integrations page walks you through it.
Add a “Webhooks → Custom webhook” module to a scenario and create a webhook.
Paste its address into Settings → Integrations → Make, tick the events, add the webhook.
While Make is waiting, press “Send a test event” — it learns the structure from the sample.
The Zynqly app is being submitted to the Pabbly Connect directory. Until it appears there, Pabbly Connect’s own webhook module (Webhook (Trigger)) does the same job, and the Integrations page walks you through it.
Create a workflow with “Webhook” as the trigger and copy the URL.
Paste it into Settings → Integrations → Pabbly, tick the events, add the webhook.
Press “Send a test event” while Pabbly is capturing.
Create an API key in Settings → Integrations (the platform drawer pre-ticks the scopes) and use the platform’s HTTP module with Authorization: Bearer zk_live_…. The three requests a workflow usually needs:
POST /api/v1/conversations/{id}/messagesSend a message — body { text }, scope messages:write.POST /api/v1/contacts/{id}/tagsAdd a tag — body { tag }, scope contacts:write.PATCH /api/v1/automations/{id}Pause or resume — body { status: "PAUSED" }, scope automations:write.The full list is in the API reference.
Every delivery carries X-Zynqly-Signature: sha256=<HMAC-SHA256 of the raw body, keyed by the endpoint's secret>, plus X-Zynqly-Event, X-Zynqly-Delivery and X-Zynqly-Timestamp. The secret is shown once when the webhook is created. To verify in Node:
const crypto = require("node:crypto");
const expected = "sha256=" + crypto.createHmac("sha256", process.env.ZYNQLY_WEBHOOK_SECRET)
.update(rawBody).digest("hex");
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers["x-zynqly-signature"]));Zapier and Make do not verify signatures on their generic webhook modules; the URL itself is the secret there, so keep it out of screenshots.
A receiver that does not answer 2xx is tried again after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After the last attempt the delivery is kept as “given up” and can be replayed from Settings → Integrations → Webhooks. A URL that fails ten deliveries in a row is paused, with the reason shown, and you are told once; resume it when the receiver is fixed.
A key with the hooks:write scope can create and remove subscriptions itself — this is what the native Zapier app does.
curl -X POST https://zynqly.com/api/v1/hooks \
-H "Authorization: Bearer zk_live_…" -H "Content-Type: application/json" \
-d '{ "event": "lead.created", "target_url": "https://example.com/zynqly" }'
# → { "data": { "id": "…", "secret": "whsec_…", "events": ["lead.created"], … } }
curl -X DELETE https://zynqly.com/api/v1/hooks/<id> -H "Authorization: Bearer zk_live_…"