Webhook event: invoice.sent
The payload Cooledge sends when an invoice is sent to a customer.
invoice.sent
Sent when an invoice is sent (emailed) to the customer. 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 |
|---|---|---|
invoice_id | string | UUID of the sent invoice. |
invoice_number | number | The internal invoice number. |
invoice_seq | number | The per-business sequence number for the invoice. |
display_number | string | The customer-facing invoice number, for example "1042", "1042-2" or "INV-58". |
status | string | The invoice status at the time it was sent. |
total | number | The invoice total. |
amount_due | number | The amount still outstanding. |
amount_paid | number | The amount already paid against the invoice. |
subtotal | number or null | The pre-tax subtotal. Null when not recorded. |
tax_total | number or null | The total tax. Null when not recorded. |
due_date | string or null | The invoice due date as an ISO date. Null when no due date is set. |
note_public | string or null | The public note shown to the customer. Null when there is none. |
line_items | array of objects | The invoice line items. Each object has description, qty, unit_price and line_total. See the line item shape below. |
job_id | string or null | UUID of the linked job, when one is set. Null otherwise. |
customer_id | string or null | UUID of the linked customer, when one is set. Null otherwise. |
sent_to | string | The email address the invoice was sent to. |
sent_at | string | ISO 8601 timestamp the invoice was sent. |
email_id | string or null | The id of the email that was sent, when one is recorded. Null otherwise. |
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. |
Each entry in line_items is an object with these four keys:
| Key | Type | Notes |
|---|---|---|
description | string or null | The line item description. Null when there is none. |
qty | number | The quantity. |
unit_price | number | The price per unit. |
line_total | number | The line total for this item. |
The customer_* and external_ghl_* fields are the shared correlation block, resolved from the live customer and lead rows.
Example
{
"version": "v1",
"event_type": "invoice.sent",
"event_id": "b3f1d8a2-6c47-4e09-9a51-2d7e0c4b8f63",
"business_id": "a7f3c9d1-2e84-4b6f-8c01-5d9e2a1f7b30",
"occurred_at": "2026-06-17T09:14:03.221Z",
"invoice_id": "7d2c9e64-1a38-4b05-8f72-3e1a0c5d9b48",
"invoice_number": 1042,
"invoice_seq": 58,
"display_number": "1042-2",
"status": "sent",
"total": 2310.00,
"amount_due": 2310.00,
"amount_paid": 0,
"subtotal": 2100.00,
"tax_total": 210.00,
"due_date": "2026-07-01",
"note_public": "Thanks for your business. Payment is due within 14 days.",
"line_items": [
{
"description": "Split system supply and install",
"qty": 1,
"unit_price": 1800.00,
"line_total": 1800.00
},
{
"description": "Labour",
"qty": 4,
"unit_price": 75.00,
"line_total": 300.00
}
],
"job_id": "5c1a0e74-3d29-4b06-9f81-2e7a0c4d6b18",
"customer_id": "8c3e1a72-5d49-4b06-9f81-2e7a0c4d6b18",
"sent_to": "priya.nair@example.com",
"sent_at": "2026-06-17T09:14:03.221Z",
"email_id": "9f4d2b61-7c08-4a3f-bf52-1e0c4d8a9f63",
"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