Webhook event: lead.created
The payload Cooledge sends when a lead is created.
lead.created
Sent when a lead is created in Cooledge. It fires once for every lead your business owns, no matter where the lead came from: the portal, your website forms, the API or an inbound GoHighLevel opportunity. 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
| Field | Type | Notes |
|---|---|---|
lead_id | string | UUID of the new lead. |
customer_id | string or null | UUID of the linked customer, when one is set. Usually null at creation, because customer linking happens after the lead is inserted. |
name | string or null | The lead's name. |
email | string or null | The lead's email, normalized. |
phone | string or null | The lead's phone, normalized to E.164 where possible. |
lead_type | string | The lead's type, for example inbound or marketplace. |
source | string | Where the lead came from. Defaults to api for leads created through the API. |
status | string | The lead's status. A freshly created lead is always new. |
external_ghl_opportunity_id | string or null | The matching GoHighLevel opportunity id. Agencies match lead events on this field. Null for leads that did not come from GoHighLevel. |
attribution | object | Marketing attribution captured with the lead: UTM parameters, click ids and a derived channel. An empty object when nothing was captured. |
form_id | string or null | UUID of the Cooledge form that captured this lead. Null when the lead did not come from a form. |
landing_page_id | string or null | UUID 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.
Example
{
"version": "v1",
"event_type": "lead.created",
"event_id": "5e8b2c47-9a13-4f6d-8c20-3b1f7d9a0e54",
"business_id": "a7f3c9d1-2e84-4b6f-8c01-5d9e2a1f7b30",
"occurred_at": "2026-06-17T02:10:33.118Z",
"lead_id": "2f6d9a18-4c73-4e85-bf02-7a1e5c8d3b96",
"customer_id": null,
"name": "Priya Nair",
"email": "priya.nair@example.com",
"phone": "+61498765432",
"lead_type": "inbound",
"source": "api",
"status": "new",
"external_ghl_opportunity_id": null,
"attribution": {
"channel": "google_ads",
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "brighte-interest-free",
"gclid": "Cj0KCQjw_7SzBhD..."
},
"form_id": "9c4e1a72-6b58-4d31-a0f7-2e6c8b5a1d94",
"landing_page_id": null
}
See webhooks for signature verification and delivery semantics, and all events.
Need a hand with an integration? Contact support