---
title: "Observed ad changes across the workspace's tracked brands in the last `days` days, newest first: ads started, ads confirmed inactive, and ads whose destination link changed. With `include: ads_and_offers`, also the storefront offer changes read on each brand's main storefront host (sale started, discount of 20% or more started, new code, offer ended, free-shipping threshold changed): those items carry `offer` and a null `ad`. `limit` goes up to 500: a page costs one scan whatever its size."
method: GET
path: "/v1/workspaces/{ws}/radar"
tags: ["radar"]
---

# Observed ad changes across the workspace's tracked brands in the last \`days\` days, newest first: ads started, ads confirmed inactive, and ads whose destination link changed. With \`include: ads_and_offers\`, also the storefront offer changes read on each brand's main storefront host (sale started, discount of 20% or more started, new code, offer ended, free-shipping threshold changed): those items carry \`offer\` and a null \`ad\`. \`limit\` goes up to 500: a page costs one scan whatever its size.

`GET /v1/workspaces/{ws}/radar`

## Request

- Base URL: `https://api.storequant.com`
- URL: `https://api.storequant.com/v1/workspaces/{ws}/radar`
- Auth: HTTP bearer

Observed ad changes across the workspace's tracked brands in the last `days` days, newest first: ads started, ads confirmed inactive, and ads whose destination link changed. With `include: ads_and_offers`, also the storefront offer changes read on each brand's main storefront host (sale started, discount of 20% or more started, new code, offer ended, free-shipping threshold changed): those items carry `offer` and a null `ad`. `limit` goes up to 500: a page costs one scan whatever its size. Scope `tracking:read`; cache `none`.

## Path parameters

- `ws` string, required

## Query parameters

- `days` integer
- `include` 'ads' | 'ads_and_offers'
- `limit` integer
- `cursor` string

## Response `200`

A page; `meta.cursor` is present when more follow.

- object
  - `data` object[], required
    - `change` 'ad_started' | 'ad_stopped' | 'ad_destination_changed' | 'offer_sale_started' | 'offer_discount_started' | 'offer_code_new' | 'offer_ended' | 'offer_free_shipping_threshold_changed', required
    - `date` string, date, required
    - `brand` object, required
      - `id` string, uuid, required
      - `slug` string, required
      - `name` string, required
      - `logo_url` string, uri, nullable, required
      - `url` string, uri, required
    - `ad` object, nullable, required
      - `id` string, required
      - `title` string, nullable, required
      - `link_url` string, nullable, required
      - `url` string, uri, required
    - `previous_link_url` string, nullable, required
    - `offer` object
      - `kind` 'free_shipping' | 'discount_pct' | 'discount_amt' | 'code' | 'subscribe_save' | 'bundle_bogo' | 'guarantee' | 'signup_offer' | 'sale_event', required
      - `value` string, nullable, required
      - `previous_value` string, nullable, required
      - `host` string, required
    - `freshness` object, required
      - `as_of` string, date-time, nullable, required
      - `last_reliable_at` string, date-time, nullable, required
      - `next_due` string, date-time, nullable, required
      - `freshness_tier` 'daily' | 'weekly' | 'census', required
  - `meta` object, required
    - `request_id` string, required
    - `as_of` string, date-time, required
    - `lag_hours` number
    - `cursor` string
    - `count` integer

## Other responses

- `4XX`: The one error shape.
- `5XX`: The one error shape.

---

[API](https://skmtc.dev/scrollstash/apis/storequant-api.md) · [All operations](https://skmtc.dev/scrollstash/apis/storequant-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scrollstash/apis/storequant-api/revisions/4fbe9d681caf?raw)
