Skip to main content
The CRM REST API is a generic resource router mounted at /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:

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

Returns a JSON array of records. See Query parameters for filtering, sorting, and pagination.
Response: JSON array of record objects. The response includes a Content-Range header for pagination:
Format: <resource> <start>-<end>/<total>

Get one record

Create a record

Update a record

Delete a record

Deletes or archives the record depending on the resource type’s rules.

Restore a record

Restores a previously deleted/archived record. Supported where the backend allows (e.g. deals).

Merge contacts

A special action to merge two or more contact records. This is not part of the generic :resource pattern.

Endpoint summary


Query parameters

Use these on GET /api/:resource to control pagination, filtering, and sorting.

range

JSON array specifying the inclusive start and end indices for pagination.
If omitted, the server defaults to [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.

sort and order

Single-field sort.

sorts

JSON array of sort objects for multi-field sorting.

Full example


Pagination with Content-Range

List responses include a Content-Range header:
Use this to build pagination controls on the client side. Increment the 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.
To discover the exact fields available for a resource, use the schema introspection endpoint: GET /api/schema/:tableName. See Related APIs for details.