Skip to content

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.

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.

Webhooks tell you quickly, but a delivery can fail. The list is the source you can rely on:

  1. Remember the largest updated_at you have seen.
  2. Next time, ask with updated_since = that time minus one minute, and page to the end.
  3. Skip leads you already have at the same updated_at (de-duplicate by id).

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).

  • 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.
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
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