API reference

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 needs lat, lon, time, and either phase or hal_nm. id is echoed back; use ICAO codes or your own waypoint names. alt_m defaults to 0.
  • phase: one of oceanic (HAL 4.0 NM), enroute (2.0 NM), terminal (1.0 NM), approach (0.3 NM; aliases npa, 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.3 and rnp-0.3 work too). hal_nm (above 0, up to 20) instead of a phase sets the limit directly. GET /v1/raim/phases lists them.
  • window_minutes (default 60): each side of the point's time. 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 in outages_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 response params echoes the settings applied. GET /v1/raim/profiles lists 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 400 unknown_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_applied lists the outage windows (NANU, NAGU and your own) that overlap the computed window; almanac.satellites and almanac.healthy count the requested constellations. generated_at is when the answer was computed (UTC); every RAIM answer carries it.
  • available_now is availability at the epoch nearest the point's time.
  • outages[] are merged intervals where RAIM was not available. reason is hpl_exceeds_hal or insufficient_satellites. to is the last unavailable epoch plus one step.
  • worst is the largest HPL in the window and when it occurred. hpl_m is null when RAIM is impossible (too few satellites or degenerate geometry).
  • With detail: true, each point also carries epochs_detail: { "t": [unix seconds], "hpl_m": [], "sats": [], "avail": [] }.
  • dispatch is the verdict under the profile's outage rule: ok is true when no outage of min_outage_minutes or longer remains; short_outages counts the ones ignored. The top-level dispatch covers every point.
  • degraded: true (also the X-Raim-Degraded: true header) means a warning affects trust in the numbers: almanac more than 7 days from the requested time, or the NANU/NAGU set stale. Show warnings to 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"}]}'