---
title: "Get aggregate traffic dashboard (server-wide)"
method: GET
path: "/api/traffic/dashboard"
tags: ["Traffic Analytics"]
---

# Get aggregate traffic dashboard (server-wide)

`GET /api/traffic/dashboard`

Bundle every traffic shape into one response so a dashboard can replace
~15 separate requests with a single call. Each member is verbatim the
shape of its standalone endpoint, with the same server-side sketch
merges (t-digest latency, HLL uniques) — nothing is re-summed.

`overview`, `paths`, and every `breakdowns` dimension follow `from`/`to`;
`series` follows `range`. The server-wide variant includes `apps` (every
app with traffic, ranked by requests desc, capped at `apps_limit`). An
empty range returns 200 with zeroed/empty members, never 404.

Additive: older Coolify keeps calling the individual endpoints; new
Coolify calls this first and falls back to them on 404.

## Query parameters

- `from` string, date-time
- `to` string, date-time
- `range` '24h' | '7d' | '30d'
- `paths_limit` integer
- `breakdown_limit` integer
- `apps_limit` integer

## Response `200`

Aggregate dashboard, including the app leaderboard

- TrafficDashboard — Every traffic shape bundled into one response. Each member is verbatim the shape of its standalone endpoint. `apps` is present only on the server-wide variant.
  - `overview` TrafficOverview
    - `requests` integer
    - `bytes_in` integer
    - `bytes_out` integer
    - `status` TrafficStatusBreakdown
      - `s2xx` integer
      - `s3xx` integer
      - `s4xx` integer
      - `s5xx` integer
    - `latency` TrafficLatency — Approximate latency quantiles in milliseconds (t-digest estimate). 0.0 on every field when the range holds no decodable latency sketch.
      - `p50` number, float
      - `p95` number, float
      - `p99` number, float
    - `unique_visitors` integer — Approximate distinct client IPs (HyperLogLog++ estimate, ~1-2% error)
  - `paths` TrafficPath[]
    - `path` string
    - `app` string — The app (Coolify app UUID, or host for Caddy) that served this path. Always the queried app on a per-app endpoint; attributes each path to its owning app on the server-wide endpoint.
    - `requests` integer
    - `bytes_out` integer
    - `p50` number, float
    - `p95` number, float
  - `breakdowns` TrafficBreakdowns — The eleven breakdown dimensions Coolify renders, each a top-N list in the same shape as GET /traffic/breakdown/{dimension}.
    - `country` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `referer` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `browser` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `os` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `device` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `protocol` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `cache` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `status` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `agent` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `ip` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
    - `useragent` TrafficBreakdownEntry[]
      - `value` string
      - `requests` integer
      - `bytes_out` integer
  - `series` TrafficSeriesBucket[]
    - `bucket` integer — Unix-millis start of the bucket
    - `requests` integer
    - `bytes_in` integer
    - `bytes_out` integer
    - `s2xx` integer
    - `s3xx` integer
    - `s4xx` integer
    - `s5xx` integer
    - `unique_visitors` integer — Per-bucket approximate distinct client IPs (HyperLogLog++)
    - `p95` number, float — 95th-percentile latency in ms (t-digest estimate)
  - `attribution` string, nullable — The active GeoIP source's attribution string, or null.
  - `apps` TrafficAppEntry[] — Per-app leaderboard, ranked by requests desc. Present only on the server-wide dashboard; omitted on the per-app variant.
    - `uuid` string
    - `overview` TrafficOverview
      - `requests` integer
      - `bytes_in` integer
      - `bytes_out` integer
      - `status` TrafficStatusBreakdown
        - `s2xx` integer
        - `s3xx` integer
        - `s4xx` integer
        - `s5xx` integer
      - `latency` TrafficLatency — Approximate latency quantiles in milliseconds (t-digest estimate). 0.0 on every field when the range holds no decodable latency sketch.
        - `p50` number, float
        - `p95` number, float
        - `p99` number, float
      - `unique_visitors` integer — Approximate distinct client IPs (HyperLogLog++ estimate, ~1-2% error)

## Other responses

- `400` — Bad request - invalid parameters
- `401` — Unauthorized - missing or invalid authentication token
- `404` — Traffic analytics isn't enabled — the binary lacks the `traffic` Cargo feature, TRAFFIC_ENABLED isn't true, or the analytics database failed to open.
- `500` — Internal server error

---

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