---
title: "Get an automation run"
method: GET
path: "/automations/runs/{id}"
tags: ["Automations"]
---

# Get an automation run

`GET /automations/runs/{id}`

## Request

- Base URL: `https://api.supersendtx.com`
- URL: `https://api.supersendtx.com/automations/runs/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Response `200`

Run detail

- AutomationRunResponse
  - `run` AutomationRun, required
    - `id` string, required
    - `automation_id` string, required
    - `trigger_event_id` string, nullable, required
    - `status` 'queued' | 'running' | 'waiting' | 'completed' | 'failed' | 'cancelled', required
    - `current_step` integer, required
    - `waiting_for_event` string, nullable, required
    - `wait_timeout_at` string, date-time, nullable, required
    - `context` object, required
    - `last_error` string, nullable, required
    - `cancel_requested_at` string, date-time, nullable, required
    - `started_at` string, date-time, nullable, required
    - `completed_at` string, date-time, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `automation` Automation
      - `id` string, required
      - `name` string, required
      - `status` 'draft' | 'active' | 'paused', required
      - `trigger` AutomationTrigger, required
        - `type` 'event', required
        - `event` string, required
        - `cancel_on_events` string[]: When any listed event fires for the same recipient, cancel queued/running/waiting runs for this automation.
        - `once_per_contact` boolean: `true` to enroll each person at most once, ever (matched on the event's `email` or `user_id`). A later matching event is skipped and reported in the `POST /events` response under `enrollment_skips` with `reason: once_per_contact`. Returned only when enabled. Retrying a run is not blocked by it.
        - `cooldown_days` integer: Skip enrollment when the same person already had a run on this automation within the last N days (`reason: cooldown` in `enrollment_skips`). Returned only when set. Retrying a run is not blocked by it.
      - `steps` AutomationStep[], required
        - `type` 'delay' | 'send_email' | 'send_sms' | 'condition' | 'wait_for_event', required
        - `email` AutomationStepEmail: The `email` object of a `send_email` step, sent through the same path as `POST /emails` (other `POST /emails` fields such as `reply_to`, `cc`, and `tags` pass through). Provide inline `subject` plus `html` and/or `text`, or a published `template` — not both. String values accept placeholders such as `{{event.email}}`, `{{contact.first_name}}`, and `{{unsubscribe_url}}`.
          - `from` string, required
          - `to` union, required
            - string
            - string[]
          - `subject` string
          - `html` string
          - `text` string
          - `template` SendTemplateRef: Reference a published template by UUID or alias. Mutually exclusive with html/text.
            - `id` string, required: Template UUID or alias
            - `variables` object: Values for `{{variable}}` placeholders (HTML-escaped in html body)
          - `category` 'transactional' | 'product' | 'newsletter': Inline steps default to `product`. `product` and `newsletter` sends honor that category's opt-outs, carry `List-Unsubscribe` headers, and replace `{{unsubscribe_url}}` in `html` and `text` with the managed unsubscribe link. The placeholder is replaced, never appended, so include it — create, update, and retrieve responses return a warning when a step has none. A recipient who opted out of the category is not mailed and the run ends as `completed`. Use `transactional` only for genuinely transactional mail such as receipts and one-time codes. Template-backed steps use the template's category unless this is set.
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `trigger_event` EventRecord
      - `id` string, required
      - `name` string, required
      - `user_id` string, nullable, required
      - `email` string, email, nullable, required
      - `data` object, required
      - `source` 'api' | 'dashboard' | 'on_site' | 'posthog' | 'mixpanel' | 'amplitude', required: Where the event came from: `api` (`POST /events` with an API key), `dashboard`, `on_site` (an on-site message on your website captured an email address), or `posthog`, `mixpanel`, `amplitude` (synced from a connected product-analytics account).
      - `created_at` string, date-time, required
    - `steps` AutomationRunStep[]: Present on run detail responses
      - `id` string, required
      - `step_index` integer, required
      - `step_type` 'delay' | 'send_email' | 'send_sms' | 'condition' | 'wait_for_event', required
      - `status` 'started' | 'waiting' | 'completed' | 'failed', required
      - `output` unknown, required
      - `error` string, nullable, required
      - `started_at` string, date-time, required
      - `completed_at` string, date-time, nullable, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required

## Other responses

- `401`: Unauthorized
- `404`: Not found

---

[API](https://skmtc.dev/ranla/apis/supersend-tx-api.md) · [All operations](https://skmtc.dev/ranla/apis/supersend-tx-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ranla/apis/supersend-tx-api/revisions/e3e782652f50?raw)
