phone_number or mobile_number) and uses the record to greet the caller by name and to pick a tag-specific greeting from the agent’s greeting_variants (see Agents). Contacts are also what the Dashboard shows under Kontakte.
Contacts belong to one agent. A key needs contacts:read / contacts:write and access to that agent.
Data model
All phone numbers must be E.164 (
+4922112345678). Spaces, dashes and parentheses are stripped; anything else is rejected with 400 — the agent compares the exact string, so a national format would never match a caller.
Name handling
The rules are the same as in the Dashboard, so contacts look identical no matter where they were created:- Parts sent (
salutation,first_name,last_name):customer_nameis composed from them ("Herr Fey","Tobias Lutz"),name_parsedbecomesmanual. - Only
customer_namesent: it is split where unambiguous ("Tobias Lutz"→ first/last,"Herr Fey"→ salutation/last). Company names, two people in one field or anything ambiguous stay unsplit: the full name goes tolast_nameandname_parsedisunclear, so the agent greets neutrally instead of guessing. customer_name: nullon update clears every name field.- On update, parts are merged with the stored contact —
{"first_name": "Max"}keeps salutation and last name. - A created or changed name sets
name_sourcetomanual.
Endpoints
List contacts
contacts:read | Pagination: yes | newest first
Filters:
Get contact
contacts:read
Create contact
contacts:write — all fields optional
Update contact
contacts:write — partial update, unknown and read-only fields are ignored
Delete contact
contacts:write | Returns 204 No Content, 404 for unknown IDs
Common patterns
Sync customers from a CRM
Related resources
- Agents —
greeting_variantspick a greeting per contact tag - Calls — call records carry the caller’s number and name
- CRM Integration — end-to-end example