Connect your email platform (Mailchimp, ConvertKit, Loops, …)
You don’t need a native integration per ESP — you need one Zap (or Make scenario, or a 20-line script) listening to Qanary’s webhooks. This guide shows the canonical recipe: “affiliate approved → add to my ESP audience”.
Option A — Zapier (no code)
- In Zapier, create a Zap with the Qanary app (private beta — or use Webhooks by Zapier → “Catch Hook” until you’re invited).
- Trigger: Promoter Approved. Behind the scenes Zapier subscribes a REST hook via
POST /api/v1/webhook_endpointswith your API key (Settings → API keys) and receives thepromoter.approvedevent with the affiliate’s email, name, code and tags. - Action: your ESP’s “Add/Update subscriber” — map:
- email →
data.email - first name →
data.name - a tag or custom field →
data.token(their referral code — perfect for merge tags like “your link: https://you.com/?via={{token}}”)
- email →
- Turn it on. Every affiliate you approve lands in your welcome sequence with their own link already merged in.
The same pattern works for every other event: commission.created → “you earned!”
email, payout.paid → “money’s on the way” email, conversion.created → internal
Slack notification.
Option B — plain webhook receiver (any stack, ~20 lines)
- Qanary → Webhooks → Add endpoint (subscribe to
promoter.approved). Copy the signing secret (shown once). - Verify
Qanary-Signature: t=<unix>,v1=<hex>: computeHMAC-SHA256(secret, "t.raw_body")and constant-time-compare withv1; reject stalet. - Call your ESP’s API with
data.email/data.name. - Press Send test event in Qanary to check the wiring before going live.
Payload shape
Webhook payloads use the same serializers as the REST API, so what your Zap sees is
exactly what GET /api/v1/affiliates/:id returns:
{
"event": "promoter.approved",
"created_at": "2026-07-06T12:00:00Z",
"data": {
"id": 42, "campaign_id": 7, "email": "ada@affiliates.io", "name": "Ada Lovelace",
"status": "approved", "kind": "affiliate", "token": "ada",
"coupon_code": "ADA10", "paypal_email": null, "tags": ["vip"],
"created_at": "2026-07-01T09:00:00Z"
}
}
Native per-ESP sync is deliberately deferred until at least three customers ask for one post-Zapier — the Zap covers the job without another integration to maintain.
