Leads
List, create, read, update and move leads through your pipeline.
List leads
GET /api/v1/leads| Parameter | Description |
|---|---|
filter[status] | Status public id |
filter[owner] | Membership public id |
filter[source] | Source public id |
filter[created_at] | A date range, or a keyword such as last_30_days |
filter[score_band] | hot, warm or cold |
sort | -created_at, score, -last_activity_at |
page[size] | Up to 200; defaults to 50 |
page[after] | Cursor taken from links.next |
200 with an empty list rather than an error — so when you add a filter, verify it returns the rows you expect, not merely that it returned 200.Results are always scoped to what your token's membership may see. A manager's token returns their team; an agent's token returns their own leads. There is no parameter that widens this.
Create a lead
POST /api/v1/leads{
"first_name": "Aarav",
"last_name": "Patel",
"phone": "9812300045",
"email": "aarav@example.com",
"source": "01H8XGJWBWBAQ4S1PT7C2N3M4K",
"estimated_value": 140000,
"custom_fields": { "product_interest": "Annual plan" }
}Distribution rules apply, so a lead created through the API is routed exactly like one from a web form.
Duplicate detection runs on phone and email. A match returns 200 with the existing lead and "duplicate": true rather than creating a second record — which means a retried request is safe.
Read a lead
GET /api/v1/leads/{public_id}Returns the lead with its contact, source, status, owner and custom fields. Add ?include=activities,notes for the timeline.
Update a lead
PATCH /api/v1/leads/{public_id}Send only the fields you are changing. Every change is written to the audit trail with your token recorded as the actor, so an API-driven edit is as traceable as one made in the interface.
Move a lead's stage
POST /api/v1/leads/{public_id}/status{ "status": "01H8XGK2M4P5Q6R7S8T9V0W1X2", "note": "Customer confirmed budget" }PATCHing a status field. It records a proper stage transition, and transitions are what funnel, velocity and conversion reporting read. A directly-written status changes the lead but leaves the reports blind to when it moved.Stuck on a response you did not expect? Send us the request_id from the error body and we can trace the exact call — contact support.