phone is required and uuid is generated by Wazapi. Never duplicates: when the company already has a contact with this phone (a Brazilian mobile with or without the ninth digit counts as the same), that contact is returned and the fields you sent are applied — tags replace the list, custom_fields are merged, and tracking only fills keys that are still empty. With external_id, behaves like PUT /contacts/external/{external_id}; an external_id or phone already tied to another contact answers 409 external_contact_conflict.curl --location '/contacts' \
--header 'Content-Type: application/json' \
--data '{
"phone": "+5511999999999"
}'{
"data": {
"uuid": "9c2e4f31-7a55-4d0b-8f6a-2c9d1e5b7a03",
"external_id": "customer-1847",
"phone": "+5511999998888",
"name": "Maria Silva",
"email": "maria@exemplo.com.br",
"tags": [
"cliente",
"vip"
],
"custom_fields": {
"tier": "gold",
"utm_source": "google",
"utm_campaign": "black-friday"
},
"tracking": {
"utm_source": "google",
"utm_campaign": "black-friday"
},
"last_interaction_at": "2026-08-25T14:31:09.412-03:00",
"created_at": "2026-07-02T09:12:44.001-03:00",
"updated_at": "2026-08-25T14:31:09.412-03:00"
}
}