---
title: "Get Quality Timeseries"
method: GET
path: "/analytics/quality-timeseries"
tags: ["analytics"]
---

# Get Quality Timeseries

`GET /analytics/quality-timeseries`

Return bucketed LLM-as-Judge quality metrics for a model.

Each bucket reports the average ``llmaj_score``, the fraction of
judged inferences with ``llmaj_verdict = 'pass'``, and the count of
scored inferences. ``model_id`` is resolved against ``training_jobs``
to determine whether to filter ``inferences`` by ``project_id``,
``training_job_id``, or ``model_id`` (raw base traffic).

Args:
    model_id: Training-job UUID or base catalog id.
    interval: ``date_trunc`` bucket size.
    since: Inclusive start of the window.
    until: Exclusive end of the window.
    auth: Authentication result carrying the user id used to scope
        every aggregate.

Returns:
    ``QualityTimeSeriesResponse`` with descending buckets. An empty
    ``series`` is returned when no inference rows match.

## Query parameters

- `model_id` string, required — Training-job UUID (task model) or base catalog id (e.g. 'meta-llama/Llama-3-8B').
- `interval` 'day' | 'week' — Bucket size used for ``date_trunc``.
- `since` string, date-time, nullable — Inclusive start of the window (UTC). Defaults to 90 days ago.
- `until` string, date-time, nullable — Exclusive end of the window (UTC). Defaults to now.

## Response `200`

Successful Response

- QualityTimeSeriesResponse — Bucketed LLMAJ quality timeseries for a single model scope. Returns LLM-as-Judge pass-rate and score buckets for the requested ``model_id`` over the requested window. Buckets are ordered by ``ts`` descending. Empty windows return ``series=[]`` rather than 404. No cross-model "vs base" comparison is provided. The codebase has no paired-evaluation pipeline, so a meaningful task-vs-base comparison cannot be derived from existing ``inferences`` data alone.
  - `model_id` string, required — Echo of the requested model id.
  - `interval` 'day' | 'week', required — ``date_trunc`` bucket size used for the aggregation.
  - `since` string, date-time, required — Inclusive start of the window (UTC).
  - `until` string, date-time, required — Exclusive end of the window (UTC).
  - `series` QualityTimeSeriesBucket[] — Buckets ordered by ``ts`` descending.
    - `ts` string, date-time, required — Bucket start (date_trunc'd) in UTC.
    - `llmaj_score_avg` number, nullable — Average ``llmaj_score`` over inferences in this bucket. Null when no inference in the bucket has a score.
    - `llmaj_correct_pct` number, nullable — Fraction of judged inferences in this bucket where ``llmaj_verdict = 'pass'``. Null when no inference in the bucket has a verdict.
    - `sample_count` integer — Number of inferences in this bucket with a non-null ``llmaj_score``.

## Other responses

- `400` — Invalid time window.
- `422` — Validation Error
- `503` — Quality timeseries dependency is temporarily unavailable.

---

[API](https://skmtc.net/pioneer/apis/brain-api.md) · [All operations](https://skmtc.net/pioneer/apis/brain-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/pioneer/brain-api/revisions/31dfe831e079/schema)
