Skip to main content

Open a widget conversation from your CRM

Add a Message in Evercom action to your CRM or admin panel. Your server asks Evercom to find or create the customer's widget conversation, then redirects the employee to the returned Evercom URL. The employee writes the first message in Evercom.

The API call itself does not send a message or notify the customer.

Before you start​

The workspace access token authenticates your server to the Public API. The widget user_token is a different credential: it verifies the signed-in customer in the browser.

Open or create the conversation​

Call POST https://api.evercom.app/v1/conversations from your server. The inline contact form lets one request find or create both the contact and the conversation:

curl --request POST 'https://api.evercom.app/v1/conversations' \
--header 'Authorization: Bearer YOUR_WORKSPACE_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: crm-message-customer-00123' \
--data '{
"channel": "widget",
"contact": {
"external_id": "customer-00123",
"name": "Ava Customer",
"email": "ava@example.com",
"locale": "en"
}
}'

Evercom returns 201 Created when it creates the conversation and 200 OK when it reuses an eligible existing conversation. A response contains:

{
"workspace_id": 42,
"contact_id": 123,
"contact_created": false,
"conversation_id": 456,
"conversation_created": true,
"conversation_status": "open",
"conversation_url": "https://app.evercom.app/conversations/456?workspace_id=42"
}

Redirect the employee's browser to conversation_url. Evercom checks that the employee belongs to the URL's workspace before loading the conversation.

If your system already stores the Evercom contact ID, send contact_id instead:

{
"channel": "widget",
"contact_id": 123
}

Use exactly one of contact or contact_id.

Contact profile behavior​

The inline name, email, and locale values are used only when Evercom creates the contact. If external_id already exists, this operation returns that contact without overwriting its profile.

Use POST /v1/contacts separately only when your integration needs to create or resolve a contact without opening a conversation. You do not need to call it before POST /v1/conversations.

External IDs are exact and case-sensitive. Leading zeroes are significant, so 00123, 123, and Customer-123 identify different customers.

Safe retries​

Give each logical request an Idempotency-Key. If a timeout leaves the result uncertain, retry the same method, URL, key, and JSON body. Evercom reproduces the original result for at least 24 hours and returns the precise expiry in the Idempotency-Key-Expires-At response header.

Do not reuse a key with a different body. Evercom rejects that with 409 Conflict. If another copy of the same request is still running, Evercom also returns 409 with a Retry-After header.

What the customer sees​

An empty API-created conversation is hidden in the customer widget. It appears when the employee sends the first public message in Evercom. Normal widget realtime delivery and configured offline email notifications then apply.

Blocked contacts cannot be opened through this endpoint. The API returns 403 Forbidden without creating a conversation.