Real-time geopolitical events, cross-crisis contagion tracking, and market impact — in one API call.
POLYCRISIS monitors geopolitical events in real time, tracks how crises spread across borders, and maps the market impact.
Missile strikes, blockades, summits, disasters — hundreds of feeds distilled into geocoded, confidence-scored events every 15 min.
Iran escalates → Gaza activates → US politics shift. The connections engine maps ripple effects with impact scores and mechanisms.
Correlate events against oil, VIX, currencies, yields. Multi-window analysis reveals when correlations flip.
When scenarios, intensity, connections, and humanitarian alerts all converge on the same crisis — one score tells you.
Is Hormuz closing? Nuclear breakout? AI-assessed probabilities with evidence, reassessed against live headlines.
Semantic matching against your history plus conflict data back to 1946. Find what this moment looks like — and what followed.
Everything returns JSON. Offset pagination with a meta.total count. Rate limit headers on every response. Versioned at /api/v1/.
Every event is geocoded, typed, confidence-scored, and enriched with market correlation data. Multi-source validation improves accuracy continuously.
The connections endpoint tells you not just what happened — but what's likely to happen next, and which assets will move when it does.
// GET /v1/connections?crisis=iran { "connections": [{ "source_crisis": "iran", "target_crisis": "gaza", "strength": 0.85, "intensity": 7.2, "cluster_alignment": 0.71, "mechanisms": ["military escalation", "Hezbollah/Hamas axis"], "evidence_count": 14 }], "meta": { "count": 6 } }
Mint a key from your dashboard, export it as $POLYCRISIS_KEY, and you’re in. Standard REST — use any language, any framework.
# 1. Discover all tracked crises curl -H "Authorization: Bearer $POLYCRISIS_KEY" \ https://polycrisis.world/api/v1/crises # 2. Iran military events, last 24h curl -H "Authorization: Bearer $POLYCRISIS_KEY" \ "https://polycrisis.world/api/v1/events?crisis=iran&type=military&limit=10" # 3. Current intensity index for Iran (with 30d timeseries) curl -H "Authorization: Bearer $POLYCRISIS_KEY" \ "https://polycrisis.world/api/v1/intensity?crisis=iran&window=30" # 4. Scenario probabilities for Iran curl -H "Authorization: Bearer $POLYCRISIS_KEY" \ "https://polycrisis.world/api/v1/scenarios?crisis=iran" # 5. Stream events in real time (SSE) — Developer tier curl -N -H "Authorization: Bearer $POLYCRISIS_KEY" \ "https://polycrisis.world/api/v1/stream?crisis=iran"
import os, requests API = "https://polycrisis.world/api/v1" HEAD = {"Authorization": f"Bearer {os.environ['POLYCRISIS_KEY']}"} # 1. Discover all tracked crises crises = requests.get(f"{API}/crises", headers=HEAD).json()["crises"] # 2. Iran military events, last 24h events = requests.get( f"{API}/events", headers=HEAD, params={"crisis": "iran", "type": "military", "limit": 10}, ).json()["events"] # 3. Current intensity index for Iran idx = requests.get( f"{API}/intensity", headers=HEAD, params={"crisis": "iran", "window": 30}, ).json()["current_index"] # 4. Scenario probabilities for Iran scenarios = requests.get( f"{API}/scenarios", headers=HEAD, params={"crisis": "iran"}, ).json()["scenarios"] print(f"Tracking {len(crises)} crises") print(f"Iran intensity: {idx['value']} [{idx['band']}]") for s in scenarios[:3]: print(f" {s['title']}: {s['probability']}% [{s['band']}]")
import fetch from 'node-fetch'; const API = 'https://polycrisis.world/api/v1'; const HEAD = { 'Authorization': `Bearer ${process.env.POLYCRISIS_KEY}` }; // 1. Discover all tracked crises const { crises } = await (await fetch(`${API}/crises`, { headers: HEAD })).json(); // 2. Iran military events, last 24h const { events } = await (await fetch( `${API}/events?crisis=iran&type=military&limit=10`, { headers: HEAD } )).json(); // 3. Current intensity index for Iran const { current_index } = await (await fetch( `${API}/intensity?crisis=iran&window=30`, { headers: HEAD } )).json(); // 4. Scenario probabilities for Iran const { scenarios } = await (await fetch( `${API}/scenarios?crisis=iran`, { headers: HEAD } )).json(); console.log(`Tracking ${crises.length} crises`); console.log(`Iran intensity: ${current_index.value} [${current_index.band}]`); scenarios.slice(0, 3).forEach(s => { console.log(` ${s.title}: ${s.probability}% [${s.band}]`); });
package main import ( "encoding/json" "fmt" "net/http" "os" ) const API = "https://polycrisis.world/api/v1" func get(path string) map[string]interface{} { req, _ := http.NewRequest("GET", API+path, nil) req.Header.Set("Authorization", "Bearer "+os.Getenv("POLYCRISIS_KEY")) resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() var out map[string]interface{} json.NewDecoder(resp.Body).Decode(&out) return out } func main() { crises := get("/crises") events := get("/events?crisis=iran&type=military&limit=10") idx := get("/intensity?crisis=iran&window=30") scens := get("/scenarios?crisis=iran") fmt.Printf("crises: %d\n", len(crises["crises"].([]interface{}))) fmt.Printf("events: %d\n", len(events["events"].([]interface{}))) fmt.Printf("intensity: %v\n", idx["current_index"]) fmt.Printf("scenarios: %d\n", len(scens["scenarios"].([]interface{}))) }
From trading bots to risk dashboards — here's how people use the API.
Poll the intensity index and reduce equity exposure when a crisis goes critical.
# Check Iran intensity every 5 minutes while true; do curl -s -H "Authorization: Bearer $POLYCRISIS_KEY" \ "https://polycrisis.world/api/v1/intensity?crisis=iran&window=30" \ | jq '.current_index | "\(.value) [\(.band)] \(.delta_7d)"' sleep 300 done
import os, time, requests API = "https://polycrisis.world/api/v1" HEAD = {"Authorization": f"Bearer {os.environ['POLYCRISIS_KEY']}"} def check_iran(): r = requests.get( f"{API}/intensity", headers=HEAD, params={"crisis": "iran", "window": 30}, ).json() idx = r["current_index"] return idx["value"], idx["band"], idx["delta_7d"] while True: value, band, delta = check_iran() if value > 7 and delta > 0: reduce_equity_exposure() # your trading logic print(f"iran: {value} [{band}] {delta:+.1f}") time.sleep(300)
When a crisis spikes, check where it connects and front-run the secondary effects.
# Iran military event detected — where does it connect? curl -s -H "Authorization: Bearer $POLYCRISIS_KEY" \ "https://polycrisis.world/api/v1/connections?crisis=iran" \ | jq '.connections[] | select(.strength > 0.6)' # Example match: iran → scs, strength 0.71, mechanisms: energy chokepoint # Action: build shipping/energy positions on the secondary theater
import os, requests API = "https://polycrisis.world/api/v1" HEAD = {"Authorization": f"Bearer {os.environ['POLYCRISIS_KEY']}"} # Iran spiked — where do the secondary effects hit? data = requests.get( f"{API}/connections", headers=HEAD, params={"crisis": "iran"}, ).json() for c in data["connections"]: if c["strength"] > 0.6: print(f"{c['source_crisis']} → {c['target_crisis']}: " f"strength {c['strength']}, via {c['mechanisms']}") # queue_position(c['target_crisis'], horizon_days=14)
Register a webhook and get pushed when intensity crosses your threshold (Developer tier).
# Register an intensity-spike webhook for Iran curl -X POST -H "Authorization: Bearer $POLYCRISIS_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-app.com/webhook", "triggers": ["new_event", "scenario_change", "intensity_spike"], "crisis": "iran", "intensity_threshold": 7 }' \ https://polycrisis.world/api/v1/webhooks # Response includes signing_secret — store it to verify inbound deliveries
import os, requests API = "https://polycrisis.world/api/v1" HEAD = { "Authorization": f"Bearer {os.environ['POLYCRISIS_KEY']}", "Content-Type": "application/json", } hook = requests.post( f"{API}/webhooks", headers=HEAD, json={ "url": "https://your-app.com/webhook", "triggers": ["new_event", "scenario_change", "intensity_spike"], "crisis": "iran", "intensity_threshold": 7, }, ).json() # Store signing_secret securely — you'll need it to HMAC-verify deliveries secret = hook["signing_secret"] print(f"registered: {hook['id']}")
Query analogs to find past weeks that looked like the current situation — and what happened to markets after.
# What does the current week look like historically? curl -s -H "Authorization: Bearer $POLYCRISIS_KEY" \ "https://polycrisis.world/api/v1/analogs?crisis=iran" \ | jq '.analogs[0]'
import os, requests API = "https://polycrisis.world/api/v1" HEAD = {"Authorization": f"Bearer {os.environ['POLYCRISIS_KEY']}"} data = requests.get( f"{API}/analogs", headers=HEAD, params={"crisis": "iran"}, ).json() for a in data["analogs"][:3]: print(f"{a['period']}: similarity {a['similarity']:.2f}") print(f" outcome: {a.get('outcome', 'n/a')}") # a['market_outcome'] has tickers → returns
Every 15 minutes, raw global news is transformed into structured, scored, connected intelligence through a multi-stage pipeline.
RSS feeds from BBC, Reuters, NPR, Al Jazeera, regional outlets. Reddit, Telegram, Bluesky social streams. GDELT event volumes. Historical conflict records back to 1946.
Advanced language models extract structured events: coordinates, event type, actors, targets. A second model geocorrects against verified gazetteers. Headlines preserved verbatim.
Dedup catches same-story rewrites. Bounds check ensures geographic relevance. Wikipedia pageview spikes confirm public attention. USGS seismic data validates events near nuclear facilities.
Every event gets a high-dimensional embedding. Enables semantic search, cluster detection, and analog matching against 80 years of structured conflict data — so you can find what this moment looks like historically and what followed.
AI continuously reassesses scenario probabilities. The connections graph computes cross-crisis impact. Market correlations run against equities, commodities, VIX, currencies, and macro indicators.
Structured JSON via REST. Real-time SSE streaming. Push webhooks on new events, scenario changes, and intensity spikes. Confluence signals when multiple layers converge.
Webhooks with connection alert triggers push events to your infrastructure. SSE streaming gives you a real-time firehose. Or just poll the REST API — it's your call.
Building with Claude Code? Our MCP server lets Claude query live crisis data while it writes your trading bot. OpenAPI 3.1 spec available at /v1/openapi.json so any AI coding assistant can understand every endpoint.
// Webhook payload — connection alert { "type": "connection.detected", "data": { "source_crisis": "iran", "source_event": { "type": "military", "title": "IRGC exercises near Hormuz" }, "connection": { "target": "scs", "probability": 0.72, "peak_lag_days": 14, "mechanism": "energy_corridor" } } }
// SSE stream output event: new_event data: {"crisis":"iran","type":"naval", "title":"Patrol near Strait of Hormuz", "lat":26.57,"lng":56.25} event: intensity_update data: {"crisis":"iran", "score":73,"level":"CRITICAL"}
Airstrikes in Tehran. Typhoons in the Pacific. ICE raids in Chicago. Submarine patrols near Taiwan. Enrichment at Fordow. Campus protests in New York. Each one extracted, geocoded, typed, and scored — ready for your algorithm.
Full access to the /api/v1/ surface on the Developer plan. Dashboard features available on Free and Analyst tiers — see the dashboard plans.
/api/v1/ accessNeed help? [email protected]