---
title: "List past Grid Radar finding episodes"
method: GET
path: "/api/v1/insights/history"
tags: ["Insights"]
---

# List past Grid Radar finding episodes

`GET /api/v1/insights/history`

## Request

- Base URL: `https://askthegrid.com`
- URL: `https://askthegrid.com/api/v1/insights/history`
- Auth: HTTP bearer

Returns every recorded episode whose lifetime overlaps `[from, to)`, oldest first, with the latest evidence it matched and each lifecycle transition it went through. Episodes are recorded by the scheduled evaluation, so history begins when that evaluation began. Page with `cursor`.

## Query parameters

- `iso` union
  - ''
  - string
- `from` string, date-time, required
- `to` string, date-time
- `detectors` string
- `fingerprint` string
- `limit` union
  - number
  - string
- `cursor` string
- `model` union
  - boolean
  - '0' | '1' | 'true' | 'false'

## Response `200`

Success

- object
  - `iso` 'ERCOT' | 'NYISO' | 'CAISO' | 'PJM' | 'MISO' | 'ISONE' | 'SPP' | 'BPAT' | 'TVA' | 'DUK' | 'CPLE' | 'CPLW' | 'FPC' | 'FPL' | 'SOCO' | 'BCA' | 'AESO' | 'IESO' | 'CENACE' | 'HQ' | 'BCH' | 'MHEB' | 'SPC' | 'NBSO' | 'NSIESO', required
  - `from` string, required
  - `to` string, required
  - `entries` object[], required
    - `origin` 'live' | 'backfill', required
    - `episode` object, required
      - `id` string, required
      - `status` 'confirming' | 'active' | 'recovering' | 'resolved' | 'unevaluable', required
      - `onsetAt` string, nullable, required
      - `firstDetectedAt` string, required
      - `lastSeenAt` string, required
      - `lastEvaluatedAt` string, required
      - `resolvedAt` string, nullable, required
      - `unevaluableReason` string, nullable, required
      - `peakSeverity` 'critical' | 'watch' | 'normal', required
      - `peakMateriality` number, required
      - `revision` number, required
    - `finding` object, required
      - `id` string, required
      - `fingerprint` string, required
      - `revision` string, required
      - `detectorId` 'operator_condition' | 'system_price' | 'binding_constraint' | 'price_separation' | 'current_headroom' | 'next_day_capacity' | 'load_forecast_error' | 'load_forecast_skill' | 'renewable_forecast_error' | 'system_frequency' | 'tie_congestion' | 'net_load_surprise' | 'net_load_ramp_risk' | 'scarcity_pressure' | 'local_congestion' | 'cross_market_spread' | 'interface_loading' | 'node_price' | 'forecast_price_spike' | 'forecast_negative_price' | 'demand_record' | 'reliability_adder' | 'reserve_decline', required
      - `detectorVersion` number, required
      - `iso` 'ERCOT' | 'NYISO' | 'CAISO' | 'PJM' | 'MISO' | 'ISONE' | 'SPP' | 'BPAT' | 'TVA' | 'DUK' | 'CPLE' | 'CPLW' | 'FPC' | 'FPL' | 'SOCO' | 'BCA' | 'AESO' | 'IESO' | 'CENACE' | 'HQ' | 'BCH' | 'MHEB' | 'SPC' | 'NBSO' | 'NSIESO', required
      - `subject` object, required
        - `kind` 'grid' | 'constraint' | 'settlement_point' | 'seam' | 'forecast' | 'fuel' | 'dc_tie' | 'interface' | 'asset' | 'portfolio' | 'site' | 'operator_event' | 'weather_event', required
        - `id` string, required
        - `label` string, required
      - `claimClass` 'observed' | 'calculated', required
      - `marketRun` 'real_time' | 'day_ahead' | 'operator_published', required
      - `horizon` 'current' | 'intraday' | 'next_day', required
      - `evidenceStatus` 'live' | 'operator_published', required
      - `knownAt` string, nullable, required
      - `detectedAt` string, required
      - `knowledgeCutoff` string, required
      - `containsCustomerData` false, required
      - `status` 'active' | 'resolved', required
      - `severity` 'critical' | 'watch' | 'normal', required
      - `score` number, required
      - `materiality` object
        - `score` number, required
        - `components` object[], required
          - `key` string, required
          - `label` string, required
          - `score` number, required
          - `weight` number, required
          - `contribution` number, required
      - `headline` string, required
      - `detail` string, required
      - `soWhat` string, required
      - `metric` object, required
        - `value` number, required
        - `unit` string, required
        - `display` string, required
      - `firstObservedAt` string, nullable, required
      - `observedAt` string, required
      - `evidence` object[], required
        - `provider` string, required
        - `datasetId` string, required
        - `recordId` string
        - `observedAt` string, required
        - `fields` string[], required
      - `methodology` object
        - `version` number, required
        - `interpretation` 'reported' | 'calculated' | 'statistical' | 'model_inferred', required
        - `causalStrength` 'none' | 'component' | 'constraint' | 'attribution', required
        - `formula` string
        - `inputs` object[], required
          - `id` string, required
          - `label` string, required
          - `value` union, required
            - number
            - string
          - `unit` string
          - `observedAt` string, required
          - `issuedAt` string
          - `provider` string, required
          - `datasetId` string, required
          - `recordId` string
        - `assumptions` string[]
      - `actions` object, required
        - `investigate` object, required
          - `href` string, required
          - `label` string, required
          - `surface` 'radar' | 'map' | 'alerts' | 'reports', required
          - `tab` string
          - `widgetId` string
        - `follow` object
          - `href` string, required
          - `label` string, required
          - `surface` 'radar' | 'map' | 'alerts' | 'reports', required
          - `tab` string
          - `widgetId` string
        - `createAlert` object
          - `href` string, required
          - `label` string, required
          - `surface` 'radar' | 'map' | 'alerts' | 'reports', required
          - `tab` string
          - `widgetId` string
        - `addToBrief` object
          - `href` string, required
          - `label` string, required
          - `surface` 'radar' | 'map' | 'alerts' | 'reports', required
          - `tab` string
          - `widgetId` string
      - `suggestedQuestion` string, required
      - `episode` object
        - `id` string, required
        - `status` 'confirming' | 'active' | 'recovering' | 'resolved' | 'unevaluable', required
        - `onsetAt` string, nullable, required
        - `firstDetectedAt` string, required
        - `lastSeenAt` string, required
        - `lastEvaluatedAt` string, required
        - `resolvedAt` string, nullable, required
        - `unevaluableReason` string, nullable, required
        - `peakSeverity` 'critical' | 'watch' | 'normal', required
        - `peakMateriality` number, required
        - `revision` number, required
    - `transitions` object[], required
      - `id` number, required
      - `kind` 'opened' | 'activated' | 'recovering' | 'resumed' | 'resolved' | 'became_unevaluable' | 'escalated' | 'deescalated', required
      - `fromStatus` 'confirming' | 'active' | 'recovering' | 'resolved' | 'unevaluable', nullable, required
      - `toStatus` 'confirming' | 'active' | 'recovering' | 'resolved' | 'unevaluable', required
      - `severity` 'critical' | 'watch' | 'normal', required
      - `evaluatedAt` string, required
  - `nextCursor` string, nullable, required

## Other responses

- `400`: The request did not match the contract.
- `401`: Missing or invalid credentials.
- `429`: Rate limit exceeded. Wait `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` report the budget. Signed-in sessions and API keys have larger budgets than anonymous callers.

---

[API](https://skmtc.dev/askthegrid/apis/ask-the-grid-api.md) · [All operations](https://skmtc.dev/askthegrid/apis/ask-the-grid-api/llms.txt) · [OpenAPI document](https://skmtc.dev/askthegrid/apis/ask-the-grid-api/revisions/9cd80115e395?raw)
