Webhook events

Webhook event: lead.won

The payload Cooledge sends when a lead is won.

Updated 23/06/2026

lead.won

Sent once when a lead is won, meaning the deal turned into committed work. A lead is won when its quote is accepted, when its quote is paid, when the first invoice is paid on a lead that never had a quote or when it is marked won manually. Creating a job never wins a lead on its own. Delivered to your webhook subscriptions. Deliveries are at-least-once, so dedupe on X-Cooledge-Event-Id.

Envelope

Every event shares the flat envelope: event_type, version ("v1"), event_id, business_id, occurred_at, plus the fields below. See the events overview for the envelope detail and webhooks for signature verification and delivery semantics.

Fields

FieldTypeNotes
lead_idstringUUID of the lead that was won.
customer_idstring or nullUUID of the linked customer, when one is set. Null otherwise.
won_viastringWhat won the lead: quote_accepted, quote_paid, invoice_paid or manual.
quote_idstring or nullUUID of the quote. Set when won_via is quote_accepted or quote_paid, otherwise null.
invoice_idstring or nullUUID of the invoice. Set when won_via is invoice_paid, otherwise null.
job_idstring or nullUUID of the job. Set alongside invoice_id when won_via is invoice_paid, otherwise null.
external_ghl_opportunity_idstring or nullThe matching GoHighLevel opportunity id. Agencies match lead events on this field.
attributionobjectMarketing attribution captured with the lead: UTM parameters, click ids and a derived channel. An empty object when nothing was captured.
form_idstring or nullUUID of the Cooledge form that captured this lead. Null when the lead did not come from a form.
landing_page_idstring or nullUUID of the Cooledge landing page that captured this lead. Null when the lead did not come from a landing page.

These three fields were added on 29 July 2026. Events delivered before then do not carry them, so treat all three as optional.

The lead is won once. A lead that is already won does not re-emit this event when more quotes or invoices are paid.

Example

{
  "version": "v1",
  "event_type": "lead.won",
  "event_id": "9d2f6b81-4c07-4e3a-8b15-2a7e0c9d3b51",
  "business_id": "a7f3c9d1-2e84-4b6f-8c01-5d9e2a1f7b30",
  "occurred_at": "2026-06-23T05:18:42.733Z",
  "lead_id": "2f6d9a18-4c73-4e85-bf02-7a1e5c8d3b96",
  "customer_id": "8c3e1a72-5d49-4b06-9f81-2e7a0c4d6b18",
  "won_via": "quote_accepted",
  "quote_id": "6a2c9e74-1d38-4b05-8f72-3e1a0c5d9b48",
  "invoice_id": null,
  "job_id": null,
  "external_ghl_opportunity_id": "pT8wK3rN6vM1jQ5d",
  "attribution": {
    "channel": "google_ads",
    "utm_source": "google",
    "utm_medium": "cpc",
    "utm_campaign": "brighte-interest-free",
    "gclid": "Cj0KCQjw_7SzBhD..."
  },
  "form_id": null,
  "landing_page_id": "3a7f2d64-8e19-4c05-b72a-6d1e9f4c8b03"
}

See webhooks for signature verification and delivery semantics, and all events.

Need a hand with an integration? Contact support