# Read data


# 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`.

```json
{
  "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 its `updated_at` and `last_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](/api-docs).

## 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](/developers/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`.
