AUP Geolocator

Required roles: AIS PIB API — Roles
Base endpoint: https://ais-pib-api.ibosoft.net.tr:2087/eurocontrol-aup-geolocator
Reference documents: EUROCONTROL ERNIP Part 3 Airspace Management Handbook, Ed. 6.1 (02/07/24)
Attribution: show ibonav.aero wherever this data is displayed
Data sources: EUROCONTROL Network Manager, Ibosoft AIS Navdata, NOTAMs.
Last updated: 17 OCT 2026

About the reference documents: Related Documents and Resources
Depending on your use, the original data sources may also need to be credited.

Places the active AUP/UUP release on the map: restricted airspace (RSA) allocations as polygons and ATS route / CDR closures as lines, served as GeoJSON. Processing starts automatically whenever the active release changes.

The AUP tables themselves carry no geometry. This service resolves each entry against the RAD, the airspace and ATS route data and the NOTAMs, as described in How geometry is resolved. The tables are in AUP / UUP, the RAD in RAD.


Endpoints

Endpoint Description
GET /eurocontrol-aup-geolocator/status Processing state: last processed release, last run, last error, AUP and RAD versions used
GET /eurocontrol-aup-geolocator/latest-snapshot The last processed release and the versions used; poll this to know when to reload the layers
GET /eurocontrol-aup-geolocator/geojson/rsa RSA allocations (polygons)
GET /eurocontrol-aup-geolocator/geojson/cdr ATS route / CDR closures on all ATS routes (lines)
GET /eurocontrol-aup-geolocator/geojson/cdr/upper Closures matched on upper ATS routes
GET /eurocontrol-aup-geolocator/geojson/cdr/non-upper Closures matched on non-upper ATS routes
GET /eurocontrol-aup-geolocator/geojson/cdr/other Closures matched on other (named) routes
POST /eurocontrol-aup-geolocator/reprocess Process the active release again

How geometry is resolved

The active release is checked every 30 seconds; when it changes, the whole release is processed again. If the release tables are not available yet, processing is retried on the next check.

RSA allocations

The unit of processing is the FUA/EU RS ID, not the RSA row: each RSA row has one or more FUA/EU RS IDs in its extra table (see AUP / UUP), and each one gives its own feature.

  1. Manually defined geometry — if a geometry has been defined for the FUA/EU RS ID, it is used as is (geometry_source: "manual").

  2. Entries marked "RAD ANNEX 2C" in their description — the FUA/EU RS ID is looked up in RAD Annex 2C (the RAD version in force), which gives the AIP RSA ID and the country (first two letters of NAS/FAB). If the FUA/EU RS ID has no row in Annex 2C, the entry is skipped (no NOTAM search). The AIP RSA ID can hold several terms separated by spaces; they are tried in order and the first one found is used (an empty AIP RSA ID is replaced by the RSA ID). Each term is searched in the airspace data of that country, in this order:

    1. airspace designator, exact match (after removing spaces and hyphens, upper case; P1 matches P1, not P10);
    2. country + type + designator, for prohibited, restricted and danger areas: the first two letters of the term are the country, the next letter the type (EGD701T → type D, designator 701T; EDR203BZ → R, 203BZ);
    3. airspace name containing the term (terms of at least 4 characters).

    If found: geometry_source: "airspace". If not, the NOTAM search below is tried.

  3. NOTAM search — for other entries, and for RAD Annex 2C entries not found in the airspace data: the FUA/EU RS ID is searched in the NOTAM texts, and the geometry of the matching NOTAM is used (geometry_source: "notam"). Only NOTAMs that have a geometry, belong to the countries of the release and overlap the release validity (WEF–TIL) are searched.

When a term matches more than one geometry, the first one is used. Different FUA/EU RS IDs that share the same AIP RSA ID each get their own feature. An RSA row without an extra table, or none of whose FUA/EU RS IDs is resolved, does not appear in the output.

Countries: the countries of the release are taken from the first two letters of the RSA IDs (LTTSA11 → LT); they set which NOTAMs are searched and limit the airspace data to the area of those countries' FIRs and UIRs (all FIRs of a country together). The country of each airspace search comes from NAS/FAB, so an airspace with the same designator in another country is not matched.

ATS route / CDR closures

For each closure, the route ID and its Between and And points are read; a closure with any of the three empty is not searched.

  1. Route: the route ID is compared with the designator of the ATS route segments — prefix, letter, number and the parallel-route suffix (UL607A → U + L + 607 + A; spaces and hyphens ignored). Routes without a designator (named routes in the "other" set, e.g. SOUTH) are matched by name.
  2. Segments: if one segment runs from Between to And (in either direction), it is used. Otherwise the segments of the route are chained from Between to And (shortest chain, segments reversed where needed) and their coordinates are joined into one line, in the Between → And direction.

Each closure is searched independently in four route sets — all, upper, non-upper and other — so the same closure can appear in more than one of the /geojson/cdr… outputs. A closure whose route or points are not found does not appear in that output.

Response

/status

{
  "module": "eurocontrol_aup_geolocator",
  "state": {
    "last_processed_release": "euup-20260611140000",
    "last_run_at": "2026-06-11T14:05:22+00:00",
    "last_error": null,
    "processing": false,
    "aup_info": {"type": "EUUP", "sequence": 4, "valid_wef": "2026-06-11T06:00:00Z", "valid_til": "2026-06-12T06:00:00Z"},
    "rad_info": {"airac": "2606", "kind": "rolling_rad", "version_str": "1.12"}
  }
}

/latest-snapshot

{
  "snapshot": "euup-20260611140000",
  "last_run_at": "2026-06-11T14:05:22+00:00",
  "aup_info": {"type": "EUUP", "sequence": 4, "valid_wef": "…", "valid_til": "…"},
  "rad_info": {"airac": "2606", "kind": "rolling_rad", "version_str": "1.12"}
}

When snapshot changes, reload the GeoJSON layers.

/geojson/rsa

A GeoJSON FeatureCollection (application/geo+json):

{
  "type": "Feature",
  "geometry": {"type": "Polygon", "coordinates": [[[29.1, 40.9], "…"]]},
  "properties": {
    "id": "LTP1R", "rsa_id": "LTP1", "aip_rsa_id": "LTP1",
    "mnm_fl": "000", "max_fl": "999", "wef": "15:30", "unt": "00:00",
    "geometry_source": "airspace"
  }
}
Property Description
id FUA/EU RS ID
rsa_id RSA ID of the AUP row
aip_rsa_id AIP RSA ID from RAD Annex 2C (empty when not used)
mnm_fl, max_fl Lower and upper flight level
wef, unt Activation start and end time (UTC)
geometry_source airspace, notam or manual

/geojson/cdr, /cdr/upper, /cdr/non-upper, /cdr/other

A GeoJSON FeatureCollection (application/geo+json):

{
  "type": "Feature",
  "geometry": {"type": "LineString", "coordinates": [[30.2, 41.0], "…"]},
  "properties": {
    "route_id": "UG802", "between": "SUTRA", "and": "LANED",
    "mnm_fl": "FL245", "max_fl": "FL660", "wef": "06:00", "til": "14:00"
  }
}

/reprocess

{"triggered": "euup-20260611140000"}

Errors

Code Meaning
404 Nothing processed yet
409 Processing is already running (/reprocess)
503 The service is starting up, or the active release cannot be determined (/reprocess)