List Signals
Changed onList detected signals for a brand — statistically-tested movements (level changes and trends) in AI-visibility metrics, produced by the nightly detection sweep.
Population
By default only user-facing signals are returned: the confidence tiers high, confident, worth_a_look, and provisional. Pass an explicit tier to select a single tier, including the noise-floor tiers. An ongoing signal is re-detected daily under the same fingerprint; a multi-day date range returns only the latest detection per signal identity, so you never see day-by-day duplicates of the same issue.
Date range
anchor_from and anchor_to filter on detected_for_date, the day the nightly detection ran for, and both ends are inclusive: anchor_from=2026-09-27&anchor_to=2026-10-04 covers 8 days. They do not filter on the days the metric moved. To match the app's 7-day view, use anchor_from = today minus 6 days and anchor_to = today.
Charting a signal
Each signal's query is the request the app sends to draw its chart. POST it unchanged to queryDataV2 (/v2/query/{brand_id}) to get the same smoothed series; drop its transform for raw daily values. The chart always covers the 60 days before detected_for_date through detected_for_date, whatever anchor_from/anchor_to you listed with. Competitor signals carry the competitor's name in subject_name, and their query is already scoped to that competitor. query is null when no chart query was stored for the signal.
Tracking one issue over time
A signal's fingerprint is its durable identity: it survives nightly re-detections and direction flips of the same underlying issue. The brand's and competitors' signals on one slice share it, so also match subject_kind, competitor_id, alert_type and scope_qualifier. To follow an issue after remediation, filter by fingerprint with a wide anchor_from — a later detection in the opposite direction on the same fingerprint is the recovery (or regression) of the original movement. Combine with direction to fetch each side separately.
Sorting
sort=score_desc (default) orders by engine priority, delta_desc by largest absolute change, detected_desc by newest detection date.
Request
- Base URLhttps://api.scrunchai.com/v1
- AuthHTTP bearer
Path parameters
Query parameters
Slice granularity the signal was detected on: account (whole brand), account_platform (brand on one AI platform), topic, or topic_platform.
AI platform the signal was detected on (e.g. OpenAI). Multi-platform signals carry the (multi) sentinel; the response slice.platforms lists the real platforms.
Metric the signal fired on. Known values: presence_rate, position_top_rate, cited_domain_rate (new metrics may be added).
Detection kind: level_change (step shift) or trend (sustained drift).
Direction of the movement: up, down, or none.
Confidence tier. When omitted, only the default user-facing tiers are returned (high, confident, worth_a_look, provisional); pass an explicit tier to see a single tier, including the noise-floor tiers (low_confidence, underpowered, untested).
Whose movement the signal describes: your brand or a competitor.
Earliest detected_for_date to include (inclusive, YYYY-MM-DD).
Latest detected_for_date to include (inclusive, YYYY-MM-DD).
Only signals with this stable identity (fingerprint). A fingerprint survives nightly re-detections and direction flips of the same underlying issue, so filtering on one — with a wide anchor_from — tracks how that issue evolved after remediation. Combine with direction to separate the original movement from its recovery.
Case-insensitive substring matched against the URLs in the signal's url_movers evidence (per-URL citation movers, emitted for cited_domain_rate signals). Only signals with at least one matching mover URL are returned; signals without URL movers never match.
Sort order: score_desc (engine priority, default), delta_desc (largest absolute change first), or detected_desc (newest first).
Maximum number of signals to return.
Number of signals to skip (pagination).
Response
Successful Response
Changes
- info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status
- info
- info
added the optional property
//to the response with the status - info
added the required property
//to the response with the status
- info