Read data
What became of a lead
GET /api/v1/leads/{id} takes the lead_id (led_…) or the correlation_id (crr_…) from the push. Scope: leads_write, leads_read or org_all.
{
"id": "led_019a1b2c-3d4e-7f5a-8b6c-7d8e9f0a1b2c",
"correlation_id": "crr_a1b2c3d4e5f6a7b8c9d0e1f2",
"status": "processed",
"test": false,
"lead_source_id": "src_019535d9-3df7-79fb-b466-fa907fa17f9e",
"opportunity_id": "opp_019535d9-3df7-79fb-b466-fa907fa17f9e",
"external_reference": { "system": "my-crm", "id": "4711" },
"received_at": "2026-10-23T09:41:00Z",
"processed_at": "2026-10-23T09:41:07Z"
}
status is received (queued), processing, processed (it is on opportunity_id), rejected (not a lead: spam, a newsletter, an auto-reply) or failed (we are alerted). A lead you just pushed can take a few seconds to appear: a 404 lead_not_found right after the push means wait and retry.
Opportunities
An opportunity is a customer's case at the dealer. Scope: opportunities_read or org_all; it includes the customer's contact details.
GET /api/v1/opportunities/{id}GET /api/v1/opportunities?external_reference_system=my-crm&external_reference_id=4711: the opportunity for your record.GET /api/v1/opportunities?updated_since=2026-10-23T00:00:00Z: everything changed since a time, oldest change first. An opportunity's change time is the later of itsupdated_atandlast_customer_activity_at; keep the latest change time you have seen and pass it next time.GET /api/v1/opportunities/{id}/appointments
Each opportunity has its status (opened, closed with a closed_reason), handling_state (has a salesperson started on it), assigned_to, business_unit, customer, vehicles, intents and the partners' external_references. See the Opportunity schema in the reference.
Pagination
GET /api/v1/opportunities is cursor-paginated: pass next_cursor as cursor until has_more is false. The Link: <…>; rel="next" header carries the next page's URL. limit is 1 to 100 (default 25). The events feed pages differently (pass next_cursor as after, and limit defaults to 50; see Events feed), and an opportunity's appointments come in one response. A cursor never skips a record. A record that changes while you page through can show up again on a later page, so dedupe by its id.