Lead object
Every lead in the API and in webhooks has the same shape.
| Field | Type | Meaning |
|---|---|---|
id | UUID | Your lead's id. Stable. |
service_id, service | text | Catalog id and name. |
zip | text | Customer's ZIP code. |
details | text | The customer's description and their answers to the job questions. Until you accept (and after a decline), phone numbers, emails, links, handles, street addresses and names in it are replaced with [phone], [email], [link], [handle], [address] and [name]. Full text after you accept. |
received_at | time | When the lead was sent to you. |
updated_at | time | Last change of any kind (status, accept, decline, follow-up, your ids or note, credit). |
status | text | See Statuses. |
accepted, accepted_at | bool, time | You accepted it (shared leads count as accepted when sent). |
declined, declined_at | bool, time | You declined it. |
lead_type | text | shared (up to 3 pros picked), direct (only you) or related (a nearby service you list). |
exclusive, related, repeat_customer | bool | Lead details for filtering. |
contact_via | text | How the customer wants to be reached: phone, email or message. |
contact | object or null | null until accepted. Then first_name, last_name, phone (if contact_via is phone), email (if phone or email). Real numbers, never relay numbers. |
customer_id | text or null | Same value for the same customer across leads (cus_...). Shown once contact is visible. |
can_message | bool | You can send in-app messages (accepted, and the customer has an account). |
unread_messages | number | Customer messages you have not read. |
price_cents, free | number, bool | Lead price; free leads (your referral link, tests). |
charged_cents | number | What is actually charged for this lead now (after credits). |
credit | text | none, requested, approved or denied. |
follow_up_at | time or null | Your follow-up date. |
external_ids | object | Your own ids, for example {"servicetitan":"88213"}. |
note | text or null | Your internal note. |
job_total_cents, paid_cents | number or null | What you reported. |
Money is in whole cents. Times are ISO 8601 with a time zone. Phone numbers are E.164 (+12535550100).
Example
{
"id": "6b1c2f0e-1d7a-4c55-9a51-0f3c2a9d8e11",
"service_id": "water-heater-installation",
"service": "Water heater installation",
"zip": "98391",
"details": "40 gallon gas heater leaking at the base. Garage. Prefer mornings.",
"received_at": "2026-10-22T16:04:11.201+00:00",
"updated_at": "2026-10-22T18:30:00.410+00:00",
"status": "hired",
"accepted": true,
"accepted_at": "2026-10-22T16:06:02.000+00:00",
"declined": false,
"declined_at": null,
"lead_type": "direct",
"exclusive": true,
"related": false,
"repeat_customer": false,
"contact_via": "phone",
"contact": {"first_name": "Pat", "last_name": "Rivera", "phone": "+12535550100", "email": "pat@example.com"},
"customer_id": "cus_4f1a9c0d2b7e8a6c5d3f",
"can_message": true,
"unread_messages": 0,
"price_cents": 4500,
"free": false,
"charged_cents": 4500,
"credit": "none",
"follow_up_at": null,
"external_ids": {"servicetitan": "88213"},
"note": "Gate code 1234",
"job_total_cents": 185000,
"paid_cents": null
}We only add fields within v1. Ignore fields you do not know.