HELIOS DOCS

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

MethodFieldsUse
API token (default)Email, API token, account URLConnect an account that still supports API tokens.
Your own OAuth appClient ID, Client secret, Admin access, account URLAuthorize a confidential client registered in your account.

API token

  1. In Zendesk Admin Center, open Apps and integrations → APIs → Zendesk API.
  2. Enable token access if your account permits it, and create a token.
  3. 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

  1. Create a confidential OAuth client in your Zendesk account's Admin Center.
  2. Register the callback URL for your Helios environment: https://<helios-api-host>/integrations/zendesk/oauth_callback.
  3. In Helios, select Your own OAuth app and enter the account URL, the client's unique identifier as Client ID, and Client secret.
  4. Enable Admin access only if you need the impersonate scope and can authorize as a Zendesk administrator.
  5. 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:write

The 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.

GroupEventsUseful filters
Tickets37Ticket ID, status, priority, type, brand, group, assignee, requester, organization, form, tags, channel
Users27User ID, email pattern, role, organization, default group
Organizations6Organization ID, name, group, external ID
Articles11Article ID, brand, user; publication locale, section, category
Community posts14Post ID, brand, user, topic
Agent availability9Agent ID; channel and new state for state changes
Routing1Whether omnichannel routing is enabled
Messaging3Ticket ID
Access logs1User, HTTP method, status, category
Live messaging metrics33Metric, 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_changed
  • article.published
  • article.subscription_created
  • article.unpublished
  • article.vote_created
  • article.vote_changed
  • article.vote_removed
  • article.comment_created
  • article.comment_changed
  • article.comment_published
  • article.comment_unpublished

Community posts

  • community_post.created
  • community_post.changed
  • community_post.published
  • community_post.unpublished
  • community_post.subscription_created
  • community_post.vote_created
  • community_post.vote_changed
  • community_post.vote_removed
  • community_post.comment_created
  • community_post.comment_changed
  • community_post.comment_published
  • community_post.comment_unpublished
  • community_post.comment_vote_created
  • community_post.comment_vote_changed

Organizations

  • organization.created
  • organization.custom_field_changed
  • organization.deleted
  • organization.external_id_changed
  • organization.name_changed
  • organization.tags_changed

Users

  • user.alias_changed
  • user.created
  • user.custom_field_changed
  • user.custom_role_changed
  • user.default_group_changed
  • user.details_changed
  • user.external_id_changed
  • user.group_membership_created
  • user.group_membership_deleted
  • user.identity_changed
  • user.identity_created
  • user.identity_deleted
  • user.active_changed
  • user.last_login_changed
  • user.merged
  • user.name_changed
  • user.notes_changed
  • user.only_private_comments_changed
  • user.organization_membership_created
  • user.organization_membership_deleted
  • user.password_changed
  • user.photo_changed
  • user.role_changed
  • user.deleted
  • user.suspended_changed
  • user.tags_changed
  • user.time_zone_changed

Agent availability

  • agent.state_changed
  • agent.work_item_added
  • agent.work_item_updated
  • agent.work_item_removed
  • agent.max_capacity_changed
  • agent.unified_state_changed
  • agent.channel_created
  • agent.channel_deleted
  • agent.groups_updated

Routing

  • omnichannel_config.omnichannel_routing_feature_changed

Tickets

  • ticket.agent_assignment_changed
  • ticket.attachment_linked_to_comment
  • ticket.attachment_redacted_from_comment
  • ticket.brand_changed
  • ticket.comment_added
  • ticket.comment_made_private
  • ticket.comment_redacted
  • ticket.custom_field_changed
  • ticket.custom_status_changed
  • ticket.description_changed
  • ticket.external_id_changed
  • ticket.email_ccs_changed
  • ticket.followers_changed
  • ticket.form_changed
  • ticket.group_assignment_changed
  • ticket.organization_changed
  • ticket.priority_changed
  • ticket.problem_link_changed
  • ticket.requester_changed
  • ticket.status_changed
  • ticket.subject_changed
  • ticket.submitter_changed
  • ticket.tags_changed
  • ticket.task_due_at_changed
  • ticket.created
  • ticket.marked_as_spam
  • ticket.merged
  • ticket.permanently_deleted
  • ticket.soft_deleted
  • ticket.type_changed
  • ticket.sla_policy_changed
  • ticket.schedule_changed
  • ticket.ola_policy_changed
  • ticket.undeleted
  • ticket.csat_requested
  • ticket.csat_received
  • ticket.next_sla_breach_changed

Messaging tickets

  • messaging_ticket.message_added

Chat tickets

  • chat_ticket.member_joined
  • chat_ticket.listening_agents_changed

Access logs

  • access_log.created

Live messaging metrics

  • messaging_live_metrics.active_assigned_all_reported
  • messaging_live_metrics.active_assigned_group_reported
  • messaging_live_metrics.active_assigned_via_type_reported
  • messaging_live_metrics.active_in_queue_all_reported
  • messaging_live_metrics.active_in_queue_group_reported
  • messaging_live_metrics.active_in_queue_via_type_reported
  • messaging_live_metrics.inactive_assigned_all_reported
  • messaging_live_metrics.inactive_assigned_group_reported
  • messaging_live_metrics.inactive_assigned_via_type_reported
  • messaging_live_metrics.inactive_in_queue_all_reported
  • messaging_live_metrics.inactive_in_queue_group_reported
  • messaging_live_metrics.inactive_in_queue_via_type_reported
  • messaging_live_metrics.average_time_in_queue_all_reported
  • messaging_live_metrics.average_time_in_queue_group_reported
  • messaging_live_metrics.average_time_in_queue_via_type_reported
  • messaging_live_metrics.longest_time_in_queue_all_reported
  • messaging_live_metrics.longest_time_in_queue_group_reported
  • messaging_live_metrics.longest_time_in_queue_via_type_reported
  • messaging_live_metrics.average_requester_wait_time_all_reported
  • messaging_live_metrics.average_requester_wait_time_group_reported
  • messaging_live_metrics.average_requester_wait_time_via_type_reported
  • messaging_live_metrics.longest_requester_wait_time_all_reported
  • messaging_live_metrics.longest_requester_wait_time_group_reported
  • messaging_live_metrics.longest_requester_wait_time_via_type_reported
  • messaging_live_metrics.average_handle_time_all_reported
  • messaging_live_metrics.average_handle_time_group_reported
  • messaging_live_metrics.average_handle_time_via_type_reported
  • messaging_live_metrics.longest_handle_time_all_reported
  • messaging_live_metrics.longest_handle_time_group_reported
  • messaging_live_metrics.longest_handle_time_via_type_reported
  • messaging_live_metrics.average_concurrency_all_reported
  • messaging_live_metrics.average_concurrency_group_reported
  • messaging_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.json and attach the returned upload token to a comment. Agents transfer files through pre-signed URLs with curl.

Last updated on