1. Name splitting is automatic
When you create a contact, you can send any combination offirst_name, last_name, full_name, or email. The API derives the missing pieces:
Split full_name
full_name: "Hans Müller" → split on last whitespace. Supports multi-word last names ("Jean-Claude van Damme" → last=Damme).first_name / last_name / full_name / email. Otherwise 400 validation_error is returned. No more blank-name rows.
2. Client timestamps are honored
Every create endpoint accepts an optionalcreated_date in the body:
- Must be a valid ISO 8601 string.
- Must be no more than 24 h in the future (small clock skew tolerated).
- Must be no more than 5 years in the past.
now() is used instead. created_date is never null.
This fixes the common UI display where historical events always appeared as “just now” — import a note from two weeks ago with its real timestamp and the timeline shows the correct age.
3. Notes / tasks / meetings must have a parent link
The API rejects orphans. EveryPOST /v1/notes, POST /v1/tasks, and the meeting handler requires at least one of:
contact_id— the linked contactrelated_company_id(notes) /company_id(tasks, meetings) — the linked client companydeal_id— the linked dealevent_id— the linked event
POST /v1/contacts/{id}/notesPOST /v1/companies/{id}/notes
Lexi agent parity
The Lexi AI assistant uses the same writer module. When you open Lexi from a contact detail page and say “add a note: followed up by phone”, Lexi auto-links the note to the contact you’re viewing — no need to repeat the contact name. The focused entity is passed ascurrentEntity: { type, id } in the chat payload and falls through to any create_note / create_task / schedule_meeting tool call Lexi issues.
Cross-workspace linking is blocked: the resolver validates every supplied UUID against the caller’s workspace before inserting.
For agents
If you’re building an AI agent that reads and writes LeadLex data, see Using LeadLex from an Agent for patterns covering:- The read → enrich → write loop with one-call context via
?include=notes,tasks,deals - Writing notes and tasks by human name (
contact_name/company_name) instead of UUID - Embedded parent summaries on list/get responses (
contact,company,deal,eventblocks) - When to use Lexi chat vs direct REST