Webhook events
Webhook event: job.completed
The payload Cooledge sends when a job is marked completed.
Updated 17/06/2026
job.completed
Sent when a job is marked completed. 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 |
|---|---|---|
job_id | string | UUID of the completed job. |
job_number | number or string or null | The job number. May be a number or a string depending on how it was recorded. Null when not set. |
job_category_id | string or null | UUID of the job category, when one is set. Null otherwise. |
status | string | The job status, which is the completed status here. |
customer_id | string or null | UUID of the linked customer, when one is set. Null otherwise. |
completed_at | string or null | ISO 8601 timestamp the job was completed. Null when not recorded. |
description | string or null | The job description. Null when there is none. |
work_details | string or null | The recorded work details for the job. Null when there are none. |
external_ghl_contact_id | string or null | The matching GoHighLevel contact id, from the linked customer when one exists. |
external_ghl_opportunity_id | string or null | The matching GoHighLevel opportunity id, from the linked lead when one exists. |
customer_name | string or null | The customer's name from the live customer row. |
customer_email | string or null | The customer's email from the live customer row. |
customer_phone | string or null | The customer's phone from the live customer row. |
The customer_* and external_ghl_* fields are the shared correlation block, resolved from the live customer and lead rows.
Example
{
"version": "v1",
"event_type": "job.completed",
"event_id": "d9b1c8a2-6c47-4e09-9a51-2d7e0c4b8f63",
"business_id": "a7f3c9d1-2e84-4b6f-8c01-5d9e2a1f7b30",
"occurred_at": "2026-06-17T14:38:55.904Z",
"job_id": "5c1a0e74-3d29-4b06-9f81-2e7a0c4d6b18",
"job_number": 318,
"job_category_id": "2f8d6b41-9c30-4e7a-a15b-6d0e3c9f2a87",
"status": "completed",
"customer_id": "8c3e1a72-5d49-4b06-9f81-2e7a0c4d6b18",
"completed_at": "2026-06-17T14:38:55.904Z",
"description": "Annual service and refrigerant top-up on ducted system.",
"work_details": "Cleaned filters and coils, checked gas pressures, replaced return air filter. System running within spec.",
"external_ghl_contact_id": "x9TpL2mQ7sV4nB1k",
"external_ghl_opportunity_id": "pT8wK3rN6vM1jQ5d",
"customer_name": "Priya Nair",
"customer_email": "priya.nair@example.com",
"customer_phone": "+61498765432"
}
See webhooks for signature verification and delivery semantics, and all events.
Need a hand with an integration? Contact support