Airport Database Status API
Overview
The Airport Database Status endpoint returns the current state of VPT's airport database, including health status, statistics, recent changelog entries, and cron job monitoring timestamps. It also provides a URL to a static GeoJSON file listing all airports. Use this endpoint to display a "Database Info" section in your app.
The airportStatus endpoint is
public and does not require authentication. You
can call it without a JWT token or API key.
Older clients may use "get_airport_status" as the
query name. This is still supported for backward compatibility but
new integrations should use "airportStatus".
Get Airport Database Status
Retrieves the current airport database status including health check, database statistics, recent changelog entries, and background cron job monitoring.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string |
Required |
Must be "airportStatus" (or
"get_airport_status" for legacy clients)
|
Request Body
{
"query": "airportStatus"
}
cURL Example
curl -X POST "https://api.virtualperformancetool.com/api" \
-H "Content-Type: application/json" \
-H "X-API-Version: 1.3.6" \
-d '{
"query": "airportStatus"
}'
Response
{
"apiVersion": "1.3.6",
"success": true,
"airportDatabaseStatus": {
"status": {
"status": "ok",
"message": "Airport database is up-to-date.",
"lastUpdated": "2026-04-15 08:30:00"
},
"statistics": {
"totalEfpCustom": 150,
"totalEfpStd": 3200,
"totalObstacles": 8500,
"totalCalculatedRwyExits": 12000,
"totalRunways": 9200,
"totalIntx": 15400,
"totalAirport": 4523,
"runwayClosedByNotam": 42,
"customMACG": 350,
"customRunwayExit": 180
},
"changelog": [
{
"AirportChanged": "JFK (KJFK) - NEW YORK KENNEDY INTL NY",
"AirportDate": "2023-01-12 22:07:50",
"RunwayChanged": [
{
"id": "RUNWAY 04RN1 (A7976-22) ",
"comment": "Remarks changed (now *REF NOTAM \"A7976-22\"**T/O FROM RWY HEAD*)"
},
{
"id": "RUNWAY 04RN1 (A7976-22) for B737-800W",
"comment": "2 Obstacles removed"
}
]
}
],
"cronMonitoring": {
"notam": "2026-04-15 06:00:00",
"airportsTimezone": "2026-04-14 00:00:00",
"airportOSM": "2026-04-13 00:00:00",
"magneticVariation": "2026-04-01 00:00:00"
},
"mapGeoJsonUrl": "https://api.virtualperformancetool.com/AirportDatabase/GeoJson/airports.min.geo.json"
}
}
Response Fields
The airportDatabaseStatus object contains four
sub-objects and one URL field described below.
status object
Health check of the airport database based on when data was last updated.
| Field | Type | Description |
|---|---|---|
status |
string |
Health indicator. Possible values:
"ok" (updated within 24 h),
"caution" (24–48 h since last update),
"error" (more than 48 h)
|
message |
string |
Human-readable description of the current status |
lastUpdated |
string |
Timestamp of the most recent airport data update (YYYY-MM-DD HH:MM:SS, UTC)
|
statistics object
Numeric counters for airport database contents.
| Field | Type | Description |
|---|---|---|
totalAirport |
integer |
Total number of distinct airports (ICAO codes) in the database |
totalEfpCustom |
integer |
Number of custom EFP (Engine Failure Procedures) entries |
totalEfpStd |
integer |
Number of standard EFP entries |
totalObstacles |
integer |
Total number of obstacle records |
totalCalculatedRwyExits |
integer |
Number of calculated runway exit points |
totalRunways |
integer |
Total number of full-length runways in the database |
totalIntx |
integer |
Total number of runway intersections (intersection takeoff points) |
runwayClosedByNotam |
integer |
Runways currently closed by active NOTAMs |
customMACG |
integer |
Number of custom MACG (Maximum Allowable Cross-wind and Gust) entries |
customRunwayExit |
integer |
Number of custom runway exit entries |
changelog array
Last 20 airport database changelog entries, ordered by most recent first. Each entry describes one airport update and lists every runway/procedure that changed.
| Field | Type | Description |
|---|---|---|
AirportChanged |
string |
Human-readable airport identifier, e.g.
"JFK (KJFK) - NEW YORK KENNEDY INTL NY"
|
AirportDate |
string |
Date/time the airport data was updated (YYYY-MM-DD HH:MM:SS)
|
RunwayChanged |
array |
Array of runway/procedure change objects (see table below) |
Each item in RunwayChanged:
| Field | Type | Description |
|---|---|---|
id |
string |
Runway/procedure identifier, including any NOTAM reference,
e.g. "RUNWAY 04RN1 (A7976-22) "
|
comment |
string |
Plain-text description of what changed for this runway |
cronMonitoring object
UTC timestamps of when each background cron job last ran successfully.
| Field | Type | Description |
|---|---|---|
notam |
string|null |
Last NOTAM import run (YYYY-MM-DD HH:MM:SS UTC)
|
airportsTimezone |
string|null |
Last airport timezone update run |
airportOSM |
string|null |
Last OpenStreetMap airport geometry update run |
magneticVariation |
string|null |
Last WMM magnetic variation update run |
mapGeoJsonUrl field
A URL to a static
GeoJSON FeatureCollection
file containing one Feature (Point) per airport. Fetch
this URL separately to render airports on a map — it is not inlined
in the API response to keep the payload lightweight.
| Field | Type | Description |
|---|---|---|
mapGeoJsonUrl |
string |
Absolute URL to the static
airports.min.geo.json file
|
Fetch the URL and pass the result directly to your mapping
library, e.g.:
fetch(data.airportDatabaseStatus.mapGeoJsonUrl)
.then(r
=> r.json())
.then(geo =>
L.geoJSON(geo).addTo(map));