# List all macros

You can fetch a list of all macros (saved replies) in your workspace for use in automating responses.
The macros are returned in descending order by updated_at.
**Pagination**
This endpoint uses cursor-based pagination via the `starting_after` parameter. The cursor is a Base64-encoded JSON array containing `[updated_at, id]` of the last item from the previous page.
**Placeholder Transformation**
The API transforms Intercom placeholders to a more standard XML-like format:
- From: `{{user.name | fallback: 'there'}}`
- To: `<attribute key="user.name" default="there"/>`

Endpoint: GET /macros
Version: Preview
Security: bearerAuth

## Query parameters:

  - `per_page` (integer)
    The number of results per page

  - `starting_after` (string)
    Base64-encoded cursor containing [updated_at, id] for pagination

  - `updated_since` (integer)
    Unix timestamp to filter macros updated after this time

## Header parameters:

  - `Intercom-Version` (string)

## Response 200 fields (application/json):

  - `type` (string)
    Always list
    Enum: "list"

  - `data` (array)
    The list of macro objects

  - `data.type` (string)
    String representing the object's type. Always has the value `macro`.
    Enum: "macro"

  - `data.id` (string)
    The unique identifier for the macro.
    Example: 123

  - `data.name` (string)
    The name of the macro.
    Example: Order Status Update

  - `data.body` (string)
    The body of the macro in HTML format with placeholders transformed to XML-like format.
    Example: <p>Hi <attribute key="user.name" default="there"/>, your order is ready!</p>

  - `data.body_text` (string)
    The plain text version of the macro body with original Intercom placeholder format.
    Example: Hi {{user.name|fallback:"there"}}, your order is ready!

  - `data.created_at` (string)
    The time the macro was created in ISO 8601 format.
    Example: 2025-07-17T11:18:08.000Z

  - `data.updated_at` (string)
    The time the macro was last updated in ISO 8601 format.
    Example: 2025-07-17T15:30:24.000Z

  - `data.visible_to` (string)
    Who can view this macro.
    Enum: "everyone", "specific_teams"

  - `data.visible_to_team_ids` (array)
    The team IDs that can view this macro when visible_to is set to specific_teams.
    Example: ["456","789"]

  - `data.available_on` (array)
    Where the macro is available for use.
    Example: ["inbox","messenger"]

  - `pages` (object)
    Pagination information

  - `pages.type` (string)
    The type of pagination
    Enum: "pages"

  - `pages.per_page` (integer)
    Number of results per page
    Example: 50

  - `pages.next` (object)
    Cursor for the next page

  - `pages.next.starting_after` (string)
    Base64-encoded cursor containing [updated_at, id] for pagination
    Example: WzE3MTk0OTM3NTcuMCwgIjEyMyJd

## Response 400 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

## Response 401 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

## Response 403 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

