---
title: "Traffic by client class"
method: GET
path: "/api/traffic"
---

# Traffic by client class

`GET /api/traffic`

## Request

- Base URL: `https://agentdeals.dev`
- URL: `https://agentdeals.dev/api/traffic`
- Auth: none required

Our own request counters, split by what made the request — AI agent, crawler or browser — with MCP tool calls alongside web hits so the two can be compared. These are counts of visits to us, not index data, so no citation block is attached. available is false when the store backing the daily series is not configured, and error then says so.

## Response `200`

Traffic counters over several windows

- object
  - `today` TrafficWindow: Request counts over one window. `coverage` says how much of the window we hold data for, so a low figure can be read as quiet rather than as unrecorded.
    - `days` integer
    - `from` string, date
    - `to` string, date
    - `detail_days` integer
    - `data_days_available` integer
    - `coverage` string
    - `hits_total` integer
    - `hits_excluding_internal` integer: Hits with our own crawling removed.
    - `by_class` object: Hits per client class.
    - `ai_agent_by_family` object
    - `ai_agent_by_trigger` object: AI-agent hits split by whether a person asked for them.
  - `last_7d` TrafficWindow: Request counts over one window. `coverage` says how much of the window we hold data for, so a low figure can be read as quiet rather than as unrecorded.
    - `days` integer
    - `from` string, date
    - `to` string, date
    - `detail_days` integer
    - `data_days_available` integer
    - `coverage` string
    - `hits_total` integer
    - `hits_excluding_internal` integer: Hits with our own crawling removed.
    - `by_class` object: Hits per client class.
    - `ai_agent_by_family` object
    - `ai_agent_by_trigger` object: AI-agent hits split by whether a person asked for them.
  - `last_30d` TrafficWindow: Request counts over one window. `coverage` says how much of the window we hold data for, so a low figure can be read as quiet rather than as unrecorded.
    - `days` integer
    - `from` string, date
    - `to` string, date
    - `detail_days` integer
    - `data_days_available` integer
    - `coverage` string
    - `hits_total` integer
    - `hits_excluding_internal` integer: Hits with our own crawling removed.
    - `by_class` object: Hits per client class.
    - `ai_agent_by_family` object
    - `ai_agent_by_trigger` object: AI-agent hits split by whether a person asked for them.
  - `web_vs_mcp` object: Web hits, AI-agent hits and MCP tool calls per window, with the ratios between them. A ratio is null when the denominator is zero.
  - `available` boolean: Whether the daily series has a store behind it. False means only the since-boot counters are meaningful.
  - `error` string: Why the daily series is unavailable, when it is.
  - `since_boot_by_class` object
  - `since_boot_not_found` integer
  - `since_boot_redirects` integer
  - `not_found_sample` object[]
    - `ts` string, date-time
    - `client_class` string
    - `status` integer
    - `path` string
  - `sessions` object
    - `daily` object[]
    - `today` integer
    - `recording_since` string, date, nullable: The first day of the daily series. A count before this date is not missing, it was never recorded.
    - `all_time` integer
    - `retention_days` integer
  - `ai_agent_trigger_families` object: Which user agents we read as user-initiated, as search indexing, and as training crawls.
  - `notes` string[]: What each figure does and does not count, including how much of it is our own crawling.
  - `storage` object: Whether the counters are being persisted, and the failures if not.
  - `vendor_series` object: State of the per-vendor daily series.

---

[API](https://skmtc.dev/agentdeals/apis/agentdeals-api.md) · [All operations](https://skmtc.dev/agentdeals/apis/agentdeals-api/llms.txt) · [OpenAPI document](https://skmtc.dev/agentdeals/apis/agentdeals-api/revisions/2b80deacb326?raw)
