name, email, company, position), appends a note, and merges legacy custom fields. The contact is looked up by CONTACT_ID in the URL — not by phone number (unlike Create Contact, which upserts by phone number).id key (same naming quirk as Create Contact — the value is the full contact object, not an ID string)curl --location --globoff --request PUT 'https://api.voxa.sa/v1/contacts/{{contactId}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Ahmed Al-Otaibi",
"company": "Acme Co",
"position": "Manager",
"email": "ahmed@example.com"
}'{
"id": {
"workspaceId": "d307b8...............",
"name": "Ahmed Noshy",
"phoneNumber": "+966501234567",
"contactType": 1,
"email": "Noshy@hatif.io",
"company": "HATIF Co",
"position": "Engineer",
"customFields": {
"source": "landing-page"
},
"notes": [],
"customProperties": [],
"lastModificationTime": "2026-06-19T14:21:51.8487055+00:00",
"lastModifierId": null,
"creationTime": "2026-06-09T08:05:17.467676",
"creatorId": null,
"id": "3a21bd..............."
}
}