---
title: "List a task schedule's run journal"
method: GET
path: "/triggers/{trigger_id}/runs"
tags: ["triggers"]
---

# List a task schedule's run journal

`GET /triggers/{trigger_id}/runs`

## Request

- Base URL: `https://api.cloud.wherobots.com`
- URL: `https://api.cloud.wherobots.com/triggers/{trigger_id}/runs`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

A trigger is a task schedule: it runs a task on a recurring fixed-interval or cron schedule (cron uses an IANA timezone), and each execution is a task run. The task is an organization-owned task created from an S3 Python file or JAR; platform tasks cannot be scheduled.

One entry per tick, gap, or manual root, with its latest attempt and up to 20 attempts. Filters and pagination apply to entries, not attempts. Archived triggers remain readable.

## Path parameters

- `trigger_id` string, required

## Query parameters

- `kind` TriggerRunEntryKind[], nullable: Match any of these entry kinds. Repeat for several kinds; omit for all.
- `state` TaskRunState[], nullable: Match the latest attempt's projected state. Repeat for several states.
- `needsRecovery` boolean: Keep entries whose latest attempt is FAILED, TIMED_OUT, SKIPPED, MISSED or REJECTED, or whose latest attempt is a rerun in PENDING, SUBMITTED, RUNNING or CANCELLING (recovery in progress). Combines with kind, state and batch time bounds using AND.
- `batchTimeFrom` string, date-time, nullable: Inclusive batch time bound; excludes manual entries.
- `batchTimeTo` string, date-time, nullable: Exclusive batch time bound; excludes manual entries.
- `limit` integer: Page size limit
- `offset` integer: Page offset

## Response `200`

Successful Response

- LimitOffsetPageTriggerRunEntry
  - `items` TriggerRunEntry[], required
    - `entryId` string, required: The original tick/gap row's or manual root's taskRunId, usable with getTaskRun. May be absent from attempts when attemptCount exceeds 20.
    - `kind` 'tick' | 'gap' | 'manual', required: Journal entry origin, independent of the latest attempt's run source.
    - `batchTime` string, date-time, nullable, required: Nominal tick or gap timestamp; null only for manual entries.
    - `windowStart` string, date-time, required: Inclusive start of [windowStart, windowEnd), from the first attempt.
    - `windowEnd` string, date-time, required: Exclusive end of [windowStart, windowEnd), from the first attempt.
    - `original` TaskRunSummary, required: e.g. { "taskRunId": "npqy9q19q4wlm3", "taskName": "predict_mosaic_geometries_recipe", "state": "PENDING", "region": "aws-us-west-2", "submittedAt": "2026-06-04T18:00:00Z" }
      - `taskRunId` string, required
      - `taskName` string, required: The task's current name, which may have changed since the run started.
      - `taskId` string, nullable
      - `taskTriggerId` string, nullable
      - `type` 'uniontask' | 'scripttask': How a task runs: as a Union workflow or as a script.
      - `runSource` 'manual' | 'schedule' | 'rerun': What started a run: a person, a schedule, or a rerun.
      - `batchTime` string, date-time, nullable
      - `rerunOfId` string, nullable: The task run this one reran, when runSource is rerun. Null otherwise.
      - `batchKind` 'tick' | 'gap': What a scheduled run's batchTime marks: a scheduled time, or a pause or schedule edit.
      - `windowStart` string, date-time, nullable
      - `windowEnd` string, date-time, nullable
      - `noComputeReason` union
        - 'cancelled' | 'overlap' | 'epoch_gap' | 'inputs_rejected' | 'missed': Why a run finished without running.
        - string
      - `failureClass` 'QUOTA_REJECTED' | 'CONFIG_REJECTED' | 'USER_CODE' | 'PLATFORM' | 'TIMEOUT': Why a run did not succeed.
      - `runAsId` string, nullable
      - `requestedById` string, nullable
      - `workload` TaskRunWorkload: The compute assigned to a run, once it has one. It can appear before the run starts.
        - `type` 'uniontask' | 'scripttask', required: How a task runs: as a Union workflow or as a script.
        - `jobRunId` string, nullable
        - `kubeAppId` string, nullable
        - `unionExecutionId` string, nullable
      - `state` 'PENDING' | 'SUBMITTED' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT' | 'CANCELLING' | 'CANCELLED' | 'UNKNOWN' | 'SKIPPED' | 'MISSED' | 'REJECTED', required
      - `region` string, required
      - `submittedAt` string, date-time, required: Submission time, before queueing and infrastructure startup.
      - `cancelRequestedAt` string, date-time, nullable
      - `startedAt` string, date-time, nullable: Workload execution start time, after queueing and infrastructure startup.
      - `endedAt` string, date-time, nullable
      - `durationSeconds` integer, nullable: How long the run executed, from its start to its end (or to now, while running). 0 if it never started. A cached run executes nothing, so this is the moment it took to return the stored result, not how long the result took to produce.
      - `errorMessage` string, nullable: Why a failed or timed-out run failed, when more is known than its failureClass: a short, user-safe reason the caller can act on (for example a configuration rejection such as an unavailable runtime), or, for a run that could not be started, a task run ID to quote to support. Null for cancelled runs and when nothing beyond failureClass is known. REJECTED runs explain their input problems on getTaskRun; their summaries in run lists and schedule history remain null.
    - `latest` TaskRunSummary, required: e.g. { "taskRunId": "npqy9q19q4wlm3", "taskName": "predict_mosaic_geometries_recipe", "state": "PENDING", "region": "aws-us-west-2", "submittedAt": "2026-06-04T18:00:00Z" }
      - `taskRunId` string, required
      - `taskName` string, required: The task's current name, which may have changed since the run started.
      - `taskId` string, nullable
      - `taskTriggerId` string, nullable
      - `type` 'uniontask' | 'scripttask': How a task runs: as a Union workflow or as a script.
      - `runSource` 'manual' | 'schedule' | 'rerun': What started a run: a person, a schedule, or a rerun.
      - `batchTime` string, date-time, nullable
      - `rerunOfId` string, nullable: The task run this one reran, when runSource is rerun. Null otherwise.
      - `batchKind` 'tick' | 'gap': What a scheduled run's batchTime marks: a scheduled time, or a pause or schedule edit.
      - `windowStart` string, date-time, nullable
      - `windowEnd` string, date-time, nullable
      - `noComputeReason` union
        - 'cancelled' | 'overlap' | 'epoch_gap' | 'inputs_rejected' | 'missed': Why a run finished without running.
        - string
      - `failureClass` 'QUOTA_REJECTED' | 'CONFIG_REJECTED' | 'USER_CODE' | 'PLATFORM' | 'TIMEOUT': Why a run did not succeed.
      - `runAsId` string, nullable
      - `requestedById` string, nullable
      - `workload` TaskRunWorkload: The compute assigned to a run, once it has one. It can appear before the run starts.
        - `type` 'uniontask' | 'scripttask', required: How a task runs: as a Union workflow or as a script.
        - `jobRunId` string, nullable
        - `kubeAppId` string, nullable
        - `unionExecutionId` string, nullable
      - `state` 'PENDING' | 'SUBMITTED' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT' | 'CANCELLING' | 'CANCELLED' | 'UNKNOWN' | 'SKIPPED' | 'MISSED' | 'REJECTED', required
      - `region` string, required
      - `submittedAt` string, date-time, required: Submission time, before queueing and infrastructure startup.
      - `cancelRequestedAt` string, date-time, nullable
      - `startedAt` string, date-time, nullable: Workload execution start time, after queueing and infrastructure startup.
      - `endedAt` string, date-time, nullable
      - `durationSeconds` integer, nullable: How long the run executed, from its start to its end (or to now, while running). 0 if it never started. A cached run executes nothing, so this is the moment it took to return the stored result, not how long the result took to produce.
      - `errorMessage` string, nullable: Why a failed or timed-out run failed, when more is known than its failureClass: a short, user-safe reason the caller can act on (for example a configuration rejection such as an unavailable runtime), or, for a run that could not be started, a task run ID to quote to support. Null for cancelled runs and when nothing beyond failureClass is known. REJECTED runs explain their input problems on getTaskRun; their summaries in run lists and schedule history remain null.
    - `attempts` TaskRunSummary[], required: Newest attempts first, including latest; capped at 20.
      - `taskRunId` string, required
      - `taskName` string, required: The task's current name, which may have changed since the run started.
      - `taskId` string, nullable
      - `taskTriggerId` string, nullable
      - `type` 'uniontask' | 'scripttask': How a task runs: as a Union workflow or as a script.
      - `runSource` 'manual' | 'schedule' | 'rerun': What started a run: a person, a schedule, or a rerun.
      - `batchTime` string, date-time, nullable
      - `rerunOfId` string, nullable: The task run this one reran, when runSource is rerun. Null otherwise.
      - `batchKind` 'tick' | 'gap': What a scheduled run's batchTime marks: a scheduled time, or a pause or schedule edit.
      - `windowStart` string, date-time, nullable
      - `windowEnd` string, date-time, nullable
      - `noComputeReason` union
        - 'cancelled' | 'overlap' | 'epoch_gap' | 'inputs_rejected' | 'missed': Why a run finished without running.
        - string
      - `failureClass` 'QUOTA_REJECTED' | 'CONFIG_REJECTED' | 'USER_CODE' | 'PLATFORM' | 'TIMEOUT': Why a run did not succeed.
      - `runAsId` string, nullable
      - `requestedById` string, nullable
      - `workload` TaskRunWorkload: The compute assigned to a run, once it has one. It can appear before the run starts.
        - `type` 'uniontask' | 'scripttask', required: How a task runs: as a Union workflow or as a script.
        - `jobRunId` string, nullable
        - `kubeAppId` string, nullable
        - `unionExecutionId` string, nullable
      - `state` 'PENDING' | 'SUBMITTED' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT' | 'CANCELLING' | 'CANCELLED' | 'UNKNOWN' | 'SKIPPED' | 'MISSED' | 'REJECTED', required
      - `region` string, required
      - `submittedAt` string, date-time, required: Submission time, before queueing and infrastructure startup.
      - `cancelRequestedAt` string, date-time, nullable
      - `startedAt` string, date-time, nullable: Workload execution start time, after queueing and infrastructure startup.
      - `endedAt` string, date-time, nullable
      - `durationSeconds` integer, nullable: How long the run executed, from its start to its end (or to now, while running). 0 if it never started. A cached run executes nothing, so this is the moment it took to return the stored result, not how long the result took to produce.
      - `errorMessage` string, nullable: Why a failed or timed-out run failed, when more is known than its failureClass: a short, user-safe reason the caller can act on (for example a configuration rejection such as an unavailable runtime), or, for a run that could not be started, a task run ID to quote to support. Null for cancelled runs and when nothing beyond failureClass is known. REJECTED runs explain their input problems on getTaskRun; their summaries in run lists and schedule history remain null.
    - `attemptCount` integer, required: Total number of attempts, including those omitted by the attempts cap.
  - `total` integer, required
  - `limit` integer, required
  - `offset` integer, required

## Other responses

- `400`: batchTimeFrom must be before batchTimeTo.
- `401`: Unauthorized
- `403`: Task scheduling is not enabled for this account, or the caller lacks permission.
- `404`: The requested trigger or selected task was not found.
- `409`: Conflict
- `422`: Request body, path, or query parameters failed validation.
- `500`: Internal Server Error

## Changes

- **2026-10-31** `54fa857fb12d`: 7 warning
  - added the new `SCRIPT_OWNER_MISMATCH` enum value to the `errors/items/code` response property for the response status `400`
  - added the new `SCRIPT_OWNER_MISMATCH` enum value to the `errors/items/code` response property for the response status `401`
  - added the new `SCRIPT_OWNER_MISMATCH` enum value to the `errors/items/code` response property for the response status `403`
  - added the new `SCRIPT_OWNER_MISMATCH` enum value to the `errors/items/code` response property for the response status `404`
  - …3 more
- **2026-10-28** `bd4db9c535c1`: 3 warning, 3 info
  - added the new `missed` enum value to the `items/items/attempts/items/noComputeReason/anyOf[subschema #1: NoComputeReason]/` response property for the response status `200`
  - added the new `missed` enum value to the `items/items/latest/noComputeReason/anyOf[subschema #1: NoComputeReason]/` response property for the response status `200`
  - added the new `missed` enum value to the `items/items/original/noComputeReason/anyOf[subschema #1: NoComputeReason]/` response property for the response status `200`
  - added the optional property `items/items/attempts/items/errorMessage` to the response with the `200` status
  - …2 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/wherobots/apis/wherobots-cloud-api/changes/triggers/:trigger_id/runs/get.md)

---

[API](https://skmtc.dev/wherobots/apis/wherobots-cloud-api.md) - [All operations](https://skmtc.dev/wherobots/apis/wherobots-cloud-api/llms.txt) - [OpenAPI document](https://skmtc.dev/wherobots/apis/wherobots-cloud-api/revisions/54fa857fb12d?raw)
