---
title: "Shop Performance Score metrics (per-metric status, value, thresholds)"
method: POST
path: "/shop-health/metrics"
tags: ["Shop Health"]
---

# Shop Performance Score metrics (per-metric status, value, thresholds)

`POST /shop-health/metrics`

## Request

- Base URL: `https://api.reacherapp.com/public/v1`
- URL: `https://api.reacherapp.com/public/v1/shop-health/metrics`
- Auth: API key in header `x-api-key` and API key in header `x-shop-id`

Every stored snapshot of TikTok's six Shop Performance Score metrics for one shop in the window (NRR, NBFR, SFCR, OTDR, AHT, IM_DSAT): status (EXCELLENT/GOOD/POOR/CRITICAL/NIL), value with unit, thresholds, evaluation window, and how many problem items TikTok reported. ``latest_snapshot_date`` names the newest day; a metric absent on that day has no data. Window: a preset or explicit dates, max 365 days. Single-shop only.

## Request body

- SnapshotRequest: Body for ``/shop-health/metrics`` — every stored SPS metric snapshot in the window.
  - `preset` string, nullable: Relative window ending at the shop's newest settled day: ``<n>d`` (1-999), ``<n>m`` (1-99) or ``all``, always capped at 365 days. Mutually exclusive with explicit dates; defaults to ``30d`` when neither is given.
  - `start_date` string, date, nullable: Inclusive window start (YYYY-MM-DD).
  - `end_date` string, date, nullable: Inclusive window end (YYYY-MM-DD).
  - `metric_codes` string[], nullable: Restrict to these metric codes; all six when omitted.

## Response `200`

Successful Response

- ShopHealthMetricsResponse
  - `shop_id` integer, required
  - `start_date` string, required
  - `end_date` string, required
  - `latest_snapshot_date` string, nullable
  - `snapshot_count` integer, required: Distinct snapshot days in the window.
  - `points` ShopHealthMetricPoint[], required
    - `date` string, required: Snapshot day (YYYY-MM-DD).
    - `metric_code` 'NRR' | 'NBFR' | 'SFCR' | 'OTDR' | 'AHT' | 'IM_DSAT', required
    - `metric_name` string, nullable
    - `dimension` string, nullable
    - `score` number, nullable: 0-5; null for NIL.
    - `value` number, nullable
    - `value_unit` string, nullable
    - `status` 'EXCELLENT' | 'GOOD' | 'POOR' | 'CRITICAL' | 'NIL', required
    - `status_text` string, nullable
    - `excellent_threshold` number, nullable
    - `poor_threshold` number, nullable
    - `evaluation_window_start` string, nullable
    - `evaluation_window_end` string, nullable
    - `is_top_reason` boolean
    - `top_reason_text` string, nullable
    - `problems_upstream_total` integer, nullable
    - `problems_stored` integer, nullable
    - `problems_complete` boolean, nullable
    - `problems_truncated` boolean, nullable

## Other responses

- `422`: Validation Error

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-09-09** `a5d66477ac03`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/reacherapp/apis/reacher-data-api/changes/shop-health/metrics/post.md)

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) - [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/reacherapp/apis/reacher-data-api/revisions/63ce74b30b5a?raw)
