Setup takes about 15 minutes. You need a Zendesk admin role on both sides — your OpenCX organization and your Zendesk account.
Before you start
Zendesk plan with API access
Zendesk plan with API access
Suite Team or higher, or Support Professional. Suite Growth and above is recommended so you can use for webhook delivery.
Admin access in Zendesk
Admin access in Zendesk
You need to generate an API token, create a webhook, and create a trigger. All three live in Zendesk Admin Center — agent roles cannot reach them.
Owner or admin in OpenCX
Owner or admin in OpenCX
Required to save integration settings in Settings → Integrations.
Setup
Generate a Zendesk API token
In Zendesk, open Admin Center → Apps and integrations → APIs → Zendesk API.
- Toggle Token access on.
- Click Add API token.
- Label it
OpenCX(or anything recognizable). - Copy the token immediately — Zendesk hides it after you close the dialog.
Open Zendesk Ticketing in OpenCX
In OpenCX, go to Settings → Integrations, find Zendesk, and click Zendesk Ticketing.
Enter your credentials
| Field | Value |
|---|---|
| Subdomain | The acme part of acme.zendesk.com. Do not include .zendesk.com or https://. |
| The admin email that owns the API token. | |
| API Token | The token you just copied. |
| Default Agent ID | Optional. The numeric to assign tickets to when no routing rule applies. Leave blank to create tickets unassigned. |
Copy your webhook URL
After saving, OpenCX displays a Webhook URL unique to your organization. Keep this tab open — you’ll paste it into Zendesk next.
Register the webhook in Zendesk
In Zendesk, open Admin Center → Apps and integrations → Webhooks and click Create webhook → Trigger or automation.
Save the webhook.
| Field | Value |
|---|---|
| Name | OpenCX |
| Endpoint URL | Paste the OpenCX webhook URL. |
| Request method | POST |
| Request format | JSON |
| Authentication | None — the URL is already signed. |
Create the trigger that fires the webhook
Open Admin Center → Objects and rules → Triggers and click Add trigger.Configure:Save and activate the trigger.
- Conditions → Meet ALL of:
Ticket | Is | Updated;Comment | Is | Present (public). - Actions:
Notify active webhook → OpenCX. - JSON body — include at minimum:
Use
{{ticket.latest_public_comment}}, not {{ticket.latest_comment}}. The second variant includes internal notes and will leak them to the customer.Verify end to end
Send a test email to an address you have connected to OpenCX email handoff. Escalate the conversation. Within a few seconds:If any step fails, jump to Troubleshooting.
- A ticket appears in Zendesk, tagged
opencx. - Reply publicly from Zendesk.
- The reply appears as an agent message on the matching session in your OpenCX Inbox.
Every OpenCX ticket is traceable back to its session. The session UUID is written to the ticket’s
external_id, and the first comment includes a View session in OpenCX link that opens the full AI reasoning, tool calls, and transcript in your inbox. Filter Zendesk views by external_id or any opencx_* tag described below.How handoff lands in Zendesk
When triggers, OpenCX does the following in Zendesk:- Looks up the contact by email. If not found, creates a Zendesk user with the contact’s email and name.
- Creates a ticket with the session ID as , the conversation summary as the description, and the full transcript appended as the first comment.
- Applies tags (see Tags OpenCX applies below) so your views and triggers can filter by mode, channel, sentiment, and language.
- Auto-fills any custom fields you’ve mapped (see AI Fields below).
- Assigns to your Default Agent ID if configured; otherwise leaves unassigned for Zendesk routing to handle.
The session is linked to the ticket by
external_id. If the same contact re-engages before the ticket is closed, OpenCX appends to the existing ticket instead of opening a new one.Create a ticket only on handoff
By default OpenCX only creates a ticket when the AI escalates. If you want every conversation to create a ticket up front (for audit or SLA reasons), reach out to support — this flag is set per organization.Rep replies sync back
When a rep posts a public reply in Zendesk, the webhook fires and OpenCX:- Matches the ticket to the original session using
external_id. - Sends the reply to the contact on the original channel — email, SMS, WhatsApp, web widget, etc.
- Marks the session as having an active human agent so the AI stops auto-responding.
AI Fields
Map Zendesk to AI-generated values so triage, routing, and reporting work on day one. Configure at Settings → Ticketing under Zendesk AI Fields.Pick a Zendesk field
OpenCX loads every custom field on your Zendesk account. Pick one — dropdown () and free-text fields are supported.
Describe what the AI should fill
Write a short description of what the field represents. For dropdowns, OpenCX picks from existing options only. For text, OpenCX writes a short value.Example description for a Reason dropdown: “The primary reason the contact is writing. Pick the closest match from the allowed values.”
Tags OpenCX applies
| Tag | When |
|---|---|
opencx | Always, on any ticket OpenCX creates or writes to. |
opencx_autopilot | The AI was in autopilot (resolved or handed off without a rep present). |
opencx_assist_mode | The AI posted an internal note on an agent-owned ticket. |
opencx_handedoff | The AI escalated to a human rep. |
opencx_channel_<name> | The source channel — email, whatsapp, sms, web, phone. |
opencx_sentiment_<value> | Detected sentiment on handoff — happy, neutral, negative. |
opencx_language_<code> | Detected conversation language. |
opencx_ticket_created_on_handoff | Applied when the ticket was created at handoff (vs updated on a returning contact). |
Rotating the API token
Regenerating the Zendesk API token does not affect the webhook — the webhook URL is signed with a separate key. To rotate:- Create a new token in Zendesk.
- Paste it into Settings → Integrations → Zendesk.
- Delete the old token in Zendesk.
Disconnecting
In OpenCX, open the Zendesk integration and click Disconnect. Then in Zendesk, delete the webhook and the trigger you created. Tickets created while the integration was active remain untouched.Related Documentation
AI Email in Zendesk
Per-channel implementation details for email handoff.
Sunshine Conversations
The path for chat, SMS, WhatsApp, phone, and social channels.
Assist Mode
Draft internal notes on agent-owned tickets.
Troubleshooting
Webhook 4xx, trigger not firing, credentials failing.