Contacts
Update a contact
/contacts/{phone}Scope contacts:writeUpdates only the fields you send. customFields is merged key by key, so { "customFields": { "city": "Pune" } } changes the city and leaves your other attributes alone.
Path parameters
phonestringrequiredThe contact's phone number with country code. Anything other than digits is ignored, so
+91 98765 43210works.
Body
namestringFull name. When left out on create, built from
firstNameandlastName.firstNamestringFirst name.
lastNamestringLast name.
companystringCompany.
languagestringLanguage code, for example
enorhi.emailstringEmail address.
tagsstring[]Up to 30 tags. Replaces the existing tags.
consentStatusstringMarketing consent.
One of:
unverified,opted_in,opted_outcustomFieldsobjectYour custom contact attributes by key, as set up under Settings, Contact attributes.
statusstringContact status.
One of:
active,opted_out,invalid
Errors
| Status | Code | When |
|---|---|---|
| 404 | NOT_FOUND | No contact with that number. |
Plus the errors any endpoint can return, such as a missing key or scope. See Errors.
# macOS, Linux or Git Bash, with WAMAFY_API_KEY set. The quoting does not work in Windows cmd or PowerShell.
curl -X PATCH "https://api.wamafy.com/api/v1/public/contacts/919876543210" \
-H "Authorization: Bearer $WAMAFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tags": [
"vip",
"repeat"
],
"customFields": {
"city": "Pune"
}
}'{
"success": true,
"data": {
"id": "9d3f6b2a-4e1c-4a8b-9f0d-2c7e5a1b3d64",
"phone": "919876543210",
"name": "Priya Sharma",
"firstName": "Priya",
"lastName": "Sharma",
"company": "Acme Retail",
"language": "en",
"email": "priya@example.com",
"tags": [
"vip",
"repeat"
],
"status": "active",
"consentStatus": "opted_in",
"source": "api",
"customFields": {
"city": "Pune"
},
"createdAt": "2026-09-02T08:15:00.000Z",
"updatedAt": "2026-10-07T10:00:00.000Z"
}
}Base URL https://api.wamafy.com/api/v1/public