---
title: "Orders, returns or chats behind one Shop Performance Score metric"
method: POST
path: "/shop-health/problems"
tags: ["Shop Health"]
---

# Orders, returns or chats behind one Shop Performance Score metric

`POST /shop-health/problems`

## Request

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

The problem items TikTok attributes to one metric on one snapshot day (default: the latest stored snapshot), paged and ordered by TikTok's page then item key. ``pagination.stored_total`` is what Reacher holds; ``upstream_total``/``upstream_truncated`` are TikTok's own count and whether it cut the list. ``snapshot_date`` is null with an empty page when nothing is stored. Single-shop only.

## Request body

- ProblemsRequest: Body for ``/shop-health/problems`` — the items behind one metric on one snapshot.
  - `metric_code` 'NRR' | 'NBFR' | 'SFCR' | 'OTDR' | 'AHT' | 'IM_DSAT', required
  - `snapshot_date` string, date, nullable: Snapshot day; defaults to the latest stored snapshot for this metric.
  - `page` integer
  - `page_size` integer
  - `version` integer, nullable: Collector run to page through, as returned in ``version`` by the first page. Pass it back on later pages, together with the ``snapshot_date`` the first page resolved, so a rerun between requests cannot duplicate, skip or silently empty the list; omitted = newest run.

## Response `200`

Successful Response

- ShopHealthProblemsResponse
  - `shop_id` integer, required
  - `metric_code` 'NRR' | 'NBFR' | 'SFCR' | 'OTDR' | 'AHT' | 'IM_DSAT', required
  - `snapshot_date` string, nullable: Resolved snapshot day; null when none is stored.
  - `pagination` PublicApiModelsScOfficialPagination, required
    - `page` integer, required
    - `page_size` integer, required
    - `stored_total` integer, required: Items stored for this snapshot and metric.
  - `upstream_total` integer, nullable: TikTok's own count of problem items for this metric.
  - `upstream_truncated` boolean, nullable
  - `version` integer, nullable: Collector run the items come from; pass back as ``version`` for later pages.
  - `items` ShopHealthProblemItem[], required
    - `item_key` string, required
    - `order_id` string, nullable
    - `return_order_id` string, nullable
    - `chat_record_id` string, nullable
    - `product_id` string, nullable
    - `sku_id` string, nullable
    - `product_name` string, nullable
    - `reason` string, nullable
    - `rating` integer, nullable
    - `review_count` integer, nullable
    - `event_time` string, nullable
    - `deliver_time` string, nullable
    - `expect_deliver_time` string, nullable
    - `actual_deliver_time` string, nullable
    - `duration_hours` number, nullable
    - `page` integer, required

## 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/problems/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)
