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

# Get project factory basic health

`GET /experimental/projects/{projectId}/factory/metrics/basic-health`

## Request

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

Counts the runs this project's 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) and in the window of the same length just before it, by run creation time, and how many of each ended in each state. States follow the org Home floor: a pending run is `running`; a completed run is `worked`, `noChange` or `needsInput` by its agent outcome, and `failed` when the agent reported failure or left no outcome; a failed run is `failed` and a cancelled one `cancelled`. `series` has one point per UTC day that the current window touches, with the runs the window holds in it and zeros included. A window that starts at a UTC midnight has whole days but the last.

## Path parameters

- `projectId` string, uuid, required

## Query parameters

- `filter[timestamp][gte]` string, date-time
- `filter[timestamp][lt]` string, date-time

## Headers

- `Authorization` string

## Response `200`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
  - `data` object, required
    - `id` string, uuid, required
    - `type` 'project-factory-basic-health', required
    - `attributes` object, required
      - `current` object, required
        - `start` string, date-time, required
        - `end` string, date-time, required
        - `runs` integer, required
        - `states` object, required
          - `running` integer, required
          - `worked` integer, required
          - `noChange` integer, required
          - `needsInput` integer, required
          - `failed` integer, required
          - `cancelled` integer, required
      - `previous` object, required
        - `start` string, date-time, required
        - `end` string, date-time, required
        - `runs` integer, required
        - `states` object, required
          - `running` integer, required
          - `worked` integer, required
          - `noChange` integer, required
          - `needsInput` integer, required
          - `failed` integer, required
          - `cancelled` integer, required
      - `series` object[], required
        - `day` string, required
        - `count` integer, 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 `getProjectFactoryMetricBasicHealth` was added
- **2026-10-27** `e39470442d44`: 3 info
  - added the new optional `query` request parameter `filter[timestamp][gte]`
  - added the new optional `query` request parameter `filter[timestamp][lt]`
  - added the required property `data/attributes/series` to the response with the `200` status
- **2026-10-26** `4153777fcd4d`: 1 info
  - endpoint added

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