Skip to main content
POST
Create Contact

Request

Headers

Body Parameters

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.
string
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").
string
Contact’s first name. Composed into full_name if full_name isn’t provided.
string
Contact’s last name.
string
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.
string
Phone number with country code
string
Job title or position
string
Company or organization name
UUID of an existing Company to link this contact to. Also accepts the legacy company_id key.
string
LinkedIn profile URL
string | number
Either "high" / "medium" / "low" or an integer (1/2/3).
array
Array of tag strings for categorization
object
Arbitrary JSON object preserved alongside the contact — ideal for domain-specific columns from imported CSVs (e.g. matter numbers, jurisdiction codes).
string
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.

Response

object
The created contact object.

Example Response

Validation

At least one of first_name, last_name, full_name, or email must be provided. If none are present the API returns validation_error.

Name derivation rules

Applied in order; the first rule that yields a name wins:
  1. "Last, First" format — if full_name contains a comma and first/last are empty, it’s split into last / first.
  2. 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.
  3. Compose full_name — when first_name / last_name are given but full_name is empty.
  4. Derive from email — local part is split on ._-+ into Title Case tokens.

Duplicate Detection

The API checks for duplicates by:
  • Exact email match (case-insensitive)
  • Full-name ILIKE match
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).

Errors

Example Validation Error