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 https://eventhorizoniq.com/api/stress-index
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']}")const res = await fetch("https://eventhorizoniq.com/api/stress-index");
const data = await res.json();
console.log(`Stress: ${data.stress_index}/100 — ${data.regime}`);// 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:
curl -H "x-ehiq-key: ehiq_your_key_here" \ https://eventhorizoniq.com/api/sensors
curl "https://eventhorizoniq.com/api/sensors?key=ehiq_your_key_here"
Endpoints
/api/stress-indexNEWEHIQ Stress Index: real-time 0-100 composite score derived from all active sensor states. Public, free, no auth.
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")/api/sensorsList all 312 sensors. Free users see free-tier only. API key holders see all.
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 -H "x-ehiq-key: ehiq_your_key_here" \ https://eventhorizoniq.com/api/sensors | jq '.sensors[] | select(.currentState == "ELEVATED")'
// 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
}/api/sensors/:idSingle sensor detail: state, methodology, source links, and configuration.
curl https://eventhorizoniq.com/api/sensors/vix-regime
/api/sensors/:id/historyHistorical readings with pagination. Free: 200 max. Pro: 1,000. Institutional: 10,000+.
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))/api/equity-regimeNEWLive 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.
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}")/api/tiq-mlML-enhanced earnings analysis. Combines TIPS v2 qualitative scoring with macro-context ML model.
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%}")/api/signal-dropsInflection signals from earnings transcripts. Detects trough recovery and peak exhaustion.
curl -H "x-ehiq-key: ehiq_your_key_here" \ "https://eventhorizoniq.com/api/signal-drops?ticker=OPEN"
/api/proposalsSensor proposals from the EHIQ agent system. See blind spots the system has identified.
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.
Auth: x-ehiq-key header required on all v2/tiq endpoints. Rate limit headers returned: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
/api/v2/tiq/scoreNEWScore arbitrary text for tonality signals. Supports earnings calls, authorship fingerprinting, legal escalation, and central bank communication.
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"}'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'])}")// 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)."
}/api/v2/tiq/ticker/:tickerNEWFull TIQ profile for a public company: latest scores, arc trajectory, Invincibility Triad status, ML scores, active signals, and full quarterly history.
curl -H "x-ehiq-key: ehiq_your_key_here" \ https://eventhorizoniq.com/api/v2/tiq/ticker/AAPL
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']})")// 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": [...]
}/api/v2/tiq/triadNEWInvincibility 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.
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']}")/api/v2/tiq/compareNEWCompare 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.
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%}")// 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
Poll /api/stress-index every 5 min. When score crosses 50, flag your portfolio for review. When it crosses 70, activate hedges.
After each earnings season, query /api/tiq-ml for HIGH-confidence BULLISH scores where macro_headwind is false. Screen for structural trough recovery plays.
Subscribe to /api/sensors and track btc-regime-detector + funding-rate-stress + panic-capitulation together. When 3+ fire simultaneously, that's a capitulation signal.
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.
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.
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
Rate Limits & Errors
200Success400Bad request — invalid parameters401Unauthorized — invalid or expired API key403Forbidden — paid sensor, free tier access404Not found — sensor does not exist429Rate limit exceeded — back off and retry500Internal server errorOpenAPI Spec
Machine-readable spec available for code generation and integration testing:
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.