---
title: "Activities created through Reacher"
method: GET
path: "/promotions/activities"
tags: ["Promotions"]
---

# Activities created through Reacher

`GET /promotions/activities`

## Request

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

Reacher's records of the activities it created for this shop, newest first, with the saga `state` and TikTok's last-seen status. Activities created in Seller Center are not listed here; read one live with `GET /promotions/activities/{activity_id}`.

## Query parameters

- `page` integer
- `page_size` integer

## Response `200`

Successful Response

- PromotionActivitiesResponse: Activities created through Reacher for one shop, newest first.
  - `shop_id` integer, required
  - `tts_shop_id` string, required
  - `data` PromotionActivityRecordOut[], required
    - `activity_id` string, nullable: TikTok's id; null only while the create is in flight.
    - `idempotency_key` string, required
    - `state` 'creating' | 'attach_pending' | 'attach_failed' | 'ready' | 'needs_reconciliation' | 'deactivated' | 'failed', required: creating: no id yet · attach_pending: id known, products not all attached (retry) · attach_failed: TikTok rejected an attach (fix and retry) · ready: every product attached · needs_reconciliation: TikTok's answer was lost twice; check Seller Center · deactivated · failed.
    - `tiktok_status` string, nullable: TikTok's status when last seen (NOT_START, ONGOING, EXPIRED, DEACTIVATED).
    - `title` string, required
    - `activity_type` string, required
    - `product_level` string, required
    - `begin_time` string, required: ISO timestamp (UTC).
    - `end_time` string, required: ISO timestamp (UTC).
    - `product_count` integer, required: Products in the create request.
    - `attached_items` string[], required: Items TikTok has confirmed on the activity: product ids, or `product_id:sku_id` at VARIATION level. Kept in step by attach, reprice and remove calls made through Reacher.
    - `last_error` string, nullable
    - `created_at` string, required
    - `updated_at` string, required
  - `pagination` PublicApiCorePaginationPaginationMeta, required: Pagination metadata returned in responses.
    - `total_count` integer, required
    - `page` integer, required
    - `page_size` integer, required
    - `total_pages` integer, required

## Other responses

- `400`: Multi-shop key or invalid id.
- `403`: The shop's TikTok grant lacks `seller.promotion.info` (`SCOPE_NOT_GRANTED`).
- `404`: No such activity or coupon.
- `409`: The shop's TikTok connection needs re-authorizing (`SHOP_NOT_CONNECTED`).
- `422`: Validation Error
- `429`: TikTok is rate limiting this shop (`UPSTREAM_RATE_LIMITED`).
- `502`: TikTok did not complete the request (`UPSTREAM_ERROR`). For a UK shop, with `details.reason` and `Retry-After`, its customer-service token could not be renewed in time.

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-10-28** `b703ac3d3141`: 2 info
  - added the non-success response with the status `409`
  - added the non-success response with the status `502`
- **2026-10-25** `84094c04c9fd`: 1 info
  - endpoint added

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