Zendesk automation API reference: A practical developer guide

Stevia Putri
Written by

Stevia Putri

Reviewed by

Stanley Nicholas

Last edited February 24, 2026

Expert Verified

Banner image for Zendesk automation API reference: A practical developer guide

The Zendesk automation API gives you programmatic control over time-based business rules that keep your support operation running smoothly. While triggers fire immediately when events occur, automations run on a schedule, checking conditions every hour and performing actions when those conditions are met.

If you are building custom integrations, migrating workflows between environments, or managing Zendesk at scale, understanding this API is essential. This guide covers everything you need to implement automations effectively, from authentication to real-world code examples.

For teams without development resources, there is another path. eesel AI connects directly to Zendesk and handles many of the same automation scenarios through a no-code interface. We will explore both approaches so you can choose what fits your team.

Zendesk support platform interface
Zendesk support platform interface

Understanding Zendesk automations

An automation is a time-based business rule that performs one or more actions when specific conditions are met. Unlike triggers, which respond instantly to events like ticket creation or status changes, automations evaluate conditions hourly.

Here is the key distinction:

  • Triggers react to events immediately. A trigger fires when a ticket is created, updated, or when a specific field changes.
  • Automations run on a schedule. They check conditions every hour and execute actions only when those conditions are true.

This timing makes automations perfect for scenarios where you need to wait before acting. Common use cases include:

  • SLA alerts: Notify managers when tickets remain unresolved after 24 hours
  • Ticket escalation: Bump priority or reassign tickets that have been open too long
  • Follow-up sequences: Send reminder emails to customers who haven't responded
  • Stale ticket cleanup: Close solved tickets after a period of inactivity
  • Agent workload balancing: Reassign tickets from overloaded agents

The automation lifecycle works like this: every hour, Zendesk evaluates all active automations against all tickets that meet the time-based criteria. If the conditions match, the actions execute. Importantly, automations will continue to fire as long as conditions remain true, so you need to design them carefully to avoid repeated actions.

Hourly automation check cycle for business rules execution
Hourly automation check cycle for business rules execution

Authentication and setup

Before you can create or manage automations via the API, you need to set up authentication. The Zendesk automation API uses token-based authentication with HTTP Basic Auth.

Generating an API token

  1. Sign in to your Zendesk as an administrator
  2. Go to Admin Center > Apps and integrations > APIs > Zendesk API
  3. Click the Settings tab
  4. Enable Token Access if it isn't already enabled
  5. Click the + button to add a new token
  6. Give your token a descriptive name like "Automation Management"
  7. Copy the token immediately (it won't be shown again)

For detailed guidance, see the Zendesk documentation on generating API tokens.

Authentication format

The Zendesk automation API uses Basic authentication. You need to Base64 encode your credentials in this format:

{email_address}/token:{api_token}

For example, if your email is admin@company.com and your token is abc123xyz, you encode:

admin@company.com/token:abc123xyz

Here is a curl command to test your authentication:

curl https://{subdomain}.zendesk.com/api/v2/automations \
  -v -u {email_address}/token:{api_token}

Replace {subdomain} with your Zendesk subdomain, {email_address} with your admin email, and {api_token} with the token you generated.

Base URL structure

All automation API endpoints use this base URL:

https://{subdomain}.zendesk.com/api/v2/automations

Rate limits

Zendesk applies rate limits to maintain system stability. Most endpoints allow 700 requests per minute, but this can vary based on your plan and endpoint. If you exceed the limit, you will receive a 429 Too Many Requests response. Implement exponential backoff in your code to handle this gracefully.

Core API endpoints

The automation API provides standard CRUD operations. Here are the endpoints you will use most often.

List automations

GET /api/v2/automations

This endpoint returns all automations for your account. You can filter by active status and control sorting.

Available parameters:

ParameterTypeDescription
activebooleanFilter to active (true) or inactive (false) automations
sort_bystringSort by "alphabetical", "created_at", "updated_at", "usage_1h", "usage_24h", or "usage_7d"
sort_orderstring"asc" or "desc"

Example curl:

curl https://{subdomain}.zendesk.com/api/v2/automations?active=true \
  -u {email_address}/token:{api_token}

Show automation

GET /api/v2/automations/{id}

Retrieve a single automation by its ID.

Example curl:

curl https://{subdomain}.zendesk.com/api/v2/automations/25 \
  -u {email_address}/token:{api_token}

Create automation

POST /api/v2/automations

Create a new automation. The request body must include a JSON object with the automation definition.

Important requirements for new automations:

  • Must have at least one time-based condition
  • Must include at least one condition checking status, type, group_id, assignee_id, or requester_id
  • Must have an action that nullifies at least one condition (prevents infinite loops)

Example curl:

curl -u {email_address}/token:{api_token} \
  https://{subdomain}.zendesk.com/api/v2/automations \
  -H "Content-Type: application/json" -X POST -d \
  '{
    "automation": {
      "title": "Escalate old tickets",
      "all": [
        { "field": "status", "operator": "is", "value": "open" },
        { "field": "hours_since_created", "operator": "greater_than", "value": "24" }
      ],
      "actions": [
        { "field": "priority", "value": "high" }
      ]
    }
  }'

Update automation

PUT /api/v2/automations/{id}

Modify an existing automation. Send the complete automation object with your changes.

Delete automation

DELETE /api/v2/automations/{id}

Remove an automation permanently.

Pagination

The API supports two pagination methods:

  • Cursor pagination (recommended): Use ?page[size]=50&page[after]=cursor for better performance with large datasets
  • Offset pagination: Use ?page=2&per_page=50 for simpler implementations

Automation object structure

An automation is represented as a JSON object with specific properties. Understanding this structure is key to building effective automations.

Core properties

PropertyTypeRequiredDescription
titlestringYesHuman-readable name for the automation
actionsarrayYesActions to perform when conditions are met
conditionsobjectYesConditions that must be true for actions to execute
activebooleanNoWhether the automation is enabled (default: true)
positionintegerNoExecution order (lower numbers run first)

Read-only properties

PropertyTypeDescription
idintegerUnique identifier assigned by Zendesk
created_atstringISO 8601 timestamp of creation
updated_atstringISO 8601 timestamp of last modification
defaultbooleanWhether this is a system default automation

The conditions object

The conditions object contains two arrays that define when the automation runs:

{
  "conditions": {
    "all": [
      { "field": "status", "operator": "is", "value": "open" },
      { "field": "hours_since_created", "operator": "greater_than", "value": "24" }
    ],
    "any": [
      { "field": "priority", "operator": "is", "value": "high" }
    ]
  }
}
  • all: All conditions in this array must be true (AND logic)
  • any: At least one condition in this array must be true (OR logic)

The actions array

Actions define what happens when conditions are met. Each action has a field and value:

{
  "actions": [
    { "field": "priority", "value": "high" },
    { "field": "group_id", "value": "360000000000" }
  ]
}

Complete example

Here is a full automation object that escalates tickets open for more than 24 hours:

{
  "automation": {
    "title": "Escalate tickets open > 24 hours",
    "active": true,
    "conditions": {
      "all": [
        { "field": "status", "operator": "is", "value": "open" },
        { "field": "hours_since_created", "operator": "greater_than", "value": "24" },
        { "field": "priority", "operator": "less_than", "value": "high" }
      ],
      "any": []
    },
    "actions": [
      { "field": "priority", "value": "high" },
      { "field": "current_tags", "value": "escalated" }
    ],
    "position": 1
  }
}

Available conditions and actions

Automations share many conditions and actions with triggers and macros, but they also have unique time-based capabilities. For a complete reference, see the Zendesk actions documentation.

Common condition fields

These fields work across automations, triggers, and macros:

FieldDescriptionExample operators
statusTicket statusis, is_not, less_than
priorityTicket priorityis, less_than, greater_than
typeTicket typeis, is_not
assignee_idAssigned agentis, is_not
group_idAssigned groupis, is_not
requester_idTicket requesteris, is_not
current_tagsTags on ticketincludes, not_includes
viaChannel ticket came fromis, is_not

Time-based conditions (automation-specific)

These conditions are unique to automations and enable time-based workflows:

FieldDescription
hours_since_createdHours since ticket was created
hours_since_updatedHours since last update
hours_since_assignedHours since ticket was assigned
hours_since_requester_updatedHours since requester last updated
hours_since_agent_updatedHours since agent last updated
hours_since_due_dateHours until or since due date

Condition operators

OperatorDescription
isExact match
is_notDoes not match
less_thanNumerically or alphabetically less
greater_thanNumerically or alphabetically greater
includesContains value (for tags, lists)
not_includesDoes not contain value

Shared actions

These actions work in automations, triggers, and macros:

FieldDescriptionExample values
statusChange ticket status"open", "pending", "solved", "closed"
prioritySet priority"low", "normal", "high", "urgent"
typeSet ticket type"question", "incident", "problem", "task"
assignee_idAssign to agentAgent ID or "current_user"
group_idAssign to groupGroup ID
set_tagsReplace all tags"tag1 tag2 tag3"
current_tagsAdd tags"new_tag"
remove_tagsRemove tags"old_tag"

Automation-specific actions

FieldDescription
notification_userSend email to user
notification_groupSend email to group
notification_targetSend to external target
notification_webhookTrigger webhook
satisfaction_scoreSend satisfaction survey

Practical implementation examples

Let us walk through some real-world automation scenarios with complete code examples.

Example 1: Auto-escalate tickets open longer than 24 hours

This automation increases priority and adds an escalated tag for tickets that have been open too long.

Request:

curl -u {email_address}/token:{api_token} \
  https://{subdomain}.zendesk.com/api/v2/automations \
  -H "Content-Type: application/json" -X POST -d \
  '{
    "automation": {
      "title": "Escalate tickets open > 24 hours",
      "active": true,
      "conditions": {
        "all": [
          { "field": "status", "operator": "is", "value": "open" },
          { "field": "hours_since_created", "operator": "greater_than", "value": "24" },
          { "field": "priority", "operator": "less_than", "value": "high" }
        ]
      },
      "actions": [
        { "field": "priority", "value": "high" },
        { "field": "current_tags", "value": "escalated" }
      ]
    }
  }'

Response:

{
  "automation": {
    "id": 3600123456789,
    "title": "Escalate tickets open > 24 hours",
    "active": true,
    "conditions": {
      "all": [
        { "field": "status", "operator": "is", "value": "open" },
        { "field": "hours_since_created", "operator": "greater_than", "value": "24" },
        { "field": "priority", "operator": "less_than", "value": "high" }
      ]
    },
    "actions": [
      { "field": "priority", "value": "high" },
      { "field": "current_tags", "value": "escalated" }
    ],
    "position": 1,
    "created_at": "2026-02-24T10:00:00Z",
    "updated_at": "2026-02-24T10:00:00Z"
  }
}

Example 2: Send reminder email for pending tickets after 48 hours

This automation sends an email to the requester when their ticket has been pending for two days.

curl -u {email_address}/token:{api_token} \
  https://{subdomain}.zendesk.com/api/v2/automations \
  -H "Content-Type: application/json" -X POST -d \
  '{
    "automation": {
      "title": "Reminder: Pending ticket 48 hours",
      "active": true,
      "conditions": {
        "all": [
          { "field": "status", "operator": "is", "value": "pending" },
          { "field": "hours_since_updated", "operator": "greater_than", "value": "48" }
        ]
      },
      "actions": [
        {
          "field": "notification_user",
          "value": ["requester_id", "We are still working on your request", "Your ticket has been pending for 48 hours. Please reply with any additional information."]
        }
      ]
    }
  }'

Example 3: Close solved tickets after 72 hours of inactivity

This automation helps keep your ticket queue clean by closing solved tickets automatically.

curl -u {email_address}/token:{api_token} \
  https://{subdomain}.zendesk.com/api/v2/automations \
  -H "Content-Type: application/json" -X POST -d \
  '{
    "automation": {
      "title": "Auto-close solved tickets after 72 hours",
      "active": true,
      "conditions": {
        "all": [
          { "field": "status", "operator": "is", "value": "solved" },
          { "field": "hours_since_updated", "operator": "greater_than", "value": "72" }
        ]
      },
      "actions": [
        { "field": "status", "value": "closed" }
      ]
    }
  }'

Example 4: Tag VIP tickets for priority routing

This automation tags tickets from VIP customers for special handling.

curl -u {email_address}/token:{api_token} \
  https://{subdomain}.zendesk.com/api/v2/automations \
  -H "Content-Type: application/json" -X POST -d \
  '{
    "automation": {
      "title": "Tag VIP customer tickets",
      "active": true,
      "conditions": {
        "all": [
          { "field": "current_tags", "operator": "includes", "value": "vip_customer" }
        ],
        "any": [
          { "field": "status", "operator": "is", "value": "new" },
          { "field": "status", "operator": "is", "value": "open" }
        ]
      },
      "actions": [
        { "field": "priority", "value": "high" },
        { "field": "current_tags", "value": "vip_priority" }
      ]
    }
  }'

Four common automation patterns for ticket escalation and queue maintenance
Four common automation patterns for ticket escalation and queue maintenance

Testing and debugging

Before deploying automations to production, you should test them thoroughly.

Using the Zendesk API console

Zendesk provides an API console in the developer documentation where you can test requests without writing code. This is useful for verifying your JSON structure and authentication.

Testing with Postman

Zendesk maintains an official Postman collection that includes automation endpoints. Import this collection to test endpoints with a user-friendly interface. You can also explore the complete Zendesk API reference documentation for detailed information about all available endpoints.

Common error responses

HTTP StatusMeaningCommon Causes
200 OKSuccessRequest completed successfully
201 CreatedCreatedAutomation was created successfully
400 Bad RequestInvalid requestMalformed JSON, missing required fields
401 UnauthorizedAuthentication failedInvalid credentials or token
403 ForbiddenPermission deniedUser lacks admin/agent rights
404 Not FoundResource not foundAutomation ID doesn't exist
422 UnprocessableValidation failedInvalid conditions or actions
429 Too Many RequestsRate limitedToo many requests, retry with backoff

Verifying automation execution

To check if your automation is running correctly:

  1. View ticket events to see automation actions in the activity log
  2. Use the usage_24h sideload when listing automations to see execution counts
  3. Check the automation's updated_at timestamp to confirm it is active

Testing conditions before going live

Create a test automation with a unique tag that you can easily identify. Apply it to a test ticket and monitor the results before rolling out to production.

Rate limits and best practices

Following best practices will help you build reliable, maintainable automations.

Rate limit management

Zendesk's default rate limit is 700 requests per minute for most endpoints. If you hit this limit:

  1. Implement exponential backoff in your code
  2. Use cursor pagination for listing large numbers of automations
  3. Cache results when appropriate
  4. Batch operations when possible

Automation position and execution order

Automations run in position order, from lowest to highest. Place time-sensitive automations earlier in the sequence to ensure they execute promptly.

Avoiding automation loops

The most common automation mistake is creating infinite loops. Always include an action that changes a condition:

  • If checking for status: open, change the status in your actions
  • If checking for priority: low, change the priority
  • Add a unique tag and check for its absence

When to use the API vs native builder

Use the API when you need to:

  • Manage automations across multiple Zendesk instances
  • Version control your automation configurations
  • Create automations programmatically based on external data
  • Integrate with infrastructure-as-code tools like Terraform

Use Zendesk's native automation builder when:

  • You only manage one Zendesk instance
  • Your automations rarely change
  • You prefer a visual interface

Alternative: No-code automation with eesel AI

Building and maintaining API-based automations requires development resources, testing infrastructure, and ongoing maintenance. For many teams, this overhead isn't practical.

eesel AI automation workflow with helpdesk integration
eesel AI automation workflow with helpdesk integration

eesel AI offers an alternative approach. Instead of writing code, you connect eesel AI to your Zendesk instance and configure automations through natural language instructions.

Here is how the approaches compare:

AspectZendesk APIeesel AI
Setup timeHours to daysMinutes
Technical skill requiredDeveloperNone
MaintenanceCode updates, testingAutomatic updates
FlexibilityFull API controlPre-built actions
TestingManual, requires stagingBuilt-in simulation

With eesel AI, you can achieve similar outcomes to API-based automations:

  • Auto-escalation: Route urgent tickets based on content and sentiment
  • Follow-ups: Send contextual reminders without manual configuration
  • Ticket hygiene: Auto-tag, merge duplicates, and close stale tickets
  • Smart routing: Assign tickets based on expertise and workload

The key difference is that eesel AI learns from your existing tickets and knowledge base, so it understands your business context without explicit programming. You define behaviors in plain English rather than JSON.

If your team needs automation but lacks development resources, explore how eesel AI integrates with Zendesk. The setup takes minutes rather than days, and you can test everything before going live. Learn more about AI-powered support in our guide to AI and the ITIL framework.

eesel AI simulation dashboard showing predicted automation rates for Zendesk
eesel AI simulation dashboard showing predicted automation rates for Zendesk

Getting started with the Zendesk automation API

You now have the foundation to build automations through the Zendesk API. Let us recap the key concepts:

  • Automations are time-based rules that run hourly
  • They require at least one time-based condition and one nullifying action
  • Authentication uses API tokens with Basic auth
  • The API provides standard CRUD operations for managing automations
  • Always test thoroughly before deploying to production

Your next steps:

  1. Generate an API token in your Zendesk Admin Center
  2. Test authentication with a simple list request
  3. Create a test automation in a sandbox environment
  4. Iterate on your conditions and actions
  5. Deploy to production with monitoring in place

For teams looking to automate without the development overhead, eesel AI provides a no-code alternative that connects directly to Zendesk and handles many of the same scenarios. You can see how it works or check pricing to compare options. For more on Zendesk integrations, read our guide on how to connect Zendesk to Slack using third-party AI apps.

Frequently Asked Questions

The Zendesk automation API manages time-based rules that run hourly, while the triggers API handles event-based rules that fire immediately when ticket events occur. Automations are ideal for SLA management and time-sensitive workflows, while triggers handle real-time responses.
The automation API is available on all Zendesk plans that include automations as a feature. Most paid plans include automation capabilities. Check your specific plan details in the Zendesk Admin Center to confirm API access.
Include an action that nullifies one of your conditions. For example, if your condition checks for `status: open`, include an action that changes the status to something else. This ensures the automation only runs once per ticket.
Yes, use the `notification_user` action with the `requester_id` recipient. This sends an email to the ticket requester. You can also use `notification_group` to email an entire group of agents.
Most endpoints support 700 requests per minute, but limits can vary by plan and endpoint. If you exceed the limit, you will receive a 429 response. Implement exponential backoff in your code to handle rate limiting gracefully.
Create test automations with unique tags that you can easily identify. Apply them to test tickets and monitor the ticket events to verify actions execute correctly. You can also use the `usage_24h` sideload to check execution counts.

Share this post

Stevia undefined

Article by

Stevia Putri

Stevia Putri is a marketing generalist at eesel AI, where she helps turn powerful AI tools into stories that resonate. She’s driven by curiosity, clarity, and the human side of technology.