Overview
The Signals API exposes Scrunch’s nightly detection sweep as a queryable feed. Each signal is a statistically-tested movement — a level change or trend — in one of your brand’s AI visibility metrics on a specific slice of your data (a platform, topic, or the account as a whole). Use it to feed alerts into your own tools, drive weekly briefs, or automate follow-up on the same “what changed” events surfaced in the Scrunch dashboard.What the Signals API includes
- Detected level changes and trends on core metrics (
presence_rate,position_top_rate,cited_domain_rate) - A confidence tier for each signal (
high,confident,worth_a_look,provisional), with noise-floor tiers available on request - Human-readable narrative: what happened, why it matters, and what to do
- A stable fingerprint for each underlying issue — the same signal keeps its fingerprint across nightly re-detections, so reactions and downstream state survive
- Reactions (
useful,not_useful,dismissed,actioned) with optional free-text reasons, listable brand-wide for team-level reporting - Anchor dates (distinct detection days) for building date pickers and polling loops
When to use the Signals API
Use the Signals API when you need to:- Post “what changed this week” summaries to Slack, email, or a stakeholder digest
- Route detected drops on a specific platform, topic, or metric into an incident tracker
- Export the team’s reactions on signals for reporting or feedback loops
- Build a custom alerting dashboard that mirrors the Scrunch Signals feed
Endpoints
All endpoints require a bearer token with the
query scope. Reaction writes additionally require a user token (JWT) — API keys have no user identity to attribute a reaction to and receive 403. See Authentication.
Filters
The list endpoint accepts:
The reactions list endpoint supports
fingerprint (all reactions on one signal identity) and reaction (all reactions of a given value).
Example: list recent high-confidence signals
Example: get one signal’s full narrative
getSignal returns 404 for IDs that exist but aren’t user-facing (non-fired detections or cluster-child rows) — the same population rule as the list endpoint.
Example: react to a signal
Reactions are keyed on the signal’s stablefingerprint, so a thumbs-up survives the nightly re-detection of the same underlying issue. This call requires a user token (JWT).
DELETE /v1/{brand_id}/signals/{signal_id}/reaction.
Example: list team reactions
The reactions list is brand-wide — it returns every user’s reactions, not just the caller’s — so an integration can export the team’s aggregate feedback.fingerprint to pull every reaction on one signal identity across re-detections.
Example: poll for new detection dates
Signal identity and dedupe
Every signal carries afingerprint — a hash over its slice and metric — that stays stable across the nightly re-detection of the same underlying issue. Two implications:
- List responses dedupe to the latest detection. Over a multi-day
anchor_from/anchor_towindow you see one row per fingerprint, not one per day. - Reactions follow the fingerprint, not the row ID. A
usefulset today still applies to tomorrow’s re-detection of the same signal.
fingerprint (not the numeric id) if you need to correlate signals across runs in your own system.
Best practices
- Poll
/signals/anchorsfirst to check whether a new detection day exists before pulling the full list. - Sort by
detected_descfor “what’s new” digests,score_descfor “what matters most”, anddelta_descwhen ranking by raw movement. - Store the
fingerprintalongside your internal record so reactions and follow-up state survive re-detections. - Use the reactions list to close the loop on “which alerts drove action” — filter by
reaction=actionedfor a running list of resolved signals. - For automated triage from an AI assistant, the same feed is available through the Scrunch MCP server via the
list_signalsandget_signaltools.