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