---
title: "Responsiveness analytics"
method: GET
path: "/analytics/responsiveness"
tags: ["Analytics"]
---

# Responsiveness analytics

`GET /analytics/responsiveness`

## Request

- Base URL: `https://joinways.app/api/v1`
- URL: `https://joinways.app/api/v1/analytics/responsiveness`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://joinways.app/oauth/authorize`, token URL `https://joinways.app/api/oauth/token`, scopes: `mcp.read`)

First response to the client for inquiries received over the period (the Reports page "Responsiveness" tab). The first response is the earliest platform reply, quote sent, email sent or information request after reception; failing that, the accept/reject in Joinways (counted as `fallback`). Delays are counted in each venue's business hours (closures deducted; a venue without opening hours counts 9:00 – 19:00 every day in the workspace time zone).
**Role permission:** `reports.view`.

## Query parameters

- `from` string, date
- `to` string, date
- `venues` string
- `compare` 'year' | 'previous' | 'none'

## Response `200`

Response-time metrics for the period.

- ResponsivenessAnalytics
  - `period` object: Effective period after defaults and caps.
    - `from` string, date
    - `to` string, date
    - `today` string, date: Today in the workspace time zone.
    - `timezone` string
  - `comparison` object, nullable
    - `mode` 'year' | 'previous'
    - `from` string, date
    - `to` string, date
  - `venue_ids` string[], nullable: Venue filter applied; `null` = all venues.
  - `currency` string: Workspace currency of every amount (amounts are excl. tax, 2 decimals).
  - `kpis` object
    - `median_business_minutes` ReportMetric: A value for the period and for the comparison period.
      - `current` number, nullable
      - `previous` number, nullable: Comparison period value; `null` with `compare=none` or when not computable.
      - `change_pct` number, nullable: Relative change in % (1 decimal); `null` when `previous` is null or 0.
    - `under_1h_rate` ReportRate: A rate with its numerator and denominator.
      - `pct` number, nullable: 0–100, 1 decimal; `null` when the denominator is 0.
      - `numerator` integer
      - `denominator` integer
      - `previous_pct` number, nullable
      - `change_points` number, nullable: Difference in percentage points with the comparison period.
    - `received` ReportMetric: A value for the period and for the comparison period.
      - `current` number, nullable
      - `previous` number, nullable: Comparison period value; `null` with `compare=none` or when not computable.
      - `change_pct` number, nullable: Relative change in % (1 decimal); `null` when `previous` is null or 0.
    - `answered` ReportMetric: A value for the period and for the comparison period.
      - `current` number, nullable
      - `previous` number, nullable: Comparison period value; `null` with `compare=none` or when not computable.
      - `change_pct` number, nullable: Relative change in % (1 decimal); `null` when `previous` is null or 0.
  - `current` ResponseStats
    - `received` integer
    - `answered` integer
    - `unanswered` integer
    - `median_business_minutes` number, nullable
    - `under_1h_rate` ReportRatio: A rate with its numerator and denominator.
      - `pct` number, nullable: 0–100, 1 decimal; `null` when the denominator is 0.
      - `numerator` integer
      - `denominator` integer
    - `buckets` object: Answered inquiries by delay (business minutes).
      - `under15` integer
      - `m15_60` integer
      - `h1_4` integer
      - `h4_24` integer
      - `over24` integer
    - `fallback` integer: Answers dated only by the accept/reject fallback.
    - `by_via` object
      - `platform` integer
      - `quote` integer
      - `email` integer
      - `info_request` integer
      - `fallback` integer
  - `previous` ResponseStats
    - `received` integer
    - `answered` integer
    - `unanswered` integer
    - `median_business_minutes` number, nullable
    - `under_1h_rate` ReportRatio: A rate with its numerator and denominator.
      - `pct` number, nullable: 0–100, 1 decimal; `null` when the denominator is 0.
      - `numerator` integer
      - `denominator` integer
    - `buckets` object: Answered inquiries by delay (business minutes).
      - `under15` integer
      - `m15_60` integer
      - `h1_4` integer
      - `h4_24` integer
      - `over24` integer
    - `fallback` integer: Answers dated only by the accept/reject fallback.
    - `by_via` object
      - `platform` integer
      - `quote` integer
      - `email` integer
      - `info_request` integer
      - `fallback` integer
  - `by_source` object[]
    - `source_key` string
    - `label` string
    - `received` integer
    - `answered` integer
    - `unanswered` integer
    - `median_business_minutes` number, nullable
    - `under_1h_rate` ReportRatio: A rate with its numerator and denominator.
      - `pct` number, nullable: 0–100, 1 decimal; `null` when the denominator is 0.
      - `numerator` integer
      - `denominator` integer
    - `buckets` object: Answered inquiries by delay (business minutes).
      - `under15` integer
      - `m15_60` integer
      - `h1_4` integer
      - `h4_24` integer
      - `over24` integer
    - `fallback` integer: Answers dated only by the accept/reject fallback.
    - `by_via` object
      - `platform` integer
      - `quote` integer
      - `email` integer
      - `info_request` integer
      - `fallback` integer
  - `by_member` object[]: By the member who gave the first signal.
    - `member_id` string, uuid
    - `name` string, nullable
    - `received` integer
    - `answered` integer
    - `unanswered` integer
    - `median_business_minutes` number, nullable
    - `under_1h_rate` ReportRatio: A rate with its numerator and denominator.
      - `pct` number, nullable: 0–100, 1 decimal; `null` when the denominator is 0.
      - `numerator` integer
      - `denominator` integer
    - `buckets` object: Answered inquiries by delay (business minutes).
      - `under15` integer
      - `m15_60` integer
      - `h1_4` integer
      - `h4_24` integer
      - `over24` integer
    - `fallback` integer: Answers dated only by the accept/reject fallback.
    - `by_via` object
      - `platform` integer
      - `quote` integer
      - `email` integer
      - `info_request` integer
      - `fallback` integer
  - `by_venue` object[]
    - `location_id` string, uuid
    - `name` string, nullable
    - `received` integer
    - `answered` integer
    - `unanswered` integer
    - `median_business_minutes` number, nullable
    - `under_1h_rate` ReportRatio: A rate with its numerator and denominator.
      - `pct` number, nullable: 0–100, 1 decimal; `null` when the denominator is 0.
      - `numerator` integer
      - `denominator` integer
    - `buckets` object: Answered inquiries by delay (business minutes).
      - `under15` integer
      - `m15_60` integer
      - `h1_4` integer
      - `h4_24` integer
      - `over24` integer
    - `fallback` integer: Answers dated only by the accept/reject fallback.
    - `by_via` object
      - `platform` integer
      - `quote` integer
      - `email` integer
      - `info_request` integer
      - `fallback` integer
  - `arrivals` object: Inquiries received by weekday (Monday first) × 2-hour slot, venue local time.
    - `weekdays` string[]
    - `slot_hours` integer
    - `grid` array[]
      - integer[]
  - `off_hours` object
    - `received` integer
    - `median_calendar_minutes` number, nullable
    - `in_hours_median_calendar_minutes` number, nullable
  - `pending` object: Inquiries of the last 30 days still to process (not bound to the period).
    - `pending` integer
    - `over_24h` integer
    - `oldest_at` string, date-time, nullable
    - `by_source` object[]
      - `source_key` string
      - `pending` integer
      - `over_24h` integer
  - `venues_with_hours` integer
  - `venues_shown` integer

## Other responses

- `400`: Validation failed (`invalid_request`). For a body that fails the schema, `details` holds `formErrors` and `fieldErrors`.
- `401`: Missing, invalid, expired or revoked bearer token (`unauthorized`).
- `403`: The token lacks the `mcp.read` scope, or its owner's role lacks the `reports.view` permission (reports carry revenue).
- `429`: Too many requests (`rate_limited`). `details.reason`: `per-ip`, `per-account-minute`, `per-account-day`, or `email_rate_limited` (email budget). Always carries `Retry-After`: wait that many seconds.

---

[API](https://skmtc.dev/joinways/apis/joinways-public-api.md) · [All operations](https://skmtc.dev/joinways/apis/joinways-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/joinways/apis/joinways-public-api/revisions/39e84309953e?raw)
