Why Continuous Regimes Miss the Token Unlock Three Days Out

Most of our regime endpoints read a state — funding is hot, breadth is thinning, RSI is stretched. They answer 'what is the market doing right now?' They are continuous, per-symbol, and computed off klines.

None of them can see the $80M token unlock that clears in three days. None of them knows FOMC prints on Wednesday. None of them flags that USDC just slipped 40bps off peg this morning. Those are discrete, dated catalysts — known in advance, sitting on a forward time axis — and a continuous regime is structurally blind to them.

The Event / Catalyst regime fills that gap. It's Regime #5 of 14 in our regime taxonomy and the only one whose primary payload is a forward calendar, not a snapshot. One call returns every dated catalyst in the next 30 days plus a market-wide event_risk_score from 0-100.

What the Event Regime Endpoint Returns

GET /api/v1/event/regime returns the forward calendar plus the composite. Each item is a dated catalyst carrying its event_type, days_until, directional bias, magnitude (0-1), and the affected symbols.

curl -H "X-API-Key: cdk_live_yourkey" \
  "https://cryptodataapi.com/api/v1/event/regime?window_days=7"

A trimmed response:

{
  "items": [
    {
      "event_type": "unlock",
      "title": "ARB token unlock (2.31% of FDV)",
      "date": "2026-06-14",
      "days_until": 3,
      "symbols": ["ARB"],
      "bias": "short",
      "magnitude": 0.46,
      "unlocked_value_usd": 81250000.0,
      "pct_of_fdv": 0.02310,
      "source": "defillama"
    },
    {
      "event_type": "macro_print",
      "title": "FOMC release",
      "date": "2026-06-17",
      "days_until": 6,
      "symbols": [],
      "bias": "risk_flag",
      "magnitude": 0.967,
      "macro_class": "FOMC",
      "source": "fred"
    }
  ],
  "count": 2,
  "window_days": 7,
  "event_risk_score": 41.8,
  "band": "elevated",
  "timestamp": "2026-06-11T08:00:00+00:00"
}

That payload tells an agent two tradeable things in one read: ARB faces a 2.31%-of-FDV supply cliff in 3 days (short bias), and FOMC lands in 6 days (a risk_flag that says de-risk, not pick a side).

The Three Catalyst Baskets, Decoded

Every catalyst belongs to one of three structured-data baskets. No news, no NLP — just dated, numeric inputs that replay cleanly. Each basket fixes its own bias rule:

Macro-class weights are fixed and load-bearing for the macro sub-score:

Event typeBiasClass weightSource
unlockshort (or neutral < 0.5% FDV)severity-scaledDefiLlama emissions
macro_print — FOMCrisk_flag1.0macro calendar
macro_print — CPIrisk_flag0.9macro calendar
macro_print — NFPrisk_flag0.8macro calendar
macro_print — PCErisk_flag0.7macro calendar
macro_print — PPIrisk_flag0.6macro calendar
depegshort majors / neutral minorsseverity-scaledCoinGecko stable prices

How Is the Event Risk Score Calculated?

The composite has a baseline of 0, not 50 — event risk is absence-by-default. No imminent catalysts means a genuinely quiet market, so the score should read near zero, and it does.

The formula is a weighted blend of three sub-scores, each 0-100:

event_risk_score = 0.40·unlock_subscore
                 + 0.25·macro_subscore
                 + 0.35·depeg_subscore

Crucially, the weights re-normalize over whichever feeds are live. If the depeg feed is down, the composite divides over the remaining 0.40 + 0.25 weight instead — a dead feed must never read as 'no event risk'. The partial flag and inputs_available list tell you exactly which feeds contributed.

GET /api/v1/event/regime/score returns the composite plus all three sub-scores. Bands map the score to a label:

BandScore rangeRead
dormant< 10nothing on the radar
quiet10 – 29minor catalysts, low urgency
elevated30 – 54a real catalyst is approaching
heavy55 – 79large unlock or major print imminent
critical≥ 80systemic depeg or stacked catalysts

The score field carries unlock_subscore, macro_subscore, depeg_subscore, plus events_7d and events_30d counts so you can size urgency at a glance.

The Live-Only Sector-Rotation Sidecar

The /event/regime/score payload carries one extra block that sits outside the composite by design: sector_rotation.

The sector_rotation sidecar ranks CoinGecko category leaders and laggards by 24h market-cap change. It is live-only: it lands null on backfilled days because it has no clean historical snapshot.

Keeping it out of the composite is deliberate. It means the live and replayed event_risk_score are computed by the same formula and can't silently diverge — the same discipline we apply to the meme regime's fresh-issuance feed.

How Do I Query Just the Catalysts I Care About?

GET /api/v1/event/calendar is the query surface. It looks up to 30 days out and filters by type, symbol, bias, min_magnitude, and window_days.

GoalQuery string
Big unlocks only (next 14d)?type=unlock&min_magnitude=0.3&window_days=14
All macro prints this week?type=macro_print&window_days=7
Catalysts touching ARB?symbol=ARB
Short-bias catalysts only?bias=short
Active depegs right now?type=depeg

An AI agent typically wires two reads: the score for a gate, then the calendar for the actionable list.

import httpx

HDR = {"X-API-Key": "cdk_live_yourkey"}
BASE = "https://cryptodataapi.com/api/v1/event"

# 1. Gate on market-wide event risk
score = httpx.get(f"{BASE}/regime/score", headers=HDR).json()
if score["band"] in ("heavy", "critical"):
    print("Event risk", score["event_risk_score"],
          "unlock", score["unlock_subscore"],
          "depeg", score["depeg_subscore"])

# 2. Pull the imminent short-bias unlocks to size hedges
cal = httpx.get(
    f"{BASE}/calendar", headers=HDR,
    params={"type": "unlock", "bias": "short",
            "min_magnitude": 0.3, "window_days": 7},
).json()
for e in cal["items"]:
    print(e["symbols"], e["days_until"], "days", e["magnitude"])

Per-Symbol Overlay and Backtest Replay

For a single coin, GET /api/v1/event/regime/{symbol} (Pro+) returns the pending catalysts in the next 7 days, a net_bias, a signed net_magnitude, and nearest_event_days. It also carries hl_symbol — the exact Hyperliquid perp join key — so consumers don't have to guess at the k/1000 strip.

curl -H "X-API-Key: cdk_live_yourkey" \
  "https://cryptodataapi.com/api/v1/event/regime/ARB"

Need to force the cache forward after a feed update? POST /api/v1/event/regime/refresh (Pro+) recomputes immediately. The regime is otherwise on a 30-minute TTL behind independently-cached feeds.

The unlock, macro, and depeg baskets are all backfillable — they replay from schedule plus price history — so the composite is attached to every archived daily snapshot under event_regime. The two live-only sidecars land null on replayed days and the day carries backfilled: true. Pair the unlock track with longer cycle context from the BTC cycle indicators guide.

When to Reach for the Event / Catalyst Regime

This is the regime you read on a schedule, not a tick. Three concrete uses:

What it isn't: a directional alpha signal you trade in isolation. It tells you when a known catalyst lands and which way it biases — pair it with the continuous regimes in the 14-regime framework for the full picture. Event risk gates; the other regimes time the trade.