Data API
Read and write CRM records โ the surface an integration spends its time in. JSON:API
envelope on writes ({"data":{"attributes":{โฆ}}}), flat bodies on action routes
(move_stage, won, lost, check_duplicates), PATCH for updates (there is no
PUT), uuid ids everywhere.
Search workspace members
Substring match across first name, last name and email. This is a SEARCH, not a
List pipelines
Stage ids are per-tenant uuids, so they cannot live in your config file. Fetch
List a pipeline's stages
The uuids every `move_stage` call needs. Scope: `read:pipelines`.
List / filter contacts
`filter[phone]` is the screen-pop lookup: it compares the **last 9 digits** of the
Create a contact
Emails and phones are child rows, not scalar fields โ send
Get one contact
Get one contact
Score duplicate candidates
Ranked candidates from the same matcher `POST /contacts` uses. **Flat body** โ action
Fuzzy multi-entity search
Substring search across contacts, leads, deals and companies. Right for a human-typed
Create a deal
`pipeline_id` defaults to the workspace's default pipeline when omitted. Send
Update deal fields
Field edits only. **Do not use this to change the stage** โ a stage move has its own
Move a deal to another stage
The parameter is **`to_stage_id`** โ a stage uuid from
Mark a deal won
Flat body. A deal that is already closed answers 422 โ close a fresh one. Scope: `write:deals`.
Mark a deal lost
Preferred over a stage move for a cancellation: it sets the outcome, the close reason
Log an activity (call, note, meetingโฆ)
**Always send `Idempotency-Key`, keyed on your own call/event id.** The CRM sits