---
title: "Get Latency Stats"
method: GET
path: "/api/v1/voice-agents/{voice_agent_id}/latency-stats"
tags: ["voice-agent-metrics"]
---

# Get Latency Stats

`GET /api/v1/voice-agents/{voice_agent_id}/latency-stats`

Aggregate pipeline latency stats for a voice agent over the last 30 days.

## Path parameters

- `voice_agent_id` string, uuid, required

## Response `200`

Successful Response

- PipelineLatencyStats
  - `avg_eou_delay_ms` integer, nullable
  - `avg_llm_ttft_ms` integer, nullable
  - `avg_tts_ttfb_ms` integer, nullable
  - `avg_e2e_latency_ms` integer, nullable
  - `sample_count` integer
  - `per_llm_model` ModelLatencyStat[]
    - `model` string, required
    - `avg_latency_ms` integer, required
    - `sample_count` integer, required
  - `eou` StageLatencyStat — Distribution of one pipeline stage's latency (avg + percentiles). Percentiles come from Postgres ``percentile_cont`` over the same rows the average is computed on. Latency is a tail problem — the average hides the slow turns callers actually feel — so p95/p99 are the numbers that matter.
    - `avg_ms` integer, nullable
    - `p50_ms` integer, nullable
    - `p95_ms` integer, nullable
    - `p99_ms` integer, nullable
  - `llm_ttft` StageLatencyStat — Distribution of one pipeline stage's latency (avg + percentiles). Percentiles come from Postgres ``percentile_cont`` over the same rows the average is computed on. Latency is a tail problem — the average hides the slow turns callers actually feel — so p95/p99 are the numbers that matter.
    - `avg_ms` integer, nullable
    - `p50_ms` integer, nullable
    - `p95_ms` integer, nullable
    - `p99_ms` integer, nullable
  - `tts_ttfb` StageLatencyStat — Distribution of one pipeline stage's latency (avg + percentiles). Percentiles come from Postgres ``percentile_cont`` over the same rows the average is computed on. Latency is a tail problem — the average hides the slow turns callers actually feel — so p95/p99 are the numbers that matter.
    - `avg_ms` integer, nullable
    - `p50_ms` integer, nullable
    - `p95_ms` integer, nullable
    - `p99_ms` integer, nullable
  - `e2e` StageLatencyStat — Distribution of one pipeline stage's latency (avg + percentiles). Percentiles come from Postgres ``percentile_cont`` over the same rows the average is computed on. Latency is a tail problem — the average hides the slow turns callers actually feel — so p95/p99 are the numbers that matter.
    - `avg_ms` integer, nullable
    - `p50_ms` integer, nullable
    - `p95_ms` integer, nullable
    - `p99_ms` integer, nullable
  - `perceived` StageLatencyStat — Distribution of one pipeline stage's latency (avg + percentiles). Percentiles come from Postgres ``percentile_cont`` over the same rows the average is computed on. Latency is a tail problem — the average hides the slow turns callers actually feel — so p95/p99 are the numbers that matter.
    - `avg_ms` integer, nullable
    - `p50_ms` integer, nullable
    - `p95_ms` integer, nullable
    - `p99_ms` integer, nullable
  - `avg_prompt_tokens` integer, nullable
  - `avg_prompt_cached_tokens` integer, nullable
  - `cache_hit_rate` number, nullable

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-03** `d65b8fefae34` — 2 info
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status

[Change history](https://skmtc.dev/getanana/apis/cleon-api/changes/api/v1/voice-agents/:voice_agent_id/latency-stats/get.md)

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getanana/apis/cleon-api/revisions/41c5e4645524?raw)
