---
title: "List Gym Workspaces"
method: GET
path: "/v1/gym/workspaces"
tags: ["gym workspaces"]
---

# List Gym Workspaces

`GET /v1/gym/workspaces`

Every gym case, in case-name order.

## Query parameters

- `limit` integer
- `scenario` string
- `lane` string
- `verdict` string
- `wrote` boolean, nullable
- `tag` string

## Headers

- `authorization` string, nullable
- `x-darwin-token` string, nullable

## Response `200`

Successful Response

- GymWorkspaceList
  - `root` string, required
  - `count` integer, required
  - `complete` boolean
  - `workspaces` GymWorkspaceRow[], required
    - `id` string, uuid, required
    - `case` string, required
    - `title` string
    - `world` string
    - `mode` string
    - `expect` string
    - `path` string
    - `git` GymGit — The `git` block of the workspaces contract, verbatim. `bench/gym/site.py` fills `path`/`exists`/`branch`/`head`/`short` itself by reading `.git/HEAD`; the last four need git to run, so the gym computes them once when a run closes and writes them into the manifest. Reading them back off a file means a page of thirty cases is thirty file reads, not thirty subprocesses.
      - `path` string
      - `exists` boolean
      - `branch` string
      - `head` string
      - `short` string
      - `commits` integer
      - `uncommitted` integer
      - `last_commit_at` string
      - `subject` string
    - `run_id` string
    - `run_no` integer
    - `branch` string
    - `seed` string
    - `head` string
    - `lane` string
    - `transport` string
    - `channels` string[]
    - `status` string
    - `verdict` string
    - `score` string
    - `graded` string
    - `passed` boolean
    - `as_expected` boolean
    - `error` string
    - `wrote` boolean
    - `changed_files` string[]
    - `files_changed` integer
    - `additions` integer
    - `deletions` integer
    - `tags` string[]
    - `runs` GymRun[]
      - `run_id` string, required
      - `no` integer
      - `branch` string
      - `run_dir` string
      - `lane` string
      - `transport` string
      - `channels` string[]
      - `status` string
      - `opened_at` string
      - `closed_at` string
      - `seed` string
      - `head` string
      - `commits` integer
      - `wrote` boolean
      - `changed_files` string[]
      - `files_changed` integer
      - `additions` integer
      - `deletions` integer
      - `acts` GymAct[]
        - `act` string, required
        - `sha` string, required
        - `files` integer
      - `score` string
      - `graded` string
      - `passed` boolean
      - `as_expected` boolean
      - `verdict` string
      - `error` string
      - `tags` string[]
      - `problems` string[]
    - `created_at` string
    - `updated_at` string
    - `problems` string[]

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/stormy/apis/stormy-control-plane.md) · [All operations](https://skmtc.dev/stormy/apis/stormy-control-plane/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/stormy/stormy-control-plane/revisions/032c0f4e1565/schema)
