---
title: "Rank market or saved-watchlist news activity"
method: GET
path: "/api/signals/snapshot/"
tags: ["radar"]
---

# Rank market or saved-watchlist news activity

`GET /api/signals/snapshot/`

Descriptive news-activity beta. Free delay 3600 seconds; Basic 900 seconds; Pro no added delay. Tier and watchlist owner come from authentication, never query parameters. The public API requires a Bearer API key and uses the normal request quotas. The whole snapshot, including supporting headlines and company names, is selected at or before wall-clock time minus the tier delay. Snapshots refresh every minute and are retained for three hours. Collection and enrichment add processing time. preview_reference_at is null in live mode; a frozen development preview uses that historical clock instead and explicitly reports freshness.mode=historical_preview. as_of is the actual selected cutoff. Only tickers with current-window news appear. snapshot_id identifies immutable content including public evidence metadata. freshness states the effective delay, generation time, source check time and latest enrichment observed. Missing history or a producer more than four minutes behind returns 503, never newer data in place of a delayed snapshot. watchlist_coverage separates known quiet names from names absent from the snapshot; absent does not mean an invalid symbol. Summary is scoped before search/ticker/sentiment/min_z filters and pagination; universe describes the entire stored snapshot. Null metrics stay null. Collection coverage is unverified; these calculations are not point-in-time backtests or confirmed alerts. Historical corrections can affect the model baseline. All responses: private, no-store. Unknown or repeated query parameters are rejected.

## Query parameters

- `window` '4h' | '24h'
- `scope` 'market' | 'watchlist'
- `market` 'all' | 'us_equity' | 'crypto' | 'international'
- `ticker` string
- `tickers` string
- `search` string
- `sort` 'score' | 'stories' | 'model_stories' | 'sentiment' | 'sentiment_change'
- `order` 'asc' | 'desc'
- `sentiment` 'all' | 'positive' | 'negative' | 'mixed'
- `min_z` number, nullable
- `limit` integer
- `offset` integer
- `cursor` string

## Response `200`

Eligible snapshot and effective access rules

- RadarSnapshot
  - `snapshot_id` string, required
  - `methodology_version` string, required
  - `research_only` boolean
  - `point_in_time` boolean
  - `as_of` string, date-time, required
  - `preview_reference_at` string, date-time, nullable, required
  - `freshness` RadarSnapshotFreshness, required
    - `mode` 'historical_preview' | 'live'
    - `effective_delay_seconds` integer, required
    - `generated_at` string, date-time, nullable
    - `source_watermark` string, date-time, nullable
    - `source_checked_at` string, date-time, nullable
    - `unavailable_reason` string, nullable
  - `access` RadarSignalAccess, required
    - `tier` 'free' | 'basic' | 'pro', required
    - `delay_seconds` integer, required
    - `scope` 'market' | 'watchlist', required
    - `watchlist_count` integer, nullable, required
    - `watchlist_limit` integer, nullable, required
  - `window` '4h' | '24h', required
  - `parameters` RadarCalculationParams, required
    - `effective_at` integer, required
    - `window_seconds` integer, required
    - `baseline_seconds` integer, required
    - `half_life_seconds` integer, required
    - `min_relevance` integer, required
    - `max_story_tickers` integer, required
    - `prior_stories` number, required
    - `min_baseline_stories` integer, required
    - `min_baseline_days` integer, required
    - `min_sentiment_stories` integer, required
    - `min_sentiment_coverage` number, required
    - `spike_tail` number, required
  - `limitations` string[], required
  - `input_hashes` object, required
  - `universe` integer, required
  - `summary` RadarSnapshotSummary, required
    - `active_tickers` integer, required
    - `scored_tickers` integer, required
    - `elevated_tickers` integer, required
    - `verified_candidates` integer, required
    - `collection_unverified` integer, required
  - `watchlist_coverage` RadarWatchlistCoverage, required
    - `no_recent_news` string[], required
    - `not_in_snapshot` string[], required
  - `total` integer, required
  - `offset` integer, required
  - `next_offset` integer, nullable, required
  - `next_cursor` string, nullable, required
  - `previous_cursor` string, nullable, required
  - `results` RadarReading[], required
    - `ticker` string, required
    - `sector` string, nullable, required
    - `market` string, nullable, required
    - `market_exposure_baseline` integer, required
    - `market_exposure_current` integer, required
    - `collection` RadarCollection, required
      - `status` 'healthy' | 'unverified', required
      - `reasons` string[], required
      - `required_channels` string[], required
    - `stories` integer, required
    - `articles` integer, required
    - `outlets` integer, required
    - `model_stories` integer, required
    - `model_outlets` integer, required
    - `baseline_stories` integer, required
    - `baseline_active_days` integer, required
    - `stories_per_window_unadjusted` number, required
    - `stories_expected` number, nullable, required
    - `tail_probability` number, nullable, required
    - `news_z` number, nullable, required
    - `anomaly_reason` string, nullable, required
    - `candidate_news_spike` boolean, required
    - `sent` RadarSentiment, required
      - `value` number, nullable, required
      - `usable_stories` integer, required
      - `coverage` number, nullable, required
      - `reason` string, nullable, required
    - `sent_prev` RadarSentiment, required
      - `value` number, nullable, required
      - `usable_stories` integer, required
      - `coverage` number, nullable, required
      - `reason` string, nullable, required
    - `sent_delta` number, nullable, required
    - `evidence_uids` string[], required
    - `name` string, nullable, required
    - `evidence` RadarEvidence[], required
      - `uid` string, required
      - `title` string, required
      - `url` string, required
      - `source_domain` string, required
      - `time_published` string, date-time, required

## Other responses

- `400` — Invalid, unknown or repeated parameter
- `401` — Invalid authentication or watchlist requested without authentication
- `404` — Radar is disabled
- `409` — Cursor context changed or pinned snapshot expired; restart without cursor
- `429` — Account burst or daily request quota reached; respect Retry-After
- `503` — No valid eligible snapshot; never substitutes newer data

## Changes

- **2026-09-20** `1d7682bf33f0` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/alphai/apis/alphai-rest-api/changes/api/signals/snapshot/get.md)

---

[API](https://skmtc.dev/alphai/apis/alphai-rest-api.md) · [All operations](https://skmtc.dev/alphai/apis/alphai-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/alphai/apis/alphai-rest-api/revisions/1d7682bf33f0?raw)
