API Documentation
Aerodrome safeguarding surfaces generation — ICAO Annex 14 OLS, OFS, OES, and ICAO EUR DOC 015 BRA. All endpoints return GeoJSON.
Endpoints
/api/v1/ols/calculateObstacle Limitation Surfaces (ICAO/EASA)
/api/v1/ofs/calculateObstacle Free Surfaces (ICAO)
/api/v1/oes/calculateObstacle Evaluation Surfaces (ICAO)
/api/v1/bra/calculateBuilding Restricted Areas (ICAO)
/api/contactWebsite contact form email submission
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.
Contact Form Endpoint
Public website endpoint used by the landing page contact form. This endpoint does not require API key authentication and sends the message to our inbox.
Request Body
| Field | Type | Req | Notes |
|---|---|---|---|
| name | string | Yes | Sender name |
| string | Yes | Sender email address | |
| organization | string | Yes | Organization or company name |
| message | string | Yes | Message content |
| phone | string | No | Optional phone number |
| website | string | No | Honeypot anti-spam field; leave blank |
Endpoint
POST /api/contact
Content-Type: application/jsonSuccess Response
{
"message": "Message sent! We'll get back to you soon."
}Error Response
{
"error": {
"code": "INVALID_INPUT",
"message": "Name, email, organization, and message are required"
}
}Example Payload
{
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "+64 21 000 0000",
"organization": "Example Aviation",
"message": "Can you help us integrate OLS generation?",
"website": ""
}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 |
| coordinateType | string | No | "latLng" (default) or "xy". When "xy", lat/lng fields are Northing/Easting in the given EPSG |
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 | AD 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 | Runway End (B) latitude |
| rwyblng | number | Yes | Runway End (B) longitude |
| rwybelev | number | Yes | Runway End (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).
Top-Level Fields
| Field | Type | Req | Notes |
|---|---|---|---|
| airport | object | Yes | Airport object (see below) |
| runways | array | Yes | One or more runway objects |
| coordinateType | string | No | "latLng" (default) or "xy". When "xy", lat/lng fields are Northing/Easting in the given EPSG |
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 | AD 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 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 |
| coordinateType | string | No | "latLng" (default) or "xy". When "xy", lat/lng fields are Northing/Easting in the given EPSG |
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 | AD 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.
Top-Level Fields (both modes)
| Field | Type | Req | Notes |
|---|---|---|---|
| type | string | Yes | "omnidirectional" or "unidirectional" |
| navaid | object | Yes | NAVAID object (see below) |
| params | object | Yes | Mode-specific parameters |
| coordinateType | string | No | "latLng" (default) or "xy". When "xy", lat/lng fields are Northing/Easting in the given EPSG |
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 |