---
title: "GMV Max campaign detail"
method: GET
path: "/gmv-max/campaigns/{campaign_id}"
tags: ["GMV Max"]
---

# GMV Max campaign detail

`GET /gmv-max/campaigns/{campaign_id}`

## Request

- Base URL: `https://api.reacherapp.com/public/v1`
- URL: `https://api.reacherapp.com/public/v1/gmv-max/campaigns/{campaign_id}`
- Auth: API key in header `x-api-key` and API key in header `x-shop-id`

Detail for one campaign: name, status, ad type, budget, ROAS bid, last sync time, plus the campaign's daily metric rows (spend, impressions, clicks, orders, gross_revenue, CPC, CPM, CTR, ROAS). Single shop only — the caller must address the campaign's owning shop via ``x-shop-id``. For multi-shop callers, use the ``/campaigns`` list endpoint to discover which shop owns a campaign before requesting its detail.

## Path parameters

- `campaign_id` string, required

## Response `200`

Successful Response

- GmvMaxCampaignDetailResponse: GET /gmv-max/campaigns/{id}: the campaign plus its daily metric rows.
  - `campaign_id` string, required
  - `campaign_name` string, nullable
  - `status` union: TikTok operation status: ENABLE | DISABLE | DELETE (other values may appear).
    - 'ENABLE' | 'DISABLE' | 'DELETE'
    - string
  - `shopping_ads_type` union: GMV Max objective / ads type: PRODUCT | LIVE (other values may appear).
    - 'PRODUCT' | 'LIVE'
    - string
  - `budget` number, nullable
  - `target_roas` number, nullable: Target ROAS set on the campaign (TikTok's `roas_bid`).
  - `roas_bid` number, nullable: Deprecated alias of `target_roas`; use `target_roas`.
  - `last_synced_at` string, nullable: ISO 8601 UTC of the most recent TikTok sync.
  - `currency` string, nullable: ISO currency code for the shop's region.
  - `raw_data` object, nullable: Raw TikTok campaign payload as last synced.
  - `daily_metrics` GmvMaxCampaignMetricItem[]
    - `date` string, required: ISO 8601 date (YYYY-MM-DD) for this metric row.
    - `spend` number, nullable
    - `impressions` integer, nullable
    - `clicks` integer, nullable
    - `orders` integer, nullable
    - `gross_revenue` number, nullable
    - `cpc` number, nullable
    - `cpm` number, nullable
    - `ctr` number, nullable
    - `roas` number, nullable: GMV Max ROAS for this day, computed by Reacher's sync as gross_revenue / spend (rounded to 4dp). At this grain this equals `ad_roi`.
    - `ad_roi` number, nullable: Ad ROI = gross_revenue (GMV) / spend (GMV Max spend) for this day, computed directly from this row and rounded to 4dp. Null when spend is 0 or missing (no divide-by-zero). Explicitly named for discoverability (CORE-6538); at the campaign-daily grain it is the same figure as `roas` — use whichever name is clearer. Distinct from a manual GMV/spend done against a different GMV source: both numerator and denominator here are the campaign's own GMV Max attributed values.

## Other responses

- `422`: Validation Error

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-09-19** `291230805105`: 1 breaking, 12 info
  - the response's body type changed from no type to `object` for status `200`
  - api operation id `campaign_detail_gmv_max_campaigns__campaign_id__get` removed and replaced with `gmv_max_campaign_detail`
  - added the optional property `budget` to the response with the `200` status
  - added the optional property `campaign_name` to the response with the `200` status
  - …9 more

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