Overview

The CX-Engine API is a REST API that returns JSON responses. It is split into two distinct layers that reflect the platform's multi-tenant architecture:

  • Central API — account-level operations (registration, login, workspace management, invitations)
  • Workspace API — tenant-level operations (customers, contacts, users, integration keys, etc.)

Base URLs

Layer Base URL
Central API https://{central-domain}/api
Workspace API https://{workspace-subdomain}.{central-domain}/api

The workspace subdomain is assigned when a workspace is created (e.g. mycompany.cx-engine.app).

Authentication

All authenticated endpoints require a Bearer token sent in the Authorization header:

Authorization: Bearer {token}

Tokens are obtained via the /api/login endpoint (see Authentication). Tokens are issued per scope: a central token works only against the central API; a workspace token works only against that workspace's API.

To switch between a central token and a workspace token, use the POST /api/switch-to endpoint.

Request Format

Authenticated write endpoints (POST, PUT) expect a JSON body:

Content-Type: application/json

Response Format

All responses are JSON objects. Successful responses generally include the requested data directly. Error responses follow this shape:

{
  "message": "Human-readable error description.",
  "error": "machine_readable_code"
}

Validation errors include a hint array with field-level messages:

{
  "response": "bad request: please check body parameters.",
  "hint": ["The name field is required."]
}

HTTP Status Codes

Code Meaning
200 OK — request succeeded
201 Created — resource was created or updated
400 Bad Request — malformed request or validation failure
401 Unauthorized — missing or invalid token
403 Forbidden — authenticated but not permitted
404 Not Found — resource does not exist
422 Unprocessable — semantic validation error
500 Internal Server Error

Pagination

List endpoints that support pagination return a standard paginated response:

{
  "data": [...],
  "current_page": 1,
  "last_page": 4,
  "per_page": 20,
  "total": 72
}

Pass ?per_page=N to control page size and ?page=N to navigate pages.