---
title: "Get Observability Timeseries"
method: GET
path: "/observability/timeseries"
tags: ["observability"]
---

# Get Observability Timeseries

`GET /observability/timeseries`

Harness-mix and model-mix over time, plus an hour-of-day usage profile.

## Query parameters

- `start_date` string, nullable — Range start (ISO date or datetime, UTC). Defaults to 30 days ago.
- `end_date` string, nullable — Range end (ISO date or datetime, UTC). Defaults to now.
- `scope` 'team' | 'personal' — ``team`` (default) aggregates the active team's coding-agent tasks; ``personal`` narrows to tasks on keys the requesting user created.

## Response `200`

Successful Response

- TimeseriesResponse — Harness-mix and model-mix over time, plus an hour-of-day usage profile. ``*_over_time`` is a sparse long-format series over ``buckets`` (the complete ordered time axis at ``granularity``, so the UI can zero-fill gaps and keep time continuous). ``*_by_hour`` aggregates the whole window into 24 UTC hour-of-day buckets to expose daily usage patterns independent of the range. ``harness_keys`` / ``model_keys`` are the distinct series, ordered by total spend, so the UI can pick a stable stacking order and cap the model legend.
  - `granularity` 'hour' | 'day', required
  - `buckets` string[], required — Complete ordered ISO-8601 UTC time axis at ``granularity``.
  - `harness_keys` string[], required
  - `model_keys` string[], required
  - `harness_over_time` TimeseriesPoint[], required
    - `bucket` string, required — ISO-8601 UTC bucket start; matches an entry in ``buckets``.
    - `key` string, required — Series key — a harness family or a model name.
    - `spend` number, required
    - `total_tokens` integer, required
  - `model_over_time` TimeseriesPoint[], required
    - `bucket` string, required — ISO-8601 UTC bucket start; matches an entry in ``buckets``.
    - `key` string, required — Series key — a harness family or a model name.
    - `spend` number, required
    - `total_tokens` integer, required
  - `harness_by_hour` HourOfDayPoint[], required
    - `hour` integer, required — Hour of day, 0-23 (UTC).
    - `key` string, required — Series key — a harness family or a model name.
    - `spend` number, required
    - `total_tokens` integer, required
  - `model_by_hour` HourOfDayPoint[], required
    - `hour` integer, required — Hour of day, 0-23 (UTC).
    - `key` string, required — Series key — a harness family or a model name.
    - `spend` number, required
    - `total_tokens` integer, required
  - `meta` ObservabilityMeta, required — Data-quality envelope attached to every observability response. Lets the UI label boundaries instead of silently under-reporting: the category window (classification only runs over recent inline payloads), the per-harness payload coverage, and the earliest date harness attribution is available (before which no data exists, so a picker must not offer it).
    - `category_window_days` integer, required — Category classification only covers the last N days of inline payloads.
    - `category_window_start` string, date-time, required — UTC start of the category-classification window (now - category_window_days).
    - `coverage_start_date` string, date-time, required — Earliest UTC date with caller metadata / harness attribution; date ranges before this return nothing.
    - `harness_coverage` HarnessCoverage[], required — Per-harness category-coverage gating for UI labelling.
      - `harness` string, required
      - `coverage` 'full' | 'partial' | 'excluded', required
    - `generated_at` string, date-time, required — UTC time this response was computed.

## Other responses

- `422` — Validation Error

---

[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)
