Who This Page Is For
This page is for your ERP or CRM's development team when your system is not one of the native integrations (Dynamics 365, Salesforce, HubSpot, Pipedrive, Loji). CX-Engine's generic REST connector lets you connect any system that exposes an API, but that API needs to implement a small, specific set of routes so the Middleware can query and write to it during PBX events (incoming calls, outgoing calls, chat sessions).
You do not need to replicate CX-Engine's own API shape — the generic connector is configured visually (endpoint URLs, auth, field mapping) from the CX-Engine interface. What matters is that your system exposes routes that can perform the following operations.
Authentication
Your API must support one of the following, since these are the methods the generic connector can be configured with:
| Method | Description |
|---|---|
| OAuth 2.0 Client Credentials | Server-to-server auth using a client_id / client_secret pair. Recommended for headless setups. |
| HTTP Basic Auth | Username / password sent on every request. |
| API Key | A static key sent as a header or query parameter. |
Whichever method you choose, credentials are entered once in the CX-Engine Integrations menu and used for every subsequent request to your API.
Required Routes
Contact Lookup — search by phone number or email
Usage: Called during a screen-pop when a call rings on the PBX, so CX-Engine can display the matching customer record to the agent before they pick up.
Your API needs a route that accepts a phone number and/or an email address and returns matching contacts.
Suggested shape
GET /contacts/search?phone={phone}&email={email}
| Response field | Description |
|---|---|
id |
Unique contact identifier in your system |
first_name / last_name |
Contact name |
email |
Contact email |
phone_business / phone_mobile |
Phone numbers, so CX-Engine can match on either |
company |
Company name, shown in the screen-pop |
entity_url |
Direct URL to the contact's record in your system, used to open it in one click |
If a call comes in and no contact matches, return a
404. CX-Engine uses this to fall back to its dummy contact placeholder, so call logging can still proceed.
Contact Creation
Usage: Called when an agent chooses to create a new record for an unrecognized caller, directly from the CX-Engine screen-pop.
Suggested shape
POST /contacts
| Field | Required | Description |
|---|---|---|
last_name |
yes | Last name |
first_name |
no | First name |
email |
no | Email address |
phone_business / phone_mobile |
no | Phone numbers |
call_direction |
no | inbound or outbound — the direction of the triggering call |
Your API should respond with the created record (at minimum its id) so CX-Engine can link the call to it.
User Lookup — find a user by email
Usage: The PBX only ever provides the agent's email address. If call logging in your system needs a user_id to link the call to a specific user/agent record, CX-Engine needs a route to resolve that email to your internal user identifier.
Suggested shape
GET /users/search?email={email}
| Response field | Description |
|---|---|
id |
Unique user identifier in your system |
email |
The user's email address |
Call Logging — record a completed call
Usage: Called when a call ends on the PBX, so it appears as an activity/history entry against the right contact in your system. This is the core of the "automatic call logging" feature.
Suggested shape
POST /calls
| Field | Description |
|---|---|
direction |
inbound, outbound, or internal |
status |
e.g. completed, no-answer, busy |
number_from / number_to |
Caller and callee numbers |
duration |
Call duration |
start_time / end_time |
Call timestamps (UTC) |
agent_email |
Email of the agent who handled the call |
user_id |
Internal user identifier for the agent, resolved via the user lookup route above, if your call record requires it |
recording_url |
URL to the call recording, if your plan includes call recording |
linked_contact_id |
The contact id returned by the lookup route, if a match was found |
Updating a Call
Usage: Some data isn't available yet when the call first ends — additional PBX details fetched in a second pass, or an AI transcription/summary that finishes asynchronously. Your API needs a route to update the call record that was already created, rather than requiring a fresh POST for every subsequent piece of data.
Suggested shape
PUT /calls/{id}
Accepts the same fields as POST /calls, applied as a partial update to the call identified by {id} — the identifier your system returned when the call was first logged.
AI Fields
If your CX-Engine plan includes the Insights AI add-on, calls are also enriched with AI-generated data — transcription, summary, sentiment, topics, and more. This data is typically not ready when the call ends, so it's sent via the PUT /calls/{id} update route above once transcription completes. See the AI & Transcription fields in Configure the Middleware for the full list of fields you can choose to map and store.
Chat Logging (optional)
Usage: If your PBX/contact center also handles live chat, the same pattern applies — a route to record a completed chat session against a contact.
POST /chats
| Field | Description |
|---|---|
email |
Customer's email address, used to match or create a contact |
number_external |
Customer's external identifier, if no email is available |
chat_messages |
Transcript or summary of the conversation |
start_time / end_time |
Chat timestamps |
agent_email |
Agent who handled the chat |
Response Conventions
- Return standard HTTP status codes:
200/201for success,4xxfor client errors (bad request, not found),401/403for authentication/authorization failures. - Return JSON for every response, including errors.
- For list or search routes, return an empty array rather than a
404when there are no matches. The contact lookup route is the exception: return a404there so CX-Engine can trigger its dummy contact fallback (see above).
Next Steps
Once your API exposes these routes, an administrator can configure the connection from the CX-Engine Integrations menu — see Connect CRM Integration — and map your API's fields to CX-Engine's fields from the CRM Connector > Settings menu — see Configure the Middleware.