---
title: "Connection and data-collection health for one shop"
method: GET
path: "/shops/{shop_id}/health"
tags: ["Account & Billing"]
---

# Connection and data-collection health for one shop

`GET /shops/{shop_id}/health`

## Request

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

Whether Reacher is still collecting for a shop, so a consumer can tell **"this shop genuinely had no activity"** from **"we stopped collecting for it"** — the two look identical on every other endpoint.

`is_collecting` is the one-field answer; `failure_reason` explains a false (banned / account_dead / shop_punished / permission_denied / affiliate_access_missing / seller_account_mismatch / region_not_set / verification_code_not_received / login_issue) and `onboarding_status` covers shops that never finished setup. `region_supported` is false for shops in a region Reacher does not operate in — those never collect at all.

`shop_id` must be one of your own shops. Send `x-shop-id: all` to poll any of them without re-issuing the request per shop.

## Path parameters

- `shop_id` integer, required: One of your shop IDs.

## Response `200`

Successful Response

- ShopConnectionHealthResponse: Connection / data-collection health for one shop.
  - `shop_id` integer, required
  - `shop_name` string, nullable
  - `status` string, nullable: The shop's plan tier (active, pro, inactive, ...).
  - `is_collecting` boolean, required: True when the shop is logged in and no failure is recorded — i.e. empty results from other endpoints mean 'no activity', not 'collection stopped'.
  - `is_logged_in` boolean, required: Whether Reacher's TikTok session for this shop is live.
  - `is_banned` boolean, required: True when TikTok has banned the shop's account.
  - `failure_reason` string, nullable: Why the connection failed, or null when healthy. One of: banned, account_dead, shop_punished, permission_denied, affiliate_access_missing, seller_account_mismatch, region_not_set, verification_code_not_received, login_issue.
  - `onboarding_status` string, nullable: Onboarding stage: onboard_pending, alias_created, added_to_affiliate_portal, onboard_complete, onboarding_failed.
  - `region` string, nullable: The shop's stored region.
  - `detected_region` string, nullable: Region inferred from the shop's activation link. May be a region Reacher does not operate in — that is the point of the field.
  - `region_supported` boolean, nullable: True when the shop's region is one Reacher operates in, false when it is not, null when there is no region signal yet.
  - `last_login_time` string, date-time, nullable: When Reacher last established a session for this shop.

## Other responses

- `422`: Validation Error

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-09-19** `291230805105`: 1 info
  - api operation id `shop_connection_health_shops__shop_id__health_get` removed and replaced with `shop_connection_health`

[Operation history](https://skmtc.dev/reacherapp/apis/reacher-data-api/changes/shops/:shop_id/health/get.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)
