---
title: "List project factory runs"
method: GET
path: "/experimental/projects/{projectId}/factory/metrics/runs"
tags: ["Projects"]
---

# List project factory runs

`GET /experimental/projects/{projectId}/factory/metrics/runs`

## Request

- Base URL: `https://api.tessl.io`
- URL: `https://api.tessl.io/experimental/projects/{projectId}/factory/metrics/runs`
- Auth: none declared

Lists the project's Loop runs, newest first by their time-ordered id, a cursor page of at most 100 at a time. Runs are those the project Loops started in the requested window (`filter[timestamp][gte]` to the exclusive `filter[timestamp][lt]`, at most 90 days, the last 7 days when neither is given), by creation time, matched and classified as the Basic health, Failure rates and Uptime cards match and classify them. A run that served several of the project's Loops counts once, under the Loop whose claim on it is oldest. `filter[state]` is a Basic health state, `filter[cause]` a Failure rates cause or `any` for runs that failed for any cause, and `filter[pendingForAtLeast]` keeps runs still in progress created at least that many minutes ago. `cause` is null for a run that did not fail, and `progressPhase` for a run no longer in progress.

## Path parameters

- `projectId` string, uuid, required

## Query parameters

- `filter[timestamp][gte]` string, date-time
- `filter[timestamp][lt]` string, date-time
- `filter[state]` union
  - 'running'
  - 'worked'
  - 'noChange'
  - 'needsInput'
  - 'failed'
  - 'cancelled'
- `filter[cause]` union
  - 'platform'
  - 'agent'
  - 'setup'
  - 'credits'
  - 'limits'
  - 'policy'
  - 'any'
- `filter[loopId]` string, uuid
- `filter[skillRef]` string
- `filter[pendingForAtLeast]` integer
- `page[size]` integer
- `page[after]` string
- `page[before]` string

## Headers

- `Authorization` string

## Response `200`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
    - `next` string, uri, nullable, required
    - `prev` string, uri, nullable, required
  - `meta` object, required
    - `count` number, required
  - `data` object[], required
    - `id` string, uuid, required
    - `type` 'project-factory-run', required
    - `attributes` object, required
      - `createdAt` string, date-time, required
      - `finishedAt` string, date-time, nullable, required
      - `loop` object, nullable, required
        - `id` string, uuid, required
        - `label` string, nullable, required
      - `skillRef` string, nullable, required
      - `status` union, required
        - 'pending'
        - 'completed'
        - 'failed'
        - 'cancelled'
      - `state` union, required
        - 'running'
        - 'worked'
        - 'noChange'
        - 'needsInput'
        - 'failed'
        - 'cancelled'
      - `cause` union, required
        - 'platform'
        - 'agent'
        - 'setup'
        - 'credits'
        - 'limits'
        - 'policy'
      - `failureCode` string, nullable, required
      - `reason` string, nullable, required: A failed run's failure message, shown only to workspace admins, or the agent's reason or summary for a run that completed with a `failed` outcome.
      - `progressPhase` string, nullable, required

## Other responses

- `401`: Unauthorized
- `403`: Default Response
- `404`: Not Found
- `500`: Internal Server Error

## Changes

- **2026-10-29** `06d2142ed144`: 1 info
  - api operation id `listProjectFactoryMetricRuns` was added
- **2026-10-28** `2d42f70c9d30`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tessl/apis/tessl-api/changes/experimental/projects/:projectId/factory/metrics/runs/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/4fa2a17154e4?raw)
