companyId. You can attach a role, mark one contact as primary, and store arbitrary key-value data in customFields.
All contacts endpoints are scoped to your tenant. Pass your API key in the
Authorization: Bearer header on every request.List contacts
GET /api/v1/contacts/contact
Returns a paginated list of contacts for the authenticated tenant. Filter by company or run a full-text search across names and emails.
Query parameters
string
Filter contacts belonging to a specific company. Must be a valid UUID.
string
Full-text search across contact names and email addresses.
integer
default:"1"
1-based page index.
integer
default:"25"
Number of results per page. Maximum
100.Response
Create a contact
POST /api/v1/contacts/contact
Creates a new contact linked to an existing company.
Request body
string
required
UUID of the company this contact belongs to.
string
required
Contact’s first name. Maximum 100 characters.
string
required
Contact’s last name. Maximum 100 characters.
string
Contact’s email address. Must be a valid email format.
string
Contact’s phone number. Maximum 50 characters.
string
Job title or role within the company. Maximum 100 characters.
boolean
When
true, marks this as the primary contact for the company.string
Internal notes about this contact.
object
Key-value map of custom field data. Any required custom fields your tenant has configured must be included.
Response
Returns201 Created with the new contact wrapped in { "data": {...} }.
Get a contact
GET /api/v1/contacts/contact/{id}
Retrieves a single contact by ID.
Path parameters
string
required
UUID of the contact.
Response
Returns200 OK with { "data": { contact object } }. Returns 404 Not Found if the contact does not exist or belongs to a different tenant.
Response fields
object
Update a contact
PATCH /api/v1/contacts/contact/{id}
Partially updates a contact. Only include the fields you want to change. Pass null to clear a nullable field.
Path parameters
string
required
UUID of the contact to update.
Request body
All fields are optional.string
Updated first name. Maximum 100 characters.
string
Updated last name. Maximum 100 characters.
string | null
Updated email address. Pass
null to clear.string | null
Updated phone number. Pass
null to clear.string | null
Updated role. Pass
null to clear.boolean
Whether to mark this contact as the primary contact.
string | null
Updated internal notes. Pass
null to clear.object
Replaces all custom field values with the provided map.
Response
Returns200 OK with { "data": { updated contact } }. Returns 404 Not Found if the contact does not exist.