Leads
The Leads API provides CRUD access to leads, plus ancillary actions for status, assignment, tags, archive/activate, convert-to-client, clone and comments.New to the API? Start with Getting started (base URL, response envelope, errors, pagination) and Authentication (API keys). Those conventions apply to every endpoint below and are not repeated here.
Identifier note: leads are addressed by their numericlead_id. Wherever{id}appears below it is thelead_id. A lead’s status is aleadstatus_id(from the lead statuses configured in the CRM).
Scope: attachments/cover image, per-user notes, activity logs, kanban position, bulk
actions and pinning are managed in-app and are not part of this API. Checklists on a lead
are handled by the Checklists API (resource_type=lead).
The lead object
| Field | Type | Notes |
|---|---|---|
id | integer | Lead id. Used in all URLs. |
title | string | Lead title. |
value | string|null | Estimated value. |
status | object | { id, title, color } — id is the leadstatus_id. |
active_state | string | active or archived. |
category | object | { id, name }. |
source | string|null | Lead source. |
last_contacted | date|null | |
description | string|null | |
contact | object | Contact person + company fields. |
address | object | Address fields. |
converted | object | Read-only: is_converted, client_id, date. |
assigned | array | Assigned team members [{ id, name }] — set via the assigned action. |
tags | array | Tag titles. |
dates | object | created, updated. |
List / search leads
Query parameters
| Parameter | Type | Description |
|---|---|---|
status | integer | Filter by leadstatus_id. |
category_id | integer | Filter by category id. |
source | string | Filter by source. |
active_state | string | active or archived. |
assigned_user_id | integer | Filter by an assigned team user. |
search | string | Free-text on title / company / email. |
sort | string | lead_title, lead_value, lead_created, lead_last_contacted. |
order | string | asc or desc (default desc). |
limit | integer | Results per page (max 100). |
page | integer | Page number. |
Example request
Example response — 200 OK
Get a lead
200) with message “Lead retrieved successfully.”
Create a lead
Body parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
lead_title | string | yes | |
lead_status | integer | yes | A leadstatus_id. |
lead_categoryid | integer | yes | Existing (lead) category id. |
lead_firstname / lead_lastname | string | no | Contact name. |
lead_email | no | ||
lead_phone, lead_company_name, lead_job_position, lead_website | string | no | |
lead_value | numeric | no | |
lead_source | string | no | |
lead_last_contacted | date | no | |
lead_description | string | no | |
lead_street, lead_city, lead_state, lead_zip, lead_country | string | no | Address. |
Required client custom fields of type leads must also be supplied (by field name).
Assignment is set separately — see the assigned action.
Example request
Example response — 201 Created
Update a lead
200) with message “Lead updated successfully.”
Delete a lead
Example response — 200 OK
Change status
| Parameter | Type | Required | Notes |
|---|---|---|---|
status | integer | yes | A leadstatus_id. |
200) with message “Lead status updated successfully.”
Set assigned team members
assigned array is the full set — it replaces any existing assignment; an empty array
clears all.
| Parameter | Type | Required | Notes |
|---|---|---|---|
assigned | array of integers | yes | Team user ids. Empty array clears all. |
200) with message “Lead assignees updated successfully.”
Set tags
200) with message “Lead tags updated successfully.”
Archive / activate
archive sets active_state to archived; activate sets it back to active.
Convert to client
delete_lead=yes to remove
it. A welcome email is sent only if send_welcome_email=yes. Returns the new client.
| Parameter | Type | Required | Notes |
|---|---|---|---|
first_name | string | yes | Primary user’s first name. |
last_name | string | yes | Primary user’s last name. |
email | yes | Unique among client/team users. | |
client_company_name | string | no | |
client_billing_invoice_due_days | integer | no | |
send_welcome_email | string | no | yes to email the new client. Default no. |
delete_lead | string | no | yes to delete the lead after converting. Default no. |
201) with message “Lead converted to client successfully.”
Clone a lead
| Parameter | Type | Required | Notes |
|---|---|---|---|
lead_title | string | yes | Title of the new lead. |
lead_status | integer | yes | A leadstatus_id. |
lead_firstname, lead_lastname, lead_email, lead_phone, lead_company_name, lead_website | string | no | |
lead_value | numeric | no | |
copy_checklist | string | no | on to copy checklist items. |
copy_files | string | no | on to copy files. |
201) with message “Lead cloned successfully.”
Comments
List comments
{ "data": [ { "id": 9, "text": "...", "creator": { "id": 1, "name": "Admin" } } ], "message": "..." }.
Add a comment
| Parameter | Type | Required | Notes |
|---|---|---|---|
comment | string | yes | The comment text. |
201) with message “Lead comment added successfully.”
Delete a comment
{ "data": { "id": 9 }, "message": "Lead comment deleted successfully." }.
Errors
See Getting started for the shared error format. Lead-specific:| Status | Meaning |
|---|---|
404 Not Found | The lead (or comment) id does not exist. |
409 Conflict | The lead has already been converted to a client. |
422 Unprocessable Entity | Validation failed (e.g. missing title/status/category, or convert email already taken). |