Contacts
End-user contacts (visitors, leads, customers).
Dry run of deleting or anonymising a person's data
What a request in this mode would touch now, per handler (`counts`) and
Delete or anonymise a person's data
Queues the erasure (202) and returns the request; poll
The workspace's data-erasure requests (newest 100)
Requires `contacts.erase`.
One data-erasure request's status
Requires `contacts.erase`.
Count anonymous leads a purge would delete (admin)
How many anonymous leads `DELETE /api/contacts/leads` would remove right
Delete all anonymous leads + their conversations (admin)
Irreversibly deletes every anonymous lead — an auto-created chat lead
Download a contacts import template (CSV/Excel)
A sample file with a header row only, including the tenant's contact
List saved contact segments
Tenant-shared, named contacts-list filter sets (saved criteria, not membership — applying one re-runs the live query). Every staff role can list and apply them. RLS-scoped.
Save a contact segment
Save the current contacts-list filters under a name the whole team can reuse. Requires `contacts.manage`; the name is unique per tenant.
Delete a saved contact segment
Requires `contacts.manage`.
Bulk contact action
Apply one action (add_tag / remove_tag / set_type / delete) to a set of contact ids. Each row is gated by the same policy as its single-contact endpoint; rows the agent can't act on are skipped. Returns how many were affected. RLS-scoped.
Who owns a phone number
Resolve a phone number to the one contact that owns it, for a dialler that has a number and no name yet. Both the query and the stored number are reduced to digits and compared on their last nine, so `+905321234567` and `0532 123 45 67` are the same number.
Start a background contact import from a CSV/Excel file
Header-mapped import: columns are matched by field key (first_name,
Release the WhatsApp identity hold on a contact
Records that an operator re-established trust with this person AWAY from
One lazily-loaded section of this contact's CRM record
Offers, sales, open balance, the clinic's own notes, or the files on the
The answers to 'how did you hear about us'
A small workspace-owned list rather than a free-text field, because the
Add an answer
Add an answer
Edit an answer
Edit an answer
Retire an answer
**Deactivates rather than deletes.** Last year's answers are the only
The workspace's own lifecycle words
'İlgileniyor' → 'Teklif verildi' → 'Kazanıldı'. Singular, ordered, and
Add a lifecycle word
`is_default: true` REPLACES the previous default rather than joining it —
Edit a lifecycle word
Edit a lifecycle word
Retire a lifecycle word
The people who were in it KEEP EXISTING — `contacts.stage_id` is nulled,
Book a slot on this contact's linked CRM record
Creates an appointment in the connected CRM for the record this contact
Cancel a booking this panel made
Undo for the booking above (doc 31 §7.5-10). Who pressed it is recorded
What the booking form may offer
The clinic's own service catalogue and staff list, for the pickers on the
What this clinic last asked for one catalogue item
A HINT, and the response says so. The connected CRM publishes no list
The stages a deal can be put in (doc 93 §6.2)
Asked of the CRM's writer, so a workspace that has not opened deals
Open a deal in the connected CRM (doc 93 §8.1)
The agent action — Wiz never opens a deal. Three gates as every CRM
Move one of this person's deals to another stage (doc 93 §8.1)
The deal must be associated with THIS contact's CRM record — 'not
Write an offer on this contact's linked CRM record
Creates a quote in the connected CRM for the record this contact is
Download one of this contact's CRM documents
The bytes of a document the CRM holds for this person — an offer's PDF,
Send one of this contact's CRM documents into their conversation
The agent's one-click 'send the invoice' (doc 87 §8.3). The reference is
Which connected channels can reach this contact
Every channel this tenant has connected and this agent may work, with
Ask WhatsApp whether this contact's number has an account
Answers the question directly, without sending anything to the number.
Preview a contacts import file before running it
Parses the header row plus a small sample (~20 rows) and classifies
Progress / result of a background contact import
Progress / result of a background contact import
Bulk grant/revoke marketing consent over a contact segment
Applies a grant or revoke for one channel to every saved contact matching
How many contacts a bulk consent change would touch
How many contacts a bulk consent change would touch
Export the consent audit log as CSV (proof)
Streams the tenant's consent audit trail as a CSV download — portable
List contacts
The workspace's SAVED contacts, newest first by default. People first
Create a contact
Saves a new person. Nothing is sent to them. An e-mail or phone that
Get a contact
One person with their fields, tags and companies — saved or not. Their
Update a contact
Changes only the fields sent. Nothing is sent to the person. Needs the
Delete a contact
Removes the person for good, and with them every conversation they
List a contact's conversations
Returns the conversations linked to a single contact across every
The website account (membership) linked to a contact
The end-user account this contact registered (if any) + its external-
A contact's current marketing consent per channel
The current consent state for each channel (general / email / sms /
Manually grant or revoke a contact's marketing consent
Records a manual grant/revoke (source `admin_manual`, stamped with the
A contact's consent audit history (proof)
The append-only log of every grant/revoke with its evidence (source, the
A contact's aggregated visit history (Visitor Intelligence)
The anonymous-then-identified browsing history stitched to this contact:
A contact's store orders and support tickets (inbox profile card)
Two different sources, deliberately.
A contact's Trendyol returns (claims), from the mirror
Returns read from the Trendyol claims mirror (doc 70 §12.6), newest
A contact's Çiçeksepeti gift orders — sent and received
Read from the Çiçeksepeti order mirror (doc 76 §5.2), never from the
A contact's marketplace returns (claims), from the mirrors
Returns / claims read from each marketplace's local claims mirror
Merge a contact into another
Merges the path contact (the SOURCE) into the target named by
Possible marketplace identity matches for a contact
Open 'this may be the same person' suggestions for the contact (doc 70
Link a marketplace buyer to a contact by order number
An agent links the buyer behind an order number (read from the local
Accept a marketplace identity suggestion
`link` binds the buyer id to the suggestion's contact, moving it off
Dismiss a marketplace identity suggestion
Closes the suggestion without linking. Idempotent. Needs the contact `update` ability.
Block a contact
Stamps the contact's `blocked_at` and cascades ALL of their (non-trashed)
Unblock a contact
Clears the contact's `blocked_at` and moves every `blocked` conversation
Upload or replace a contact's avatar
Multipart upload of a single avatar image for a contact, stored on the
List a contact's internal notes
Internal staff-only notes on a contact (newest first). CONTACT-scoped — distinct from a conversation's notes. Readable by anyone who can view the contact (agent+).
Add an internal note to a contact
Adds a staff-only note to a contact. The author is the authenticated
Delete a contact's internal note
Deletes a note. The author may delete their own note; supervisors and
List calls made to a contact from members' own phones
Calls placed from a member's OWN phone (the device dialer, not a ConnectWiz line), as the member reported them on the mobile app's 'how did the call go?' card — newest first. Self-reported: the platform never saw these calls, and `duration_seconds` is the app's estimate unless `duration_estimated` is false. Readable by anyone who can view the contact. Gated by the `mobile_phone_calls` feature (404 when off).
Log a call made from the member's own phone
Records the outcome of a call the member placed from their own phone
The contact's calls on the tenant's own PBX
Calls the tenant's PBX (Netsantral, Bulutsantralim) reported for this
Call the contact from the member's PBX extension
Click-to-call: the PBX rings the member's own extension first and dials
A fresh url for a PBX call's recording
Asked from the PBX on every play and never stored or copied (owner
The workspace's address-book sync policy
Whether address-book sync with members' phones is switched on, its scope, the directions members may choose and the two-way conflict rule, plus what the caller may do with it. Readable with `contacts_sync.use` or `contacts_sync.manage`. Feature `contacts_sync` (404 when off).
Change the workspace's address-book sync policy
Requires `contacts_sync.manage` (admin by default). Partial update.
The contacts this member may carry on their phone
A page of the workspace contacts in the policy's scope (`assigned`: the member owns them or has a conversation assigned; `all`: every saved contact plus their own), never blocked ones and never ones with neither a phone nor an email. Requires `contacts_sync.use`, the workspace switch on (`403 code=contacts_sync_disabled`) and a direction towards the phone allowed (`403 code=direction_not_allowed`).
Bring phone contacts into the workspace (deduplicated)
Each entry is matched against existing contacts by normalised phone
Apply two-way edits made on the phone
For each field, the phone sends the value it last synced (`base`) and
Attach a tag to a contact
Attaches an existing tenant tag to the contact (idempotent). CONTACT-scoped
Detach a tag from a contact
Detach a tag from a contact
The workspace's consent phrases — opt-in words grant, opt-out phrases only ask for confirmation
The workspace's consent phrases — opt-in words grant, opt-out phrases only ask for confirmation
Update the consent phrases
Update the consent phrases
The custom-field type catalogue
The available field types for the field editor. Requires the scope's manage permission.
List a scope's custom field definitions
Readable by any staff member (the contact form + list render from it).
Create a custom field definition (scope manager only)
Create a custom field definition (scope manager only)
Reorder a scope's field definitions (scope manager only)
Reorder a scope's field definitions (scope manager only)
Update a custom field definition (scope manager only)
Update a custom field definition (scope manager only)
Delete a custom field definition (scope manager only)
Delete a custom field definition (scope manager only)
The cookie consent choices of this person's browsers (KVKK / GDPR access request)
Doc 106 §4.6, CMP-1. Every choice a browser of this person made
Get the tenant İYS integration settings (channel manager only)
The tenant's İYS (Turkey consent registry) configuration. The password is write-only (only `password_set` is reported).
Update the tenant İYS integration settings (channel manager only)
Partial update of the İYS settings. Omit the password to keep the stored one.
Verify the İYS credentials (channel manager only)
Attempts an İYS authentication with the stored credentials. 422 when not configured or the credentials are rejected.
Get a contact's own agents
The contact's general owner and their per-department owners (doc 64
Set a contact's own agents
Set the general owner and/or REPLACE the per-department owners.
The contact's Mirakl orders
The contact's orders on every connected Mirakl operator, from the mirror,
The buyer's evaluation of one Mirakl order
OR51, read on demand (Mirakl's own rule: on each evaluation page view)