API Documentation

Programmatic access to 312 sensors, regime intelligence, and stress index. REST API, JSON responses.

Quick Start

Get the EHIQ Stress Index (0-100) in one call. No auth required.

curl
bash
curl https://eventhorizoniq.com/api/stress-index
Python
python
import requests

r = requests.get("https://eventhorizoniq.com/api/stress-index")
data = r.json()

print(f"Stress Index: {data['stress_index']}/100")
print(f"Regime: {data['regime']}")
print(f"Breakdown: {data['breakdown']}")
JavaScript
javascript
const res = await fetch("https://eventhorizoniq.com/api/stress-index");
const data = await res.json();

console.log(`Stress: ${data.stress_index}/100 — ${data.regime}`);
json
// Response
{
  "stress_index": 22.4,
  "regime": "NEUTRAL",
  "sensor_count": 55,
  "breakdown": { "severe": 0, "elevated": 2, "rising": 8, "neutral": 12, "stable": 33 },
  "as_of": "2026-03-16T15:30:00Z",
  "methodology": "Weighted average of all active sensor states..."
}

Base URL & Authentication

https://eventhorizoniq.com/api

Free endpoints require no auth. Paid endpoints accept an API key via header or query param:

Header (recommended)
bash
curl -H "x-ehiq-key: ehiq_your_key_here" \
  https://eventhorizoniq.com/api/sensors
Query param
bash
curl "https://eventhorizoniq.com/api/sensors?key=ehiq_your_key_here"
Free
No key. Free sensors. 60 req/min.
Pro ($249/mo)
All 312 sensors + TIQ-ML + Signal Drop. 600 req/min.
Institutional
Full data + ML features. 6,000 req/min.

Endpoints

GET/api/stress-indexNEW

EHIQ Stress Index: real-time 0-100 composite score derived from all active sensor states. Public, free, no auth.

Python — Alert on high stress
python
import requests

data = requests.get("https://eventhorizoniq.com/api/stress-index").json()

if data["stress_index"] >= 50:
    print(f"⚠️ EHIQ Stress Index at {data['stress_index']} — {data['regime']}")
    print(f"  {data['breakdown']['severe']} SEVERE, {data['breakdown']['elevated']} ELEVATED")
GET/api/sensors

List all 312 sensors. Free users see free-tier only. API key holders see all.

Auth: Optional — expands results with key
Python — Get all elevated sensors
python
import requests

headers = {"x-ehiq-key": "ehiq_your_key_here"}
data = requests.get("https://eventhorizoniq.com/api/sensors", headers=headers).json()

elevated = [s for s in data["sensors"] if s["currentState"] in ("ELEVATED", "SEVERE")]
for s in elevated:
    print(f"{s['name']}: {s['currentState']} (confidence: {s['confidence']})")
curl
bash
curl -H "x-ehiq-key: ehiq_your_key_here" \
  https://eventhorizoniq.com/api/sensors | jq '.sensors[] | select(.currentState == "ELEVATED")'
json
// Response
{
  "sensors": [
    {
      "sensorId": "vix-regime",
      "name": "VIX Regime Detector",
      "category": "macro",
      "currentState": "ELEVATED",
      "confidence": "HIGH",
      "updatedAt": "2026-03-16T12:00:00Z",
      "sparkline": [{ "state": "ELEVATED", "value": 28.5, "recorded_at": "..." }]
    }
  ],
  "count": 312
}
GET/api/sensors/:id

Single sensor detail: state, methodology, source links, and configuration.

Auth: Required for paid sensors
curl
bash
curl https://eventhorizoniq.com/api/sensors/vix-regime
GET/api/sensors/:id/history

Historical readings with pagination. Free: 200 max. Pro: 1,000. Institutional: 10,000+.

Auth: Optional — higher limits with key
Python — Plot sensor history
python
import requests
import pandas as pd

url = "https://eventhorizoniq.com/api/sensors/vix-regime/history?limit=500"
headers = {"x-ehiq-key": "ehiq_your_key_here"}
data = requests.get(url, headers=headers).json()

df = pd.DataFrame(data["readings"])
df["recordedAt"] = pd.to_datetime(df["recordedAt"])
print(df[["recordedAt", "state", "value"]].head(20))
GET/api/equity-regimeNEW

Live regime states for 15 high-beta stocks. BTC regime propagated to equities. Free tier: 3 stocks (regime only). Paid: all 15 with RSI + extension data.

Auth: Optional — expands results with key
Python — Monitor equity regime
python
import requests

headers = {"x-ehiq-key": "ehiq_your_key_here"}
data = requests.get("https://eventhorizoniq.com/api/equity-regime", headers=headers).json()

for stock in data["stocks"]:
    emoji = "🔴" if stock["regime"] == "STRESS" else "🟡" if stock["regime"] == "ESCALATING" else "⚪"
    print(f"{emoji} {stock['ticker']:6s} {stock['regime']:12s} RSI={stock['rsi']:.1f}")
GET/api/tiq-ml

ML-enhanced earnings analysis. Combines TIPS v2 qualitative scoring with macro-context ML model.

Auth: Optional — expands fields with key
Python — Screen for high-conviction picks
python
import requests

headers = {"x-ehiq-key": "ehiq_your_key_here"}
data = requests.get("https://eventhorizoniq.com/api/tiq-ml", headers=headers).json()

bullish = [s for s in data["scores"]
           if s["combined_direction"] == "BULLISH"
           and s["ml_confidence"] == "HIGH"
           and not s["macro_headwind"]]

for s in bullish:
    print(f"{s['ticker']}: score={s['combined_score']}, prob={s['direction_prob']:.0%}")
GET/api/signal-drops

Inflection signals from earnings transcripts. Detects trough recovery and peak exhaustion.

Auth: Optional — expands fields with key
curl
bash
curl -H "x-ehiq-key: ehiq_your_key_here" \
  "https://eventhorizoniq.com/api/signal-drops?ticker=OPEN"
GET/api/proposals

Sensor proposals from the EHIQ agent system. See blind spots the system has identified.

curl
bash
curl https://eventhorizoniq.com/api/proposals

TIQ API v2 (Institutional)

Programmatic access to Tonality IQ: 173K+ earnings transcripts scored across 20 linguistic patterns, 4,800 tickers, ML-enhanced signals, and authorship analysis. Designed for hedge funds, compliance teams, and media.

Standard ($99/mo)
100 calls/day. Score + Ticker + Triad.
Professional ($499/mo)
1,000 calls/day. All endpoints + Compare.
Enterprise ($2,499/mo)
Unlimited + custom models + SLA.

Auth: x-ehiq-key header required on all v2/tiq endpoints. Rate limit headers returned: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

POST/api/v2/tiq/scoreNEW

Score arbitrary text for tonality signals. Supports earnings calls, authorship fingerprinting, legal escalation, and central bank communication.

Auth: x-ehiq-key header (required)
curl
bash
curl -X POST https://eventhorizoniq.com/api/v2/tiq/score \
  -H "x-ehiq-key: ehiq_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"text": "We remain confident in our ability to deliver...", "mode": "earnings"}'
Python
python
import requests

headers = {"x-ehiq-key": "ehiq_your_key_here", "Content-Type": "application/json"}
body = {
    "text": open("earnings_transcript.txt").read(),
    "mode": "earnings"  # earnings | authorship | escalation | central_bank
}

r = requests.post("https://eventhorizoniq.com/api/v2/tiq/score", json=body, headers=headers)
data = r.json()

print(f"Risk: {data['risk_label']} ({data['risk_score']}/100)")
print(f"Constraint: {data['features']['constraint']}")
print(f"Conviction: {data['features']['conviction']}")
print(f"Ratio: {data['features']['ratio']}")
if data['anomaly_flags']:
    print(f"Flags: {', '.join(data['anomaly_flags'])}")
json
// Response
{
  "api": "tiq/score",
  "version": "v2",
  "mode": "earnings",
  "risk_score": 34.5,
  "risk_label": "MODERATE",
  "features": {
    "constraint": 12.4,
    "conviction": 18.7,
    "ratio": 1.51,
    "hedge": 4.2,
    "caution": 3.1,
    "commitment": 6.8,
    "blame": 1.2,
    "vague": 2.9,
    "defensive": 0.8,
    "growth": 5.4,
    "forward": 3.2,
    "word_count": 8450
  },
  "anomaly_flags": [],
  "summary": "earnings analysis: constraint=12.4, conviction=18.7, ratio=1.51. Risk: MODERATE (34.5/100)."
}
GET/api/v2/tiq/ticker/:tickerNEW

Full TIQ profile for a public company: latest scores, arc trajectory, Invincibility Triad status, ML scores, active signals, and full quarterly history.

Auth: x-ehiq-key header (required)
curl
bash
curl -H "x-ehiq-key: ehiq_your_key_here" \
  https://eventhorizoniq.com/api/v2/tiq/ticker/AAPL
Python
python
import requests

headers = {"x-ehiq-key": "ehiq_your_key_here"}
r = requests.get("https://eventhorizoniq.com/api/v2/tiq/ticker/OPEN", headers=headers)
data = r.json()

print(f"Signal: {data['signal']}")
print(f"Arc: {data['arc_direction']}")
print(f"Triad: {data['triad']['status']} ({data['triad']['score']}/3)")
print(f"Latest ratio: {data['latest']['ratio']}")
if data['ml']:
    print(f"ML direction: {data['ml']['direction']} ({data['ml']['confidence']})")
json
// Response (abbreviated)
{
  "api": "tiq/ticker",
  "ticker": "OPEN",
  "signal": "ANOMALY",
  "arc_direction": "ACCELERATING",
  "triad": { "status": "WATCH", "score": 2, "constraint_elevated": true, "conviction_depressed": true, "ratio_inverted": false },
  "latest": { "quarter": "Q4_FY2025", "constraint": 8.2, "conviction": 5.1, "ratio": 0.62, "anomaly_flags": ["BLAME_SPIKE"] },
  "ml": { "combined_score": 72.4, "direction": "BULLISH", "confidence": "HIGH" },
  "active_signals": [{ "signal_type": "TROUGH_TRINITY", "direction": "BULLISH", "severity": "HIGH" }],
  "history": [...]
}
GET/api/v2/tiq/triadNEW

Invincibility Triad watchlist: all tickers scoring 2/3 or 3/3 where management language signals elevated constraint, depressed conviction, and inverted ratio vs. their own history.

Auth: x-ehiq-key header (required)
Python
python
import requests

headers = {"x-ehiq-key": "ehiq_your_key_here"}
r = requests.get("https://eventhorizoniq.com/api/v2/tiq/triad", headers=headers)
data = r.json()

print(f"Scanned {data['total_tickers_scanned']} tickers")
print(f"Invincible (3/3): {data['invincible_count']}")
print(f"Watch (2/3): {data['watch_count']}")

for t in data['tickers']:
    print(f"  {t['ticker']:6s} {t['triad_status']:10s} ratio={t['ratio']:.2f} constraint_z={t['constraint_z']}")
POST/api/v2/tiq/compareNEW

Compare two texts for authorship similarity. Returns distance score, per-feature comparison, and probability of same author. Used for ghostwriter detection, regulatory filing consistency, and earnings call authenticity.

Auth: x-ehiq-key header (required)
Python
python
import requests

headers = {"x-ehiq-key": "ehiq_your_key_here", "Content-Type": "application/json"}
body = {
    "text_a": open("ceo_letter_2024.txt").read(),
    "text_b": open("ceo_letter_2025.txt").read()
}

r = requests.post("https://eventhorizoniq.com/api/v2/tiq/compare", json=body, headers=headers)
data = r.json()

print(f"Verdict: {data['verdict']}")
print(f"Distance: {data['distance']}")
print(f"Same author probability: {data['probability_same_author']:.0%}")
json
// Response
{
  "api": "tiq/compare",
  "verdict": "LIKELY_DIFFERENT",
  "distance": 42.3,
  "probability_same_author": 0.29,
  "text_a_words": 3200,
  "text_b_words": 2800,
  "feature_comparison": {
    "constraint": { "text_a": 8.4, "text_b": 14.2, "delta": 5.8 },
    "conviction": { "text_a": 12.1, "text_b": 6.3, "delta": 5.8 },
    "hedge": { "text_a": 3.2, "text_b": 7.8, "delta": 4.6 }
  }
}

Use Cases

Portfolio risk overlay

Poll /api/stress-index every 5 min. When score crosses 50, flag your portfolio for review. When it crosses 70, activate hedges.

Earnings alpha

After each earnings season, query /api/tiq-ml for HIGH-confidence BULLISH scores where macro_headwind is false. Screen for structural trough recovery plays.

Crypto regime monitoring

Subscribe to /api/sensors and track btc-regime-detector + funding-rate-stress + panic-capitulation together. When 3+ fire simultaneously, that's a capitulation signal.

Equity regime alerts

Poll /api/equity-regime daily. When a stock you hold moves from NEUTRAL to ESCALATING, the BTC-derived stress signal is propagating to your position.

Earnings tonality screening

After earnings, POST transcripts to /api/v2/tiq/score and screen for BLAME_SPIKE or CONSTRAINT_DOMINANCE flags. Cross-reference with /api/v2/tiq/triad for the Invincibility Triad watchlist.

Ghostwriter detection

Compare shareholder letters, SEC filings, or public statements using /api/v2/tiq/compare. Detect when a CEO's linguistic fingerprint shifts, suggesting a ghostwriter or strategic messaging change.

Update Frequency

Crypto Sensors
Every 10 minutes. Funding, fear/greed, TVL, stablecoins.
Macro Sensors
Daily or on data release. VIX, FRED, credit spreads.
Stress Index
Real-time (computed on request). Cached for 5 min.
Equity Regime
Every 5 minutes from VPS tracker. Cached for 5 min.

Rate Limits & Errors

Free: 60 req/min
Pro: 600 req/min
Institutional: 6,000 req/min
200Success
400Bad request — invalid parameters
401Unauthorized — invalid or expired API key
403Forbidden — paid sensor, free tier access
404Not found — sensor does not exist
429Rate limit exceeded — back off and retry
500Internal server error

OpenAPI Spec

Machine-readable spec available for code generation and integration testing:

bash
curl https://eventhorizoniq.com/api/openapi

Ready to integrate? Start with the free tier, upgrade when you need more.

API data is read-only intelligence. Sensor states are diagnostic observations, not predictions or trading recommendations. Use at your own risk.