Create a contact
Creates one contact.
If you are syncing from another system and may have seen this person before, use PUT /v1/contacts instead — it creates or updates in one idempotent call and never fails on a duplicate.
Authorizations
A workspace API token. Create one in Settings → API. Send it as Authorization: Bearer sk_live_....
Query Parameters
Comma-separated relationships to inline in the response. Unexpanded relations are still identified by their *_id field.
"organization,owner"
Body
Body for POST /v1/contacts.
Required; a nameless contact is not useful.
1Required. Any format; normalized to E.164.
Unique identifier for an organization.
^org_[0-9a-f]{32}$"org_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"
Unique identifier for an user.
^usr_[0-9a-f]{32}$"usr_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"
CRM record visibility levels; resolved live against the owner's current teams.
private, team, team_and_subteams, company Response
Successful Response
A person in your CRM.
Unique identifier for a contact.
^con_[0-9a-f]{32}$"con_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"
Where the contact stands.
open, on_hold, won, lost Governs who sees this record in the Sailer UI. API tokens are workspace-scoped and are not filtered by it.
private, team, team_and_subteams, company Short-lived signed URL; do not store it.
Free-text employer name. Unrelated to your workspace and to organization, which is a CRM record.
Every custom field defined on contacts in this workspace, keyed by field key and typed from its definition. Unset fields are null, so reading any contact shows the full set of keys in use.
Name of the reason, when status is lost.
Display name. Derived from first_name and last_name.
"contact"Populated only when organization is in expand.
Unique identifier for an organization.
^org_[0-9a-f]{32}$"org_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"
Populated only when owner is in expand.
Unique identifier for an user.
^usr_[0-9a-f]{32}$"usr_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"
E.164. Normalized on write.
cold, warm, hot