Live map Pricing Start free trial
Product · API — for systems

Airspace risk, as a field
in your JSON.

One authenticated GET returns a 0–100 risk index with level, confidence and explicit coverage for any route — ~50ms, no PII, 341 FIRs scored daily. Wire it into a dispatch board, a search result, a policy engine; let webhooks push threshold events back.

A data layer, not a verdict: your system reads the field, your logic makes the call.

The sandbox key is free — 2,000 requests/day against live data, no card. Production starts at $2,000/month when you ship. Compare tiers →

The response, field by field.

The sellable unit is this JSON — the exact v2 contract your systems consume.

GET /v2/route/risk?from=DXB&to=DEL&via=MCT
{
  "from": "DXB", "to": "DEL", "via": ["MCT"],
  "date": "2026-07-14",
  "score": 41, "risk_level": "moderate",
  "confidence": 0.82,
  "legs": [
    { "from": "DXB", "to": "MCT", "score": 31 },
    { "from": "MCT", "to": "DEL", "score": 41 }
  ],
  "coverage": { "status": "covered",  },
  "scored_at": 1783641600
}
score · risk_level

Two fields carry most integrations: a number to sort, gate and alert on; a band to colour and display. No parsing, no prose.

legs[] · confidence

Multi-leg trips score per segment, and no score travels without its confidence — weight it, discount it, or surface it.

coverage

Unknowns are explicit: status: "out_of_scope", score null. Your logic branches cleanly instead of inheriting false calm.

Illustrative values — the field shape is the exact v2 contract. Scores refresh every 5–30 minutes; always branch on coverage.status, never treat null as 0. Full contract: API docs.

Integration is an afternoon.

1

Get a key

Sandbox key in minutes — no card, no call. 2,000 requests/day against live data, SDKs for TypeScript, Python and Go, docs with copy-paste examples.

2

Make one GET

GET /v2/route/risk?from=…&to=… — no request body, no PII, ~50ms from cache. Read score and risk_level; branch on coverage.status. Add via= for multi-leg and date= for departures up to 30 days out.

3

Let it push

On Pro, set index thresholds per FIR or route — a structured event posts to your webhook when one is crossed. Your board updates without polling.

Four tiers, one contract.

Sandbox free 2,000 req/day · 72h horizon · score + risk_level + confidence · SDKs & docs
Starter $2K/mo 300K req/mo · full horizons (7d / 30d) · multi-leg via (up to 3) · email support 24h
Pro $5K/mo 6M req/mo · webhook alerts on threshold-cross · 99.9% SLA · Slack support 4h
Enterprise custom unlimited · custom SLA 99.95%+ · dedicated infra · white-label · /route/risk/detailed
What stands behind a score
  • 341 FIRs scored daily from public regulatory & operational data — EASA · FAA · ICAO · ADS-B · conflict-event signals
  • Published methodology; Brier / ECE calibration quarterly
  • Per-key audit log for compliance reviews
What we do NOT claim
  • × A verdict. The index is an input; your system's logic — and your users — make the call.
  • × Uniform depth everywhere. Four coverage tiers; every score states its confidence and coverage.
  • × A NOTAM replacement. Official sources stay authoritative — the feed says where to look first.

How to start.

Integrate on the free key — pay only when you ship to production.

  1. 1

    Get the sandbox key — takes minutes. No card, no sales call.

  2. 2

    Build against live data — 2,000 requests/day free is enough to integrate, test, and demo to your team.

  3. 3

    Upgrade when you ship: Starter $2K/mo (300K req, full horizons, multi-leg) → Pro $5K/mo (webhooks, 99.9% SLA) → Enterprise (white-label, custom). Annual saves two months.

Need records, not a feed?

The same engine runs as the Console — check routes in the browser, keep dated, verifiable basis-of-decision records. From $99/month, 14-day free trial, no card.

See the Console →

API — FAQ

Common search queries answered with current status, FIR codes, and source citations.

How fast is it, really?
~50ms from cache for covered routes — it sits in a results render path without meaningful latency. Scores recompute every 5–30 minutes across 341 daily-scored FIRs; scored_at ships in every response so your cache invalidates correctly.
Do requests carry personal data?
No. A request is airport codes and an optional date — no passenger data, no identifiers, no cookies. GDPR-neutral by design; a DPA is available on request for paid tiers.
What happens outside your coverage?
The response says so: coverage.status = "out_of_scope" with score: null and risk_level: "unknown" — never a guessed number. Always branch on the coverage object; treating null as 0 is the one integration mistake the docs warn about twice.
How accurate are the scores?
They are calibrated numerical indices, not certainties: Brier and ECE are published quarterly, and every response carries confidence. The methodology is documented so your team can validate against its own data before anything ships to users.
What separates Sandbox from production?
Sandbox is a real key against live data — 2,000 requests/day, 72h horizon, 5-minute refresh quantum — enough to build and demo. Production tiers add full horizons (7d/30d), multi-leg via, volume, realtime latency, webhooks (Pro) and SLA. Integrate on Sandbox, upgrade when you ship.
Can we white-label it?
On Enterprise — unlimited volume, custom SLA (99.95%+), dedicated infrastructure, custom FIR coverage, NDA + DPA, and the extended /v2/route/risk/detailed endpoint with per-FIR breakdown and data-quality metrics. Talk to us.
When is the Console the better fit?
When people, not systems, consume the scores — and when you need dated, verifiable records of decisions rather than a data feed. The Console product page covers it; many teams run both.

FlySafe provides automated computation of numerical indices from publicly available data. Indices are raw computational output and do not represent opinions, assessments, recommendations, or advice of any kind. They do not replace official NOTAMs, SIGMETs, AIPs, or communications from aviation authorities. See Terms of Service.