Contacts
Endpoints
Available endpoints for managing contact records.
| Method | Path | Description |
|---|---|---|
GET | /api/contacts/ | List contacts |
POST | /api/contacts/ | Create a contact |
GET | /api/contacts/{id}/ | Get a contact |
PATCH | /api/contacts/{id}/ | Update a contact |
DELETE | /api/contacts/{id}/ | Delete a contact |
Contacts
List Contacts
Retrieve a paginated list of contacts with filtering and search support.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default: 1) |
limit | integer | Results per page (default: 20, max: 100) |
stage | string | Filter by stage (e.g., engaged, customer) |
assignedTo | string | Filter by assigned user ID |
search | string | Search by name, email, or phone |
createdAfter | ISO8601 | Filter contacts created after this date |
createdBefore | ISO8601 | Filter contacts created before this date |
tags | string | Comma-separated tag names to filter by |
Creation
Create a Contact
Create a new contact with profile, account linkage, and tags.
Request body:
firstName or lastName (at least one), email
Response: 201 Created with the full contact object.
Contact Details
Get a Contact
Retrieve full contact profile including ownership and activity flags.
Response:
Updates
Update a Contact
UsePATCH to update specific fields without affecting the rest.
Update contact attributes such as stage, owner, or tags.
Request body (any subset of writable fields):
200 OK with the updated contact object.
Deletion
Delete a Contact
Permanently remove a contact and its associated records.
Response: 204 No Content
Deleting a contact removes the record and all associated notes and tasks. Activities logged on the contact’s timeline are retained in the audit log but no longer accessible through the contact record.
Stages
Contact Stage Values
| Value | Label |
|---|---|
new | New |
contacted | Contacted |
engaged | Engaged |
proposal_sent | Proposal Sent |
negotiation | Negotiation |
customer | Customer |
inactive | Inactive |
Async CSV Import
For bulk imports of more than a few hundred rows, use the async import endpoints. The synchronousunified-import endpoint stays available for small CSVs and other file types (vCard, image, PDF) but will gateway-time-out on large CSVs.
Start an Import
| Field | Required | Description |
|---|---|---|
file | yes | The CSV file (.csv only) |
source_uid | no | UID of a Source to stamp on every created contact |
field_mappings | no | JSON string mapping unknown CSV column headers to schema fields |
- 10 MB CSV body cap
- One job per request
- File must be UTF-8 (falls back to latin-1 if UTF-8 decode fails)
202 Accepted)
Poll a Job
200)
| Status | Meaning |
|---|---|
queued | In the Celery queue, hasn’t started |
processing | Worker is currently importing rows |
complete | Finished — check successCount and errorCount |
failed | Threw an error; errorMessage carries the reason |
status is complete or failed.
