tumbuh.ai
tumbuh.ai Public API

Count customers

GET
https://<domain-anda>
/api/v1/public/customers/stats

Return headline counts for this workspace’s customers.

Returns totals for the workspace — how many customers exist, how many are new in the period, and the breakdown by pipeline stage. Use it for a quick health read instead of paging the whole list. Read-only and rate-limited to 20 calls per minute.

Count customers › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List customers

GET
https://<domain-anda>
/api/v1/public/customers

Page through this workspace’s customers, most recently updated first.

Returns customers with their contact details, tags, pipeline stage, nullable primaryBranchId and last inbound message time. Use it to find a customer before messaging them, or to sweep a segment by stage, tag, channel, consent, blacklist, WhatsApp-window state, date range or payment status. Pass updatedSince to poll only what changed. Read-only — nothing is written and no message is sent. Paginated: follow meta.pagination.nextCursor until hasMore is false.

List customers › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

search
​string

Match against name, phone number or email.

Match against name, phone number or email.

stageId
​string

Pipeline stage id from pipelines.list.

Pipeline stage id from pipelines.list.

tag
​string

Return only customers carrying this tag.

Return only customers carrying this tag.

updatedSince
​string

ISO-8601 timestamp. Return only customers changed at or after it.

ISO-8601 timestamp. Return only customers changed at or after it.

consentStatus
​string

CONSENTED or NOT_CONSENTED. Only CONSENTED customers can receive broadcasts. Matches the consentStatus field on each row.

CONSENTED or NOT_CONSENTED. Only CONSENTED customers can receive broadcasts. Matches the consentStatus field on each row.

blacklisted
​boolean

true returns only blacklisted customers, false only the rest.

true returns only blacklisted customers, false only the rest.

channel
​string

Customers reachable on this channel: whatsapp, instagram, messenger, telegram or tiktok.

Customers reachable on this channel: whatsapp, instagram, messenger, telegram or tiktok.

hasActiveWindow
​boolean

true returns customers whose WhatsApp 24-hour window is open (free-form text allowed); false returns those who need a template.

true returns customers whose WhatsApp 24-hour window is open (free-form text allowed); false returns those who need a template.

whatsappPhoneNumberId
​string

Only customers that belong to this WhatsApp number, id from channels.phoneNumbers.

Only customers that belong to this WhatsApp number, id from channels.phoneNumbers.

dateField
​string

Which date dateFrom/dateTo apply to: createdAt (default) or lastMessageAt (last inbound message).

Which date dateFrom/dateTo apply to: createdAt (default) or lastMessageAt (last inbound message).

dateFrom
​string

Start of the date range, YYYY-MM-DD (whole UTC day) or an ISO-8601 timestamp.

Start of the date range, YYYY-MM-DD (whole UTC day) or an ISO-8601 timestamp.

dateTo
​string

End of the date range, YYYY-MM-DD (whole UTC day) or an ISO-8601 timestamp.

End of the date range, YYYY-MM-DD (whole UTC day) or an ISO-8601 timestamp.

branchId
​string · minLength: 1 · maxLength: 256

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

branchMode
​string · enum

Branch source: latest conversation or stable customer primary branch. Defaults to latest; without branchId no branch predicate is applied.

Branch source: latest conversation or stable customer primary branch. Defaults to latest; without branchId no branch predicate is applied.

Enum values:
latest
primary
paymentStatus
​string

Comma-separated payment statuses, any of PAID, PENDING, PENDING_NEW_PAYMENT, EXPIRED, FAILED, CANCELLED, NO_PAYMENT. Slower than the other filters.

Comma-separated payment statuses, any of PAID, PENDING, PENDING_NEW_PAYMENT, EXPIRED, FAILED, CANCELLED, NO_PAYMENT. Slower than the other filters.

List customers › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Create a customer

POST
https://<domain-anda>
/api/v1/public/customers

Add a customer record with a phone number, name and optional tags.

Creates a customer in this workspace. Use it when a lead arrives from outside the messaging channels. Writes a new record and sends nothing. A phone number that already exists is rejected — find it with customers.list and update it instead. consentStatus: true records an opt-in (logged with consentSource) so the customer can receive broadcasts; only set it when the customer really agreed.

Create a customer › Request Body

phoneNumber
​string · required

E.164 without the plus, e.g. 628123456789. Must not already exist.

name
​string

Display name for the customer.

email
​string

Email address.

tags
​string[]

Tags to attach on creation.

​

Customer primary branch id from branches.list, or null to clear and prevent automatic initialization. New selections must be active tenant branches; omission preserves the saved value.

pipelineStageId
​string

Pipeline stage id from pipelines.list. Defaults to the first stage.

whatsappPhoneNumberId
​string

Number the customer belongs to, id from channels.phoneNumbers. Defaults to the primary connected number.

leadScore
​number

Initial lead score. The scoring job may recalculate it later.

notes
​string

Free-text note stored on the customer record.

​object[]

Custom field values to set, each as {fieldDefinitionId, value}. Definitions come from crm.customFields.list.

consentStatus
​boolean

true records an opt-in for broadcasts and writes a consent log. Defaults to false (no consent).

consentSource
​string

Where consent was obtained, e.g. "website form". Used when consentStatus is true; defaults to "manual".

consentPurpose
​string

What the customer consented to receive, e.g. "promotions".

Create a customer › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Find a customer by channel identity

GET
https://<domain-anda>
/api/v1/public/customers/by-identity

Resolve a phone number or Instagram id to one customer.

Looks up the single customer that owns a channel identity, for example the phone number on an incoming message. Use it before customers.create to avoid duplicates, or to turn a conversation contact into a customer id. Only whatsapp (phone number, with or without +) and instagram (Instagram-scoped id) are stored on the customer; other channels answer null. Answers null in data when nothing matches — that is not an error. Read-only.

Find a customer by channel identity › query Parameters

channel
​string · required

whatsapp, instagram, messenger, telegram, web or tiktok. Only whatsapp and instagram can match.

whatsapp, instagram, messenger, telegram, web or tiktok. Only whatsapp and instagram can match.

identifier
​string · required

Phone number for whatsapp (e.g. 628123456789) or the Instagram-scoped id for instagram.

Phone number for whatsapp (e.g. 628123456789) or the Instagram-scoped id for instagram.

Find a customer by channel identity › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Search customers by name or phone

GET
https://<domain-anda>
/api/v1/public/customers/search

Return a short list of {id, name, phoneNumber} matches for a search term.

A lightweight picker: returns only id, name and phoneNumber for customers whose name or phone number contains the search text, newest first. Use it to resolve "Rina" to a customer id cheaply; use customers.list when you need tags, stage, consent or filters. Read-only. Paginated: follow meta.pagination.nextCursor until hasMore is false.

Search customers by name or phone › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

search
​string

Text to find in the name or phone number. Omit to list newest first.

Text to find in the name or phone number. Omit to list newest first.

Search customers by name or phone › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List customers a broadcast may reach

GET
https://<domain-anda>
/api/v1/public/customers/broadcast-eligible

Return customers who have given consent and are not blacklisted.

Returns the audience a broadcast is allowed to target: consented customers who are not blacklisted, sorted by name, optionally narrowed by search text, tags or pipeline stage. Use it to size or preview an audience before broadcasts.create. Read-only — nothing is sent. Paginated: follow meta.pagination.nextCursor until hasMore is false.

List customers a broadcast may reach › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

branchId
​string · minLength: 1 · maxLength: 256

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

branchMode
​string · enum

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Enum values:
latest
primary
search
​string

Match against name or phone number.

Match against name or phone number.

tags
​string

Comma-separated tags. A customer matching any one is returned.

Comma-separated tags. A customer matching any one is returned.

pipelineStageId
​string

Only customers in this stage, id from pipelines.list.

Only customers in this stage, id from pipelines.list.

List customers a broadcast may reach › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Find duplicate phone numbers

GET
https://<domain-anda>
/api/v1/public/customers/duplicate-phone-groups

List phone numbers that appear on more than one customer record.

Scans the workspace for phone numbers shared by two or more customers and returns each group with a preview of its records. Use it to audit data quality before merging in the dashboard; merging is not available through the API. Read-only but scans the whole customer table, so limited to 20 calls per minute. Paginated by phone number: pass meta.pagination.nextCursor as cursor (it is a phone number, digits with an optional leading +).

Find duplicate phone numbers › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call — a phone number (digits, optional leading +). Omit for the first page.

The meta.pagination.nextCursor value from the previous call — a phone number (digits, optional leading +). Omit for the first page.

Find duplicate phone numbers › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Read one duplicate phone group

GET
https://<domain-anda>
/api/v1/public/customers/duplicate-phone-groups/{phoneNumber}

Return every customer record sharing one phone number.

Returns all the customers that share the given phone number, with their relation counts, so you can see which record is the fuller one. Take the phone number from customers.duplicatePhoneGroups. Read-only; merging is not available through the API.

Read one duplicate phone group › path Parameters

phoneNumber
​string · required

A phone number from customers.duplicatePhoneGroups (digits, optional leading +).

A phone number from customers.duplicatePhoneGroups (digits, optional leading +).

Read one duplicate phone group › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Read one customer

GET
https://<domain-anda>
/api/v1/public/customers/{id}

Fetch a single customer by id, with their full profile.

Returns one customer including contact details, tags, pipeline stage, nullable primaryBranchId, consent and messaging-window state. Use it after customers.list to read the detail you need before acting. Read-only. Answers 404 when the id does not belong to this workspace.

Read one customer › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Read one customer › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Delete a customer

DELETE
https://<domain-anda>
/api/v1/public/customers/{id}

Permanently delete a customer and everything attached to them.

Removes the customer, their conversations and their history. This cannot be undone and there is no soft-delete to recover from. Use it only for a record the workspace owner has asked to erase. Requires the customers:delete scope, which is separate from ordinary writes, and is limited to 5 calls per minute.

Delete a customer › path Parameters

id
​string · required

Customer id from customers.list. Erases the customer and everything attached; this cannot be undone.

Customer id from customers.list. Erases the customer and everything attached; this cannot be undone.

Delete a customer › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Update a customer

PATCH
https://<domain-anda>
/api/v1/public/customers/{id}

Change a customer’s name, tags, pipeline stage or contact details.

Updates the fields you send and leaves the rest alone. Use it to move a customer along the pipeline, retag them, or correct their details. Writes to the record and can trigger stage-based automation, but sends the customer nothing. consentStatus and blacklisted change the flags directly and write NO consent log — use customers.consent.update to record an opt-in/opt-out properly and customers.blacklist.update to blacklist. Both flags gate broadcasts and outbound messaging. Send pipelineStageId: null to remove the customer from the pipeline.

Update a customer › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Update a customer › Request Body optional

name
​string

New display name.

email
​string | null

New email address, or null to clear it.

tags
​string[]

Replaces the whole tag list.

​

Customer primary branch id from branches.list, or null to clear and prevent automatic initialization. New selections must be active tenant branches; omission preserves the saved value.

pipelineStageId
​string | null

Move the customer to this stage (ids from pipelines.list), or null to remove them from the pipeline.

leadScore
​number

Lead score. The scoring job recalculates it asynchronously after the update.

notes
​string

Replaces the free-text note on the customer record (not the notes list).

​object[]

Custom field values to set, each as {fieldDefinitionId, value}. Definitions come from crm.customFields.list.

consentStatus
​boolean

Sets the consent flag directly with NO consent log. Prefer customers.consent.update. Gates broadcasts.

blacklisted
​boolean

Sets the blacklist flag directly. Prefer customers.blacklist.update. A blacklisted customer is excluded from broadcasts.

instagramIgsid
​string | null

Instagram-scoped id, or null to unlink.

instagramUsername
​string | null

Instagram username, or null to clear it.

Update a customer › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List customer notes

GET
https://<domain-anda>
/api/v1/public/customers/{id}/notes

Return the internal notes a team member has left on this customer.

Returns the notes attached to one customer, newest first. Use it to pick up context before replying. Read-only, and notes are never shown to the customer. Paginated by limit; a customer with a long history returns the newest page first.

List customer notes › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

List customer notes › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

List customer notes › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Add a customer note

POST
https://<domain-anda>
/api/v1/public/customers/{id}/notes

Attach an internal note to a customer.

Records a note against the customer so the next reader has the context. Use it to write down what you did or what the customer asked for. Writes a note; the customer never sees it and nothing is sent.

Add a customer note › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Add a customer note › Request Body

content
​string · required

The note text. Internal only — the customer never sees it.

Add a customer note › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Read a customer timeline

GET
https://<domain-anda>
/api/v1/public/customers/{id}/activities

Return the activity history recorded against this customer.

Returns the timeline for one customer — stage moves, messages, payments and follow-ups — newest first. Use it to reconstruct what has already happened before deciding what to do next. Read-only. Paginated: follow meta.pagination.nextCursor until hasMore is false.

Read a customer timeline › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Read a customer timeline › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

type
​string

Return only activities of this type, one of MESSAGE_SENT, MESSAGE_RECEIVED, STAGE_CHANGED, FIELD_UPDATED, NOTE_ADDED, CUSTOMER_CREATED, CONSENT_CHANGED, CONVERSATION_AUTO_RESOLVED.

Return only activities of this type, one of MESSAGE_SENT, MESSAGE_RECEIVED, STAGE_CHANGED, FIELD_UPDATED, NOTE_ADDED, CUSTOMER_CREATED, CONSENT_CHANGED, CONVERSATION_AUTO_RESOLVED.

Read a customer timeline › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Log a timeline entry

POST
https://<domain-anda>
/api/v1/public/customers/{id}/activities

Record an activity on a customer’s timeline.

Adds an entry to the customer timeline that customers.activities.list reads back. Use it to leave an audit trail of something that happened outside the platform, such as a phone call (type NOTE_ADDED with the text in description). A NOTE_ADDED entry with a description also creates a customer note. It only records history: it does not send a message, move the stage or change any field, even for types like MESSAGE_SENT or STAGE_CHANGED.

Log a timeline entry › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Log a timeline entry › Request Body

type
​string · required

Activity type, one of MESSAGE_SENT, MESSAGE_RECEIVED, STAGE_CHANGED, FIELD_UPDATED, NOTE_ADDED, CUSTOMER_CREATED, CONSENT_CHANGED. NOTE_ADDED is the right one for free-text history.

title
​string · required

Short headline shown on the timeline. Required, at least one character.

description
​string

Longer text. For NOTE_ADDED this also becomes a customer note.

​object

Optional structured detail attached to the entry, as a JSON object.

Log a timeline entry › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Check the WhatsApp 24-hour window

GET
https://<domain-anda>
/api/v1/public/customers/{id}/window-status

Tell whether free-form WhatsApp text is allowed or a template is required.

Returns whether the customer’s WhatsApp customer-service window is open. When isActive is true you may send free-form text with messages.send; when false (status expired or never_messaged) only an approved template can be sent. Call it before messages.send to pick text versus template. Includes lastInboundMessageAt, windowExpiresAt and the time remaining. Read-only.

Check the WhatsApp 24-hour window › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Check the WhatsApp 24-hour window › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Find duplicates of a customer

GET
https://<domain-anda>
/api/v1/public/customers/{id}/merge-candidates

List other customer records that look like the same person.

Returns records that share this customer’s phone number, with relation counts for each, so you can judge duplicates. Use it to report data-quality problems. Read-only; merging is not available through the API and has to be done in the dashboard.

Find duplicates of a customer › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Find duplicates of a customer › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

POST
https://<domain-anda>
/api/v1/public/customers/{id}/consent

Log an opt-in or opt-out and update the customer’s consent flag.

Records that the customer opted in (OPT_IN), opted out (OPT_OUT) or that consent details changed (UPDATE), writes a consent-log entry and sets the consent flag (true only for OPT_IN). Consent gates broadcasts: a customer without consent is excluded from them, and consent is a legal record, so only log what the customer actually did and say where it came from in source. This is the compliant way to change consent, unlike setting consentStatus in customers.update. Sends the customer nothing.

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

action
​string · required

One of OPT_IN, OPT_OUT, UPDATE. OPT_IN grants consent; OPT_OUT and UPDATE clear the flag.

source
​string · required

Where the consent came from, e.g. "website form", "WhatsApp reply STOP". Required.

purpose
​string

What the customer consented to, e.g. "promotions".

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Blacklist or unblacklist a customer

PATCH
https://<domain-anda>
/api/v1/public/customers/{id}/blacklist

Block a customer from broadcasts and outbound messaging, or lift the block.

Sets the blacklist flag. A blacklisted customer is excluded from broadcasts and should not be messaged, so use it for people who asked to stop or are abusive, and unblacklist only on their request. Reversible; writes the flag and sends nothing.

Blacklist or unblacklist a customer › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

Blacklist or unblacklist a customer › Request Body

blacklisted
​boolean · required

true blacklists the customer; false removes the block.

Blacklist or unblacklist a customer › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Delete a customer note

DELETE
https://<domain-anda>
/api/v1/public/customers/{id}/notes/{noteId}

Permanently remove one internal note from a customer.

Deletes a single note. This cannot be undone and the timeline entry that was written when the note was added stays. Use it only when asked to remove a specific note, with ids from customers.notes.list. Requires the customers:delete scope and is limited to 5 calls per minute.

Delete a customer note › path Parameters

id
​string · required

Customer id from customers.list.

Customer id from customers.list.

noteId
​string · required

Note id from customers.notes.list. The note is permanently deleted.

Note id from customers.notes.list. The note is permanently deleted.

Delete a customer note › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List pipelines and their stages

GET
https://<domain-anda>
/api/v1/public/pipelines

Return the sales pipelines configured on this workspace with their ordered stages.

Returns each pipeline and the stages inside it, with the stage ids you need to filter customers.list or to move a customer with customers.update. Call it once and reuse the result — stages change rarely. Read-only. For the cards in each stage use crm.pipelines.board, or filter customers by stageId.

List pipelines and their stages › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Read a pipeline board

GET
https://<domain-anda>
/api/v1/public/crm/pipelines/{id}/board

Return every stage of a pipeline with its customer count and first customers.

Returns the kanban view of one pipeline: each stage with its real total and the first page of customers in it (id, name, phone number, lead score, where to reply). Use it to see how many deals sit in each stage at a glance. limit sets how many customers come back per stage; read further customers of one stage with crm.stages.customers. Read-only, but it queries every stage so it is limited to 20 calls per minute. Get the pipeline id from pipelines.list.

Read a pipeline board › path Parameters

id
​string · required

Pipeline id from pipelines.list.

Pipeline id from pipelines.list.

Read a pipeline board › query Parameters

limit
​integer · min: 1 · max: 100

Customers to return per stage, 1-100. Defaults to 25.

Customers to return per stage, 1-100. Defaults to 25.

branchId
​string · minLength: 1 · maxLength: 256

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

branchMode
​string · enum

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Enum values:
latest
primary

Read a pipeline board › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List the customers in a stage

GET
https://<domain-anda>
/api/v1/public/crm/stages/{id}/customers

Page through the customers sitting in one pipeline stage.

Returns the customers in one stage, newest first, in the compact board-card shape (id, name, phone number, lead score, where to reply). Use it to read past the first page that crm.pipelines.board returns, or to work one stage at a time. Read-only. Paginated: follow meta.pagination.nextCursor until hasMore is false. Stage ids come from pipelines.list.

List the customers in a stage › path Parameters

id
​string · required

Pipeline stage id from pipelines.list.

Pipeline stage id from pipelines.list.

List the customers in a stage › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

branchId
​string · minLength: 1 · maxLength: 256

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

branchMode
​string · enum

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Enum values:
latest
primary

List the customers in a stage › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List customers not on a pipeline

GET
https://<domain-anda>
/api/v1/public/crm/customers/unstaged

Return customers who have no pipeline stage yet.

Returns {id, name, phoneNumber} for customers with no pipeline stage, newest first, optionally filtered by name or phone number. Use it to find leads that still need triage, then place them with customers.update and a pipelineStageId. Read-only. Paginated: follow meta.pagination.nextCursor until hasMore is false.

List customers not on a pipeline › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

branchId
​string · minLength: 1 · maxLength: 256

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

Tenant branch id from branches.list, or none for a null branch in the selected source. Omit for all branches; saved inactive branches remain filterable.

branchMode
​string · enum

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Branch source: latest conversation or stable customer primary branch. Defaults to primary; without branchId no branch predicate is applied.

Enum values:
latest
primary
search
​string

Match against name or phone number.

Match against name or phone number.

List customers not on a pipeline › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List custom field definitions

GET
https://<domain-anda>
/api/v1/public/crm/custom-fields

Return the custom fields this workspace defines for customers.

Returns each custom field with its id, name, key, type, options and whether it is required. Call it before customers.create or customers.update with customFields, because values are written by fieldDefinitionId. Read-only; defining fields is done in the dashboard. Paginated by limit; most workspaces fit on the first page.

List custom field definitions › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

List custom field definitions › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

List auto-tagging rules

GET
https://<domain-anda>
/api/v1/public/crm/auto-tagging/rules

Return the rules that tag customers and move them between stages.

Returns the workspace’s auto-tagging rules: the keywords and optional triggering-conversation branch condition, the tags it adds, the stage it moves the customer to, its priority and whether it is active. Use it to understand why a customer got a tag or changed stage. Read-only. Paginated by limit; most workspaces fit on the first page.

List auto-tagging rules › query Parameters

limit
​integer · min: 1 · max: 100

Rows to return, 1-100. Defaults to 25.

Rows to return, 1-100. Defaults to 25.

cursor
​string

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

The meta.pagination.nextCursor value from the previous call. Omit it to read the first page.

List auto-tagging rules › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Read one auto-tagging rule

GET
https://<domain-anda>
/api/v1/public/crm/auto-tagging/rules/{id}

Fetch a single auto-tagging rule by id.

Returns one rule with its keywords, nullable branchId condition, tags to add, target stage, priority and active state. Read-only. Answers 404 when the id does not belong to this workspace.

Read one auto-tagging rule › path Parameters

id
​string · required

Auto-tagging rule id from crm.autoTagging.rules.list.

Auto-tagging rule id from crm.autoTagging.rules.list.

Read one auto-tagging rule › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Switch an auto-tagging rule on or off

PATCH
https://<domain-anda>
/api/v1/public/crm/auto-tagging/rules/{id}/toggle

Flip a rule between active and inactive.

Switches an automation on or off: while active, the rule adds tags to customers and may move them to another pipeline stage whenever a message matches its keyword and branch conditions. The call flips the current state (it is not set-to-value), so read the rule with crm.autoTagging.rules.get first and check isActive in the answer. Reversible; sends the customer nothing.

Switch an auto-tagging rule on or off › path Parameters

id
​string · required

Auto-tagging rule id from crm.autoTagging.rules.list.

Auto-tagging rule id from crm.autoTagging.rules.list.

Switch an auto-tagging rule on or off › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Create a pipeline

POST
https://<domain-anda>
/api/v1/public/crm/pipelines

Add a sales pipeline, optionally with its first stages.

Creates a pipeline for this workspace. Pass stages to create them in the same call; their order is the order sent unless a stage names its own order. A new pipeline is never the default: make it the default afterwards with crm.pipelines.update and isDefault. Moves and sends nothing to customers. Answers the pipeline with its stage ids.

Create a pipeline › Request Body

name
​string · required

Pipeline name, 1-100 characters.

description
​string

Short description, up to 1000 characters.

​object[]

Stages to create with the pipeline, up to 50.

Create a pipeline › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Edit a pipeline

PATCH
https://<domain-anda>
/api/v1/public/crm/pipelines/{id}

Rename a pipeline, change its description or make it the default.

Changes only the fields you send. isDefault true makes this the default pipeline and clears the flag on the others; isDefault false leaves the workspace with no default, so prefer making another pipeline the default instead. Stages are not touched: use crm.stages.create, crm.stages.update and crm.stages.delete. Read the current values with pipelines.list first.

Edit a pipeline › path Parameters

id
​string · required

Pipeline id from pipelines.list.

Pipeline id from pipelines.list.

Edit a pipeline › Request Body optional

name
​string

New pipeline name, 1-100 characters.

description
​string | null

New description, up to 1000 characters, or null to clear it.

isDefault
​boolean

true makes this the default pipeline.

Edit a pipeline › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Add a stage to a pipeline

POST
https://<domain-anda>
/api/v1/public/crm/pipelines/{id}/stages

Create a stage at the end of a pipeline, or at a given position.

Adds a stage. Without order it goes after the last stage; without color it is black (#000000). Sends nothing to customers and moves none. Answers the new stage with its id. Answers 404 when the pipeline does not belong to this workspace.

Add a stage to a pipeline › path Parameters

id
​string · required

Pipeline id from pipelines.list.

Pipeline id from pipelines.list.

Add a stage to a pipeline › Request Body

name
​string · required

Stage name, 1-100 characters.

color
​string

Stage colour as a hex code such as #3B82F6.

order
​integer · min: 0 · max: 10000

Position in the pipeline, lowest first. Stages are listed by this number.

Add a stage to a pipeline › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Delete an empty stage

DELETE
https://<domain-anda>
/api/v1/public/crm/stages/{id}

Permanently remove a pipeline stage that has no customers.

Deletes the stage. It is refused with 409 stage_not_empty while any customer sits in it, so a customer is never dropped from the pipeline by accident: move them first with customers.update and a pipelineStageId, or read them with crm.stages.customers. Auto-tagging rules that point at the stage stop moving customers. Cannot be undone. Answers 404 when the stage does not belong to this workspace.

Delete an empty stage › path Parameters

id
​string · required

Pipeline stage id from pipelines.list.

Pipeline stage id from pipelines.list.

Delete an empty stage › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Edit or reorder a stage

PATCH
https://<domain-anda>
/api/v1/public/crm/stages/{id}

Rename a stage, recolour it or move it to another position.

Changes only the fields you send. Moving a stage means setting its order: stages are shown lowest order first and a clash is not rejected, so give each stage you move a distinct number (read the current orders with pipelines.list first). Customers in the stage stay in it. Answers 404 when the stage does not belong to this workspace.

Edit or reorder a stage › path Parameters

id
​string · required

Pipeline stage id from pipelines.list.

Pipeline stage id from pipelines.list.

Edit or reorder a stage › Request Body optional

name
​string

Stage name, 1-100 characters.

color
​string

Stage colour as a hex code such as #3B82F6.

order
​integer · min: 0 · max: 10000

Position in the pipeline, lowest first. Stages are listed by this number.

Edit or reorder a stage › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required

Suggest CRM customers for an Instagram thread

GET
https://<domain-anda>
/api/v1/public/instagram/conversations/{conversationId}/suggested-customers

Find customers whose Instagram username or name matches the person in a thread.

For an Instagram conversation, returns the customer it is already linked to, or up to 10 customers whose Instagram username or name matches the participant, including their phone numbers, which is why it needs customers:read and not conversations:read. Use it before instagram.linkCustomer to pick the right customer instead of creating a duplicate. Read-only. Returns the conversation participant's username and name when unlinked.

Suggest CRM customers for an Instagram thread › path Parameters

conversationId
​string · required

Instagram conversation id from conversations.list (channel instagram).

Instagram conversation id from conversations.list (channel instagram).

Suggest CRM customers for an Instagram thread › Responses

The API key is missing, malformed, expired, or its owner is inactive.

success
​required
​object · required