# First response times `GET /api/reporting/v1/metrics/first-response` (operationId: `firstResponseMetrics`, group: Reporting) How long customers waited for a first reply, and for a first human reply, across the workspace: count, median, 90th percentile and mean. An episode is a wait that begins with the first customer message in a chat or the first after any outbound message. Group by day (in a time zone you choose) or by the team member who gave the first human reply. Part of the full API, which is included in the Scale plan. Any one of these scopes is enough: `inbox`, `team_management`, `analytics`, `inbox:read`, `team_management:read`, `analytics:read`. Team accountability data: who opened, who replied, how fast. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `since` | query | string (date-time) | no | Start of the window: an ISO 8601 timestamp or a date (YYYY-MM-DD, start of that UTC day). Default: 7 days ago. Alias: from. | | `to` | query | string (date-time) | no | End of the window (ISO 8601 or date). Default: now. Alias: until. | | `group_by` | query | string | no | Break the result down. One of: `none`, `day`, `agent`. Default none. | | `tz` | query | string | no | IANA time zone for day grouping. Default UTC. | **Response 200**: OK (schema `FirstResponseMetrics`) | Field | Type | Description | | --- | --- | --- | | `window` | Window | | | `window.from` | string (date-time) | Start of the window. | | `window.to` | string (date-time) | End of the window. | | `time_zone` | string | Time zone used for day grouping. | | `episodes` | integer | Waits that began in the window: the first customer message in a chat, or the first after any outbound message. | | `unanswered_episodes` | integer | Episodes with no delivered reply. | | `first_response` | object | | | `first_response.count` | integer | Number of episodes measured. | | `first_response.median_seconds` | integer, nullable | Median, seconds. | | `first_response.p90_seconds` | integer, nullable | 90th percentile, seconds. | | `first_response.mean_seconds` | integer, nullable | Mean, seconds. | | `first_human_response` | object | | | `first_human_response.count` | integer | Number of episodes measured. | | `first_human_response.median_seconds` | integer, nullable | Median, seconds. | | `first_human_response.p90_seconds` | integer, nullable | 90th percentile, seconds. | | `first_human_response.mean_seconds` | integer, nullable | Mean, seconds. | | `truncated` | boolean | True when more than 100,000 episodes were in the window; narrow it. | | `groups` | array of object | Present when group_by is day or agent. | | `groups[][].day` | string | YYYY-MM-DD in time_zone (group_by=day). | | `groups[][].episodes` | integer | | | `groups[][].agent` | MemberRef | | | `groups[][].agent.user_id` | integer | Team member user id. | | `groups[][].agent.name` | string, nullable | Display name. | | `groups[][].first_response` | object | | | `groups[][].first_response.count` | integer | Number of episodes measured. | | `groups[][].first_response.median_seconds` | integer, nullable | Median, seconds. | | `groups[][].first_response.p90_seconds` | integer, nullable | 90th percentile, seconds. | | `groups[][].first_response.mean_seconds` | integer, nullable | Mean, seconds. | | `groups[][].first_human_response` | object | | | `groups[][].first_human_response.count` | integer | Number of episodes measured. | | `groups[][].first_human_response.median_seconds` | integer, nullable | Median, seconds. | | `groups[][].first_human_response.p90_seconds` | integer, nullable | 90th percentile, seconds. | | `groups[][].first_human_response.mean_seconds` | integer, nullable | Mean, seconds. | Example: ```json { "window": { "from": "2026-09-25T09:30:00.000Z", "to": "2026-10-02T09:30:00.000Z" }, "time_zone": "Asia/Kolkata", "episodes": 5, "unanswered_episodes": 2, "first_response": { "count": 3, "median_seconds": 100, "p90_seconds": 241, "mean_seconds": 121 }, "first_human_response": { "count": 3, "median_seconds": 252, "p90_seconds": 304, "mean_seconds": 221 }, "truncated": false, "groups": [ { "agent": { "user_id": 41, "name": "Anita" }, "first_human_response": { "count": 2, "median_seconds": 282, "p90_seconds": 309, "mean_seconds": 282 } } ] } ``` **Errors specific to this call.** The common ones (401, 403, 429 and the rest) are in the [Errors guide](https://inboxwa.online/docs/api/guide/errors.md). | Status | error | When | | --- | --- | --- | | 400 | `invalid_group_by` | group_by is not none, day or agent. | | 400 | `invalid_tz` | tz is not an IANA time zone. | | 403 | `workspace_metrics_restricted` | The caller is limited to assigned chats, so workspace-wide metrics are not available. | Part of the InboxWA API reference: https://inboxwa.online/docs/api . Full reference as one document: https://inboxwa.online/docs/api.md . OpenAPI: https://inboxwa.online/openapi.json