Macros

A macro consists of one or more actions that modify the values of a ticket's fields. Macros are applied to tickets manually by agents. For example, you can create macros for support requests that agents can answer with a single, standard response. For more information, see Using macros to update and add comments to tickets.

JSON Format

Macros are represented as JSON objects with the following properties:

Name Type Read-only Mandatory Description
actions array false true Each action describes what the macro will do. See Actions reference
active boolean false false Useful for determining if the macro should be displayed
created_at string false false The time the macro was created
description string false false The description of the macro
id integer false false The ID automatically assigned when a macro is created
position integer false false The position of the macro
restriction object false false Access to this macro. A null value allows unrestricted access for all users in the account
title string false true The title of the macro
updated_at string false false The time of the last update of the macro
url string false false A URL to access the macro's details
Example
{
  "actions": [
    {
      "field": "status",
      "value": "solved"
    },
    {
      "field": "priority",
      "value": "normal"
    },
    {
      "field": "type",
      "value": "incident"
    },
    {
      "field": "assignee_id",
      "value": "current_user"
    },
    {
      "field": "group_id",
      "value": "current_groups"
    },
    {
      "field": "comment_value",
      "value": "Thanks for your request. This issue you reported is a known issue. For more information, please visit our forums. "
    }
  ],
  "active": true,
  "created_at": "2019-09-16T02:17:38Z",
  "description": null,
  "id": 360111062754,
  "position": 9999,
  "restriction": null,
  "title": "Close and redirect to topics",
  "updated_at": "2019-09-16T02:17:38Z",
  "url": "https://subdomain.zendesk.com/api/v2/macros/360111062754.json"
}

List Macros

  • GET /api/v2/macros

Lists all shared and personal macros available to the current user.

Allowed For
  • Agents
Sideloads

The following sideloads are supported. The usage sideloads are only supported on the Support Professional or Suite Growth plan or above.

Name Will sideload
app_installation The app installation that requires each macro, if present
categories The macro categories
permissions The permissions for each macro
usage_1h The number of times each macro has been used in the past hour
usage_24h The number of times each macro has been used in the past day
usage_7d The number of times each macro has been used in the past week
usage_30d The number of times each macro has been used in the past thirty days
Parameters
Name Type In Required Description
access boolean Query false Only macros with given access. Possible values are "personal", "shared", or "account"
active boolean Query false Active macros if true. Inactive macros if false
category integer Query false Only macros within given category
group_id integer Query false Only macros belonging to given group
include string Query false Used for specifying sideloads
only_viewable boolean Query false Only macros that can be applied to tickets if true. All macros the current user can manage if false. Default value is false
sort_by string Query false Possible values are alphabetical, "created_at", "updated_at", "usage_1h", "usage_24h", "usage_7d", or "usage_30d". Defaults to alphabetical
sort_order string Query false One of "asc" or "desc". Defaults to "asc" for alphabetical and position sort, "desc" for all others
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "count": 2,
  "macros": [
    {
      "actions": [],
      "active": true,
      "description": "Sets the ticket status to `solved`",
      "id": 25,
      "position": 42,
      "restriction": {},
      "title": "Close and Save"
    },
    {
      "actions": [],
      "active": false,
      "description": "Adds a `priority` tag to the ticket",
      "id": 26,
      "restriction": {},
      "title": "Assign priority tag"
    }
  ],
  "next_page": null,
  "previous_page": null
}

Create Macro

  • POST /api/v2/macros
Allowed For
  • Agents
Request Parameters

The POST request takes one parameter, a macro object that lists the values to set when the macro is created.

Name Description
actions Required. An object describing what the macro will do. See Actions reference
active Allowed values are true or false. Determines if the macro is displayed or not
attachments An array of macro attachment IDs to be associated with the macro
description The description of the macro
restriction An object that describes who can access the macro. To give all agents access to the macro, omit this property
title Required. The title of the macro

The restriction object has the following properties.

Name Comment
type Allowed values are "Group" or "User"
id The numeric ID of the group or user
ids The numeric IDs of the groups
Example Body
{
  "macro": {
    "actions": [
      {
        "field": "status",
        "value": "solved"
      }
    ],
    "title": "Roger Wilco"
  }
}
Using curl
curl -u {email}:{password} https://{subdomain}.zendesk.com/api/v2/macros.json \
  -H "Content-Type: application/json" -X POST \
  -d '{"macro": {"title": "Roger Wilco", "actions": [{"field": "status", "value": "solved"}]}}'
Example Response
Status 200 OK

{
  "macro": {
    "actions": [
      {
        "field": "status",
        "value": "solved"
      }
    ],
    "id": 25,
    "restriction": {},
    "title": "Roger Wilco"
  }
}

List Supported Actions for Macros

  • GET /api/v2/macros/actions
Allowed For
  • Agents
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/actions.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "actions": [
    {
      "group": "ticket",
      "operators": [
        {
          "title": "Is",
          "value": "is"
        }
      ],
      "output_key": null,
      "target": null,
      "title": "Set subject",
      "title_for_field": "Set subject",
      "value": "subject",
      "values": {
        "list": [],
        "type": "text"
      }
    },
    {
      "group": "ticket",
      "operators": [
        {
          "title": "Is",
          "value": "is"
        }
      ],
      "output_key": null,
      "target": null,
      "title": "Status",
      "title_for_field": "Set subject",
      "value": "subject",
      "values": {
        "list": [
          {
            "enabled": true,
            "title": "Open",
            "value": "open"
          },
          {
            "enabled": true,
            "title": "Pending",
            "value": "pending"
          },
          {
            "enabled": true,
            "title": "Solved",
            "value": "solved"
          }
        ],
        "type": "list"
      }
    },
    {
      "field": "priority",
      "group": "ticket",
      "operators": [
        {
          "title": "Is",
          "value": "is"
        }
      ],
      "output_key": null,
      "title": "Priority",
      "title_for_field": "Priority",
      "value": "priority",
      "values": {
        "list": [
          {
            "enabled": false,
            "title": "Low",
            "value": "low"
          },
          {
            "enabled": true,
            "title": "Normal",
            "value": "normal"
          },
          {
            "enabled": true,
            "title": "High",
            "value": "high"
          },
          {
            "enabled": false,
            "title": "Urgent",
            "value": "urgent"
          }
        ],
        "type": "list"
      }
    }
  ]
}

List Active Macros

  • GET /api/v2/macros/active

Lists all active shared and personal macros available to the current user.

Allowed For
  • Agents
Sideloads

The following sideloads are supported. The usage sideloads are only supported on the Support Professional or Suite Growth plan or above.

Name Will sideload
app_installation The app installation that requires each macro, if present
categories The macro categories
permissions The permissions for each macro
usage_1h The number of times each macro has been used in the past hour
usage_24h The number of times each macro has been used in the past day
usage_7d The number of times each macro has been used in the past week
usage_30d The number of times each macro has been used in the past thirty days
Parameters
Name Type In Required Description
access boolean Query false Only macros with given access. Possible values are "personal", "shared", or "account"
category integer Query false Only macros within given category
group_id integer Query false Only macros belonging to given group
include string Query false Used for specifying sideloads
sort_by string Query false Possible values are alphabetical, "created_at", "updated_at", "usage_1h", "usage_24h", "usage_7d", or "usage_30d". Defaults to alphabetical
sort_order string Query false One of "asc" or "desc". Defaults to "asc" for alphabetical and position sort, "desc" for all others
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/active.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "count": 2,
  "macros": [
    {
      "actions": [],
      "active": true,
      "description": "Sets the ticket status to `solved`",
      "id": 25,
      "position": 42,
      "restriction": {},
      "title": "Close and Save"
    },
    {
      "actions": [],
      "active": false,
      "description": "Adds a `priority` tag to the ticket",
      "id": 26,
      "restriction": {},
      "title": "Assign priority tag"
    }
  ],
  "next_page": null,
  "previous_page": null
}

Create Unassociated Macro Attachment

  • POST /api/v2/macros/attachments

Allows an attachment to be uploaded that can be associated with a macro at a later time.

Note: To ensure an uploaded attachment is not lost, associate it with a macro as soon as possible. From time to time, old attachments that are not not associated with any macro are purged.

Allowed For
  • Agents
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/attachments.json \
  -v -u {email}:{password} -F "[email protected]" -F "filename=foobar.jpg"
Example Response
Status 201 Created

{
  "macro_attachment": {
    "content_type": "image/jpeg",
    "content_url": "https://company.zendesk.com/api/v2/macros/attachments/100/content",
    "created_at": "2016-08-15T16:04:06Z",
    "filename": "foobar.jpg",
    "id": 100,
    "size": 2532
  }
}

Show Macro Attachment

  • GET /api/v2/macros/attachments/{attachment_id}

Shows the properties of the specified macro attachment.

Allowed For
  • Agents
Parameters
Name Type In Required Description
attachment_id integer Path true The ID of the attachment
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/attachments/{id}.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "macro_attachment": {
    "content_type": "image/jpeg",
    "content_url": "https://company.zendesk.com/api/v2/macros/attachments/100/content",
    "created_at": "2016-08-15T16:04:06Z",
    "filename": "foobar.jpg",
    "id": 100,
    "size": 2532
  }
}

List Macro Categories

  • GET /api/v2/macros/categories

Lists all macro categories available to the current user.

Allowed For
  • Agents
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/categories.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "categories": [
    "FAQ",
    "Triage"
  ]
}

List Macro Action Definitions

  • GET /api/v2/macros/definitions

Returns the definitions of the actions a macro can perform. For example, one action can set the status of a ticket. The definition of the action includes a title ("Status"), a type ("list"), and possible values. For a list of support actions, see Actions reference.

Allowed For
  • Agents
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/definitions.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "definitions": {
    "actions": [
      {
        "group": "ticket",
        "nullable": false,
        "repeatable": false,
        "subject": "status",
        "title": "Status",
        "type": "list",
        "values": [
          {
            "enabled": true,
            "title": "Open",
            "value": "1"
          },
          {
            "enabled": true,
            "title": "Pending",
            "value": "2"
          },
          {
            "enabled": true,
            "title": "Solved",
            "value": "3"
          },
          {
            "enabled": true,
            "title": "Closed",
            "value": "4"
          }
        ]
      }
    ]
  }
}

Bulk Delete Macros

  • PUT /api/v2/macros/destroy_many?ids={ids}

Deletes the macros corresponding to the provided comma-separated list of IDs.

Allowed For
  • Agents
Parameters
Name Type In Required Description
ids array Query true The IDs of the macros to delete
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/destroy_many.json?ids=1,2,3 \
  -v -u {email}:{password} -X DELETE
Example Response
Status 204 No Content

Show Macro Replica

  • GET /api/v2/macros/new?macro_id={macro_id}?ticket_id={ticket_id}

Returns an unpersisted macro representation derived from a ticket or macro.

The endpoint takes one of the following query parameters: macro_id or ticket_id. If you include both, macro_id is used.

Allowed For
  • Agents
Parameters
Name Type In Required Description
macro_id integer Query true The ID of the macro to replicate
ticket_id integer Query true The ID of the ticket from which to build a macro replica
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/new.json?macro_id=123 \
  -u {email}:{password}
Example Response
Status 200 OK

{
  "macro": {
    "actions": [],
    "active": true,
    "description": "Sets the ticket status to `solved`",
    "id": 25,
    "position": 42,
    "restriction": {},
    "title": "Close and Save"
  }
}

Search Macros

  • GET /api/v2/macros/search?query={query}
Allowed For
  • Agents
Sideloads

The following sideloads are supported. The usage sideloads are only supported on the Support Professional or Suite Growth plan or above.

Name Will sideload
app_installation The app installation that requires each macro, if present
categories The macro categories
permissions The permissions for each macro
usage_1h The number of times each macro has been used in the past hour
usage_24h The number of times each macro has been used in the past day
usage_7d The number of times each macro has been used in the past week
usage_30d The number of times each macro has been used in the past thirty days
Parameters
Name Type In Required Description
access boolean Query false Only macros with given access. Possible values are "personal", "shared", or "account"
active boolean Query false Active macros if true. Inactive macros if false
category integer Query false Only macros within given category
group_id integer Query false Only macros belonging to given group
include string Query false Used for specifying sideloads
only_viewable boolean Query false Only macros that can be applied to tickets if true. All macros the current user can manage if false. Default value is false
query string Query true Query string used to find macros with matching titles
sort_by string Query false Possible values are alphabetical, "created_at", "updated_at", "usage_1h", "usage_24h", "usage_7d", or "usage_30d". Defaults to alphabetical
sort_order string Query false One of "asc" or "desc". Defaults to "asc" for alphabetical and position sort, "desc" for all others
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/search.json?query=close&active=true
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "count": 2,
  "macros": [
    {
      "actions": [],
      "active": true,
      "description": "Sets the ticket status to `solved`",
      "id": 25,
      "position": 42,
      "restriction": {},
      "title": "Close and Save"
    },
    {
      "actions": [],
      "active": false,
      "description": "Adds a `priority` tag to the ticket",
      "id": 26,
      "restriction": {},
      "title": "Assign priority tag"
    }
  ],
  "next_page": null,
  "previous_page": null
}

Update Many Macros

  • PUT /api/v2/macros/update_many

Updates the provided macros with the specified changes.

Allowed For
  • Agents
Request Parameters

The PUT request expects a macros object that lists the triggers to update.

Each macro may have the following properties

Name Type Mandatory Description
id integer yes The ID of the macro to update
position integer no The new position of the macro
active boolean no The active status of the macro (true or false)
Example Body
{
  "macros": [
    {
      "active": false,
      "id": 25
    },
    {
      "id": 23,
      "position": 5
    }
  ]
}
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/update_many.json \
  -v -u {email}:{password} -H "Content-Type: application/json" \
  -X PUT -d '{"macros": [{"id": 123, "position": 8}]}'
Example Response
Status 200 OK

{
  "count": 2,
  "macros": [
    {
      "actions": [],
      "active": true,
      "description": "Sets the ticket status to `solved`",
      "id": 25,
      "position": 42,
      "restriction": {},
      "title": "Close and Save"
    },
    {
      "actions": [],
      "active": false,
      "description": "Adds a `priority` tag to the ticket",
      "id": 26,
      "restriction": {},
      "title": "Assign priority tag"
    }
  ],
  "next_page": null,
  "previous_page": null
}

Show Macro

  • GET /api/v2/macros/{macro_id}
Allowed For
  • Agents
Parameters
Name Type In Required Description
macro_id integer Path true The ID of the macro
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/{macro_id}.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "macro": {
    "actions": [],
    "active": true,
    "description": "Sets the ticket status to `solved`",
    "id": 25,
    "position": 42,
    "restriction": {},
    "title": "Close and Save"
  }
}

Update Macro

  • PUT /api/v2/macros/{macro_id}
Allowed For
  • Agents
Note

Updating an action updates the containing array, clearing the other actions. Include all your actions when updating any action.

Parameters
Name Type In Required Description
macro_id integer Path true The ID of the macro
Example Body
{
  "macro": {
    "actions": [
      {
        "field": "status",
        "value": "solved"
      }
    ],
    "title": "Sets the ticket status to `solved`"
  }
}
Using curl
curl -v -u {email}:{password} https://{subdomain}.zendesk.com/api/v2/macros/{macro_id}.json \
  -H "Content-Type: application/json" -X PUT -d '{"macro": {"title": "Sets the ticket status to `solved`"}}'
Example Response
Status 200 OK

{
  "macro": {
    "actions": [
      {
        "field": "status",
        "value": "solved"
      }
    ],
    "active": true,
    "description": "Sets the ticket status to `solved`",
    "id": 25,
    "position": 42,
    "restriction": {},
    "title": "Close and Save"
  }
}

Delete Macro

  • DELETE /api/v2/macros/{macro_id}
Allowed For
  • Agents, with restrictions applying on certain actions
Parameters
Name Type In Required Description
macro_id integer Path true The ID of the macro
Using curl
curl -v -u {email}:{password} https://{subdomain}.zendesk.com/api/v2/macros/{macro_id}.json \
  -X DELETE
Example Response
Status 204 No Content

Show Changes to Ticket

  • GET /api/v2/macros/{macro_id}/apply

Returns the changes the macro would make to a ticket. It doesn't actually change a ticket. You can use the response data in a subsequent API call to the Tickets endpoint to update the ticket.

The response includes only the ticket fields that would be changed by the macro. To get the full ticket object after the macro is applied, see Show Ticket After Changes below.

Allowed For
  • Agents
Parameters
Name Type In Required Description
macro_id integer Path true The ID of the macro
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/{macro_id}/apply.json \
  -u {email}:{password}
Example Response
Status 200 OK

{
  "result": {
    "ticket": {
      "assignee_id": 235323,
      "comment": {
        "body": "Assigned to Agent Uno.",
        "public": false,
        "scoped_body": [
          [
            "channel:all",
            "Assigned to Agent Uno."
          ]
        ]
      },
      "fields": {
        "id": 27642,
        "value": "745"
      },
      "group_id": 98738
    }
  }
}

List Macro Attachments

  • GET /api/v2/macros/{macro_id}/attachments

Lists the attachments associated with a macro.

Allowed For
  • Agents
Parameters
Name Type In Required Description
macro_id integer Path true The ID of the macro
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/{macro_id}/attachments.json \
  -v -u {email}:{password}
Example Response
Status 200 OK

{
  "macro_attachments": [
    {
      "content_type": "image/jpeg",
      "content_url": "https://company.zendesk.com/api/v2/macros/attachments/100/content",
      "created_at": "2016-08-15T16:04:06Z",
      "filename": "foobar.jpg",
      "id": 100,
      "size": 2532
    },
    {
      "content_type": "image/jpeg",
      "content_url": "https://company.zendesk.com/api/v2/macros/attachments/342/content",
      "created_at": "2016-08-16T12:42:25Z",
      "filename": "bazbat.jpg",
      "id": 342,
      "size": 5028
    }
  ]
}

Create Macro Attachment

  • POST /api/v2/macros/{macro_id}/attachments

Allows an attachment to be uploaded and associated with a macro at the same time.

Note: A macro can be associated with up to five attachments.

Allowed For
  • Agents
Parameters
Name Type In Required Description
macro_id integer Path true The ID of the macro
Using curl
curl https://{subdomain}.zendesk.com/api/v2/macros/123/attachments.json \
  -v -u {email}:{password} -F "[email protected]" -F "filename=foobar.jpg"
Example Response
Status 201 Created

{
  "macro_attachment": {
    "content_type": "image/jpeg",
    "content_url": "https://company.zendesk.com/api/v2/macros/attachments/100/content",
    "created_at": "2016-08-15T16:04:06Z",
    "filename": "foobar.jpg",
    "id": 100,
    "size": 2532
  }
}

Show Ticket After Changes

  • GET /api/v2/tickets/{ticket_id}/macros/{macro_id}/apply

Returns the full ticket object as it would be after applying the macro to the ticket. It doesn't actually change the ticket. You can use the response data in a subsequent API call to the Tickets endpoint to update the ticket.

To get only the ticket fields that would be changed by the macro, see Show Changes to Ticket.

Allowed For
  • Agents
Parameters
Name Type In Required Description
macro_id integer Path true The ID of the macro
ticket_id integer Path true The ID of the ticket
Using curl
curl https://{subdomain}.zendesk.com/api/v2/tickets/{ticket_id}/macros/{id}/apply.json \
  -u {email}:{password}
Example Response
Status 200 OK

{
  "result": {
    "ticket": {
      "assignee_id": 235323,
      "comment": {
        "body": "Assigned to Agent Uno.",
        "public": false,
        "scoped_body": [
          [
            "channel:all",
            "Assigned to Agent Uno."
          ]
        ]
      },
      "fields": {
        "id": 27642,
        "value": "745"
      },
      "group_id": 98738
    }
  }
}