Risk Intelligence API · v1

One risk score.
Every geography. Seven domains.

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.

HealthConflict Civil unrestTransport BorderInfrastructure Climate

Try it — live, no key

Open beta is unauthenticated. Hit the live endpoint right now — this calls production /api/v1/risk from your browser.

e.g. UA, TR, IR, RU, CN, IN
▸ Raw JSON

Why Vigilo

Provenance, not noise

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.

Temporal lead

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.

Endpoint

GET https://vigilo.cc/api/v1/risk

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"

Query parameters

ParamTypeDefaultDescription
countryISO alpha-2Country aggregate (mode A)
lat,lng,radius_kmfloat, float, intRadius mode (B). radius ≤ 2000 km
categoriescsvall 7Subset of the seven domains
min_confidence0–10.4Drop events below this AI confidence
history_days1–9014Event lookback window
severity_min0–50Minimum event severity
include_eventsbooltruefalse → score-only (~1 KB)
langen | ruenLabel localisation

Example response

{
  "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 }
}

Scoring methodology

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.

BandScoreOperational meaning
minimal0–0.5Baseline; no action
low0.5–1.5Monitor
moderate1.5–2.5Heightened awareness
elevated2.5–3.5Operational caution advised
severe3.5–4.5Material disruption likely
critical4.5–5Active 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.

Access & rate limits

Open beta

Free
  • 60 req / hour
  • No key required
  • All 7 domains
  • 5-min freshness

Partner

API key
  • 1 000 req / hour
  • Webhook alerts
  • Verified-only filter
  • SLA

Enterprise

Custom
  • 20 000+ req / hour
  • Historical backfill
  • Methodology under NDA
  • Dedicated support

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.

Webhook alerts Partner

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"
}

What-If simulator Enterprise

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 } … ]
}

Building risk into your product?

Pilot the Partner tier — webhook alerts, verified-only filtering, and an SLA — with your underwriting or travel-risk team.

Request a pilot