---
title: "GET /experimental/launch-runs/{id}"
method: GET
path: "/experimental/launch-runs/{id}"
tags: ["Launch Runs"]
---

# GET /experimental/launch-runs/{id}

`GET /experimental/launch-runs/{id}`

Gets a launch run by ID, including progress while pending and a failure reason when failed.

## Path parameters

- `id` string, uuid, required

## Headers

- `Authorization` string

## Response `200`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
  - `data` object, required
    - `id` string, uuid, required
    - `type` 'launch-run', required
    - `attributes` object, required
      - `status` union, required
        - 'pending'
        - 'completed'
        - 'failed'
        - 'cancelled'
      - `workflowId` string, nullable, required
      - `workspaceId` string, uuid, required
      - `scheduledRunId` string, uuid, nullable, required
      - `createdBy` string, uuid, nullable, required
      - `config` object, required
        - `skillRef` string, required
        - `repoUrl` string, required
        - `baseBranch` string, required
        - `snapshot` string
        - `sandboxSnapshot` string
        - `workdir` string
        - `agent` string, required
        - `model` string, required
        - `effort` union — Explicit reasoning effort for the selected agent. Omitted keeps the agent default. Unsupported agent and effort combinations are rejected before the run is created.
          - 'low'
          - 'medium'
          - 'high'
          - 'xhigh'
          - 'max'
        - `triggerSource` union, required
          - 'manual'
          - 'api'
          - 'webhook'
          - 'scheduled'
        - `mcpServers` string[]
        - `timeoutMs` integer
      - `label` string, nullable, required
      - `metadata` object, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
      - `progressUpdatedAt` string, date-time, nullable, required
      - `liveness` object
        - `phase` union, required
          - 'queued'
          - 'starting'
          - 'preparing'
          - 'running'
          - 'recovering'
          - 'retrying'
          - 'finalizing'
        - `message` string
        - `updatedAt` string, date-time, nullable, required
      - `progress` object
        - `queue` union, required
          - 'preparing'
          - 'queued'
          - 'active'
          - 'finishing'
        - `recipes` object[], required
          - `name` string, required
          - `waiting` integer, required
          - `running` integer, required
          - `completed` integer, required
        - `summary` object
          - `label` string, required
          - `total` integer
          - `completed` integer, required
          - `failed` integer, required
        - `units` object[]
          - `name` string, required
          - `percent` integer, required
          - `waiting` boolean, required
      - `sandboxId` string
      - `phase` union
        - 'preparing'
        - 'waiting_for_capacity'
        - 'starting'
        - 'recipe_running'
        - 'finishing'
      - `failureReason` object
        - `code` string, required
        - `message` string
        - `details` string
        - `failedTaskNames` string[]
      - `outcome` object
        - `status` union, required — What the skill did: `succeeded` — it did its work; `no_action` — it ran but made no change; `needs_input` — it asked a blocking question and stopped; `failed` — it tried and could not complete. Not the same as the launch run's own status, which says whether the platform got the skill to run at all.
          - 'succeeded'
          - 'no_action'
          - 'needs_input'
          - 'failed'
        - `reason` string
      - `result` object
      - `outputSchema` object
      - `inputSchema` object

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `500` — Internal Server Error

## Changes

- **2026-09-15** `d50a02b79ad3` — 3 info
  - added the optional property `error/code` to the response with the `403` status
  - added the optional property `error/url` to the response with the `403` status
  - added the required property `data/attributes/scheduledRunId` to the response with the `200` status
- **2026-09-10** `e57a144d1cab` — 1 info
  - added the optional property `data/attributes/config/effort` to the response with the `200` status
- **2026-09-08** `78f96a975834` — 2 info
  - added `subschema #2, subschema #3` to the `data/attributes/outcome/status` response property `anyOf` list for the response status `200`
  - removed `subschema #2` from the `data/attributes/outcome/status` response property `anyOf` list for the response status `200`
- **2026-09-04** `ffb03b5d287f` — 1 info
  - added the optional property `data/attributes/config/timeoutMs` to the response with the `200` status
- **2026-08-30** `11217e48a1a9` — 1 breaking
  - the response property `data/attributes/failureReason/message` became optional for the status `200`

[Full history](https://skmtc.dev/tessl/apis/tessl-api/changes/experimental/launch-runs/:id/get.md)

---

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