Everything an AI agent can do with the Zendesk API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints39
API versionv2
Last updated23 June 2026
Orientation

How the Zendesk API works.

The Zendesk API is how an app or AI agent works with a Zendesk Support account: creating and updating tickets, replying to a customer or adding an internal note, looking up users and organizations, applying a macro, and searching across records. Access is granted through an API token or an OAuth access token, and an OAuth token carries scopes in a resource:access form, like tickets:read or users:write, that set which resources a call can read or write. A state change can fire a webhook event to a registered endpoint.

39Endpoints
8Capability groups
18Read
21Write
12Permissions
Authentication
Zendesk authenticates a call with an API token or an OAuth access token. An API token is sent through HTTP Basic auth, with the username set to {email_address}/token and the password set to the token, and it carries the full permissions of the agent it belongs to. An OAuth access token is sent as a Bearer token and carries scopes for least-privilege access. Email-and-password basic auth was removed for the API on 12 January 2026.
Permissions
OAuth scopes follow a resource:access form. The global scopes are read, write, and impersonate; resource-specific scopes name a resource and an access level, like tickets:read, tickets:write, users:read, users:write, organizations:read, organizations:write, macros:read, and satisfaction_ratings:read. Omitting the resource grants access to all resources, and omitting the access grants both read and write. An API token, by contrast, is not scoped and inherits its agent's full permissions.
Versioning
The Support REST API is served under one stable version, v2, in the path /api/v2. It does not use dated versions or a version header. Changes ship through the developer changelog, and breaking changes, like the removal of password auth or the move to cursor pagination, are announced ahead of time with deprecation dates.
Data model
Zendesk is resource-oriented REST over HTTPS at https://{subdomain}.zendesk.com/api/v2, returning JSON. The core resource is the ticket, which carries comments (public replies and private notes added through a ticket update); tickets relate to users (agents and end users), organizations that group users, and groups that agents are assigned to. A unified search spans tickets, users, and organizations, and a state change can fire a webhook event.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Zendesk determines what it can reach. There is a route for making calls, governed by an API token or an OAuth access token, and a route for receiving events through webhooks. An OAuth token carries scopes that decide which resources a call can read or write.

Ways to connect

REST API

The Support REST API answers under https://{subdomain}.zendesk.com/api/v2. It takes and returns JSON, requires an Accept: application/json header on every request and a Content-Type: application/json header on writes, and pages through lists with a cursor. A call authenticates with an API token or an OAuth access token.

Best forConnecting an app or AI agent to Zendesk.
Governed byThe token, and for OAuth the scopes it carries.
Docs ↗

Webhooks

Zendesk POSTs a JSON payload to a registered URL when a subscribed event fires, like a ticket being created or a comment added. A webhook subscribes to one or more event types, or is driven by a trigger or automation through the conditional ticket events it fires. Webhooks are managed through /api/v2/webhooks.

Best forReceiving Zendesk events at an app or AI agent.
Governed byThe signing secret on the webhook and the events it subscribes to.
Docs ↗
Authentication

API token

An API token is an account-generated password used with an agent's email address. It is sent through HTTP Basic auth, with the username set to {email_address}/token and the password set to the token itself. An API token carries the full permissions of the agent it belongs to, with no per-resource scoping, so it is best kept to trusted server-side use.

TokenBasic auth ({email}/token:{api_token})
Best forQuick server-side access with an agent's full permissions.
Docs ↗

OAuth access token

An OAuth access token is sent as a Bearer token and can be up to 184 characters long. It carries scopes that set what it can reach, either the global read, write, or impersonate scopes, or resource-specific scopes in a resource:access form like tickets:read or users:write. This is the route that allows least-privilege access. As of February 2026 Zendesk enforces default token expiration and the refresh-token flow for external OAuth clients.

TokenBearer OAuth access token
Best forLeast-privilege access scoped to specific resources.
Docs ↗

Basic auth with password

Email-and-password basic auth was the original method. Zendesk removed password access for the API on 12 January 2026 for all accounts, so an integration must use an API token or OAuth instead.

TokenBasic auth (email:password)
Best forRemoved; migrate to an API token or OAuth.
Docs ↗
Capability map

What an AI agent can do in Zendesk.

The Zendesk Support API is split into areas an agent can act on, like tickets, ticket comments, users, organizations, groups, macros, and search. Each area has its own methods and its own scope, and writes in some areas change support records or delete people's accounts.

Tickets

8 endpoints

List, read, create, update, and delete tickets, create or update many at once, and count them. A ticket update is also how a public reply or internal note is added.

A write here changes real ticket data and can email the requester.
View endpoints

Ticket comments

3 endpoints

List the comments on a ticket, make a comment private, and redact words or attachments from a comment. Comments are created through the Tickets API, not here.

A redaction here permanently removes content from a ticket.
View endpoints

Users

8 endpoints

List, read, search, create, update, merge, and delete users (agents and end users), and read the currently authenticated user.

A write here changes or deletes real people's accounts.
View endpoints

Organizations

5 endpoints

List, read, create, update, and delete the organizations that group end users together.

A write here changes or deletes real organization data.
View endpoints

Groups

5 endpoints

List, read, create, update, and delete the agent groups that tickets are assigned to.

A write here changes how tickets route to agents.
View endpoints

Macros

5 endpoints

List, read, create, update, and delete macros, the saved sets of actions an agent applies to a ticket.

A write here changes shared workflow shortcuts for all agents.
View endpoints

Search

3 endpoints

Run the unified search across tickets, users, and organizations, count matches, and export large result sets.

A read here can reach across every record the token can see.
View endpoints

Satisfaction ratings

2 endpoints

List and read CSAT satisfaction ratings, and create a rating on a solved ticket.

A write here records a customer satisfaction rating on a ticket.
View endpoints
Endpoint reference

Every Zendesk API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Tickets

List, read, create, update, and delete tickets, create or update many at once, and count them. A ticket update is also how a public reply or internal note is added.8

Read-only. The global read scope also covers this.

Acts onticket
Permission (capability)tickets:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit50 requests/minute when paging beyond page 500

Read-only.

Acts onticket
Permission (capability)tickets:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A core write. Creating a ticket can notify the requester by email.

Acts onticket
Permission (capability)tickets:write
VersionAvailable since the API’s base version
Webhook eventticket.created
Rate limitStandard limits apply

Comments are added through this endpoint. Limited to 30 updates per 10 minutes per user per ticket, and updates use optimistic locking that returns 409 on a conflict.

Acts onticket
Permission (capability)tickets:write
VersionAvailable since the API’s base version
Webhook eventticket.status_changed
Rate limit30 updates / 10 minutes per user per ticket; 100 requests/minute per account

Soft-deletes the ticket; a separate step permanently removes it.

Acts onticket
Permission (capability)tickets:write
VersionAvailable since the API’s base version
Webhook eventticket.soft_deleted
Rate limitStandard limits apply

Returns a job status to poll; processes asynchronously.

Acts onticket
Permission (capability)tickets:write
VersionAvailable since the API’s base version
Webhook eventticket.created
Rate limitStandard limits apply

Returns a job status to poll; processes asynchronously.

Acts onticket
Permission (capability)tickets:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; the count is approximate and cached.

Acts onticket
Permission (capability)tickets:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Ticket comments

List the comments on a ticket, make a comment private, and redact words or attachments from a comment. Comments are created through the Tickets API, not here.3

Read-only; returns both public replies and private internal notes.

Acts onticket_comment
Permission (capability)tickets:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Hides the comment from the requester; it cannot be made public again.

Acts onticket_comment
Permission (capability)tickets:write
VersionAvailable since the API’s base version
Webhook eventticket.comment_made_private
Rate limitStandard limits apply

The redaction is irreversible; the original content cannot be recovered.

Acts onticket_comment
Permission (capability)tickets:write
VersionAvailable since the API’s base version
Webhook eventticket.comment_redacted
Rate limitStandard limits apply

Users

List, read, search, create, update, merge, and delete users (agents and end users), and read the currently authenticated user.8

Read-only; returns email addresses and other profile fields.

Acts onuser
Permission (capability)users:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onuser
Permission (capability)users:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; confirms which identity a token resolves to.

Acts onuser
Permission (capability)users:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; reaches across every user the token can see.

Acts onuser
Permission (capability)users:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A core write; creating an agent can consume an agent seat.

Acts onuser
Permission (capability)users:write
VersionAvailable since the API’s base version
Webhook eventuser.created
Rate limitStandard limits apply

Can change a user's role, which alters their access. Limited to 5 requests/minute per user record.

Acts onuser
Permission (capability)users:write
VersionAvailable since the API’s base version
Webhook eventuser.role_changed
Rate limit5 requests/minute per user

The merged-from user is removed; the action cannot be undone.

Acts onuser
Permission (capability)users:write
VersionAvailable since the API’s base version
Webhook eventuser.merged
Rate limitStandard limits apply

Removes the account; an agent's tickets are reassigned or unassigned.

Acts onuser
Permission (capability)users:write
VersionAvailable since the API’s base version
Webhook eventuser.deleted
Rate limitStandard limits apply

Organizations

List, read, create, update, and delete the organizations that group end users together.5

Read-only.

Acts onorganization
Permission (capability)organizations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onorganization
Permission (capability)organizations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A core write; the name field is required.

Acts onorganization
Permission (capability)organizations:write
VersionAvailable since the API’s base version
Webhook eventorganization.created
Rate limitStandard limits apply

Limited to 5 requests/minute per organization record.

Acts onorganization
Permission (capability)organizations:write
VersionAvailable since the API’s base version
Webhook eventorganization.name_changed
Rate limit5 requests/minute per organization

Removes the organization; its users are detached from it.

Acts onorganization
Permission (capability)organizations:write
VersionAvailable since the API’s base version
Webhook eventorganization.deleted
Rate limitStandard limits apply

Groups

List, read, create, update, and delete the agent groups that tickets are assigned to.5

Read-only; covered by the global read scope.

Acts ongroup
Permission (capability)read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts ongroup
Permission (capability)read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Allowed for admins; covered by the global write scope.

Acts ongroup
Permission (capability)write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Restricted to admins; changes how tickets route.

Acts ongroup
Permission (capability)write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Tickets assigned to the group must be reassigned first.

Acts ongroup
Permission (capability)write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Macros

List, read, create, update, and delete macros, the saved sets of actions an agent applies to a ticket.5

Read-only.

Acts onmacro
Permission (capability)macros:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onmacro
Permission (capability)macros:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A shared macro is available to other agents.

Acts onmacro
Permission (capability)macros:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Changes a shared workflow shortcut for every agent who uses it.

Acts onmacro
Permission (capability)macros:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Removes the macro for all agents.

Acts onmacro
Permission (capability)macros:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
Run the unified search across tickets, users, and organizations, count matches, and export large result sets.3

Returns at most 1,000 results, 100 per page. Reaches across every record the token can see.

Acts onsearch_result
Permission (capability)read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only; returns a count rather than the records.

Acts onsearch_result
Permission (capability)read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

For queries beyond 1,000 results; one object type per query. Limited to 100 requests/minute.

Acts onsearch_result
Permission (capability)read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit100 requests/minute

Satisfaction ratings

List and read CSAT satisfaction ratings, and create a rating on a solved ticket.2

Read-only.

Acts onsatisfaction_rating
Permission (capability)satisfaction_ratings:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Only for a ticket that is solved, or was solved and then reopened. These are legacy CSAT endpoints; survey responses are the current path.

Acts onsatisfaction_rating
Permission (capability)satisfaction_ratings:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

Zendesk can notify an app when something happens in an account, like a ticket being created or a comment added. A webhook subscribes to one or more event types and Zendesk posts a JSON payload to its URL, so an integration learns about activity without polling. A webhook can also be driven by a trigger or automation through the conditional ticket events it fires.

EventWhat it signalsTriggered by
zen:event-type:ticket.createdFires when a ticket is created./api/v2/tickets
/api/v2/tickets/create_many
zen:event-type:ticket.status_changedFires when a ticket's status changes, such as moving to pending, solved, or closed./api/v2/tickets/{ticket_id}
zen:event-type:ticket.comment_addedFires when a comment, a public reply or a private internal note, is added to a ticket./api/v2/tickets/{ticket_id}
zen:event-type:ticket.comment_made_privateFires when a public ticket comment is converted to a private internal note./api/v2/tickets/{ticket_id}/comments/{ticket_comment_id}/make_private
zen:event-type:ticket.comment_redactedFires when words, strings, or attachments are permanently redacted from a ticket comment./api/v2/comment_redactions/{ticket_comment_id}
zen:event-type:ticket.soft_deletedFires when a ticket is soft-deleted (deleted but recoverable before permanent removal)./api/v2/tickets/{ticket_id}
zen:event-type:ticket.priority_changedFires when a ticket's priority changes, such as to urgent or high./api/v2/tickets/{ticket_id}
zen:event-type:ticket.agent_assignment_changedFires when a ticket's assigned agent changes./api/v2/tickets/{ticket_id}
zen:event-type:user.createdFires when a user (an agent or an end user) is created./api/v2/users
zen:event-type:user.role_changedFires when a user's role changes, which alters their access./api/v2/users/{user_id}
zen:event-type:user.mergedFires when one end user is merged into another./api/v2/users/{user_id}/merge
zen:event-type:user.deletedFires when a user is deleted./api/v2/users/{user_id}
zen:event-type:organization.createdFires when an organization is created./api/v2/organizations
zen:event-type:organization.name_changedFires when an organization's name changes./api/v2/organizations/{organization_id}
zen:event-type:organization.deletedFires when an organization is deleted./api/v2/organizations/{organization_id}
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Zendesk limits how fast an app can call by a request rate measured per minute, set by the account's plan, with tighter ceilings on some endpoints. Going over returns a 429 response with a Retry-After header.

Request rate

Zendesk meters Support and Help Center API requests by a per-minute rate set by the account's plan: 200 requests per minute on Team, 400 on Professional, 700 on Enterprise, and 2,500 on Enterprise Plus. The High Volume API add-on raises a qualifying plan to 2,500 per minute. Some endpoints carry their own tighter ceilings on top, like 30 ticket updates per 10 minutes per user per ticket, 5 requests per minute per user or organization record, 100 requests per minute on search export, and 50 requests per minute when listing tickets beyond page 500. Going over returns HTTP 429 with a Retry-After header giving the seconds to wait, and the x-rate-limit header reports the account's limit and the requests remaining in the current minute.

Pagination

List endpoints page with a cursor: the response carries a meta object with has_more and an after_cursor, passed back as page[after] to fetch the next page, with page[size] up to 100. Cursor-based pagination is now supported on all paginating endpoints, and the older offset-based pagination through the page parameter is being deprecated. The unified search returns at most 1,000 results across pages; the search export endpoint uses a cursor for larger sets.

Request size

A list endpoint returns at most 100 records per page. The unified search returns at most 1,000 results total per query; larger result sets use the search export endpoint. Create-many and update-many batch endpoints accept up to 100 records per request and run as background jobs.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400Bad RequestThe request was malformed, such as invalid JSON or a missing required header.Read the error and description fields in the body, correct the request, and resend.
401UnauthorizedAuthentication failed or was missing, returned with a 'Couldn't authenticate' message. The token or API-token credentials are invalid or expired.Send valid API-token or OAuth credentials in the Authorization header, and confirm the token has not expired.
403ForbiddenThe credentials are valid but the user, account, or token scope lacks permission for the request.Use an agent or admin with the needed role, or grant the OAuth token the matching scope.
404Not FoundThe requested resource does not exist or is not visible to this account.Verify the ID and the path, and confirm the resource lives in this account.
409ConflictThe request conflicts with the current state, such as two ticket updates colliding under optimistic locking.Refetch the current ticket state, reapply the change, and retry.
422Unprocessable EntityThe request was well-formed but its content is not processable, for example a validation failure where a required field is missing or invalid (RecordInvalid).Read the details in the body, correct the named fields, and resend.
429Too Many RequestsA rate limit was exceeded, either the account's per-minute limit or a tighter per-endpoint limit.Wait the number of seconds in the Retry-After header before retrying, and smooth the request rate.
500Internal Server ErrorAn error on Zendesk's side, which can also appear as 502, 503, or 504. A 503 may carry a Retry-After header during maintenance.Retry with backoff, honoring any Retry-After header, and contact Zendesk support if it persists.
Versioning & freshness

Version history.

The Zendesk Support REST API is served under a single stable version, v2, in the path /api/v2. It does not use dated versions; changes ship through the developer changelog, and breaking changes are announced ahead of time with deprecation dates.

Version history

What changed, and when

Latest versionv2
v2Current version
Stable Support REST API (v2)

The Zendesk Support REST API is served under one stable version, v2, in the path /api/v2. It does not use dated versions or a version header. New capabilities and breaking changes are announced through the developer changelog with deprecation dates, rather than minting a new version string. The entries below are notable dated changes from that changelog.

What changed
  • Cursor-based pagination brought to all paginating endpoints; offset-based pagination is being deprecated.
  • OAuth access tokens can now be up to 184 characters.
2026-05-19Requires migration
AI Agents base URL deprecation

The legacy *.ultimate.ai API base URL for AI Agents was deprecated, with integrations directed to the {subdomain}.zendesk.com/ai-agents/api endpoint instead.

What changed
  • Legacy *.ultimate.ai AI Agents base URL deprecated in favor of {subdomain}.zendesk.com/ai-agents/api.
2026-01-16Requires migration
OAuth token expiration enforcement

Zendesk announced enforcement of default token expiration and the refresh-token flow for external OAuth applications, beginning 2 February 2026 and rolling out to existing clients over time.

What changed
  • Default OAuth token expiration (TTL) enforced from 2 February 2026.
  • Refresh-token flow required for external OAuth applications.
2025-05-15Requires migration
Ticket update optimistic locking

All ticket updates were placed behind a concurrency-control mechanism called optimistic locking, so two colliding updates to the same ticket return a 409 Conflict instead of silently overwriting.

What changed
  • Optimistic locking applied to all ticket updates; conflicts return HTTP 409.
2025-06-27Feature update
Rate limits on incremental user export

Incremental user export operations were rate-limited, with standard accounts allowed 20 requests per minute and High Volume add-on accounts 60 per minute.

What changed
  • Incremental user export limited to 20 requests/minute (60 with the High Volume add-on).

Track the changelog for deprecations and announced auth changes.

Zendesk API changelog ↗
Questions

Zendesk API, answered.

How do I authenticate a request to the Zendesk API?+
Two methods are supported. An API token is used with an agent's email through HTTP Basic auth, with the username {email_address}/token and the token as the password. An OAuth access token is sent as 'Authorization: Bearer {token}'. Email-and-password basic auth was removed for the API on 12 January 2026, so an integration must use an API token or OAuth.
What's the difference between an API token and OAuth?+
An API token is quick to set up but is not scoped: it carries the full permissions of the agent it belongs to, so a leaked token reaches everything that agent can. An OAuth access token carries scopes, in a resource:access form like tickets:read, so it can be limited to least privilege. OAuth is the route for granular, per-resource access.
How do OAuth scopes work?+
A scope is either a global level, read, write, or impersonate, or a resource-specific level in a resource:access form, like tickets:read or users:write. The available resources include tickets, users, organizations, macros, triggers, automations, webhooks, satisfaction_ratings, and others. Omitting the resource means all resources, and omitting the access means both read and write, so a single 'read' scope grants read across the whole API.
What are the rate limits?+
Support and Help Center requests are limited per minute by plan: 200 on Team, 400 on Professional, 700 on Enterprise, and 2,500 on Enterprise Plus, with the High Volume API add-on raising a qualifying plan to 2,500. Some endpoints add tighter limits, like 30 ticket updates per 10 minutes per user per ticket. Exceeding a limit returns HTTP 429 with a Retry-After header.
How do I add a reply or note to a ticket?+
Comments are not created through the Ticket Comments API. A public reply or a private internal note is added by updating the ticket through PUT /api/v2/tickets/{ticket_id} with a comment in the body, setting public to true for a reply or false for an internal note. The Ticket Comments API only lists, makes private, or redacts existing comments.
How do I receive events instead of polling?+
Webhooks deliver events without polling. A webhook is registered at a URL and subscribes to one or more event types, like zen:event-type:ticket.created or zen:event-type:ticket.comment_added, or it can be driven by a trigger or automation through the conditional ticket events it fires. Zendesk then POSTs a JSON payload when a subscribed event happens.
How does pagination work?+
List endpoints use cursor-based pagination: the response carries a meta object with has_more and an after_cursor, passed back as page[after] to fetch the next page, with page[size] up to 100. Cursor pagination is now supported on all paginating endpoints, and the older offset-based page parameter is being deprecated. The unified search caps at 1,000 results, so larger sets use the search export endpoint.
Related

More support API guides for agents

What is Bollard AI?

Control what every AI agent can do in Zendesk.

Bollard AI sits between a team's AI agents and Zendesk. Grant each agent exactly the access it needs, read or write, resource by resource, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Zendesk token.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Zendesk
Support Triage Agent
Read tickets ResourceOffReadFull use
Reply and set priority ActionOffReadFull use
Delete users ActionOffReadFull use
Per-agent access, set in Bollard AI, not in Zendesk