---
title: "Read the help desk analytics"
method: GET
path: "/products/help-desk/analytics"
tags: ["help-desk"]
---

# Read the help desk analytics

`GET /products/help-desk/analytics`

## Request

- Base URL: `https://api.sparkvault.com/v1`
- URL: `https://api.sparkvault.com/v1/products/help-desk/analytics`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sparkvault/apis/sparkvault-api/docs/products/help-desk/analytics/get.ts> (a function with typed inputs; its response is checked against the schema)

One range of account-local days, at most 366 of them, read from the desk's daily counts: tickets created, resolved and reopened, first response and resolution times (median, 90th percentile and mean, by rank within their buckets), the backlog each day, the tickets created by weekday and hour, and each team's tickets, each figure beside the same for the period of equal length just before. Spam and duplicates are left out. With `team_id`, the figures are that team's. The operator breakdown is answered to org admins alone. Any member, from their own session.

## Query parameters

- `from` string, required
- `to` string, required
- `team_id` string
- `operator_id` string

## Response `200`

The report.

- object
  - `data` HelpDeskAnalyticsReport, required: One range's analytics, in calendar time and the organization's time zone. Durations are counted in 15 buckets bounded at 60, 300, 900, 1800, 3600, 7200, 14400, 28800, 86400, 172800, 259200, 604800, 1209600, 2592000 seconds, the last open.
    - `kpis` HelpDeskAnalyticsFigures, required: A period's headline figures. Times are whole seconds; null for a time with nothing to measure.
      - `created` integer, required: Tickets created; spam and duplicates are left out.
      - `closed` integer, required: Tickets resolved.
      - `reopened` integer, required
      - `feedback_positive` integer, required: Tickets with positive customer feedback, attributed to the first submission day.
      - `feedback_negative` integer, required: Tickets with negative customer feedback, attributed to the first submission day.
      - `feedback_total` integer, required: Positive plus negative ratings. Changing a vote replaces the previous sample.
      - `satisfaction_pct` number, nullable, required: Positive ratings divided by all ratings, times 100. Null when there are no ratings; never an average of operator percentages.
      - `median_frt_s` integer, nullable, required: Median first response time: creation to the first public operator reply, on the tickets customers opened.
      - `p90_frt_s` integer, nullable, required
      - `mean_frt_s` integer, nullable, required
      - `median_res_s` integer, nullable, required: Median time from creation to the first resolution.
      - `p90_res_s` integer, nullable, required
      - `mean_res_s` integer, nullable, required
      - `backlog_end` integer, nullable, required: Tickets not closed at the end of the period; null for one team's report.
      - `sample` object, required
        - `frt` integer, required: First responses the times stand on.
        - `res` integer, required: Resolutions the times stand on.
    - `previous` HelpDeskAnalyticsFigures, required: A period's headline figures. Times are whole seconds; null for a time with nothing to measure.
      - `created` integer, required: Tickets created; spam and duplicates are left out.
      - `closed` integer, required: Tickets resolved.
      - `reopened` integer, required
      - `feedback_positive` integer, required: Tickets with positive customer feedback, attributed to the first submission day.
      - `feedback_negative` integer, required: Tickets with negative customer feedback, attributed to the first submission day.
      - `feedback_total` integer, required: Positive plus negative ratings. Changing a vote replaces the previous sample.
      - `satisfaction_pct` number, nullable, required: Positive ratings divided by all ratings, times 100. Null when there are no ratings; never an average of operator percentages.
      - `median_frt_s` integer, nullable, required: Median first response time: creation to the first public operator reply, on the tickets customers opened.
      - `p90_frt_s` integer, nullable, required
      - `mean_frt_s` integer, nullable, required
      - `median_res_s` integer, nullable, required: Median time from creation to the first resolution.
      - `p90_res_s` integer, nullable, required
      - `mean_res_s` integer, nullable, required
      - `backlog_end` integer, nullable, required: Tickets not closed at the end of the period; null for one team's report.
      - `sample` object, required
        - `frt` integer, required: First responses the times stand on.
        - `res` integer, required: Resolutions the times stand on.
    - `series` object[], required: Every day of the range.
      - `day` string, required: YYYY-MM-DD
      - `created` integer, required
      - `closed` integer, required
      - `backlog` integer, nullable, required: Tickets not closed at the end of the day; null for one team's report.
      - `feedback_positive` integer, required
      - `feedback_negative` integer, required
      - `feedback_total` integer, required
      - `satisfaction_pct` number, nullable, required
    - `frt_buckets` integer[], required: First responses per bucket.
    - `res_buckets` integer[], required: Resolutions per bucket.
    - `heatmap` array[], required: Tickets created by weekday (Monday first) and hour (midnight first): seven rows of 24.
      - integer[]
    - `teams` object[], required: Each team's tickets, most created first.
      - `team_id` string, required
      - `created` integer, required
      - `closed` integer, required
      - `feedback_positive` integer, required
      - `feedback_negative` integer, required
      - `feedback_total` integer, required
      - `satisfaction_pct` number, nullable, required
    - `operators` HelpDeskOperatorFigures[]: Each operator's work; only an org admin reads it.
      - `assigned` integer, required
      - `replies` integer, required: Public replies sent to customers.
      - `closed` integer, required: Tickets they resolved.
      - `reopened` integer, required: Reopens of tickets assigned to them.
      - `median_frt_s` integer, nullable, required: On the tickets they replied to first.
      - `mean_frt_s` integer, nullable, required
      - `median_res_s` integer, nullable, required: On the tickets they resolved.
      - `mean_res_s` integer, nullable, required
      - `first_responses` integer, required: Sample size for first-response readings.
      - `resolutions` integer, required: Sample size for resolution readings.
      - `feedback_positive` integer, required: Positive ratings credited to the author of the rated public reply.
      - `feedback_negative` integer, required
      - `feedback_total` integer, required
      - `satisfaction_pct` number, nullable, required: Positive share of this operator's ratings; null when unrated.
    - `partial` true: Present when the read budget cut the report short: it counts the days it read.
  - `meta` ResponseMeta: Envelope metadata present on every successful response.
    - `api_version` string
    - `request_id` string
    - `response_ms` integer
    - `timestamp` integer: Unix seconds.
    - `pools` object: Storage and bandwidth capacity snapshot for the account.
    - `billing` object
      - `past_due` boolean
    - `quota` object: This minute of the account request budget. Present on authenticated success responses that passed the throttle; absent otherwise.
      - `limit` integer
      - `used` integer
      - `remaining` integer
      - `resets_at` integer: Unix seconds.

## Other responses

- `400`: VALIDATION_ERROR — a day is missing or not a calendar day, `from` is after `to`, the range passes 366 days, or `team_id` or `operator_id` is malformed.
- `401`: AUTHENTICATION_ERROR — missing or invalid credentials.
- `403`: FORBIDDEN — the credential is an API key or an impersonated session: the help desk is worked from a member's own session. HELP_DESK_SUBSCRIPTION_REQUIRED — a change that needs the help desk, on an organization that does not hold it.

## Changes

- **2026-10-28** `a9a10e328ba5`: 12 info
  - the response property `error/details` became required for the status `400`
  - the response property `error/details` became required for the status `401`
  - the response property `error/details` became required for the status `403`
  - the response property `meta` became required for the status `400`
  - …8 more
- **2026-10-28** `56d7c265a77a`: 3 breaking
  - the response property `error/details` became nullable for the status `400`
  - the response property `error/details` became nullable for the status `401`
  - the response property `error/details` became nullable for the status `403`
- **2026-10-27** `ac44ec1f8cfa`: 6 breaking, 19 info
  - removed the required property `data/operators/items/assigned` from the response with the `200` status
  - removed the required property `data/operators/items/closed` from the response with the `200` status
  - removed the required property `data/operators/items/median_frt_s` from the response with the `200` status
  - removed the required property `data/operators/items/median_res_s` from the response with the `200` status
  - …21 more
- **2026-10-23** `ad4c62db5e08`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sparkvault/apis/sparkvault-api/changes/products/help-desk/analytics/get.md)

---

[API](https://skmtc.dev/sparkvault/apis/sparkvault-api.md) - [All operations](https://skmtc.dev/sparkvault/apis/sparkvault-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sparkvault/apis/sparkvault-api/revisions/97cfadccd0c0?raw)
