Skip to main content
POST
Create a contact

Authorizations

Authorization
string
header
required

A workspace API token. Create one in Settings → API. Send it as Authorization: Bearer sk_live_....

Query Parameters

expand
string | null

Comma-separated relationships to inline in the response. Unexpanded relations are still identified by their *_id field.

Example:

"organization,owner"

Body

application/json

Body for POST /v1/contacts.

first_name
string
required

Required; a nameless contact is not useful.

Minimum string length: 1
phone
string
required

Required. Any format; normalized to E.164.

address
string | null
city
string | null
company_name
string | null
custom_fields
Custom Fields · object
email
string | null
job_title
string | null
last_name
string | null
organization_id
string | null

Unique identifier for an organization.

Pattern: ^org_[0-9a-f]{32}$
Example:

"org_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

owner_id
string | null

Unique identifier for an user.

Pattern: ^usr_[0-9a-f]{32}$
Example:

"usr_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

state
string | null
visibility
enum<string>
default:company

CRM record visibility levels; resolved live against the owner's current teams.

Available options:
private,
team,
team_and_subteams,
company

Response

Successful Response

A person in your CRM.

created_at
string<date-time>
required
id
string
required

Unique identifier for a contact.

Pattern: ^con_[0-9a-f]{32}$
Example:

"con_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

status
enum<string>
required

Where the contact stands.

Available options:
open,
on_hold,
won,
lost
updated_at
string<date-time>
required
visibility
enum<string>
required

Governs who sees this record in the Sailer UI. API tokens are workspace-scoped and are not filtered by it.

Available options:
private,
team,
team_and_subteams,
company
address
string | null
avatar_url
string | null

Short-lived signed URL; do not store it.

channels
ContactChannel · object[]
city
string | null
company_name
string | null

Free-text employer name. Unrelated to your workspace and to organization, which is a CRM record.

custom_fields
Custom Fields · object

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.

email
string | null
first_name
string | null
job_title
string | null
last_name
string | null
lost_reason
string | null

Name of the reason, when status is lost.

name
string | null

Display name. Derived from first_name and last_name.

object
string
default:contact
Allowed value: "contact"
organization
Organization · object | null

Populated only when organization is in expand.

organization_id
string | null

Unique identifier for an organization.

Pattern: ^org_[0-9a-f]{32}$
Example:

"org_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

owner
User · object | null

Populated only when owner is in expand.

owner_id
string | null

Unique identifier for an user.

Pattern: ^usr_[0-9a-f]{32}$
Example:

"usr_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

phone
string | null

E.164. Normalized on write.

score
enum<string> | null
Available options:
cold,
warm,
hot
state
string | null
tags
Tag · object[]