Data
Against the public DYNAM base URL, GET /v1/data/airspaces returns one GeoJSON FeatureCollection containing airspaces and graphical NOTAMs.
Public third-party access is DYNAM-only. Use scope=dynam or omit scope; scope=static is internal-only for NOTAMbriefing.com.
Request
curl \
-H "Authorization: Bearer $TOKEN" \
"https://dynam.easyvfr.stream/api/v1/data/airspaces?countries=NL,BE,DE&scope=dynam"
countries accepts a comma-separated list of ISO 3166-1 alpha-2 country codes or EUROPE.
Response Shape
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[4.75, 52.25],
[5.1, 52.25],
[5.1, 52.5],
[4.75, 52.5],
[4.75, 52.25]
]
]
},
"properties": {
"_id": "EHTSA24",
"name": "EHTSA24",
"type": 8,
"featureCategory": "airspace",
"icaoClass": 8,
"country": "NL",
"upperLimit": { "value": 4500, "unit": 1, "referenceDatum": 1 },
"lowerLimit": { "value": 0, "unit": 1, "referenceDatum": 0 },
"easyvfr": {
"formattedUpperLimit": "4500ft MSL",
"formattedLowerLimit": "GND",
"EasyVFRType": "08",
"FIR_Ident": "EHAA",
"dynamicAirspaceMapping": {
"isActive": "Yes",
"activationType": "isActivatedByAUPAirspace",
"airspaceActivationTimes": [
{ "start": "2026-05-19T08:00:00.000Z", "end": "2026-05-19T14:00:00.000Z" }
],
"dynamicScheduleAndVerticalLimits": [
{
"start": "2026-05-19T08:00:00.000Z",
"end": "2026-05-19T14:00:00.000Z",
"upperLimit": { "value": 90, "unit": 6, "referenceDatum": 2 },
"lowerLimit": { "value": 0, "unit": 1, "referenceDatum": 0 }
}
],
"dynamicStyle": {
"priority": 12,
"Priority": 12,
"fillColor": "rgba(0, 0, 139, 0.6)",
"lineColor": "rgba(180,25,60,0.922)",
"lineWidth": 2,
"lineDasharray": [15, 5],
"fillOpacity": 0.3,
"lineOpacity": 1,
"complexStyle": null,
"polygonPaintDirection": "A",
"PolygonPaintDirection": "A"
},
"notams": [],
"aupuups": []
}
}
}
}
],
"meta": {
"count": { "airspaces": 1, "airspaceNotams": 0, "graphicalNotams": 0, "total": 1 },
"tier": "dynamic"
}
}
Feature Fields
Each feature is an airspace-like object. Graphical NOTAMs use the same structure as regular airspaces, so most map code can handle both with the same source and layers.
| Field | Meaning |
|---|---|
geometry | GeoJSON Polygon or MultiPolygon boundary for the map source |
properties._id | Stable airspace or NOTAM-derived feature identifier |
properties.name | Display name for labels and popups |
properties.type | EasyVFR/OpenAIP-compatible airspace type; graphical NOTAMs use 99 |
properties.featureCategory | airspace or graphicalNotam |
properties.icaoClass | Numeric ICAO class value where applicable |
properties.country | ISO 3166-1 alpha-2 country code |
properties.upperLimit, properties.lowerLimit | Structured vertical limits |
properties.frequencies | Optional radio frequency records for airspaces |
properties.remarks | Source remarks when available |
properties.easyvfr | DYNAM-specific identifiers, formatted limits, activation, NOTAM, AUP/UUP, and style data |
Geometry
Feature geometry is standard GeoJSON in WGS 84 longitude/latitude decimal degrees. Polygon rings are closed: the first and last coordinate pair are the same.
Most features are Polygon; use normal GeoJSON handling for MultiPolygon where present.
Vertical Limits
Vertical limits follow the OpenAIP-style shape:
| Field | Meaning |
|---|---|
value | Numeric altitude value |
unit | 0 meter, 1 feet, 6 flight level |
referenceDatum | 0 GND/AGL, 1 MSL, 2 STD/flight level |
Use easyvfr.formattedLowerLimit and easyvfr.formattedUpperLimit for labels and popups. Use the structured limits for filtering, altitude-aware display, or custom formatting.
Dynamic Mapping
properties.easyvfr.dynamicAirspaceMapping tells you how the feature behaves today and how DYNAM suggests drawing it.
| Field | Meaning |
|---|---|
isActive | Yes, No, or Unknown; indicates whether the feature is active now or will become active during the current UTC day |
activationType | One source/status category for filtering and styling |
airspaceActivationTimes | Current UTC-day activation intervals using start/end ISO datetimes |
dynamicScheduleAndVerticalLimits | Detailed schedule rows with temporary vertical limits when known |
notams | NOTAM records linked to this feature |
aupuups | AUP/UUP records linked to this feature |
dynamicStyle | MapLibre/Mapbox/Leaflet-friendly style hints |
Activation Types
activationType is useful for filtering, grouping, and choosing fallback styles. A feature has one activation type.
| Value | Meaning |
|---|---|
isActive | Airspace is active through non-NOTAM/non-AUP logic |
isNotActiveAirspace | Airspace is currently not active |
isActivatedByNOTAMAirspace | Existing airspace is active due to a linked NOTAM |
isActivatedByAUPAirspace | Existing airspace is active due to AUP/UUP |
isActivatedByAUPAndNOTAMAirspace | Existing airspace is active due to both AUP/UUP and NOTAM data |
isActiveRestrictiveNOTAM | Graphical restrictive NOTAM |
isActiveActivityNOTAM | Graphical activity NOTAM, such as parachuting, gliding, aerobatics, or balloon activity |
isActiveAirspaceDeactivationNOTAM | Airspace deactivation NOTAM that is not linked to an existing airspace feature |
isActiveAirspaceNOTAM | Airspace NOTAM that is not linked to an existing airspace feature |
isOtherActiveAirspace | Active for another source or reason |
Schedules
airspaceActivationTimes is a compact current-day list. Some airspaces are activated by multiple sources, so intervals can overlap.
When a feature is active for the whole UTC day, the interval starts at 00:00:00Z for the current day and ends at 00:00:00Z on the next day.
dynamicScheduleAndVerticalLimits is the detailed form. A row can include:
| Field | Meaning |
|---|---|
start, end | ISO 8601 activation interval |
upperLimit, lowerLimit | Temporary vertical limits for that interval; when omitted, use the feature limits |
NOTAMs
Linked NOTAM details live in properties.easyvfr.dynamicAirspaceMapping.notams. For common map labels, you normally do not need to parse the linked NOTAM object: the feature itself already carries display name, country, geometry, limits, remarks, activation status, and style.
Use linked NOTAMs when you need source details, custom filtering, or a full popup.
| Field | Meaning |
|---|---|
NotamId | Unique NOTAM identifier |
NotamIsOfKind | EasyVFR NOTAM category for filtering/styling |
ItemE | Main NOTAM text when included |
notamUpperLimit, notamLowerLimit | Parsed NOTAM vertical limits |
GeoJSONGeometry | NOTAM geometry wrapper when available |
NotamIsOfKind values:
| Value | Meaning |
|---|---|
A | Airspace NOTAM affecting an existing database airspace; normally not graphical |
D | Deactivation NOTAM for an existing airspace; normally not graphical |
R | Restrictive graphical NOTAM with its own geometry |
V | Activity graphical NOTAM with its own geometry |
C | Structural airspace change already processed into the airspace database; often hidden from operational map layers |
null | General or unclassified NOTAM |
Graphical NOTAMs
Graphical NOTAMs are normal GeoJSON features. Identify them with either:
feature.properties.type === 99
feature.properties.featureCategory === "graphicalNotam"
Restrictive (R) and activity (V) graphical NOTAMs have their own geometry. Airspace (A) and deactivation (D) NOTAMs usually affect an existing airspace and use that airspace geometry instead.
AUP/UUP Records
When activation is managed by Eurocontrol Airspace Use Plan or Updated Use Plan data, records may appear in properties.easyvfr.dynamicAirspaceMapping.aupuups.
| Field | Meaning |
|---|---|
Designator | Airspace identifier |
Status | AUP/UUP status, such as ACTIVE |
StartDT, EndDT | Activation interval |
UpperAlt, LowerAlt | Original text altitude limits |
aupuupUpperLimit, aupuupLowerLimit | Parsed vertical limits when available |
Styling
Use dynamicStyle when you want DYNAM’s map portrayal. It is optional, but it gives a consistent starting point across apps.
| Field | Meaning |
|---|---|
fillColor, fillOpacity | Suggested polygon fill color and opacity |
lineColor, lineWidth, lineOpacity | Suggested outline style |
lineDasharray | Dash pattern, for example [15, 5] |
complexStyle | Optional special style marker, such as doubleLine |
priority / Priority | Drawing and sorting priority; higher values should render above lower values |
polygonPaintDirection / PolygonPaintDirection | Direction hint for patterned or hatched fills |
New code should prefer lowercase fields. Legacy aliases remain present for existing consumers.
For inactive airspaces, prefer reducing opacity over hiding the feature completely. This keeps the airspace visible for orientation while making active or relevant areas stand out.
Timing And Cache
- Source data is refreshed throughout the day.
- Published API artifacts are rebuilt regularly.
- For the best day-start picture, fetch after 06:15 UTC.
- Use response cache headers and
X-Data-Versionto avoid unnecessary downloads. - Large country sets can be tens of megabytes uncompressed; use gzip and cache backend processing results when direct per-user OAuth is not required.
Next
- MapLibre/Mapbox - add the GeoJSON to a map.
- Airspace types - type code reference.
- Reference - OpenAPI schema.