Airports API

Retrieve detailed airport information including runways, NOTAMs, and operational data for performance calculations.

Overview

The Airports API provides comprehensive airport data required for performance calculations. Airport data is retrieved based on the selected aircraft profile, as different aircraft types have different airport databases with specific obstacle clearance procedures and engine failure procedures.

Aircraft-Specific Airport Data

Airport availability depends on the aircraft type, not the user's subscription. This is because obstacles, engine failure procedures, and climb gradients may differ between aircraft types. Use the availableAirport array from the aircraft response to determine which airports can be queried for a specific aircraft.

Data Access Levels

The Airports API provides different levels of data based on your subscription tier. The amount of airport data returned depends on your access level.

Level Description Included Data
SIMPLE Basic airport and runway data Core airport info, runway dimensions, basic procedures, NOTAM status
MEDIUM Extended operational data All SIMPLE data plus: PCN, surface type, MACG, GA acceleration altitude, aircraft lineup data, database changelog
FULL Complete database access All MEDIUM data plus: obstacle data, detailed terrain analysis (Reserved for VPT internal projects)
Obstacle Data Restrictions

Important: Obstacle details are not provided to third-party integrations. Obstacles are used internally during performance calculations but will not be included in the API response. This data is reserved exclusively for Virtual Performance Tool's own applications.

Get Airport

POST /api

Retrieves detailed airport information for performance calculations.

Request Parameters

Parameter Type Required Description
query string Required Must be "airport"
data.aircraft string Required Aircraft profile filename (from allowedAircrafts)
data.userRegistration string|null Required User registration value (or null)
data.virtualAirline string|null Required Virtual airline value (or null)
data.icao string Required Airport ICAO code (e.g., "EBBR")

Request Body

JSON
{
  "query": "airport",
  "data": {
    "aircraft": "320-212-CFM56-5A3.json",
    "userRegistration": null,
    "virtualAirline": null,
    "icao": "EBBR"
  }
}

cURL Example

cURL
curl -X POST "https://api.virtualperformancetool.com/api" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-API-Version: 1.3.6" \
  -d '{
    "query": "airport",
    "data": {
      "aircraft": "320-212-CFM56-5A3.json",
      "userRegistration": null,
      "virtualAirline": null,
      "icao": "EBBR"
    }
  }'

Response (SIMPLE Access)

Basic airport data without extended operational details:

JSON - SIMPLE Response
{
  "apiVersion": "1.3.6",
  "airport": {
    "icao": "EBBR",
    "iata": "BRU",
    "name": "BRUSSELS NATIONAL",
    "country": "BELGIUM",
    "altitude": "175",
    "procedure": "PANS-OPS",
    "longestRunwayLength": "11935",
    "city": "BRUSSELS",
    "lat": 50.902,
    "lon": 4.499,
    "latDeg": "N50°54'7\"",
    "lonDeg": "E4°29'56\"",
    "databaseDate": "18/09/2024 16:11:04",
    "notamMonitored": true,
    "databaseLastCheck": "1970-01-01 00:00:00",
    "notam": null,
    "availableRunwaysTakeoff": [
      {
        "runway": "07L",
        "rwyQfu": "64",
        "tora": "11935",
        "lda": "10990",
        "slopeTora": "-0.21",
        "brElev": "124",
        "efp": "Maintain 064° to 25 NM and HOLD...",
        "efpLong": "STD.",
        "comments": "T/O FROM RWY HEAD",
        "width": 147.6378,
        "isClosed": false,
        "closedNotam": null,
        "availableIntx": [
          {
            "runway": "07LI1",
            "taxi": "A6",
            "tora": "8677",
            "comments": "T/O FROM \"A6\"**T/O SHIFT 993M"
          }
          // ... additional intersections
        ]
      },
      {
        "runway": "25R",
        "rwyQfu": "244",
        "tora": "11935",
        "lda": "10954",
        "slopeTora": "0.21",
        "brElev": "99",
        "efp": "Maintain 244° to 25 NM and HOLD...",
        "efpLong": "STD.",
        "isClosed": false,
        "availableIntx": [ /* ... */ ]
      }
      // ... additional runways (01, 07R, 19, 25L)
    ],
    "availableRunwaysLanding": [
      // Similar structure to takeoff runways
    ]
  }
}

Response (MEDIUM Access)

Extended data including PCN, surface type, and changelog:

JSON - MEDIUM Response
{
  "apiVersion": "1.3.6",
  "airport": {
    "icao": "EBBR",
    "iata": "BRU",
    "name": "BRUSSELS NATIONAL",
    "country": "BELGIUM",
    "altitude": "175",
    "procedure": "PANS-OPS",
    // ... same core fields as SIMPLE ...
    "availableRunwaysTakeoff": [
      {
        "runway": "07L",
        "rwyQfu": "64",
        "tora": "11935",
        "lda": "10990",
        "slopeTora": "-0.21",
        "slopeAsda": "-0.21",
        "slopeLda": "-0.20",
        "brElev": "124",
        "efp": "Maintain 064° to 25 NM and HOLD...",
        "efpLong": "STD.",
        "comments": "T/O FROM RWY HEAD",
        "aircraftLineup": "'737-800' 035.40    086.60  'F'",
        "gaAccAlt": "1500",
        "width": 147.6378,
        "pcn": "80/F/A/W/T",
        "surface": "0.0",
        "surfaceText": "Hard",
        "macg": [
          { "gradient": 2.5, "label": "" }
        ],
        "isClosed": false,
        "closedNotam": null,
        "availableIntx": [
          {
            "runway": "07LI1",
            "taxi": "A6",
            "tora": "8677",
            "slopeTora": "-0.22",
            "pcn": "80/F/A/W/T",
            "surfaceText": "Hard",
            "macg": [ { "gradient": 2.5, "label": "" } ]
            // ... additional fields
          }
        ]
      },
      {
        "runway": "25R",
        "rwyQfu": "244",
        "tora": "11935",
        "pcn": "80/F/A/W/T",
        "surfaceText": "Hard",
        "macg": [ { "gradient": 2.5, "label": "" } ],
        "availableIntx": [ /* ... */ ]
      }
      // ... additional runways
    ],
    "availableRunwaysLanding": [ /* ... */ ],
    "changelog": {
      "airportChanged": "BRU (EBBR) - BRUSSELS NATIONAL",
      "airportDate": "2024-11-05 20:09:44",
      "runwayChanged": [
        { "id": "RUNWAY 07L", "comment": "PCN changed (now PCN/80/F/A/W/T)" },
        { "id": "RUNWAY 25R", "comment": "PCN changed (now PCN/80/F/A/W/T)" }
        // ... additional changes
      ]
    }
  }
}
MEDIUM vs SIMPLE Differences

MEDIUM access adds: pcn, surface, surfaceText, macg (Minimum Aircraft Climb Gradient), gaAccAlt (Go-Around Acceleration Altitude), aircraftLineup, and the changelog section.

Airport Info (Lightweight)

POST /api

Returns a small set of public airport metadata for a given ICAO code — ICAO, IATA, name, country, geographic coordinates, and field elevation. This is a lightweight read-only endpoint intended for autocomplete dropdowns, map markers, briefing tooltips, and any UI that does not need the full performance payload returned by airport.

Data is sourced from the B7378 aircraft database (the broadest airport coverage VPT maintains). If an ICAO code is not present in B7378 the endpoint returns AIRPORT_NOT_FOUND.

Authentication

JWT required. Any airport_data developer key level (SIMPLE / MEDIUM / FULL) is sufficient.

Request Parameters

Parameter Type Required Description
query string Required Must be "airportInfo"
data.icao string Required Airport ICAO code, 3–4 alphanumeric characters (e.g. "EBBR")

Request Body

JSON
{
  "query": "airportInfo",
  "data": { "icao": "EBBR" }
}

cURL Example

SHELL
curl -X POST "https://api.virtualperformancetool.com/api/" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_JWT" \
  -d '{
    "query": "airportInfo",
    "data": { "icao": "EBBR" },
    "api_key": "YOUR_API_KEY",
    "dev_key": "YOUR_DEV_KEY",
    "api_version": "1.3.6"
  }'

Response Fields

Field Type Description
airport.icao string ICAO code (uppercase)
airport.iata string|null IATA code, or null if unassigned
airport.name string Airport name
airport.country string|null Country name, or null when unknown
airport.coordinates.latitude number|null Decimal degrees (WGS-84)
airport.coordinates.longitude number|null Decimal degrees (WGS-84)
airport.elevation integer|null Field elevation in feet (MSL)

Success Response

JSON
{
  "success": true,
  "airport": {
    "icao": "EBBR",
    "iata": "BRU",
    "name": "BRUSSELS NATIONAL",
    "country": "BELGIUM",
    "coordinates": {
      "latitude": 50.9014,
      "longitude": 4.4844
    },
    "elevation": 184
  }
}

Error Codes

  • AUTH_REQUIRED — missing or invalid JWT (HTTP 401)
  • INVALID_ICAO — ICAO is missing or not 3–4 alphanumeric characters (HTTP 400)
  • AIRPORT_NOT_FOUND — the ICAO is not present in the B7378 database (HTTP 404)

Response Sections

The airport response contains several sections providing detailed airport and runway information.

Airport Information

General airport data and location information.

Field Type Description
icao string ICAO airport code
iata string IATA airport code
name string Airport name
country string Country name
city string City name
altitude string Airport elevation in feet
procedure string Approach procedure type (e.g., "PANS-OPS")
lat number Latitude in decimal degrees
lon number Longitude in decimal degrees
latDeg string Latitude in degrees/minutes/seconds format (e.g., "N50°54'7\"")
lonDeg string Longitude in degrees/minutes/seconds format (e.g., "E4°29'56\"")
longestRunwayLength string Length of the longest runway in feet
databaseDate string Database version date
databaseLastCheck string Last database update check (UTC)
notamMonitored boolean Whether NOTAMs are actively monitored for this airport
notam object|null Requires developer key + user subscription access. Categorized NOTAMs object containing international, military, and obstacles arrays. See NOTAM Object for structure.

Available Runways - Takeoff

The availableRunwaysTakeoff array contains runways available for takeoff operations.

Core Fields (SIMPLE + MEDIUM)
Field Type Description
runway string Required for API calculations. Runway identifier with intersection suffix (e.g., "07L", "07LI1"). Send this value to the Performance API.
rwyId string Base runway identifier for display purposes (e.g., "07L")
runwayDisplay string Formatted display name for the runway
rwyQfu string Runway magnetic heading
taxi string Taxiway intersection name (empty for full runway)
tora string Takeoff Run Available (feet)
lda string Landing Distance Available (feet)
clw string Clearway (feet)
stw string Stopway (feet)
slopeTora string Average runway slope for TORA (%)
slopeAsda string Average runway slope for ASDA (%)
slopeLda string Average runway slope for LDA (%)
brElev string Brake release elevation (feet)
width number Runway width (feet)
efp string Engine Failure Procedure (computed with user preferences)
efpLong string Engine Failure Procedure (raw code, e.g., "STD.")
comments string Runway comments and restrictions
icao string Required for API calculations. Airport ICAO code to send to the Performance API.
isClosed boolean Whether runway is closed (from NOTAM)
closedNotam object|null NOTAM closure details if runway is closed (see closedNotam structure below)
closedNotamFull string|null Full formatted NOTAM text if runway is closed
availableIntx array Available intersection departures (same structure)
Additional Fields (MEDIUM only)
Field Type Description
aircraftLineup string Aircraft lineup position data (Unknown)
gaAccAlt string Go-Around Acceleration Altitude (feet)
pcn string Pavement Classification Number (e.g., "80/F/A/W/T")
surface string Surface type code
surfaceText string Surface type description (e.g., "Hard")
macg array Minimum Aircraft Climb Gradient requirements
MACG Object
Field Type Description
gradient number Required climb gradient (%)
label string Gradient condition or label
closedNotam Object

When isClosed is true, the closedNotam object contains NOTAM closure details:

Field Type Description
id string Internal NOTAM identifier
icao string Airport ICAO code
runway string Affected runway designator
runwayOpp string Opposite runway designator
notamId string Official NOTAM reference number (e.g., "A0290/26")
notamText string Short NOTAM text (e.g., "RWY 02/20 CLSD. AVBL PPR 10MIN")
notamFormattedText string Full formatted NOTAM text in ICAO format
periodFrom string NOTAM validity start (UTC datetime)
periodTo string NOTAM validity end (UTC datetime)
startTime string Daily start time (HH:mm:ss)
endTime string Daily end time (HH:mm:ss)
daily string Daily recurrence flag ("1" = daily pattern)
weekDays string Active days of week (e.g., "SUN", "MON,TUE")
used string Internal usage counter

Available Runways - Landing

The availableRunwaysLanding array contains runways available for landing operations. The structure is identical to availableRunwaysTakeoff with the same fields.

Same Structure as Takeoff

Landing runways contain the same fields as takeoff runways. The primary difference is contextual: lda is the relevant distance for landing operations.

NOTAM Object

The notam object contains categorized NOTAMs for the airport. This field is only available if the developer key and user subscription grant NOTAM access.

NOTAM Access Required

The notam field is only returned when both your developer key and the user's subscription include NOTAM access. If not authorized, this field will be null.

NOTAM Categories
Category Type Description
international array General international NOTAMs (aerodrome, taxiway, runway, approach, etc.)
military array Military NOTAMs including US DOD procedural NOTAMs
obstacles array Obstacle-related NOTAMs (cranes, temporary structures, etc.)
NOTAM Object Structure

Each NOTAM in the category arrays contains the following fields:

Field Type Description
notamNumber string Official NOTAM reference number (e.g., "A0290/26")
icaoLocation string ICAO location code for this NOTAM
type string NOTAM type code: "N" (New), "R" (Replaced), "C" (Canceled)
typeExplanation string Human-readable type: "New", "Replaced", "Canceled"
notamText string Short NOTAM text content
notamFormattedText string Full formatted NOTAM text in ICAO format with line breaks
effectiveStart string NOTAM effective start datetime (UTC, format: "YYYY-MM-DD HH:mm:ss")
effectiveEnd string NOTAM effective end datetime (UTC). Permanent NOTAMs show "9999-12-31 23:59:59"
minimumFL string Minimum flight level affected (e.g., "000")
maximumFL string Maximum flight level affected (e.g., "999")
NOTAM Example
JSON - NOTAM Object
{
  "notam": {
    "International": [
      {
        "notamNumber": "A0290/26",
        "icaoLocation": "LEBL",
        "type": "N",
        "typeExplanation": "New",
        "notamText": "RWY 02/20 CLSD. AVBL PPR 10MIN",
        "notamFormattedText": "A0290/26 NOTAMN\nQ) LECB/QMRLC/IV/NBO/A /000/999/4118N00205E005\nA) LEBL B) 2601191500 C) 2601251800\nD) 19 1500-1800, 25 1500-1800\nE) RWY 02/20 CLSD. AVBL PPR 10MIN",
        "effectiveStart": "2026-01-19 15:00:00",
        "effectiveEnd": "2026-01-25 18:00:00",
        "minimumFL": "000",
        "maximumFL": "999"
      },
      {
        "notamNumber": "A2755/24",
        "icaoLocation": "LEBL",
        "type": "N",
        "typeExplanation": "New",
        "notamText": "TYPE D ACFT OR HIGHER FOR GENERAL AVIATION AND BUSINESS TFC...",
        "notamFormattedText": "A2755/24 NOTAMN\nQ) LECB/QFALT/I /NBO/A /000/999/4118N00205E005\nA) LEBL...",
        "effectiveStart": "2024-04-18 21:59:00",
        "effectiveEnd": "9999-12-31 23:59:59",
        "minimumFL": "000",
        "maximumFL": "999"
      }
    ],
    "Military": [
      {
        "notamNumber": "V0021/26",
        "icaoLocation": "LEBL",
        "type": "N",
        "typeExplanation": "New",
        "notamText": "[US DOD PROCEDURAL NOTAM] INSTRUMENT APPROACH PROCEDURE AMENDMENT RNP Y RWY 24R...",
        "notamFormattedText": "V0021/26 NOTAMN\nQ) LECB/QPICH/I/BO/A/000/999/4117N00205E005\nA) LEBL...",
        "effectiveStart": "2026-01-13 16:46:00",
        "effectiveEnd": "2026-02-18 23:01:00",
        "minimumFL": "000",
        "maximumFL": "999"
      }
    ],
    "Obstacles": [
      {
        "notamNumber": "A0160/26",
        "icaoLocation": "LEBL",
        "type": "N",
        "typeExplanation": "New",
        "notamText": "OBST (CRANE ERECTED) HGT 25M, LOCATED AT COORD: 411719.60N 0020404.80E",
        "notamFormattedText": "A0160/26 NOTAMN\nQ) LECB/QOBCE/IV/M  /A /000/999/4118N00205E005\nA) LEBL...",
        "effectiveStart": "2026-01-12 07:00:00",
        "effectiveEnd": "2026-01-31 19:00:00",
        "minimumFL": "000",
        "maximumFL": "999"
      }
    ]
  }
}
NOTAM Types

N (New): A new NOTAM.
R (Replaced): Replaces a previous NOTAM (reference shown in formatted text).
C (Canceled): Cancels a previous NOTAM.
Permanent: NOTAMs with effectiveEnd of "9999-12-31 23:59:59" are permanent.

Changelog Section

The changelog object contains recent changes to airport data, useful for tracking updates.

Changelog Usage

The changelog helps identify recent changes to runway data. This can be useful for alerting users about updated runway lengths or procedures.

Error Responses

Error Cause
Invalid API request. Missing icao parameter
The requested aircraft profile does not exist. Invalid aircraft profile specified
This aircraft is not allowed with your subscription at this airport. Subscription does not include this aircraft/airport combination
This airport does not exist or is not approved for your aircraft / subscription. Airport not found or not available for the user

What's Next?