Name handling: Send any of full_name, first_name + last_name, or just an email. The API splits / composes / derives the missing pieces. It also understands the "Last, First" format.
Contact’s full name. If only this is given, the API splits on the last whitespace (e.g. "Hans Müller" → first=Hans, last=Müller). Accepts the "Last, First" format (e.g. "Müller, Hans").
Email address. Used for duplicate detection and, as a last resort, to derive a name (e.g. hans.mueller@x.de → first=Hans, last=Mueller) when no name is given.
Optional ISO 8601 timestamp. Honored verbatim if it’s within the last 5 years and no more than 24 h in the future; otherwise the server now() is used. Never null.
Applied in order; the first rule that yields a name wins:
"Last, First" format — if full_name contains a comma and first/last are empty, it’s split into last / first.
Split full_name — when full_name is given but first_name / last_name are empty, it’s split on the last whitespace. “Jean-Claude van Damme” → first=Jean-Claude van, last=Damme.
Compose full_name — when first_name / last_name are given but full_name is empty.
Derive from email — local part is split on ._-+ into Title Case tokens.
If a duplicate is found the Lexi agent prompts for confirmation. The REST endpoint still creates the contact (pass force_create: false on the agent tool to suppress).