Clients
Clients are the people in your client list (Clients in the app): their contact details, tags, custom fields and the channels they get updates on. Use these endpoints to sync clients with your website, CRM or lead forms.
- Create or update:
POST /v1/clientscreates a client, or updates the client with the same full name and phone number. The response says which withcreated. - Partial updates:
PUT /v1/clients/{clientId}changes only the fields you send. Sendnull,""or[]to clear a field.fullName,countryCode,phoneandprimaryLocationcannot be cleared. - Tags: adding a tag can start automations (for example a welcome sequence). Unknown tags are created.
- Plan: creating, changing and deleting clients needs the CRM Suite add-on; reading works on every plan.
The {id} in a path is the record id returned by the API (for example 5tw9zcQkbu), not the client number shown in the app.
api.whautomate.comSearch clients
/v1/clientsLists clients, newest first. Filter by text, tags, primary location or registration date.
x-api-keystringrequiredlimitintegerprimaryLocationIdstringtagsstringendDatestringpageintegerstartDatestringsearchTextstringidstringcreatedbooleanexternalIdstringfullNamestringrequiredcontactTypestring (enum)HOME, MOBILE, WORK.countryCodestringrequiredphonestringrequiredemailstringregistrationDatestringdobstringaddressTypestring (enum)HOME, WORK.addressstringgenderstring (enum)Male, Female, Unknown, Other.maritalStatusstring (enum)UNMARRIED, MARRIED, OTHER.tagsstring[]notesstringreferralSourcestringnotificationChannelsstring[]primaryLocationobjectprimaryStaffobjectcustomFieldsobjectphotostringemergencyRelationTypestringemergencyNamestringemergencyCountryCodestringidentificationNumberstringemergencyPhonestringcompanystringtaxIdTypestringtaxIdNumberstringclientIdstringpreferredLanguagestringcreatedAtstringupdatedAtstringcurl -X GET "https://api.whautomate.com/v1/clients?searchText=Olivia&limit=2" \
-H "x-api-key: YOUR_API_KEY"
[
{
"id": "Rkb6qfbG8F",
"clientId": "C2",
"fullName": "Olivia Tan",
"contactType": "MOBILE",
"countryCode": "+65",
"phone": "91203457",
"email": "olivia.tan@mail.example",
"registrationDate": "2026-10-29T11:42:19.185Z",
"dob": "1974-12-31T16:00:00.000Z",
"gender": "Female",
"preferredLanguage": "",
"tags": [
"VIP",
"Member"
],
"notificationChannels": [],
"referralSource": "Instagram",
"primaryLocation": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"customFields": {
"Preferred therapist": "Aisha",
"Pressure preference": "Firm"
},
"createdAt": "2026-10-29T11:42:19.276Z",
"updatedAt": "2026-10-29T11:42:19.346Z"
}
]
Get a client
/v1/clients/{clientId}Gets one client by id.
x-api-keystringrequiredclientIdstringrequiredidstringcreatedbooleanexternalIdstringfullNamestringrequiredcontactTypestring (enum)HOME, MOBILE, WORK.countryCodestringrequiredphonestringrequiredemailstringregistrationDatestringdobstringaddressTypestring (enum)HOME, WORK.addressstringgenderstring (enum)Male, Female, Unknown, Other.maritalStatusstring (enum)UNMARRIED, MARRIED, OTHER.tagsstring[]notesstringreferralSourcestringnotificationChannelsstring[]primaryLocationobjectprimaryStaffobjectcustomFieldsobjectphotostringemergencyRelationTypestringemergencyNamestringemergencyCountryCodestringidentificationNumberstringemergencyPhonestringcompanystringtaxIdTypestringtaxIdNumberstringclientIdstringpreferredLanguagestringcreatedAtstringupdatedAtstringcurl -X GET "https://api.whautomate.com/v1/clients/Rkb6qfbG8F" \
-H "x-api-key: YOUR_API_KEY"
{
"id": "Rkb6qfbG8F",
"clientId": "C2",
"fullName": "Olivia Tan",
"contactType": "MOBILE",
"countryCode": "+65",
"phone": "91203457",
"email": "olivia.tan@mail.example",
"registrationDate": "2026-10-29T11:42:19.185Z",
"dob": "1974-12-31T16:00:00.000Z",
"gender": "Female",
"preferredLanguage": "",
"tags": [
"VIP",
"Member"
],
"notificationChannels": [],
"referralSource": "Instagram",
"primaryLocation": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"customFields": {
"Preferred therapist": "Aisha",
"Pressure preference": "Firm"
},
"createdAt": "2026-10-29T11:42:19.276Z",
"updatedAt": "2026-10-29T11:42:19.346Z"
}
Create or update a client
/v1/clientsCreates a client. When a client with the same externalId exists, or else one with the same full name and phone number, that client is updated instead (only the fields you send change) and created is false.
x-api-keystringrequiredexternalIdstringfullNamestringrequiredcountryCodestringrequiredphonestringrequiredcontactTypestringemailstringregistrationDatestringdobstringaddressTypestringaddressstringgenderstringmaritalStatusstringtagsstring[]notesstringreferralSourcestringnotificationChannelsstring[]primaryLocationobjectLocation the client belongs to: { id }. Defaults to your first location.
primaryStaffobjectcustomFieldsobjectphotoUrlobjectemergencyRelationTypestringemergencyNamestringemergencyCountryCodestringidentificationNumberstringemergencyPhonestringcompanystringtaxIdTypestringtaxIdNumberstringpreferredNamestringidstringcreatedbooleanexternalIdstringfullNamestringrequiredcontactTypestring (enum)HOME, MOBILE, WORK.countryCodestringrequiredphonestringrequiredemailstringregistrationDatestringdobstringaddressTypestring (enum)HOME, WORK.addressstringgenderstring (enum)Male, Female, Unknown, Other.maritalStatusstring (enum)UNMARRIED, MARRIED, OTHER.tagsstring[]notesstringreferralSourcestringnotificationChannelsstring[]primaryLocationobjectprimaryStaffobjectcustomFieldsobjectphotostringemergencyRelationTypestringemergencyNamestringemergencyCountryCodestringidentificationNumberstringemergencyPhonestringcompanystringtaxIdTypestringtaxIdNumberstringclientIdstringpreferredLanguagestringcreatedAtstringupdatedAtstringErrors
| Status | Error | Meaning |
|---|---|---|
| 400 | Invalid parameters | fullName, countryCode or phone is missing, or a field has the wrong format. |
| 403 | This feature is not included in your plan. | Needs the CRM Suite add-on. |
| 404 | Invalid Primary locationId | The location is not in your account. |
curl -X POST "https://api.whautomate.com/v1/clients" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fullName": "Priya Nair",
"countryCode": "+65",
"phone": "96628413",
"email": "priya.nair@example.com",
"tags": [
"New",
"Massage"
],
"referralSource": "Instagram",
"notes": "Prefers weekday evenings.",
"primaryLocation": {
"id": "Le6dWjQF9K"
}
}'
{
"id": "FLT22gHGml",
"clientId": "C90",
"fullName": "Priya Nair",
"countryCode": "+65",
"phone": "96628413",
"email": "priya.nair@example.com",
"registrationDate": "2026-10-29T12:40:10.070Z",
"gender": "",
"preferredLanguage": "",
"tags": [
"New",
"Massage"
],
"notificationChannels": [],
"notes": "Prefers weekday evenings.",
"referralSource": "Instagram",
"primaryLocation": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"createdAt": "2026-10-29T12:40:10.076Z",
"updatedAt": "2026-10-29T12:40:10.076Z",
"created": true
}
curl -X POST "https://api.whautomate.com/v1/clients" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fullName": "Priya Nair",
"countryCode": "+65",
"phone": "96628413",
"company": "Nair Design Studio"
}'
{
"id": "FLT22gHGml",
"clientId": "C90",
"fullName": "Priya Nair",
"countryCode": "+65",
"phone": "96628413",
"email": "priya.nair@example.com",
"registrationDate": "2026-10-29T12:40:10.070Z",
"gender": "",
"preferredLanguage": "",
"tags": [
"New",
"Massage"
],
"notificationChannels": [],
"notes": "Prefers weekday evenings.",
"referralSource": "Instagram",
"primaryLocation": {
"id": "Le6dWjQF9K"
},
"company": "Nair Design Studio",
"createdAt": "2026-10-29T12:40:10.076Z",
"updatedAt": "2026-10-29T12:40:10.180Z",
"created": false
}
{
"error": "Invalid parameters, Name, countryCode & phone are mandatory!"
}
Update a client
/v1/clients/{clientId}Updates a client. Only the fields you send change; null, "" or [] clears a field. fullName, countryCode, phone and primaryLocation cannot be cleared (400).
x-api-keystringrequiredclientIdstringrequiredexternalIdstringfullNamestringcountryCodestringphonestringcontactTypestringemailstringregistrationDatestringdobstringaddressTypestringaddressstringgenderstringmaritalStatusstringtagsstring[]notesstringreferralSourcestringnotificationChannelsstring[]primaryLocationobject{ id } of a location of the account. Left out keeps it; it cannot be cleared (null or an empty value is refused with 400).
primaryStaffobjectcustomFieldsobjectphotoUrlobjectemergencyRelationTypestringemergencyNamestringemergencyCountryCodestringidentificationNumberstringemergencyPhonestringcompanystringtaxIdTypestringtaxIdNumberstringpreferredNamestringidstringcreatedbooleanexternalIdstringfullNamestringrequiredcontactTypestring (enum)HOME, MOBILE, WORK.countryCodestringrequiredphonestringrequiredemailstringregistrationDatestringdobstringaddressTypestring (enum)HOME, WORK.addressstringgenderstring (enum)Male, Female, Unknown, Other.maritalStatusstring (enum)UNMARRIED, MARRIED, OTHER.tagsstring[]notesstringreferralSourcestringnotificationChannelsstring[]primaryLocationobjectprimaryStaffobjectcustomFieldsobjectphotostringemergencyRelationTypestringemergencyNamestringemergencyCountryCodestringidentificationNumberstringemergencyPhonestringcompanystringtaxIdTypestringtaxIdNumberstringclientIdstringpreferredLanguagestringcreatedAtstringupdatedAtstringcurl -X PUT "https://api.whautomate.com/v1/clients/FLT22gHGml" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "priya@nairdesign.example.com",
"notes": "Prefers weekday evenings. Mild lower back pain."
}'
{
"id": "FLT22gHGml",
"clientId": "C90",
"fullName": "Priya Nair",
"countryCode": "+65",
"phone": "96628413",
"email": "priya@nairdesign.example.com",
"registrationDate": "2026-10-29T12:40:10.070Z",
"gender": "",
"preferredLanguage": "",
"tags": [
"New",
"Massage"
],
"notificationChannels": [],
"notes": "Prefers weekday evenings. Mild lower back pain.",
"referralSource": "Instagram",
"primaryLocation": {
"id": "Le6dWjQF9K"
},
"company": "Nair Design Studio",
"createdAt": "2026-10-29T12:40:10.076Z",
"updatedAt": "2026-10-29T12:40:10.294Z"
}
Delete a client
/v1/clients/{clientId}Deletes a client.
x-api-keystringrequiredclientIdstringrequiredsuccessbooleancurl -X DELETE "https://api.whautomate.com/v1/clients/FLT22gHGml" \
-H "x-api-key: YOUR_API_KEY"
{
"success": true
}
Add tags to a client
/v1/clients/{clientId}/tags/addAdds tags to a client. Unknown tags are created. Adding a tag can start automations that use the tag added trigger.
x-api-keystringrequiredtagsstring[]requiredidstringtagsstring[]curl -X POST "https://api.whautomate.com/v1/clients/FLT22gHGml/tags/add" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tags": [
"VIP",
"Prenatal"
]
}'
{
"id": "FLT22gHGml",
"tags": [
"New",
"Massage",
"VIP"
]
}
Remove tags from a client
/v1/clients/{clientId}/tags/removeRemoves tags from a client.
x-api-keystringrequiredtagsstring[]requiredidstringtagsstring[]curl -X POST "https://api.whautomate.com/v1/clients/FLT22gHGml/tags/remove" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tags": [
"New"
]
}'
{
"id": "FLT22gHGml",
"tags": [
"Massage",
"VIP"
]
}
Bulk
Bulk endpoints take up to 100 items and run each one through the single endpoint (same checks and plan limits). They answer 200 with a result per item, so check failed. Bulk calls run no automations; webhooks still fire.
Create or update clients in bulk
/v1/clients/bulkCreates clients, or updates the client with the same externalId, else the same full name and phone (partial; each result data has created true or false). Up to 100 items, run one by one through the single route (same validation and plan limits, per item deactivated location check). Bulk runs no automations; webhooks still fire.
x-api-keystringrequireditemsobject[]requiredUp to 100 client create bodies, the same as POST /v1/clients
succeededintegerfailedintegerresultsobject[]curl -X POST "https://api.whautomate.com/v1/clients/bulk" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"fullName": "Daniel Wong",
"countryCode": "+65",
"phone": "97745102",
"email": "daniel.wong@example.com",
"tags": [
"Corporate"
],
"primaryLocation": {
"id": "Le6dWjQF9K"
}
},
{
"fullName": "Mei Lin Ho",
"countryCode": "+65",
"email": "meilin.ho@example.com"
}
]
}'
{
"succeeded": 1,
"failed": 1,
"results": [
{
"index": 0,
"ok": true,
"status": 200,
"data": {
"id": "iqf8hDweF6",
"clientId": "C91",
"fullName": "Daniel Wong",
"countryCode": "+65",
"phone": "97745102",
"email": "daniel.wong@example.com",
"registrationDate": "2026-10-29T12:40:10.565Z",
"gender": "",
"preferredLanguage": "",
"tags": [
"Corporate"
],
"notificationChannels": [],
"primaryLocation": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"createdAt": "2026-10-29T12:40:10.570Z",
"updatedAt": "2026-10-29T12:40:10.570Z",
"created": true
}
},
{
"index": 1,
"ok": false,
"status": 400,
"error": "Invalid parameters, Name, countryCode & phone are mandatory!"
}
]
}
Update clients in bulk
/v1/clients/bulk/updateUpdates clients partially (as PUT /v1/clients/{clientId}); every item needs id. Up to 100 items, run one by one through the single route (same validation and plan limits, per item deactivated location check). Bulk runs no automations; webhooks still fire.
x-api-keystringrequireditemsobject[]requiredUp to 100 update bodies, the same as PUT /v1/clients/{clientId}, each with the record id
succeededintegerfailedintegerresultsobject[]curl -X POST "https://api.whautomate.com/v1/clients/bulk/update" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"id": "iqf8hDweF6",
"company": "Harbourfront Capital"
},
{
"id": "doesNotExist1",
"notes": "Moved to Penang"
}
]
}'
{
"succeeded": 1,
"failed": 1,
"results": [
{
"index": 0,
"ok": true,
"status": 200,
"data": {
"id": "iqf8hDweF6",
"clientId": "C91",
"fullName": "Daniel Wong",
"countryCode": "+65",
"phone": "97745102",
"email": "daniel.wong@example.com",
"registrationDate": "2026-10-29T12:40:10.565Z",
"gender": "",
"preferredLanguage": "",
"tags": [
"Corporate"
],
"notificationChannels": [],
"primaryLocation": {
"id": "Le6dWjQF9K"
},
"company": "Harbourfront Capital",
"createdAt": "2026-10-29T12:40:10.570Z",
"updatedAt": "2026-10-29T12:40:10.690Z"
}
},
{
"index": 1,
"ok": false,
"status": 404,
"error": "Client not found"
}
]
}
Delete clients in bulk
/v1/clients/bulk/deleteDeletes clients by clientIds. Up to 100 items, run one by one through the single route (same validation and plan limits, per item deactivated location check). Bulk runs no automations; webhooks still fire.
x-api-keystringrequiredclientIdsstring[]requiredsucceededintegerfailedintegerresultsobject[]curl -X POST "https://api.whautomate.com/v1/clients/bulk/delete" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"clientIds": [
"iqf8hDweF6",
"doesNotExist1"
]
}'
{
"succeeded": 1,
"failed": 1,
"results": [
{
"index": 0,
"ok": true,
"status": 200,
"data": {
"success": true
}
},
{
"index": 1,
"ok": false,
"status": 404,
"error": "Client not found"
}
]
}
Add tags to clients in bulk
/v1/clients/bulk/add-tagsAdds tags to clients. Up to 100 items, run one by one through the single route (same validation and plan limits, per item deactivated location check). Bulk runs no automations; webhooks still fire.
x-api-keystringrequiredclientIdsstring[]requiredtagsstring[]requiredsucceededintegerfailedintegerresultsobject[]curl -X POST "https://api.whautomate.com/v1/clients/bulk/add-tags" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"clientIds": [
"iqf8hDweF6",
"FLT22gHGml"
],
"tags": [
"Corporate wellness"
]
}'
{
"succeeded": 2,
"failed": 0,
"results": [
{
"index": 0,
"ok": true,
"status": 200,
"data": {
"id": "iqf8hDweF6",
"tags": [
"Corporate",
"Corporate wellness"
]
}
},
{
"index": 1,
"ok": true,
"status": 200,
"data": {
"id": "FLT22gHGml",
"tags": [
"Massage",
"VIP",
"Prenatal"
]
}
}
]
}
Remove tags from clients in bulk
/v1/clients/bulk/remove-tagsRemoves tags from clients. Up to 100 items, run one by one through the single route (same validation and plan limits, per item deactivated location check). Bulk runs no automations; webhooks still fire.
x-api-keystringrequiredclientIdsstring[]requiredtagsstring[]requiredsucceededintegerfailedintegerresultsobject[]curl -X POST "https://api.whautomate.com/v1/clients/bulk/remove-tags" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"clientIds": [
"iqf8hDweF6",
"FLT22gHGml"
],
"tags": [
"Corporate wellness"
]
}'
{
"succeeded": 2,
"failed": 0,
"results": [
{
"index": 0,
"ok": true,
"status": 200,
"data": {
"id": "iqf8hDweF6",
"tags": [
"Corporate"
]
}
},
{
"index": 1,
"ok": true,
"status": 200,
"data": {
"id": "FLT22gHGml",
"tags": [
"Massage",
"VIP"
]
}
}
]
}