---
title: "Get project metric series"
method: GET
path: "/gh/{ownerKeyOrId}/projects/{projectKeyOrId}/metrics/series"
tags: ["Metrics"]
---

# Get project metric series

`GET /gh/{ownerKeyOrId}/projects/{projectKeyOrId}/metrics/series`

Retrieve each metric's history on a Project's default branch as a time series over the requested window. Returns one series per metric — covering maintainability, reliability, security, size, coverage, and quality indicators — each with the metric's descriptor and one value per interval; narrow the result with the `metric` and `category` query parameters. Available as JSON, newline-delimited JSON (`application/x-ndjson`), or CSV (`text/csv`) via the `Accept` header. Buckets are UTC-aligned and labeled with the inclusive end of each interval; a bucket with no measurement carries the most recent prior value forward, and the final bucket (the one containing `to`) may be labeled later than `to` — including the future for an interval still in progress — with its value reflecting only measurements within the window.

## Path parameters

- `ownerKeyOrId` string, required — Repository owner name (login) or workspace ID
- `projectKeyOrId` string, required — Repository name or project ID

## Query parameters

- `from` string, date-time — Window start (RFC 3339 date or date-time, inclusive). Defaults to six months before `to`.
- `to` string, date-time — Window end (RFC 3339 date or date-time, inclusive). Defaults to the current time and is clamped to it.
- `interval` 'day' | 'week' | 'month' — Bucket size; buckets are UTC-aligned and weeks start Monday
- `metric` union — Filter by metric key
  - string[]
  - 'CMPLX' | 'DUP' | 'MNT' | 'SEC' | 'SIZE' | 'ISS' | 'SECI' | 'TDR' | 'FILES' | 'LOC' | 'COV' | 'LCOV'
- `category` union — Filter by metric category
  - string[]
  - 'maintainability' | 'reliability' | 'security' | 'size' | 'coverage' | 'quality'

## Response `200`

Retrieve metric time series for the project

- MetricSeriesList
  - `data` MetricSeries[], required
    - `metric` MetricDescriptor, required
      - `key` string, required
      - `name` string, required
      - `description` string
      - `category` 'maintainability' | 'reliability' | 'security' | 'size' | 'coverage' | 'quality', required
      - `inverted` boolean, required — When true, higher values are worse
      - `valueType` 'number' | 'percentage' | 'grade' | 'size' | 'duration' | 'count', required — How the metric's value should be interpreted
    - `dimensions` object, required — Reserved for future grouping dimensions; always empty
    - `points` MetricPoint[], required
      - `timestamp` string, required — Inclusive end of the interval bucket (RFC 3339, UTC). The final point labels the bucket containing `meta.to`, so its timestamp may be later than `meta.to` — including in the future for an interval still in progress.
      - `value` union, required — The metric's value for the interval
        - number
        - 'XS' | 'S' | 'M' | 'L' | 'XL'
        - 'A' | 'B' | 'C' | 'D' | 'F'
  - `meta` MetricSeriesMeta, required
    - `from` string, required
    - `to` string, required
    - `interval` 'day' | 'week' | 'month', required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `429` — Rate Limit Exceeded
- `500` — Internal Server Error

---

[API](https://skmtc.dev/qlty/apis/qlty-api.md) · [All operations](https://skmtc.dev/qlty/apis/qlty-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/qlty/qlty-api/revisions/b61e0586adfe/schema)
