---
title: "List Model Runs"
method: GET
path: "/v1/models/{model}/runs"
tags: ["Models"]
---

# List Model Runs

`GET /v1/models/{model}/runs`

## Request

- Base URL: `https://api.ensemble.markets` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ensemble.markets/v1/models/{model}/runs`
- Auth: HTTP bearer

Runs of a model, newest first, without their results. `live` marks the one the model serves.

## Path parameters

- `model` string, required: Model ID (model_... or legacy m-...), slug, symbol or exact name

## Query parameters

- `limit` integer: Rows per page
- `offset` integer: Rows to skip
- `updates_only` boolean: Only routine refreshes, excluding tests and strategy builds

## Response `200`

Successful Response

- RunPage
  - `data` Run[], required
    - `id` string, required: Run ID (run_... or legacy mr-/r-...). Read kind for the program type.
    - `kind` 'model', required
    - `program` RunProgramRef, required: The program a run belongs to.
      - `kind` 'model', required
      - `id` string, required
      - `name` string, nullable
      - `symbol` string, nullable
      - `slug` string, nullable
      - `inputs_schema` object, nullable: The program's declared inputs with defaults (on a single run read)
    - `status` 'queued' | 'running' | 'complete' | 'failed', required
    - `source` 'build' | 'manual' | 'scheduled' | 'cascade' | 'promote', required: build: the build's smoke run; manual: requested; scheduled: the nightly; cascade: a member changed; promote: after a promote
    - `label` string, nullable
    - `inputs` object, required
    - `is_default` boolean, required: Inputs equal the script's declared defaults
    - `intent` 'test' | 'refresh', nullable
    - `result_available` boolean: Whether the full result is retained and readable
    - `revision_id` string, nullable
    - `result_context` object, nullable: Execution-time strategy, input schema, display window and data provenance. Unknown legacy values are omitted, never borrowed from the current model.
    - `is_public` boolean
    - `live` boolean: This run's result is what the program serves
    - `data_as_of` string, nullable
    - `script_hash` string, nullable: SHA-256 of the script that ran; resolves to a build via getBuild
    - `summary` object, nullable: Headline figures, kept even when the full result is pruned
    - `usage` RunUsage
      - `units` integer, required
      - `base` integer, nullable
      - `seconds` integer, nullable
    - `estimate_cents` integer, nullable: On the response that queued this run: what it holds against the balance, in cents, until `usage` replaces it. Null on other reads.
    - `error` string, nullable
    - `duration_ms` integer, nullable
    - `created_at` string, date-time, required
    - `started_at` string, date-time, nullable
    - `completed_at` string, date-time, nullable
    - `result` object, nullable: With include=result: the model backtest history, including dates, returns, positions, targets and metadata.
    - `owner` RunOwner
      - `logo_url` string, nullable: Business branding, when the owner set a logo
    - `is_owner` boolean: True when the caller owns this run
  - `total` integer, required: Rows matching the filters, across every page

## Other responses

- `4XX`: The request was refused; `error.type` says why
- `5XX`: The server failed; quote `X-Request-Id` when reporting it

---

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