RAIM prediction
Available
POST /v1/raim/predict
Predicts GNSS RAIM availability at each point you give, for a window around each point's time, using the GPS (and optionally Galileo) almanac and the satellite outages in force (NANUs and NAGUs are ingested continuously). The computation is DO-229 fault detection (FD) and fault detection and exclusion (FDE) with a weighted, elevation and latitude dependent error model, checked against FAA RAIM SAPT daily plots from 2024 to 2026 and Eurocontrol AUGUR output.
Past times: a window more than a week before the current almanac is computed against the archived GPS almanac that was in force then (CelesTrak SEM archive) and the NANU windows in force on that day, so a past day reproduces what a receiver saw. The response says so in warnings ("historical request: computed against the archived almanac ..."), almanac.version names it, and degraded stays false. Galileo has no archive and stays on the live almanac. The future is never archived: more than a week past the live almanac's toa the age warning applies, and more than 30 days is refused with 503. FD is available when the horizontal protection level (HPL) is at or under the alert limit (HAL) with at least 5 satellites; FDE additionally requires at least 6 and that every single-satellite-removed subset still detects.
Request:
{
"window_minutes": 60,
"step_seconds": 60,
"mask_deg": 5,
"fde": true,
"baro": false,
"detail": false,
"points": [
{ "id": "EGLL", "lat": 51.4775, "lon": -0.4614, "alt_m": 25, "time": "2026-09-18T06:00:00Z", "phase": "enroute" },
{ "id": "EHAM", "lat": 52.3086, "lon": 4.7639, "alt_m": 0, "time": "2026-09-18T07:15:00Z", "phase": "approach" },
{ "id": "WPT1", "lat": 52.0, "lon": 2.5, "alt_m": 11000, "time": "2026-09-18T06:40:00Z", "hal_nm": 2.0 }
]
}
Fields:
points(required, 1 to 500): each point needslat,lon,time, and eitherphaseorhal_nm.idis echoed back; use ICAO codes or your own waypoint names.alt_mdefaults to 0.phase: one ofoceanic(HAL 4.0 NM),enroute(2.0 NM),terminal(1.0 NM),approach(0.3 NM; aliasesnpa,lnav), or an RNP value,rnp4,rnp2,rnp1,rnp0.5,rnp0.3,rnp0.2,rnp0.15,rnp0.1, whose HAL is the RNP value in NM (RNP 0.3andrnp-0.3work too).hal_nm(above 0, up to 20) instead of a phase sets the limit directly.GET /v1/raim/phaseslists them.window_minutes(default 60): each side of the point'stime.step_seconds(default 60, min 30, max 3600).mask_deg(default 5): elevation mask.fde(default true): false means FD only.baro(default false): add an altitude pseudo-measurement.detail(default false): true adds per-epoch arrays to each point.outages(optional): extra satellite outages to apply,[{ "prn": 1, "from": "...", "to": "...", "source": "...", "system": "GPS" }]. Current NANU (GPS) and NAGU (Galileo) outages are applied automatically and listed inoutages_applied.profile(optional): a named parameter set that reproduces a reference service.do229(default): the RTCA DO-229 baseline budget, FDE, every outage counts.faa-c129: matches the FAA RAIM SAPT / TSO-C129 prediction (FD only, 5 deg, 1 min step, error model calibrated on the FAA daily plot, outages under 5 continuous minutes ignored).augur: matches Eurocontrol AUGUR (FD, 5 deg, 1 min step, AUGUR's own error and baro models as read from its output, and its 5 minute rule, which measures an outage from its first to its last unavailable minute as AUGUR prints it).faa-c129-sa: the TSO-C129 SA-on receiver class. Any explicit field overrides the profile; the responseparamsechoes the settings applied.GET /v1/raim/profileslists them.constellations(optional, default["gps"]):["gps", "galileo"]adds Galileo from the GSC almanac; the solution then carries the GPS-Galileo time offset as a fifth unknown, so FD needs 6 satellites and FDE 7.["galileo"]alone is a single-system solve.min_outage_minutes(optional): outages shorter than this are ignored for the dispatch verdict; the FAA and AUGUR profiles set 5.sa(optional, default false): the TSO-C129 Selective Availability receiver class, a much larger error budget; AUGUR offers the same switch. Unknown fields are rejected with 400unknown_field.
Response:
{
"almanac": { "version": "2436-61440", "toa": "2026-09-13T17:03:42Z", "source": "navcen", "satellites": 32, "healthy": 31 },
"params": { "window_minutes": 60, "step_seconds": 60, "mask_deg": 5, "fde": true, "baro": false, "min_sats_fd": 5, "min_sats_fde": 6,
"profile": "do229", "min_outage_minutes": 0, "constellations": ["gps"] },
"outages_applied": [ { "prn": 1, "from": "2026-09-18T03:00:00Z", "to": "2026-09-18T15:00:00Z", "source": "NANU 2026073 FCSTDV" } ],
"dispatch": { "ok": false, "min_outage_minutes": 0, "longest_outage_s": 840, "short_outages": 0 },
"points": [
{
"id": "EHAM", "hal_nm": 0.3, "hal_m": 555.6,
"start": "2026-09-18T06:15:00Z", "end": "2026-09-18T08:15:00Z",
"available_now": false,
"epochs": 121, "epochs_available": 107, "availability_pct": 88.4,
"outages": [
{ "from": "2026-09-18T07:10:00Z", "to": "2026-09-18T07:24:00Z", "duration_s": 840, "reason": "hpl_exceeds_hal", "max_hpl_m": 612.0 }
],
"dispatch": { "ok": false, "min_outage_minutes": 0, "longest_outage_s": 840, "short_outages": 0 },
"worst": { "hpl_nm": 0.33, "hpl_m": 612.0, "at": "2026-09-18T07:17:00Z", "sats": 6 },
"min_sats": 6
}
],
"warnings": [],
"degraded": false,
"compute_ms": 4.3,
"generated_at": "2026-09-18T06:02:11Z"
}
Reading it:
outages_appliedlists the outage windows (NANU, NAGU and your own) that overlap the computed window;almanac.satellitesandalmanac.healthycount the requested constellations.generated_atis when the answer was computed (UTC); every RAIM answer carries it.available_nowis availability at the epoch nearest the point'stime.outages[]are merged intervals where RAIM was not available.reasonishpl_exceeds_halorinsufficient_satellites.tois the last unavailable epoch plus one step.worstis the largest HPL in the window and when it occurred.hpl_misnullwhen RAIM is impossible (too few satellites or degenerate geometry).- With
detail: true, each point also carriesepochs_detail: { "t": [unix seconds], "hpl_m": [], "sats": [], "avail": [] }. dispatchis the verdict under the profile's outage rule:okis true when no outage ofmin_outage_minutesor longer remains;short_outagescounts the ones ignored. The top-leveldispatchcovers every point.degraded: true(also theX-Raim-Degraded: trueheader) means a warning affects trust in the numbers: almanac more than 7 days from the requested time, or the NANU/NAGU set stale. Showwarningsto the user; never hide them. Requests more than 30 days from the almanac are refused with 503 rather than guessed.
Example call:
curl -s https://api.bravoecho.ai/v1/raim/predict \
-H "Authorization: Bearer $BRAVOECHO_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[{"id":"EHAM","lat":52.3086,"lon":4.7639,"time":"2026-09-18T07:15:00Z","phase":"approach"}]}'