A single Composite Risk Score (0–5) per country or coordinate — fusing health, conflict, civil unrest, transport, border, infrastructure and climate signals into one number your underwriting, travel-policy or duty-of-care engine can consume directly.
Open beta is unauthenticated. Hit the live endpoint right now — this calls
production /api/v1/risk from your browser.
Every event carries a verification class —
official_agency (WHO / ECDC / national bulletins / ReliefWeb)
vs media_ai_signal — plus an independent source count and an
AI confidence score. Hard-filter to verified-only when liability matters.
Pre-clinical wastewater and GenBank submission velocity on the health side; 15-minute media cadence on conflict, transport and border. You see movement before it reaches official channels.
Read-only, CDN-cached (5 min), no authentication required during the open beta. Two mutually-exclusive geo modes:
# Country mode (ISO-3166 alpha-2) curl "https://vigilo.cc/api/v1/risk?country=UA" # Radius mode (point + km) curl "https://vigilo.cc/api/v1/risk?lat=50.45&lng=30.52&radius_km=500"
| Param | Type | Default | Description |
|---|---|---|---|
country | ISO alpha-2 | — | Country aggregate (mode A) |
lat,lng,radius_km | float, float, int | — | Radius mode (B). radius ≤ 2000 km |
categories | csv | all 7 | Subset of the seven domains |
min_confidence | 0–1 | 0.4 | Drop events below this AI confidence |
history_days | 1–90 | 14 | Event lookback window |
severity_min | 0–5 | 0 | Minimum event severity |
include_events | bool | true | false → score-only (~1 KB) |
lang | en | ru | en | Label localisation |
{
"api_version": "1.0",
"generated_at": "2026-05-17T11:58:55Z",
"composite_risk": {
"score": 3.82,
"band": "severe",
"dominant_category": "conflict"
},
"category_breakdown": {
"conflict": { "score": 3.82, "band": "severe",
"active_events": 8, "top_threat": "kinetic_strike" },
"health": { "score": 0, "band": "minimal", "active_events": 0 }
},
"events": [
{
"category": "conflict", "type": "kinetic_strike",
"severity": 5, "confidence": 0.86,
"source_verification": "official_agency",
"geo": { "lat": 50.4, "lng": 30.5, "country": "UA" },
"source_count": 11, "lead_time_hours": 0
}
],
"meta": { "events_total": 8, "data_freshness_seconds": 540 }
}
The Composite Risk Score is not a category average — a single catastrophic event must dominate, not be diluted. The model uses a max-dominant + weighted-tail blend with recency decay and a multi-domain crisis amplifier.
| Band | Score | Operational meaning |
|---|---|---|
minimal | 0–0.5 | Baseline; no action |
low | 0.5–1.5 | Monitor |
moderate | 1.5–2.5 | Heightened awareness |
elevated | 2.5–3.5 | Operational caution advised |
severe | 3.5–4.5 | Material disruption likely |
critical | 4.5–5 | Active crisis |
Intrinsic category weighting reflects business impact: kinetic conflict and border closures structurally outweigh an equally-prominent seasonal health signal. Full methodology available under NDA for enterprise partners.
Rate-limit state is returned via
standard RateLimit-Limit / RateLimit-Remaining
headers (RFC 9239). Responses carry ETag and
Cache-Control: s-maxage=300, stale-while-revalidate=900.
Don't poll — get pushed. Register a watched geography and a threshold; we POST a signed alert when the Composite Risk Score crosses it (edge-triggered, 6h-debounced, band-escalation override).
# Subscribe curl -X POST "https://vigilo.cc/api/v1/risk/webhooks" \ -H "Content-Type: application/json" \ -d '{"country":"UA","threshold":"severe","callback_url":"https://your.app/hooks/vigilo"}' # → { "id":"whk_…", "secret":"whsec_…", "manage_token":"…" }
threshold: 0–5 or a band name
(moderate/elevated/severe/critical).
Optional categories array scopes the trigger to specific
domains. Delete: DELETE /api/v1/risk/webhooks?id=…&manage_token=….
Each delivery carries
X-Vigilo-Signature: sha256=<hmac> over the raw body
using your secret — verify it before trusting the payload.
{
"event": "risk.threshold.crossed",
"country": "UA", "threshold": 4,
"reason": "band_escalation",
"composite_risk": { "score": 4.6, "band": "critical",
"dominant_category": "conflict" },
"triggered_at": "2026-05-17T12:00:00Z"
}
Drop a synthetic force-majeure trigger; we cascade it across a curated exposure graph (land adjacency + logistics corridors: Shanghai, Malacca, Suez, Hormuz, Bosphorus, Panama, Gulf air…) and recompute every impacted geography's Composite Risk. Sandboxed — read-only, the live index is never touched.
# Shanghai port / China manufacturing shock curl "https://vigilo.cc/api/v1/simulate?country=CN&category=transport&severity=5"
category: any of the 7 domains ·
severity 0–5 · hops 1–3. Returns ranked
impacted countries (baseline → projected composite, Δ, hop, link
type, ETA in days) + corridors at risk.
{
"trigger": { "country":"CN", "category":"transport", "severity":5 },
"corridors_at_risk": [ { "id":"shanghai_mfg", … } ],
"impacted": [
{ "country":"VN", "hop":1, "baseline":0.8,
"projected":2.4, "delta":1.6, "eta_days":2 } … ]
}
Pilot the Partner tier — webhook alerts, verified-only filtering, and an SLA — with your underwriting or travel-risk team.
Request a pilot