---
title: "Time-bucketed rollups from durable tables"
method: GET
path: "/v1/otel/metrics"
tags: ["Observability"]
---

# Time-bucketed rollups from durable tables

`GET /v1/otel/metrics`

## Request

- Base URL: `https://api.1claw.co`
- URL: `https://api.1claw.co/v1/otel/metrics`
- Auth: HTTP bearer

Volume, denials and latency over a window. Sourced from durable tables, never from in-process counters: an in-memory histogram is per-replica and resets on deploy, so a 24h chart drawn from one disagrees between instances and is wrong after every release.

Every bucket in the range is returned, including empty ones. A quiet hour is a zero, not a missing point — a line chart given a hole joins across it as though nothing happened.

`step` may be widened from what was requested when the window would otherwise produce more than 500 buckets. The response echoes the window and step actually used, so a chart can label its own resolution rather than the one it asked for.

## Query parameters

- `window` string
- `step` string

## Response `200`

Bucketed metrics

- object
  - `window` object, required: The window and step actually used.
    - `window_secs` integer
    - `step_secs` integer
  - `buckets` object[], required
    - `t` string, date-time, required
    - `executions` integer, required
    - `denials` integer, required
    - `transactions` integer, required
    - `llm_calls` integer, required
  - `latency_p50_ms` number, nullable: Null when nothing in the window recorded a duration.
  - `latency_p95_ms` number, nullable
  - `total_executions` integer, required
  - `total_denials` integer, required

## Other responses

- `400`: Unparseable window or step, window over 30d, or step larger than window
- `401`: Unauthenticated
- `403`: Not a human user

---

[API](https://skmtc.dev/1claw/apis/1claw-api.md) · [All operations](https://skmtc.dev/1claw/apis/1claw-api/llms.txt) · [OpenAPI document](https://skmtc.dev/1claw/apis/1claw-api/revisions/5fa0918f3b41?raw)
