API Documentation
Aerodrome safeguarding surfaces generation — ICAO Annex 14 OLS, OFS, OES, and ICAO EUR DOC 015 BRA. All endpoints return GeoJSON.
Endpoints
Authentication
Contact us to get an API key. Every request must include your key in the Authorization header:
Authorization: Bearer aoi_xxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/jsonNew accounts receive 50 free credits on email verification — enough to make real API calls and validate your integration before purchasing a credit pack.
OLS — Obstacle Limitation Surfaces
Generates ICAO Annex 14 or EASA obstacle limitation surfaces for one or more runways. Surfaces include outer horizontal, conical, inner horizontal, approach, takeoff, transitional, and precision-only surfaces.
Top-Level Fields
| Field | Type | Req | Notes |
|---|---|---|---|
| standard | string | Yes | "icao" or "easa" |
| airport | object | Yes | Airport object (see below) |
| runways | array | Yes | One or more runway objects |
Airport Object
| Field | Type | Req | Notes |
|---|---|---|---|
| epsgCode / epsgcode | number | Yes | EPSG projection code |
| arplat | number | Yes | ARP latitude (decimal degrees) |
| arplng | number | Yes | ARP longitude (decimal degrees) |
| arpelev | number | Yes | ARP elevation (metres) |
| ihsdatum | number | Yes | Inner horizontal surface datum (metres) |
| ohsradius | number | No | Outer horizontal surface radius override |
Runway Object — Required
| Field | Type | Req | Notes |
|---|---|---|---|
| name / rwyname | string | Yes | Runway designator, e.g. "04" |
| rwyclass | string | Yes | See valid values below |
| rwycode | number | Yes | ICAO runway code: 1, 2, 3, or 4 |
| rwyalat | number | Yes | Threshold A latitude |
| rwyalng | number | Yes | Threshold A longitude |
| rwyaelev | number | Yes | Threshold A elevation (metres) |
| rwyblat | number | Yes | Threshold B latitude |
| rwyblng | number | Yes | Threshold B longitude |
| rwybelev | number | Yes | Threshold B elevation (metres) |
| acMassAbove5700kg | boolean | Yes | Aircraft mass above 5700 kg |
| codeF | boolean | Yes | Code F aircraft operations |
| imcVmcNightTakeoff | boolean | Yes | IMC/VMC night takeoff |
| takeoffSlope16Percent | boolean | Yes | 1.6% takeoff slope applies |
Runway Object — Optional
| Field | Type | Req | Notes |
|---|---|---|---|
| cwylength | number | No | Clearway length (metres) |
| cwyelev | number | No | Clearway elevation (metres) |
| appobstelev | number | No | Approach obstacle elevation (metres) |
| profilePoints | array | No | Runway profile points along runway |
Valid rwyclass values
"Non-Instrument""Non-Precision Approach""Precision Approach CAT I""Precision Approach CAT II""Precision Approach CAT III"Output Surfaces
Example Payload
{
"standard": "icao",
"airport": {
"epsgcode": 32651,
"arplat": 10.30756272,
"arplng": 123.97943972,
"arpelev": 8.0,
"ihsdatum": 45.0
},
"runways": [
{
"rwyname": "04",
"rwyclass": "Precision Approach CAT I",
"rwycode": 4,
"rwyalat": 10.29695142,
"rwyalng": 123.96878489,
"rwyaelev": 6.49,
"rwyblat": 10.31618992,
"rwyblng": 123.98810064,
"rwybelev": 9.43,
"acMassAbove5700kg": true,
"codeF": false,
"imcVmcNightTakeoff": false,
"takeoffSlope16Percent": false,
"appobstelev": 250,
"cwylength": 150,
"cwyelev": 9.43,
"profilePoints": [
{ "distance": 300, "elevation": 7 },
{ "distance": 600, "elevation": 8 }
]
}
]
}OFS — Obstacle Free Surfaces
Generates ICAO obstacle-free zone surfaces for one or more runways. Precision-only surfaces (Inner Approach, Inner Transitional, Balked Landing) are only generated when rwyclass contains "precision" (case-insensitive).
Airport Object
| Field | Type | Req | Notes |
|---|---|---|---|
| epsgCode / epsgcode | number | Yes | EPSG projection code |
| arplat | number | Yes | ARP latitude |
| arplng | number | Yes | ARP longitude |
| arpelev | number | Yes | ARP elevation (metres) |
Runway Object — Required
| Field | Type | Req | Notes |
|---|---|---|---|
| name / rwyname | string | Yes | Runway designator |
| rwyclass | string | Yes | See valid values |
| rwyadg | string | Yes | ADG classification |
| rwyalat / rwyblat | number | Yes | Threshold lat/lng/elev (A and B) |
| rwyWidth | number | Yes | Runway width (metres) |
| acMassAbove5700kg | boolean | Yes | Aircraft mass above 5700 kg |
| codeF | boolean | Yes | Code F aircraft operations |
| imcVmcNightTakeoff | boolean | Yes | IMC/VMC night takeoff |
| takeoffSlope16Percent | boolean | Yes | 1.6% takeoff slope applies |
Runway Object — Optional
| Field | Type | Req | Notes |
|---|---|---|---|
| och | number | No | Obstacle clearance height (metres) |
| cwylength | number | No | Clearway length (metres) |
| profilePoints | array | No | Runway profile points |
Output Surfaces
Example Payload
{
"airport": {
"epsgcode": 32651,
"arplat": 10.30756272,
"arplng": 123.97943972,
"arpelev": 8.0
},
"runways": [
{
"rwyname": "04",
"rwyclass": "Precision Approach CAT I",
"rwyadg": "IV",
"rwyalat": 10.29695142,
"rwyalng": 123.96878489,
"rwyaelev": 6.49,
"rwyblat": 10.31618992,
"rwyblng": 123.98810064,
"rwybelev": 9.43,
"acMassAbove5700kg": true,
"codeF": false,
"imcVmcNightTakeoff": false,
"takeoffSlope16Percent": false,
"rwyWidth": 45,
"och": 50,
"appobstelev": 250,
"cwylength": 150
}
]
}OES — Obstacle Evaluation Surfaces
Generates FAA/ICAO obstacle evaluation surfaces. The request body contains a surfaces array where each entry describes one surface type for one runway.
Top-Level Fields
| Field | Type | Req | Notes |
|---|---|---|---|
| airport | object | Yes | Airport object |
| surfaces | array | Yes | Array of surface definition objects |
Airport Object
| Field | Type | Req | Notes |
|---|---|---|---|
| epsgCode / epsgcode | number | Yes | EPSG projection code |
| arplat | number | Yes | ARP latitude |
| arplng | number | Yes | ARP longitude |
| arpelev | number | Yes | ARP elevation (metres) |
Surface Definition Object
| Field | Type | Req | Notes |
|---|---|---|---|
| type | string | Yes | Surface type (see valid values) |
| runway | object | Yes | Runway object |
| adgGroups | string[] | No | Required when type is "horizontal" |
| criteriaKey | string | No | Required for all other types |
Valid surface "type" values
"horizontal"— ADG group horizontal surfaces"straight_in_instrument"— criteriaKey: "I-V""instrument_departure"— criteriaKey: "I_to_V""precision_approach"— criteriaKey: "I_to_V"Valid adgGroups values
"ADG I-IIA""ADG IIB""ADG IIC-V"Output Surfaces
Example Payload
{
"airport": {
"epsgcode": 32651,
"arplat": 10.30756272,
"arplng": 123.97943972,
"arpelev": 8.0
},
"surfaces": [
{
"type": "horizontal",
"adgGroups": ["ADG I-IIA", "ADG IIB", "ADG IIC-V"],
"runway": {
"rwyname": "04",
"rwyalat": 10.29695142,
"rwyalng": 123.96878489,
"rwyaelev": 6.49,
"rwyblat": 10.31618992,
"rwyblng": 123.98810064,
"rwybelev": 9.43
}
},
{
"type": "straight_in_instrument",
"criteriaKey": "I-V",
"runway": {
"rwyname": "04",
"rwyalat": 10.29695142,
"rwyalng": 123.96878489,
"rwyaelev": 6.49,
"rwyblat": 10.31618992,
"rwyblng": 123.98810064,
"rwybelev": 9.43
}
}
]
}BRA — Building Restricted Areas
Generates NAVAID building restriction areas. Supports two modes: omnidirectional (cylindrical + cone) and unidirectional (rectangular + trapezoidal + arc). Set the top-level type field to select the mode.
Navaid Object (all BRA types)
| Field | Type | Req | Notes |
|---|---|---|---|
| ident | string | Yes | NAVAID identifier, e.g. "MCT" |
| type | string | Yes | NAVAID type key (see tables below) |
| lat | number | Yes | Latitude (decimal degrees) |
| lng | number | Yes | Longitude (decimal degrees) |
| antennaAltGroundLevel | number | Yes | Antenna elevation above ground (metres) |
| epsgCode / epsgcode | number | Yes | EPSG projection code |
Omnidirectional
Set "type": "omnidirectional" at the top level.
navaid.type values
cvor— Conventional VORdvor— Doppler VORdf— Direction Finderdmen— DME (Non-directional)ndb— NDBmarker— Marker Beacongbas-r— GBAS Referencepsr— Primary Surveillance Radarssr— Secondary Surveillance Radarparams
| Field | Type | Req | Notes |
|---|---|---|---|
| evaluateForWindTurbines | boolean | Yes | Generates Second Cylinder for cvor/dvor/df |
| radiusCylinder | number | No | First cylinder radius (metres) |
| alphaCone | number | No | Cone half-angle (degrees) |
| radiusCone | number | No | Cone base radius (metres) |
Output Surfaces
Example
{
"type": "omnidirectional",
"navaid": {
"ident": "MCT",
"type": "dvor",
"lat": 10.3135675,
"lng": 123.98829611,
"antennaAltGroundLevel": 10.14,
"epsgcode": 32651
},
"params": {
"evaluateForWindTurbines": false,
"radiusCylinder": 600,
"alphaCone": 1.0,
"radiusCone": 3000
}
}Unidirectional
Set "type": "unidirectional". Criteria are resolved automatically from ICAO BRA criteria.
navaid.type values
ilsllz-1— ILS LLZ Single FRQilsllz-2— ILS LLZ Dual FRQmls-az— MLS AZdme-d— DME (Directional)ilsgp-m— ILS GP-M Dual FRQmls-el— MLS ELparams
| Field | Type | Req | Notes |
|---|---|---|---|
| direction | number | Yes | Bearing from NAVAID (degrees true, 0–360) |
| distanceToThreshold | number | No | Distance to runway threshold (metres). Required for ilsllz-1/2, mls-az, dme-d |
Output Surfaces
Example — ILS LLZ
{
"type": "unidirectional",
"navaid": {
"ident": "ILS LLZ",
"type": "ilsllz-2",
"lat": 10.3135675,
"lng": 123.98829611,
"antennaAltGroundLevel": 10.14,
"epsgcode": 32651
},
"params": {
"direction": 44,
"distanceToThreshold": 2818
}
}Response Format
All endpoints return a GeoJSON FeatureCollection with 3D coordinates (lng, lat, elevation). Each feature carries metadata about the surface it represents.
Success Response
{
"type": "FeatureCollection",
"properties": {
"epsgCode": 32651
},
"features": [
{
"type": "Feature",
"properties": {
"id": "04_approach",
"runway": "04",
"surface": "Approach",
"group": "Approach",
"category": "surface"
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [ ... ]
}
}
]
}Error Response
{
"error": {
"code": "INVALID_INPUT",
"message": "Validation failed",
"details": [
{
"field": "params.evaluateForWindTurbines",
"message": "Required"
}
]
}
}| Status | Code | Meaning |
|---|---|---|
| 200 | — | Success |
| 400 | INVALID_INPUT | Validation failed — check details |
| 401 | UNAUTHORIZED | Missing or invalid API key |
| 402 | PAYMENT_REQUIRED | Insufficient credits |
| 500 | SERVER_ERROR | Internal calculation error |