POST …/contacts/update
Synchronously update an existing contact. All fields are optional except contact_id. Only fields you provide are changed — this is a patch-style update, not a full replace.
This endpoint is synchronous — the response confirms the update inline.
Request
POST {WEBHOOK_BASE_URL}/{token}/contacts/update
Content-Type: application/json
{
"contact_id": "a1b2c3d4-0000-0000-0000-000000000000",
"phone_number": "5550000002",
"contact_email": "john.new@example.com",
"tags": ["follow-up"],
"note": "Called on March 19 — interested in selling.",
"contributors": ["Sarah Smith"]
}
Body fields
| Field | Type | Required | Description |
|---|
contact_id | string (UUID) | Yes | ID of the contact to update |
full_name | string | No | Replaces the contact’s name |
phone_number | string | No | Adds the number or bumps an existing one to verified |
contact_email | string | No | Added if not already present |
contact_address | string | No | Added as a linked property |
note | string | No | Creates a new note on the contact |
tags | string[] | No | Adds new tags — existing tags are not removed. Case-insensitive dedupe. |
source | string | No | Ensures the source option exists and sets it on the contact |
contributors | string[] | No | Adds users as participants — skips anyone already on the contact |
first_name and last_name are supported but deprecated. Use full_name instead.
This endpoint does not require the calling user to be an org admin or assigned contributor. Inbound webhooks bypass the standard ownership gate.
Behavior details
- Phone — if the number already exists on the contact, it is bumped to verified status. If it is new, it is added.
- Email — added only if not already present. No deduplication beyond exact match.
- Tags — only new tags are added. Existing tags are never removed.
- Contributors — users are resolved by full name within the org. Users already on the contact are skipped.
- Address — Goliath attempts to resolve the address to a known property (
tryToFindPropertyId: true).
Responses
Success
200 OK
{
"success": true,
"contact_id": "a1b2c3d4-0000-0000-0000-000000000000"
}
Error responses
| Status | Cause |
|---|
400 | contact_id is missing |
401 | Invalid or inactive token |
404 | No contact found with the given contact_id |