ALYNC Logo

Webhooks

Alync POSTs signed JSON to your endpoint the moment something happens — no polling. This is the backbone of the n8n, Make, and Zapier integrations.

Events

EventFires when
lead_promotedSourcing promotes new lead(s); payload carries campaign_id, promoted, and lead_ids
enrichment_finishedAn enrichment pass settles, with enriched / no-contact / failed counts
campaign_finishedA sourcing pass completes
new_high_intent_leadsHigh-scoring leads land
budget_exceededA plan quota or billing state blocked a run
provider_outageA data provider circuit opens/recovers

Creating an endpoint

curl -X POST https://api.alync.co/v1/notifications/channels \
  -H "X-API-Key: $ALYNC_KEY" -H "Content-Type: application/json" \
  -d '{
    "type": "webhook",
    "name": "My automation",
    "destination": "https://example.com/hooks/alync",
    "events": ["lead_promoted", "enrichment_finished"]
  }'

The response includes signing_secret (whsec_…) exactly once — store it like a password. Destinations must be public HTTPS URLs; private/internal addresses are rejected. Slack and Discord destinations are supported natively with type: "slack" / "discord".

Verifying signatures

Every delivery carries X-Alync-Signature: t=<unix>,v1=<hex> where v1 is HMAC-SHA256 of "<t>.<raw body>" keyed with your signing secret. Reject mismatches and timestamps older than 5 minutes:

import crypto from "crypto";

function verifyAlyncSignature(secret, rawBody, header) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.trim().split("=")));
  const age = Math.abs(Date.now() / 1000 - Number(parts.t));
  if (!parts.t || !parts.v1 || age > 300) return false;
  const expected = crypto.createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

Delivery semantics

  • Answer with any 2xx within 10 seconds — do heavy work asynchronously.
  • Failed deliveries retry with exponential backoff (up to 5 attempts) before being dead-lettered.
  • Deliveries can arrive out of order and, rarely, more than once — key your processing on the payload contents (e.g. lead_ids).

Example payload

{
  "event_type": "lead_promoted",
  "message": "3 new lead(s) promoted",
  "occurred_at": "2026-07-10T14:03:22.000Z",
  "campaign_id": "0b2f6e5e-...",
  "promoted": 3,
  "lead_ids": ["8c9d...", "91ab...", "77fe..."]
}

On lead_promoted, fetch full lead objects with GET /v1/campaigns/:id/leads.

Last updated July 10, 2026 · Alync (alync.co)

Ready to find your first buying signals?

Describe your market and Alync starts sourcing high-intent leads on autopilot. Free plan, $0/month, 2-minute setup.

Start free

Free plan · $0/month · 2-minute setup