---
title: "Combined tool analytics dashboard envelope"
method: GET
path: "/v1/analytics/tools/dashboard"
tags: ["analytics"]
---

# Combined tool analytics dashboard envelope

`GET /v1/analytics/tools/dashboard`

Single call that fans out to the four ENG-154 dashboard pipes.

Each underlying pipe is independently cached at 60s, so within a one
minute window this endpoint serves entirely from Redis.

## Query parameters

- `tool_type` string, nullable
- `revision_id` string, nullable
- `top_tools_limit` integer
- `health_matrix_limit` integer
- `recent_errors_limit` integer
- `min_invocations` integer
- `latency_ceiling_ms` number
- `start_date` string, date, required
- `end_date` string, date, required

## Response `200`

Successful Response

- SrcAnalyticsToolsSchemasDashboardEnvelope — Combined dashboard payload — one envelope, four pre-aggregated panels. `summary` is at most one row but the underlying pipe returns a list, so we keep it as a (possibly empty) list rather than special-casing it on the client.
  - `summary` SrcAnalyticsToolsSchemasDashboardSummaryRow[], required
    - `current_invocations` integer, nullable
    - `previous_invocations` integer, nullable
    - `pct_change_invocations` number, nullable
    - `current_errors` integer, nullable
    - `previous_errors` integer, nullable
    - `pct_change_errors` number, nullable
    - `current_success_rate` number, nullable
    - `previous_success_rate` number, nullable
    - `pct_change_success_rate` number, nullable
    - `current_avg_latency_ms` number, nullable
    - `previous_avg_latency_ms` number, nullable
    - `pct_change_avg_latency_ms` number, nullable
    - `current_p95_latency_ms` number, nullable
    - `previous_p95_latency_ms` number, nullable
    - `pct_change_p95_latency_ms` number, nullable
    - `current_active_tools` integer, nullable
    - `previous_active_tools` integer, nullable
    - `pct_change_active_tools` number, nullable
  - `top_tools` DashboardTopToolsRow[], required
    - `tool_id` string, required
    - `tool_name` string, required
    - `tool_type` string, required
    - `provider` string, nullable
    - `invocations` integer, required
    - `error_count` integer, required
    - `success_rate_pct` number, required
    - `avg_latency_ms` number, required
  - `health_matrix` DashboardHealthMatrixRow[], required
    - `tool_id` string, required
    - `tool_name` string, required
    - `tool_type` string, required
    - `invocation_count` integer, required
    - `success_rate` number, nullable
    - `p95_latency_ms` number, nullable
    - `current_error_rate` number, required
    - `previous_error_rate` number, required
    - `error_trend_delta` number, required
    - `success_rate_score` number, required
    - `latency_score` number, required
    - `error_trend_score` number, required
    - `health_score` number, required
  - `recent_errors` DashboardRecentErrorRow[], required
    - `timestamp` string, date-time, required
    - `tool_id` string, required
    - `tool_name` string, required
    - `tool_type` string, required
    - `provider` string, nullable
    - `agent_id` string, nullable
    - `session_id` string, nullable
    - `error_category` string, required
    - `status_code` integer, nullable
    - `error_message` string, nullable
    - `latency_ms` number, required

## Other responses

- `400` — Bad request
- `401` — Authentication required
- `422` — Validation Error

---

[API](https://skmtc.net/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.net/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/versions/888bdd5c076e/schema)
