POST /v1/actions/update-contact
Update an existing contact by id or phone. Only fields present in the body are touched.
Updates an existing contact. Find by contact_id or phone. Only fields present in the body are written — omit a field to leave it unchanged. metadata is merged, not replaced.
POST /api/v1/actions/update-contact
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
contact_id |
UUID | one of | Lookup by id |
phone |
string | one of | Lookup by phone (normalized) |
name |
string | no | Pass "" to clear |
email |
string | no | Pass "" to clear |
tags |
string | no | CSV. Replaces the contact's tag list. To add/remove individual tags, use add-tag / remove-tag. |
metadata |
object | no | Merged shallowly with the existing metadata |
You must pass either contact_id or phone — not both required, but at least one.
curl -X POST https://www.qyvo.io/api/v1/actions/update-contact \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{
"phone": "+14155550123",
"metadata": { "lifetime_value": 9120.00 }
}'
const contact = await fetch('https://www.qyvo.io/api/v1/actions/update-contact', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.QYVO_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
phone: '+14155550123',
metadata: { lifetime_value: 9120.0 },
}),
}).then((r) => r.json());
$contact = Http::withToken(env('QYVO_TOKEN'))
->post('https://www.qyvo.io/api/v1/actions/update-contact', [
'phone' => '+14155550123',
'metadata' => ['lifetime_value' => 9120.0],
])
->json();
import os, httpx
contact = httpx.post(
'https://www.qyvo.io/api/v1/actions/update-contact',
headers={'Authorization': f"Bearer {os.environ['QYVO_TOKEN']}"},
json={'phone': '+14155550123', 'metadata': {'lifetime_value': 9120.0}},
).json()
Response — 200 OK
{
"id": "01J1Y...",
"phone": "+14155550123",
"name": "Romain",
"email": "[email protected]",
"tags": ["vip"],
"updated_at": "2026-05-07T08:14:23+00:00"
}
Errors
| Status | Cause |
|---|---|
404 |
Contact not found |
422 |
Neither contact_id nor phone provided |
