Webhooks
Two URLs your other tools call: one adds leads to a list, one reports conversions. Each carries its own secret, so no key header is needed.
Add leads to a list
Each lead list has its own webhook URL. A form, Zapier, n8n or your CRM posts leads to it; they join the list and enter the campaigns it feeds. Get the URL with list_webhook.
POST https://api.katasend.com/hooks/lists/<token>
Content-Type: application/jsonBody: one lead, or {"leads": [...]} with up to 1000 leads.
{
"email": "jane@acme.com",
"first_name": "Jane",
"company": "Acme",
"priority": 1,
"country": "US"
}| Field | Notes |
|---|---|
email | Required. |
first_name, company | Optional. |
priority | 1 is sent first, then 2, 3…; no priority goes after the others. |
| anything else | Becomes a variable on the lead, like {{country}}. Field names are lowercased. Nested objects are ignored. |
New addresses get the free email check. A person already live in a sequence is not enrolled twice. When the list feeds several campaigns, leads are split between them.
Answer:
{
"ok": true,
"list": "Brokers Ireland",
"received": 1,
"new_contacts": 1,
"added_to_list": 1,
"email_check": { ... },
"enrolled": [ ... ]
}Errors: 401 for an unknown URL, 400 when no lead has an email. list_webhook with rotate: true makes a new URL; the old one stops working.
Conversion postback
Your backend calls it when a lead converts. Get the URL in Integrations or with get_postback.
https://api.katasend.com/hooks/postback/<key>GET or POST. Query string, JSON or form: all work. Field names are matched loosely.
| Field | Also accepted | Meaning |
|---|---|---|
kata | token, click_id, clickid, subid, sub_id, kata_token | The token Kata added to your landing URL. Best. |
email | e-mail, mail, user_email, customer_email, contact | The lead's email, when you have no token. |
value | amount, revenue, payout, price, total, sum | Money value, added to the lead. |
event | event_name, type, action, goal | What happened: signup, purchase… |
note | comment, label | Free text. |
data | data[key]=…, data.key=… | Fields saved on the lead. Alone, it is not a conversion. |
Send kata or email; one is required.
curl "https://api.katasend.com/hooks/postback/<key>?kata=TOKEN&event=purchase&value=490"curl -X POST https://api.katasend.com/hooks/postback/<key> \
-H "Content-Type: application/json" \
-d '{"email":"jane@acme.com","event":"call booked","data":{"plan":"pro"}}'Answer:
{
"ok": true,
"message_id": 812,
"campaign_id": 3,
"contact": "jane@acme.com",
"converted": true,
"value_added": 490,
"lead_value": 490
}| Status | When |
|---|---|
400 | Neither kata nor email was sent. |
401 | Unknown postback key. |
404 | Kata never emailed this contact. |
A conversion marks the lead converted, adds the value, stops its sequences and cancels its queued emails. Making a new postback URL in Integrations stops the old one at once.