---
title: "Run history for a scheduled task, with each run's mission state"
method: GET
path: "/scheduled-tasks/{scheduledTaskId}/runs"
tags: ["scheduled-tasks"]
---

# Run history for a scheduled task, with each run's mission state

`GET /scheduled-tasks/{scheduledTaskId}/runs`

## Request

- Base URL: `https://api.letsship.ai/v1`
- URL: `https://api.letsship.ai/v1/scheduled-tasks/{scheduledTaskId}/runs`
- Auth: none declared

Newest first. When older runs exist, `nextCursor` is set: send it back as `cursor` for the next page.

## Path parameters

- `scheduledTaskId` string, required

## Query parameters

- `limit` integer: Runs on one page, 1 to 200 (default 50).
- `cursor` string: `nextCursor` from the previous page. Leave it out for the newest runs.

## Response `200`

Runs

- ListScheduledTaskRunsResponse
  - `data` ScheduledTaskRun[], required
    - `billingActorUserId` string, nullable
    - `id` string, required
    - `scheduledTaskId` string, required
    - `projectId` string, required
    - `scheduledFor` integer, required
    - `kind` 'scheduled' | 'manual', required
    - `status` 'dispatching' | 'dispatched' | 'skipped' | 'failed', required
    - `issueId` string, nullable, required
    - `issueUrl` string, nullable, required
    - `reason` string, nullable, required
    - `lastError` string, nullable, required
    - `createdAt` integer, required
    - `updatedAt` integer, required
    - `missionProgress` string, nullable, required
    - `missionActivity` string, nullable, required
    - `missionCostUsd` number, nullable, required
    - `missionCostIncomplete` boolean, required
    - `missionTitle` string, nullable, required
  - `nextCursor` string, nullable, required

## Other responses

- `400`: A cursor this API did not issue
- `404`: Not found

---

[API](https://skmtc.dev/letsship/apis/ship-api.md) · [All operations](https://skmtc.dev/letsship/apis/ship-api/llms.txt) · [OpenAPI document](https://skmtc.dev/letsship/apis/ship-api/revisions/e6eac1bcadd4?raw)
