Reading leads
All requests carry your key: Authorization: Bearer gak_live_.... The key decides whose leads you get;
another account’s lead reads as 404.
List and page
Section titled “List and page”GET /api/v1/leads?limit=100 returns leads ordered by when they last changed (oldest first). When
has_more is true, ask again with cursor=<next_cursor>. A lead that changes while you page moves to
the end, so you never skip one.
Keep in sync
Section titled “Keep in sync”Webhooks tell you quickly, but a delivery can fail. The list is the source you can rely on:
- Remember the largest
updated_atyou have seen. - Next time, ask with
updated_since= that time minus one minute, and page to the end. - Skip leads you already have at the same
updated_at(de-duplicate byid).
The minute of overlap is deliberate: a lead can be saved a moment behind the last one you saw. You will get a few leads twice, never miss one. sync-leads.mjs does all of this.
Deleted leads are not reported (a lead a manufacturer deletes simply stops appearing).
One lead, one build
Section titled “One lead, one build”GET /api/v1/leads/lead_123(or.../leads/123)GET /api/v1/builds/bld_...returns the vehicle, parts and total, never the person. Builds can be read for leads made while your integrations were switched on.
What a lead contains
Section titled “What a lead contains”| Field | Always | With “customer details” |
|---|---|---|
id, build_id, created_at, updated_at, status (proposed / won) |
yes | yes |
dealership, vehicle, items (SKU, name, qty, unit price), total, weekly, currency |
yes | yes |
marketing_consent |
yes | yes |
customer (name, email, mobile), rego, salesperson |
no | yes |
Errors and limits
Section titled “Errors and limits”| Status | Meaning |
|---|---|
400 |
A query value is wrong (for example updated_since is not an ISO 8601 time) |
401 |
Missing, unknown or revoked key |
403 |
The key cannot read this |
404 |
Not found for this key’s account |
429 |
More than 120 requests this minute: wait Retry-After seconds |