Endpoints
Contacts
Create, find, update, tag, stage and merge the people your business talks to.
Os caminhos são relativos à URL base. Cada card lista a permissão que a chamada exige e todos os parâmetros, com tipo e limites.
/contactsSearch contacts, newest first.
Parâmetros de query
- qopcionalstring
Free-text search across name, email, phone, WhatsApp number, notes and Instagram username. Every word must match. Up to 200 characters.
- phoneopcionalstring
Exact phone or WhatsApp number match.
- emailopcionalstring
Exact email match.
- tagopcionalstring
Contacts that carry this tag (case-insensitive).
- stage_idopcionalinteger
Contacts in this funnel stage.
- assigned_to_user_idopcionalstring
Contacts owned by this team member.
- channelopcionalenum
Contacts that came from this channel.
Valores permitidos:
instagramfacebooktiktokwhatsapptelegramemailwidgetapivoicesms - updated_sinceopcionalstring (ISO 8601 date-time with offset)
Contacts updated at or after this time.
/contacts/lookupFind one contact by phone, email or channel username. Send at least one of phone, email or handle.
Parâmetros de query
- phoneopcionalstring
Phone or WhatsApp number.
- emailopcionalstring
Email address.
- handleopcionalstring
Channel username, with or without "@".
- channelopcionalenum
Limit the handle search to one channel.
Valores permitidos:
instagramtiktoktelegramwhatsapp
- Answers 404 not_found when nothing matches. When several contacts match, the oldest one is returned.
/contactsCreate a contact.
Corpo JSON
- first_nameopcionalstring | null
1–100 characters.
- last_nameopcionalstring | null
1–100 characters.
- emailopcionalstring | null
Valid email address, up to 320 characters. Stored lowercase.
- phoneopcionalstring | null
3–50 characters. E.164 (+14155550123) recommended.
- whatsapp_phoneopcionalstring | null
WhatsApp number, 3–50 characters.
- instagram_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- tiktok_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- telegram_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- country_codeopcionalstring
Two-letter ISO 3166-1 country code, e.g. "US".
- custom_fieldsopcionalobject
Custom field values keyed by custom field key (see GET /custom-fields). Merged into existing values. Unknown, archived or wrongly typed keys answer 422.
- sourceopcionalstring
Where the contact came from, up to 50 characters. Default "api".
- tagsopcionalarray of strings
Up to 100 tag names (1–80 characters each). Tags that do not exist yet are added to the workspace.
- stage_idopcionalinteger
Funnel stage to place the contact in (see GET /funnels).
- assigned_to_user_idopcionalstring
Team member who owns the contact (see GET /users).
- Answers 201 with the contact.
/contacts/upsertUpdate the matching contact, or create it. Matches by phone (or whatsapp_phone), then email, then Instagram, TikTok or Telegram username.
Corpo JSON
- first_nameopcionalstring | null
1–100 characters.
- last_nameopcionalstring | null
1–100 characters.
- emailopcionalstring | null
Valid email address, up to 320 characters. Stored lowercase.
- phoneopcionalstring | null
3–50 characters. E.164 (+14155550123) recommended.
- whatsapp_phoneopcionalstring | null
WhatsApp number, 3–50 characters.
- instagram_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- tiktok_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- telegram_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- country_codeopcionalstring
Two-letter ISO 3166-1 country code, e.g. "US".
- custom_fieldsopcionalobject
Custom field values keyed by custom field key (see GET /custom-fields). Merged into existing values. Unknown, archived or wrongly typed keys answer 422.
- sourceopcionalstring
Where the contact came from, up to 50 characters. Default "api".
- tagsopcionalarray of strings
Up to 100 tag names (1–80 characters each). Tags that do not exist yet are added to the workspace.
- stage_idopcionalinteger
Funnel stage to place the contact in (see GET /funnels).
- assigned_to_user_idopcionalstring
Team member who owns the contact (see GET /users).
- Send at least a phone, email or channel username to match on (422 otherwise).
- Answers { object: "contact_upsert", created, contact }: 201 when created, 200 when updated.
/contacts/mergeMerge a duplicate contact into another. The secondary contact's records (conversations, bookings, orders and more) move to the primary one.
Corpo JSON
- primary_contact_idobrigatóriointeger
The contact that stays.
- secondary_contact_idobrigatóriointeger
The duplicate that is merged away. Must differ from primary_contact_id.
/contacts/:idRetrieve a contact, including tags, stage, assignee and custom fields.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
/contacts/:idUpdate contact fields. Fields you leave out keep their value; null clears a field.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
Corpo JSON
- first_nameopcionalstring | null
1–100 characters.
- last_nameopcionalstring | null
1–100 characters.
- emailopcionalstring | null
Valid email address, up to 320 characters. Stored lowercase.
- phoneopcionalstring | null
3–50 characters. E.164 (+14155550123) recommended.
- whatsapp_phoneopcionalstring | null
WhatsApp number, 3–50 characters.
- instagram_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- tiktok_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- telegram_usernameopcionalstring | null
Up to 100 characters. A leading "@" is removed.
- country_codeopcionalstring
Two-letter ISO 3166-1 country code, e.g. "US".
- custom_fieldsopcionalobject
Custom field values keyed by custom field key (see GET /custom-fields). Merged into existing values. Unknown, archived or wrongly typed keys answer 422.
/contacts/:idDelete a contact and the data derived from it, the same way a delete in the app does.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
/contacts/:id/channelsList the channel identities a contact can be reached on.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
/contacts/:id/tagsAdd tags to a contact. Tags that do not exist yet are added to the workspace.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
Corpo JSON
- tagsobrigatórioarray of strings
1–100 tag names, 1–80 characters each.
/contacts/:id/tagsRemove tags from a contact (case-insensitive). The tags stay in the workspace.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
Corpo JSON
- tagsobrigatórioarray of strings
1–100 tag names.
/contacts/:id/stageMove a contact to a funnel (lifecycle) stage.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
Corpo JSON
- stage_idobrigatóriointeger
Target stage (see GET /funnels).
- funnel_idopcionalinteger
Optional check: the stage must belong to this funnel.
/contacts/:id/stageRemove the contact from its lifecycle stage.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
/contacts/:id/assigneeAssign the contact to a team member, or unassign it.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
Corpo JSON
- user_idopcionalstring | null
A user from GET /users. Omit or send null to unassign.
/contacts/:id/notesList the internal notes on a contact, newest first.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
/contacts/:id/notesAdd an internal note to a contact. Customers never see notes.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
Corpo JSON
- bodyobrigatóriostring
1–10,000 characters.
/contacts/:id/dncTurn do-not-contact on or off for a contact.
Parâmetros de caminho
- idobrigatóriointeger
Contact ID.
Corpo JSON
- do_not_contactobrigatórioboolean
true opts the contact out of messages.
- reasonopcionalstring
Up to 200 characters.
/funnelsList funnels with their stages, for use with stage_id.
Parâmetros de query
- flatopcionalstring
"true" returns one row per stage (funnel name › stage name) instead of nested funnels.