Resources
Leads
list · get · create · update · archive
A lead is the person. What gets worked hangs off its operation.
Filters
GET /leads?temperature=&origin=&email=&assigned_agent_id=&include_archived=
email matches case-insensitively, because an address typed by a human is
not reliably lowercased. That filter is what makes Zapier's Find Lead work
as the search half of a find-or-create.
Create
POST /leads runs the same primitive as the UI: find-or-create the contact
(matched on normalized phone and email), insert the lead, round-robin an agent,
open the lead's operation, and fire the sanctions screen. The new operation's id
comes back as operation_id.
full_namestringrequiredphonestringemailstringoriginstringIncludes email, the value for leads forwarded by a mailbox automation. That
way the funnel attributes them instead of burying them in other.
operation_typebuy | rentOptional. Given, the operation opens exactly as in the app. Omitted, the
lead and its contact are created with no operation and operation_id
comes back null: a raw lead to qualify.
budget_maxnumberbedrooms_minnumberintentstringnotesstringemail_subjectstringSubject of the forwarded mail. Not stored on the lead.
email_bodystringThe mail body. Send it and the lead is qualified by the AI, exactly as an
inbound WhatsApp message is. If absent, an origin: "email" lead falls back
to notes — so a Zap that maps the Gmail body to notes qualifies without
being reconfigured.
operation_type: "sell" is rejected with 422. A listing is negotiated with
an owner and ends in a signed mandate; it never starts from this endpoint, and
coercing it into a demand operation would be worse than refusing it.
Full example in Lead to viewing.
Archive
DELETE /leads/{id} is a soft archive (archived_at + archive_reason),
never a hard delete. A lead is the root of contacts, operations, viewings and
offers: really deleting it would orphan everything else.
Listing leads — the sellers — carry lead_status as NULL. A filter written
as "not archived" drops them silently. To count supply, filter on
operation_type, not on status.