Events API — push

One endpoint, plain JSON, one HTTP POST per event. Whenever a lead is created, a checkout is abandoned, a payment fails or a sale completes on your side, send us one POST — it becomes a callable lead in our dial queue within seconds.

Endpoint & authentication

POST {BASE_URL}/webhooks/{source}/{CONNECTION_ID}/{SECRET}
Content-Type: application/json

We hand you a delivery URL with your partner slug ({source}), connection id and a secret token baked into the path — unguessable and unique to you. No keys to manage, no signing code required.

Event types

Every POST declares what it is via event_type. Send the same lead_id across events for one person — that's how a later sale flips the earlier lead to completed instead of creating a duplicate.

event_typeWhen to send itWhat we do
new_lead A fresh prospect / opt-in / new contact. Goes straight to our dial queue.
abandoned_checkout Someone started a checkout and didn't finish. Include amount (cart value) if you have it. Recovery dial queue.
payment_failed A declined or failed payment — initial charge or subscription rebill. Include amount so the agent knows what's on the line. Dial queue for a recovery call.
sale A completed purchase or subscription payment. Send amount. Marks the lead completed & records revenue. Works standalone too, if we never saw the lead before.

Payload

One POST per event. Extra fields are welcome — anything we don't recognize rides along and is kept on the lead; nothing is rejected for having more data.

{
  "event_type": "payment_failed",
  "lead_id":    "your-unique-lead-id",
  "first_name": "John",
  "last_name":  "Doe",
  "phone":      "+15551234567",
  "email":      "john@example.com",
  "state":      "FL",
  "zip":        "33101",
  "store":      "brand-a",
  "product":    "supplement-x",
  "amount":     129.00,
  "currency":   "USD"
}

Field reference

FieldRequired?Notes
lead_id Required Your unique lead / customer / order id. Stable per person — we de-dupe and link events on it. Subscription, transaction and order ids work as fallbacks.
phone Required E.164 (+1…) or 10-digit US. Leads without a dialable number are skipped by design — these campaigns exist to call.
event_type Recommended new_lead / abandoned_checkout / payment_failed / sale. Defaults to new_lead when missing.
first_name / last_name Recommended A single full-name field works too.
email Recommended
amount + currency Recommended Major units (dollars). On sale events this is the recorded revenue.
address1 / city / state / zip / country Optional Country defaults to US; full names ("United States") and ISO codes both work.
store Optional Which of your stores/brands the event came from.
product Optional Product label — shown to the agent on the lead.
anything else Optional Extra fields ride along and are kept.
Different field names? If your system already emits a different shape, don't rewrite it — send us one sample payload and we map your names to ours during onboarding. The names above are the canonical defaults, not a contract you must transform into.

Responses, retries & idempotency

StatusMeaning
200{"received": true} — accepted, well under a second.
400Missing lead_id or invalid JSON.
401Wrong URL / secret.
5xxTransient problem on our side — retry.

Going live — the checklist

  1. We send you the delivery URL (id + secret) — one shared, or one per store/brand.
  2. You wire the push from your webhook triggers: one POST per event, JSON body as above.
  3. Fire one test event of each type — we confirm each landed end-to-end.

Then we're live: every event you send becomes a callable lead in our dial queue within seconds. First success criterion — one test lead lands with a working phone number.