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/json

New accounts receive 50 free credits on email verification — enough to make real API calls and validate your integration before purchasing a credit pack.

CORS is open — you can call this API directly from a browser. For prototyping, use your trial credits freely. For production, keep your key server-side so it isn't exposed in client code. This follows the same pattern as Mapbox, OpenAI, and similar APIs — key management is the developer's responsibility.

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

FieldTypeReqNotes
standardstringYes"icao" or "easa"
airportobjectYesAirport object (see below)
runwaysarrayYesOne or more runway objects

Airport Object

FieldTypeReqNotes
epsgCode / epsgcodenumberYesEPSG projection code
arplatnumberYesARP latitude (decimal degrees)
arplngnumberYesARP longitude (decimal degrees)
arpelevnumberYesARP elevation (metres)
ihsdatumnumberYesInner horizontal surface datum (metres)
ohsradiusnumberNoOuter horizontal surface radius override

Runway Object — Required

FieldTypeReqNotes
name / rwynamestringYesRunway designator, e.g. "04"
rwyclassstringYesSee valid values below
rwycodenumberYesICAO runway code: 1, 2, 3, or 4
rwyalatnumberYesThreshold A latitude
rwyalngnumberYesThreshold A longitude
rwyaelevnumberYesThreshold A elevation (metres)
rwyblatnumberYesThreshold B latitude
rwyblngnumberYesThreshold B longitude
rwybelevnumberYesThreshold B elevation (metres)
acMassAbove5700kgbooleanYesAircraft mass above 5700 kg
codeFbooleanYesCode F aircraft operations
imcVmcNightTakeoffbooleanYesIMC/VMC night takeoff
takeoffSlope16PercentbooleanYes1.6% takeoff slope applies

Runway Object — Optional

FieldTypeReqNotes
cwylengthnumberNoClearway length (metres)
cwyelevnumberNoClearway elevation (metres)
appobstelevnumberNoApproach obstacle elevation (metres)
profilePointsarrayNoRunway 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

Outer HorizontalConicalInner HorizontalTransitionalApproachTakeoffInner TransitionalInner ApproachBalked LandingStrip

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

FieldTypeReqNotes
epsgCode / epsgcodenumberYesEPSG projection code
arplatnumberYesARP latitude
arplngnumberYesARP longitude
arpelevnumberYesARP elevation (metres)

Runway Object — Required

FieldTypeReqNotes
name / rwynamestringYesRunway designator
rwyclassstringYesSee valid values
rwyadgstringYesADG classification
rwyalat / rwyblatnumberYesThreshold lat/lng/elev (A and B)
rwyWidthnumberYesRunway width (metres)
acMassAbove5700kgbooleanYesAircraft mass above 5700 kg
codeFbooleanYesCode F aircraft operations
imcVmcNightTakeoffbooleanYesIMC/VMC night takeoff
takeoffSlope16PercentbooleanYes1.6% takeoff slope applies

Runway Object — Optional

FieldTypeReqNotes
ochnumberNoObstacle clearance height (metres)
cwylengthnumberNoClearway length (metres)
profilePointsarrayNoRunway profile points

Output Surfaces

ApproachTransitionalTakeoffInner ApproachInner TransitionalBalked Landing

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

FieldTypeReqNotes
airportobjectYesAirport object
surfacesarrayYesArray of surface definition objects

Airport Object

FieldTypeReqNotes
epsgCode / epsgcodenumberYesEPSG projection code
arplatnumberYesARP latitude
arplngnumberYesARP longitude
arpelevnumberYesARP elevation (metres)

Surface Definition Object

FieldTypeReqNotes
typestringYesSurface type (see valid values)
runwayobjectYesRunway object
adgGroupsstring[]NoRequired when type is "horizontal"
criteriaKeystringNoRequired 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

Horizontal surface ADG I-IIAHorizontal surface ADG IIBHorizontal surface ADG IIC-VSurface for straight-in instrument approachesInstrument departure surfaceSurface for precision approaches

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)

FieldTypeReqNotes
identstringYesNAVAID identifier, e.g. "MCT"
typestringYesNAVAID type key (see tables below)
latnumberYesLatitude (decimal degrees)
lngnumberYesLongitude (decimal degrees)
antennaAltGroundLevelnumberYesAntenna elevation above ground (metres)
epsgCode / epsgcodenumberYesEPSG projection code

Omnidirectional

Set "type": "omnidirectional" at the top level.

navaid.type values

cvorConventional VOR
dvorDoppler VOR
dfDirection Finder
dmenDME (Non-directional)
ndbNDB
markerMarker Beacon
gbas-rGBAS Reference
psrPrimary Surveillance Radar
ssrSecondary Surveillance Radar

params

FieldTypeReqNotes
evaluateForWindTurbinesbooleanYesGenerates Second Cylinder for cvor/dvor/df
radiusCylindernumberNoFirst cylinder radius (metres)
alphaConenumberNoCone half-angle (degrees)
radiusConenumberNoCone base radius (metres)

Output Surfaces

First CylinderSecond CylinderCone

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-1ILS LLZ Single FRQ
ilsllz-2ILS LLZ Dual FRQ
mls-azMLS AZ
dme-dDME (Directional)
ilsgp-mILS GP-M Dual FRQ
mls-elMLS EL

params

FieldTypeReqNotes
directionnumberYesBearing from NAVAID (degrees true, 0–360)
distanceToThresholdnumberNoDistance to runway threshold (metres). Required for ilsllz-1/2, mls-az, dme-d

Output Surfaces

RectangleRight TrapezoidLeft TrapezoidArc Surface

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"
      }
    ]
  }
}
StatusCodeMeaning
200Success
400INVALID_INPUTValidation failed — check details
401UNAUTHORIZEDMissing or invalid API key
402PAYMENT_REQUIREDInsufficient credits
500SERVER_ERRORInternal calculation error