Leads
Create, find, assign and move leads, and log what happens on them.
GET/leads
List leads
Newest first by default. Filters: q (name, phone, e-mail, campaign), stageId, ownerId, source, channel (meta, google, whatsapp, website, referral…), state (open or closed), status, tag, createdFrom, createdTo, sort, order. Paginate with cursor.
Needs the permission leads:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
limit | query | integer | at least 1. up to 200. default 50 |
cursor | query | string | up to 512 characters |
q | query | string | up to 100 characters |
pipelineId | query | string (uuid) | |
stageId | query | string (uuid) | |
status | query | string | |
state | query | one of open, closed | |
ownerId | query | string (uuid) or one of unassigned | |
source | query | one of website, referral, portal, direct, meta_ads, google_ads, walk_in, other | |
channel | query | one of meta, google, bing, linkedin, tiktok, website, whatsapp, referral, portal, walk_in, manual, other | |
tag | query | string | up to 40 characters |
scoreMin | query | integer | at least 0. up to 100 |
projectId | query | string (uuid) | |
area | query | string | up to 120 characters |
areaKind | query | one of wants, dislikes | |
createdFrom | query | string | |
createdTo | query | string | |
campaignId | query | string (uuid) | |
adsetId | query | string | |
adId | query | string | |
formId | query | string | |
test | query | one of exclude | |
contactId | query | string (uuid) | |
sla | query | one of breached, at_risk | |
followup | query | one of overdue, today | |
field | query | string | |
fieldValue | query | string | up to 200 characters |
pool | query | one of true | |
sort | query | one of created, updated, score, value, followup | default "created" |
order | query | one of asc, desc | default "desc" |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 429
POST/leads
Create a lead
Creates a lead with its contact. A phone number or e-mail that matches an existing person links the lead to that person instead of duplicating them.
Needs the permission leads:create.
| Parameter | In | Type | Notes |
|---|---|---|---|
Idempotency-Key | header | string | Any unique string up to 128 characters. Repeating the request with the same key returns the first response. up to 128 characters |
| Body field | Type | Notes |
|---|---|---|
contactId | string (uuid) | |
contact | object | |
contact.firstName required | string | at least 1 characters. up to 100 characters |
contact.lastName | string or null | |
contact.email | string or null | |
contact.phone | string or null | |
pipelineId | string (uuid) | |
stageId | string (uuid) | |
ownerId | string (uuid) or null | |
source | one of website, referral, portal, direct, meta_ads, google_ads, walk_in, other | |
allowDuplicate | boolean | |
estimatedValue | number or null | |
currency | string | at least 3 characters. up to 3 characters |
budgetMin | number or null | |
budgetMax | number or null | |
bedroomsMin | integer or null | |
locations | list of string | up to 10 items |
propertyTypes | list of one of apartment, villa, townhouse, penthouse, office, retail, plot, other | up to 8 items |
listingType | one of sale, rent, lease or null | |
tags | list of string | up to 30 items |
campaign | string or null | |
customFields | object of any | |
nextFollowupAt | string (date-time) or null |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"contactId":"01a15d23-0000-7000-8000-000000000000","contact":{"firstName":"text","lastName":"text","email":"text"},"pipelineId":"01a15d23-0000-7000-8000-000000000000"}'Responses:
201 400 401 402 403 429
GET/leads/activity-options
Get activity options (leads)
Needs the permission activities:read.
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/activity-options \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 401 403 429
POST/leads/bulk
Bulk (leads)
Needs the permission leads:bulk.
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/bulk \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"ids":["01a15d23-0000-7000-8000-000000000000"],"action":"assign","ownerId":"01a15d23-0000-7000-8000-000000000000"}'Responses:
200 400 401 402 403 429
GET/leads/channels
Leads per channel
How many leads each channel (Meta, Google, WhatsApp, website…) has under the other filters you pass: the numbers behind the “From” strip.
Needs the permission leads:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
q | query | string | up to 100 characters |
pipelineId | query | string (uuid) | |
stageId | query | string (uuid) | |
status | query | string | |
state | query | one of open, closed | |
ownerId | query | string (uuid) or one of unassigned | |
source | query | one of website, referral, portal, direct, meta_ads, google_ads, walk_in, other | |
channel | query | one of meta, google, bing, linkedin, tiktok, website, whatsapp, referral, portal, walk_in, manual, other | |
tag | query | string | up to 40 characters |
scoreMin | query | integer | at least 0. up to 100 |
projectId | query | string (uuid) | |
area | query | string | up to 120 characters |
areaKind | query | one of wants, dislikes | |
createdFrom | query | string | |
createdTo | query | string | |
campaignId | query | string (uuid) | |
adsetId | query | string | |
adId | query | string | |
formId | query | string | |
test | query | one of exclude | |
contactId | query | string (uuid) | |
sla | query | one of breached, at_risk | |
followup | query | one of overdue, today | |
field | query | string | |
fieldValue | query | string | up to 200 characters |
pool | query | one of true |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/channels \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 429
GET/leads/export
Download leads as a CSV
The same filters as the list, including the campaign, ad set, ad, form and channel, and a period given as days (2026-10-26: the whole day in the workspace's time zone) or as exact timestamps (2026-10-26T09:30:00Z). The file name says what is inside.
Needs the permission leads:export.
| Parameter | In | Type | Notes |
|---|---|---|---|
q | query | string | up to 100 characters |
pipelineId | query | string (uuid) | |
stageId | query | string (uuid) | |
status | query | string | |
state | query | one of open, closed | |
ownerId | query | string (uuid) or one of unassigned | |
source | query | one of website, referral, portal, direct, meta_ads, google_ads, walk_in, other | |
channel | query | one of meta, google, bing, linkedin, tiktok, website, whatsapp, referral, portal, walk_in, manual, other | |
tag | query | string | up to 40 characters |
scoreMin | query | integer | at least 0. up to 100 |
projectId | query | string (uuid) | |
area | query | string | up to 120 characters |
areaKind | query | one of wants, dislikes | |
createdFrom | query | string | |
createdTo | query | string | |
campaignId | query | string (uuid) | |
adsetId | query | string | |
adId | query | string | |
formId | query | string | |
test | query | one of exclude | |
contactId | query | string (uuid) | |
sla | query | one of breached, at_risk | |
followup | query | one of overdue, today | |
field | query | string | |
fieldValue | query | string | up to 200 characters |
pool | query | one of true |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/export \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 429
GET/leads/export/count
Count the leads a download would hold
Takes the same filters as the download and answers { leads, limit, tooMany } before anything is built. A download holds at most 20,000 leads.
Needs the permission leads:export.
| Parameter | In | Type | Notes |
|---|---|---|---|
q | query | string | up to 100 characters |
pipelineId | query | string (uuid) | |
stageId | query | string (uuid) | |
status | query | string | |
state | query | one of open, closed | |
ownerId | query | string (uuid) or one of unassigned | |
source | query | one of website, referral, portal, direct, meta_ads, google_ads, walk_in, other | |
channel | query | one of meta, google, bing, linkedin, tiktok, website, whatsapp, referral, portal, walk_in, manual, other | |
tag | query | string | up to 40 characters |
scoreMin | query | integer | at least 0. up to 100 |
projectId | query | string (uuid) | |
area | query | string | up to 120 characters |
areaKind | query | one of wants, dislikes | |
createdFrom | query | string | |
createdTo | query | string | |
campaignId | query | string (uuid) | |
adsetId | query | string | |
adId | query | string | |
formId | query | string | |
test | query | one of exclude | |
contactId | query | string (uuid) | |
sla | query | one of breached, at_risk | |
followup | query | one of overdue, today | |
field | query | string | |
fieldValue | query | string | up to 200 characters |
pool | query | one of true |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/export/count \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 429
GET/leads/imports
Get imports (leads)
Needs the permission leads:import.
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/imports \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 401 403 429
POST/leads/imports
Imports (leads)
Needs the permission leads:import.
| Body field | Type | Notes |
|---|---|---|
fileName | string | up to 200 characters |
csv required | string | at least 1 characters |
mapping | object of string | |
onDuplicate | one of skip, create | |
defaultSource | one of website, referral, portal, direct, meta_ads, google_ads, walk_in, other | |
ownerId | string (uuid) or null |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/imports \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"fileName":"text","csv":"text","mapping":{}}'Responses:
202 400 401 402 403 429
POST/leads/imports/preview
Check a spreadsheet before importing it
Shows how the columns were understood.
Needs the permission leads:import.
| Body field | Type | Notes |
|---|---|---|
csv required | string | at least 1 characters |
mapping | object of string or null |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/imports/preview \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"csv":"text","mapping":{}}'Responses:
200 400 401 402 403 429
GET/leads/imports/{id}
Get imports (lead)
Needs the permission leads:import.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/imports/{id} \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 404 429
GET/leads/{id}
Get a lead
One lead with its contact, stage, owner, score and where it came from.
Needs the permission leads:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/{id} \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 404 429
PATCH/leads/{id}
Change a lead
Send If-Match with the version you read; a stale change gets 412 instead of overwriting someone else’s edit.
Needs the permission leads:update.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
| Body field | Type | Notes |
|---|---|---|
source | one of website, referral, portal, direct, meta_ads, google_ads, walk_in, other | |
estimatedValue | number or null | |
currency | string | at least 3 characters. up to 3 characters |
budgetMin | number or null | |
budgetMax | number or null | |
bedroomsMin | integer or null | |
locations | list of string | up to 10 items |
propertyTypes | list of one of apartment, villa, townhouse, penthouse, office, retail, plot, other | up to 8 items |
listingType | one of sale, rent, lease or null | |
tags | list of string | up to 30 items |
campaign | string or null | |
customFields | object of any | |
nextFollowupAt | string (date-time) or null |
curl -X PATCH https://crm.anibrosdesign.com/api/v1/leads/{id} \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"source":"website","estimatedValue":0,"currency":"text"}'Responses:
200 400 401 402 403 404 412 429
DELETE/leads/{id}
Archive a lead
Archived leads can be restored.
Needs the permission leads:delete.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X DELETE https://crm.anibrosdesign.com/api/v1/leads/{id} \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
204 400 401 402 403 404 429
GET/leads/{id}/activities
The activity history of a lead
Needs the permission activities:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) | |
limit | query | integer | at least 1. up to 200. default 50 |
cursor | query | string | up to 512 characters |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/{id}/activities \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 404 429
POST/leads/{id}/activities
Log a call, message, meeting or note on a lead
Needs the permission activities:create.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
| Body field | Type | Notes |
|---|---|---|
type required | one of note, call, whatsapp, sms, email, instagram, meeting | |
description required | string | at least 1 characters. up to 4000 characters |
direction | one of outbound, inbound | |
outcome | one of connected, no_answer, busy, voicemail, wrong_number, interested, not_interested, appointment_booked, sent, replied | |
occurredAt | string (date-time) | |
durationMinutes | integer | at least 0. up to 1440 |
nextFollowupAt | string (date-time) or null |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/{id}/activities \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"type":"note","description":"text","direction":"outbound"}'Responses:
201 400 401 402 403 404 429
GET/leads/{id}/areas
Get areas (leads)
Needs the permission leads:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/{id}/areas \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 404 429
PUT/leads/{id}/areas
Set areas (leads)
Needs the permission leads:update.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
| Body field | Type | Notes |
|---|---|---|
wants required | list of string | up to 12 items |
dislikes required | list of string | up to 12 items |
curl -X PUT https://crm.anibrosdesign.com/api/v1/leads/{id}/areas \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"wants":["text"],"dislikes":["text"]}'Responses:
200 400 401 402 403 404 412 429
POST/leads/{id}/assign
Give a lead to a person
Send ownerId, or null to unassign.
Needs the permission leads:assign.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
| Body field | Type | Notes |
|---|---|---|
ownerId required | string (uuid) or null |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/{id}/assign \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"ownerId":"01a15d23-0000-7000-8000-000000000000"}'Responses:
200 400 401 402 403 404 429
POST/leads/{id}/claim
Claim (leads)
Needs the permission leads:claim.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/{id}/claim \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 402 403 404 429
GET/leads/{id}/files
Get files (leads)
Needs the permission leads:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/{id}/files \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 404 429
POST/leads/{id}/files
Files (leads)
Needs the permission leads:update.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) | |
name | query | string | up to 200 characters |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/{id}/files \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
201 400 401 402 403 404 429
GET/leads/{id}/handlers
Get handlers (leads)
Needs the permission leads:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/{id}/handlers \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 404 429
PUT/leads/{id}/handlers/{userId}
Set handlers (lead)
Needs the permission leads:assign.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) | |
userId required | path | string (uuid) |
curl -X PUT https://crm.anibrosdesign.com/api/v1/leads/{id}/handlers/{userId} \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 402 403 404 412 429
DELETE/leads/{id}/handlers/{userId}
Remove handlers (lead)
Needs the permission leads:assign.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) | |
userId required | path | string (uuid) |
curl -X DELETE https://crm.anibrosdesign.com/api/v1/leads/{id}/handlers/{userId} \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 402 403 404 429
GET/leads/{id}/interests
Get interests (leads)
Needs the permission projects:read.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X GET https://crm.anibrosdesign.com/api/v1/leads/{id}/interests \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 403 404 429
PUT/leads/{id}/interests
Set interests (leads)
Needs the permission leads:update.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
| Body field | Type | Notes |
|---|---|---|
items required | list of object | up to 20 items |
items[].projectId required | string (uuid) | |
items[].unitTypeId | string (uuid) or null | |
items[].note | string or null | |
items[].facings | list of string | up to 8 items |
curl -X PUT https://crm.anibrosdesign.com/api/v1/leads/{id}/interests \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"items":[{"projectId":"01a15d23-0000-7000-8000-000000000000","unitTypeId":"01a15d23-0000-7000-8000-000000000000","note":"text"}]}'Responses:
200 400 401 402 403 404 412 429
POST/leads/{id}/restore
Restore (leads)
Needs the permission leads:delete.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/{id}/restore \
-H "Authorization: Bearer crm_live_xxxxxxxx"Responses:
200 400 401 402 403 404 429
POST/leads/{id}/stage
Move a lead to another stage
Won and lost stages may need a reason or a deal value, depending on the pipeline’s rules.
Needs the permission leads:update.
| Parameter | In | Type | Notes |
|---|---|---|---|
id required | path | string (uuid) |
| Body field | Type | Notes |
|---|---|---|
stageId required | string (uuid) | |
reason | string or null | |
lossReason | string or null | |
reasonCode | string or null | |
wantedAreas | list of string | up to 6 items |
deal | object | |
deal.reservationId | string (uuid) | |
deal.propertyId | string (uuid) | |
deal.dealValue required | number | at least 1.0E-7. up to 10000000000000 |
curl -X POST https://crm.anibrosdesign.com/api/v1/leads/{id}/stage \
-H "Authorization: Bearer crm_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"stageId":"01a15d23-0000-7000-8000-000000000000","reason":"text","lossReason":"text"}'Responses:
200 400 401 402 403 404 429
Something missing or unclear? Tell us.