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

# Get project factory cost breakdown

`GET /experimental/projects/{projectId}/factory/metrics/cost/breakdown`

## Request

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

Groups the factory PRs behind the Cost per PR card (`GET .../factory/metrics/cost`), and their credits, for 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 the project Loop (`groupBy=loop`, null for opening runs no Loop of the project started) or the skill without its version (`groupBy=skill`) of each PR's opening run. The PRs and credits are those `GET .../factory/metrics/cost/prs` lists, so the groups add up to the card's `current` window. Most credits first.

## Path parameters

- `projectId` string, uuid, required

## Query parameters

- `groupBy` union, required
  - 'loop'
  - 'skill'
- `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-cost-breakdown', required
    - `attributes` object, required
      - `start` string, date-time, required
      - `end` string, date-time, required
      - `groupBy` union, required
        - 'loop'
        - 'skill'
      - `loops` object[]
        - `loop` object, nullable, required
          - `id` string, uuid, required
          - `label` string, nullable, required
        - `prsOpened` integer, required
        - `prCredits` number, required
        - `firstRunCredits` number, required
        - `followUpCredits` number, required
      - `skills` object[]
        - `skill` string, nullable, required
        - `prsOpened` integer, required
        - `prCredits` number, required
        - `firstRunCredits` number, required
        - `followUpCredits` number, 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 `getProjectFactoryMetricCostBreakdown` was added
- **2026-10-29** `68c1ace37d92`: 1 info
  - endpoint added

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