Zendesk
Connect a Zendesk account with an API token or your own OAuth app. Helios indexes the Support, Help Center, and Talk APIs and registers native event webhooks.
What your agents can do
Agents can search the Support, Help Center, and Talk API references, read and update tickets, post replies, manage users and organizations, maintain articles and community content, and manage Talk calls and settings. Access depends on the connected user's permissions and Zendesk plan.
Enter your account's core URL, https://{subdomain}.zendesk.com, without an API path or custom Help Center hostname. API calls and OAuth requests stay on that host. The indexed reference includes 662 Support operations, 188 Help Center operations, and 60 Talk operations. Separate Chat, Sell, and Sunshine Conversations APIs are outside this reference.
Authentication
| Method | Fields | Use |
|---|---|---|
| API token (default) | Email, API token, account URL | Connect an account that still supports API tokens. |
| Your own OAuth app | Client ID, Client secret, Admin access, account URL | Authorize a confidential client registered in your account. |
API token
- In Zendesk Admin Center, open Apps and integrations → APIs → Zendesk API.
- Enable token access if your account permits it, and create a token.
- Enter the Zendesk user's email address and the token in Helios.
Helios sends Basic authentication with email/token as the username. Accounts created on or after July 28, 2026 cannot use API tokens. Zendesk ends token creation for older accounts on October 27, 2026 and disables all API tokens on April 30, 2027. Use OAuth for new accounts. See Zendesk's migration schedule.
Your own OAuth app
- Create a confidential OAuth client in your Zendesk account's Admin Center.
- Register the callback URL for your Helios environment:
https://<helios-api-host>/integrations/zendesk/oauth_callback. - In Helios, select Your own OAuth app and enter the account URL, the client's unique identifier as Client ID, and Client secret.
- Enable Admin access only if you need the
impersonatescope and can authorize as a Zendesk administrator. - Authorize the app. Use an administrator if you want Helios to register webhooks.
A local OAuth client works only on its own subdomain. A client distributed across other customers' accounts requires Zendesk's global-client approval. Helios does not supply a global Zendesk client.
Helios requests all 55 non-admin scopes listed below, plus impersonate when Admin access is enabled. Allow these scopes in the client's settings. Scopes do not override the authorizing user's role or plan permissions. See the scope reference.
read write account_settings:read account_settings:write ai_agents:chat
apps:read apps:write auditlogs:read automations:read automations:write
brands:read brands:write custom_objects:read custom_objects:write
deletion_schedules:read deletion_schedules:write dynamic_content:read dynamic_content:write
groups:read groups:write hc:read hc:write macros:read macros:write
organizations:read organizations:write requests:read requests:write
satisfaction_ratings:read satisfaction_ratings:write security:read
side_conversations:read side_conversations:write sla_policies:read sla_policies:write
targets:read targets:write themes:read themes:write ticket_attachments:read
ticket_attachments:write ticket_views:read ticket_views:write tickets:read tickets:write
triggers:read triggers:write users:read users:write webhooks:read webhooks:write
any_channel:write web_widget:write zis:read zis:writeThe authorization-code exchange requests a 30-minute access token and a 30-day refresh token, including for legacy clients. Helios uses its shared refresh path after token expiry and schedules a weekly refresh to keep idle connections usable. Zendesk rotates both tokens on refresh. Reauthorize if the refresh token expires or is revoked. See token grants and lifetimes.
Triggers
Helios includes all 142 native webhook event types in Zendesk's published catalog. The trigger picker lists individual events and their available filters.
| Group | Events | Useful filters |
|---|---|---|
| Tickets | 37 | Ticket ID, status, priority, type, brand, group, assignee, requester, organization, form, tags, channel |
| Users | 27 | User ID, email pattern, role, organization, default group |
| Organizations | 6 | Organization ID, name, group, external ID |
| Articles | 11 | Article ID, brand, user; publication locale, section, category |
| Community posts | 14 | Post ID, brand, user, topic |
| Agent availability | 9 | Agent ID; channel and new state for state changes |
| Routing | 1 | Whether omnichannel routing is enabled |
| Messaging | 3 | Ticket ID |
| Access logs | 1 | User, HTTP method, status, category |
| Live messaging metrics | 33 | Metric, group or channel when present |
All events also offer account and subject filters. Pattern filters accept globs. Status, priority, type, role, and email filters ignore case. Empty filters allow all values.
Examples include ticket.created, ticket.comment_added, ticket.status_changed, user.created, and article.published. Metric events end in _reported in Helios, such as messaging_live_metrics.active_assigned_all_reported, because each delivery is an observation. Access-log deliveries start a separate run for each record. See the complete event list.
Setup attempts the full catalog in one webhook. If Zendesk rejects that subscription, Helios tests individual additions on one webhook and reports refused events with the vendor's reason. Helios updates the first webhook at the connection URL. Failed saves preserve its existing subscriptions. After storing its signing secret, Helios deletes duplicate webhooks at that URL. Conditional ticket triggers and custom business-rule payloads are not configured by this integration.
Zendesk generates the signing secret. Helios retrieves and encrypts it, verifies HMAC-SHA256 signatures, and rejects signature timestamps more than five minutes from the current time. Native event IDs deduplicate repeated deliveries. See signature verification.
Event catalog
These are the exact Helios event names. Metrics use _reported because deliveries report observations.
Articles
article.author_changedarticle.publishedarticle.subscription_createdarticle.unpublishedarticle.vote_createdarticle.vote_changedarticle.vote_removedarticle.comment_createdarticle.comment_changedarticle.comment_publishedarticle.comment_unpublished
Community posts
community_post.createdcommunity_post.changedcommunity_post.publishedcommunity_post.unpublishedcommunity_post.subscription_createdcommunity_post.vote_createdcommunity_post.vote_changedcommunity_post.vote_removedcommunity_post.comment_createdcommunity_post.comment_changedcommunity_post.comment_publishedcommunity_post.comment_unpublishedcommunity_post.comment_vote_createdcommunity_post.comment_vote_changed
Organizations
organization.createdorganization.custom_field_changedorganization.deletedorganization.external_id_changedorganization.name_changedorganization.tags_changed
Users
user.alias_changeduser.createduser.custom_field_changeduser.custom_role_changeduser.default_group_changeduser.details_changeduser.external_id_changeduser.group_membership_createduser.group_membership_deleteduser.identity_changeduser.identity_createduser.identity_deleteduser.active_changeduser.last_login_changeduser.mergeduser.name_changeduser.notes_changeduser.only_private_comments_changeduser.organization_membership_createduser.organization_membership_deleteduser.password_changeduser.photo_changeduser.role_changeduser.deleteduser.suspended_changeduser.tags_changeduser.time_zone_changed
Agent availability
agent.state_changedagent.work_item_addedagent.work_item_updatedagent.work_item_removedagent.max_capacity_changedagent.unified_state_changedagent.channel_createdagent.channel_deletedagent.groups_updated
Routing
omnichannel_config.omnichannel_routing_feature_changed
Tickets
ticket.agent_assignment_changedticket.attachment_linked_to_commentticket.attachment_redacted_from_commentticket.brand_changedticket.comment_addedticket.comment_made_privateticket.comment_redactedticket.custom_field_changedticket.custom_status_changedticket.description_changedticket.external_id_changedticket.email_ccs_changedticket.followers_changedticket.form_changedticket.group_assignment_changedticket.organization_changedticket.priority_changedticket.problem_link_changedticket.requester_changedticket.status_changedticket.subject_changedticket.submitter_changedticket.tags_changedticket.task_due_at_changedticket.createdticket.marked_as_spamticket.mergedticket.permanently_deletedticket.soft_deletedticket.type_changedticket.sla_policy_changedticket.schedule_changedticket.ola_policy_changedticket.undeletedticket.csat_requestedticket.csat_receivedticket.next_sla_breach_changed
Messaging tickets
messaging_ticket.message_added
Chat tickets
chat_ticket.member_joinedchat_ticket.listening_agents_changed
Access logs
access_log.created
Live messaging metrics
messaging_live_metrics.active_assigned_all_reportedmessaging_live_metrics.active_assigned_group_reportedmessaging_live_metrics.active_assigned_via_type_reportedmessaging_live_metrics.active_in_queue_all_reportedmessaging_live_metrics.active_in_queue_group_reportedmessaging_live_metrics.active_in_queue_via_type_reportedmessaging_live_metrics.inactive_assigned_all_reportedmessaging_live_metrics.inactive_assigned_group_reportedmessaging_live_metrics.inactive_assigned_via_type_reportedmessaging_live_metrics.inactive_in_queue_all_reportedmessaging_live_metrics.inactive_in_queue_group_reportedmessaging_live_metrics.inactive_in_queue_via_type_reportedmessaging_live_metrics.average_time_in_queue_all_reportedmessaging_live_metrics.average_time_in_queue_group_reportedmessaging_live_metrics.average_time_in_queue_via_type_reportedmessaging_live_metrics.longest_time_in_queue_all_reportedmessaging_live_metrics.longest_time_in_queue_group_reportedmessaging_live_metrics.longest_time_in_queue_via_type_reportedmessaging_live_metrics.average_requester_wait_time_all_reportedmessaging_live_metrics.average_requester_wait_time_group_reportedmessaging_live_metrics.average_requester_wait_time_via_type_reportedmessaging_live_metrics.longest_requester_wait_time_all_reportedmessaging_live_metrics.longest_requester_wait_time_group_reportedmessaging_live_metrics.longest_requester_wait_time_via_type_reportedmessaging_live_metrics.average_handle_time_all_reportedmessaging_live_metrics.average_handle_time_group_reportedmessaging_live_metrics.average_handle_time_via_type_reportedmessaging_live_metrics.longest_handle_time_all_reportedmessaging_live_metrics.longest_handle_time_group_reportedmessaging_live_metrics.longest_handle_time_via_type_reportedmessaging_live_metrics.average_concurrency_all_reportedmessaging_live_metrics.average_concurrency_group_reportedmessaging_live_metrics.average_concurrency_via_type_reported
Errors and limits
- A 200 response for an anonymous user does not validate a connection. Helios requires a user ID from
/api/v2/users/me.json. - A webhook permission error usually requires an administrator or a change to the OAuth client's allowed scopes. A failed webhook listing stops setup without changing saved event availability. Rejected subscriptions are reported as unavailable.
- Trial accounts allow 10 webhooks and 60 invocations per minute. Helios updates an existing webhook at the connection URL or creates one if none exists. See trial limits.
- Event availability depends on your account's products and entitlements. Ticket events use native subscriptions, without a substitute conditional payload.
- Zendesk retries some failed deliveries but does not guarantee delivery or ordering. Workflows that write to other systems should handle repeated business actions. See retry behavior.
- API rate limits depend on your plan and endpoint. Helios uses its shared retry handling for rate limits and transient failures.
- Upload ticket files through
/api/v2/uploads.jsonand attach the returned upload token to a comment. Agents transfer files through pre-signed URLs withcurl.
Last updated on