/api. Every CRM record type shares the same endpoint shape, so once you learn the pattern you can work with any resource.
All endpoints require authentication (see Authentication).
Built-in resources
Use any of these as the:resource segment in the endpoints below:
| Resource slug | Description |
|---|---|
contacts | People in your CRM |
companies | Organizations |
deals | Sales opportunities / pipeline records |
tasks | Action items linked to records |
contact_notes | Notes attached to contacts |
deal_notes | Notes attached to deals |
company_notes | Notes attached to companies |
tags | Labels for organizing records |
configuration | CRM configuration entries |
automation_rules | Automation rule definitions |
crm_users | CRM user records |
companies_summary | Aggregated company data (read-only) |
contacts_summary | Aggregated contact data (read-only) |
Custom CRM objects
If your organization defines custom objects in the database, the:resource segment can also be the custom object’s slug. These resolve dynamically per organization and support the same CRUD endpoints as built-in resources.
Endpoints
List records
Content-Range header for pagination:
<resource> <start>-<end>/<total>
Get one record
Create a record
Update a record
Delete a record
Restore a record
Merge contacts
:resource pattern.
Endpoint summary
| Method | Path | Description |
|---|---|---|
GET | /api/:resource | List records (paginated). |
GET | /api/:resource/:id | Get one record. |
POST | /api/:resource | Create a record. |
PUT | /api/:resource/:id | Update a record. |
DELETE | /api/:resource/:id | Delete or archive a record. |
POST | /api/:resource/:id/restore | Restore an archived record. |
POST | /api/merge_contacts | Merge contacts (special action). |
Query parameters
Use these onGET /api/:resource to control pagination, filtering, and sorting.
range
JSON array specifying the inclusive start and end indices for pagination.
[0, 24].
filter
JSON object for legacy filter support. Keys are field names, values are the match criteria.
filters
JSON array of filter objects for advanced filtering. Each object specifies a field, operator, value, and optional logical operator.
| Property | Type | Description |
|---|---|---|
field | string | The field name to filter on. |
op | string | Operator (e.g. eq, neq, gt, lt, gte, lte, contains, starts_with). |
value | any | The value to compare against. |
logicalOp | string | "and" or "or". Combines with the next filter. Optional. |
sort and order
Single-field sort.
| Parameter | Values |
|---|---|
sort | Any field name |
order | ASC or DESC |
sorts
JSON array of sort objects for multi-field sorting.
Full example
Pagination with Content-Range
List responses include aContent-Range header:
| Segment | Meaning |
|---|---|
contacts | The resource name. |
0-24 | Start and end indices of the returned window. |
142 | Total number of records matching the query. |
range parameter to fetch the next page:
Request body format
- Send JSON with
Content-Type: application/json. - The API accepts snake_case field names (e.g.
first_name,company_id). The server maps these to internal camelCase for built-in tables automatically. - Writable fields per resource are enforced server-side via a whitelist. Fields not in the whitelist are silently ignored.

