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.

FieldMeaning
geometryGeoJSON Polygon or MultiPolygon boundary for the map source
properties._idStable airspace or NOTAM-derived feature identifier
properties.nameDisplay name for labels and popups
properties.typeEasyVFR/OpenAIP-compatible airspace type; graphical NOTAMs use 99
properties.featureCategoryairspace or graphicalNotam
properties.icaoClassNumeric ICAO class value where applicable
properties.countryISO 3166-1 alpha-2 country code
properties.upperLimit, properties.lowerLimitStructured vertical limits
properties.frequenciesOptional radio frequency records for airspaces
properties.remarksSource remarks when available
properties.easyvfrDYNAM-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:

FieldMeaning
valueNumeric altitude value
unit0 meter, 1 feet, 6 flight level
referenceDatum0 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.

FieldMeaning
isActiveYes, No, or Unknown; indicates whether the feature is active now or will become active during the current UTC day
activationTypeOne source/status category for filtering and styling
airspaceActivationTimesCurrent UTC-day activation intervals using start/end ISO datetimes
dynamicScheduleAndVerticalLimitsDetailed schedule rows with temporary vertical limits when known
notamsNOTAM records linked to this feature
aupuupsAUP/UUP records linked to this feature
dynamicStyleMapLibre/Mapbox/Leaflet-friendly style hints

Activation Types

activationType is useful for filtering, grouping, and choosing fallback styles. A feature has one activation type.

ValueMeaning
isActiveAirspace is active through non-NOTAM/non-AUP logic
isNotActiveAirspaceAirspace is currently not active
isActivatedByNOTAMAirspaceExisting airspace is active due to a linked NOTAM
isActivatedByAUPAirspaceExisting airspace is active due to AUP/UUP
isActivatedByAUPAndNOTAMAirspaceExisting airspace is active due to both AUP/UUP and NOTAM data
isActiveRestrictiveNOTAMGraphical restrictive NOTAM
isActiveActivityNOTAMGraphical activity NOTAM, such as parachuting, gliding, aerobatics, or balloon activity
isActiveAirspaceDeactivationNOTAMAirspace deactivation NOTAM that is not linked to an existing airspace feature
isActiveAirspaceNOTAMAirspace NOTAM that is not linked to an existing airspace feature
isOtherActiveAirspaceActive 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:

FieldMeaning
start, endISO 8601 activation interval
upperLimit, lowerLimitTemporary 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.

FieldMeaning
NotamIdUnique NOTAM identifier
NotamIsOfKindEasyVFR NOTAM category for filtering/styling
ItemEMain NOTAM text when included
notamUpperLimit, notamLowerLimitParsed NOTAM vertical limits
GeoJSONGeometryNOTAM geometry wrapper when available

NotamIsOfKind values:

ValueMeaning
AAirspace NOTAM affecting an existing database airspace; normally not graphical
DDeactivation NOTAM for an existing airspace; normally not graphical
RRestrictive graphical NOTAM with its own geometry
VActivity graphical NOTAM with its own geometry
CStructural airspace change already processed into the airspace database; often hidden from operational map layers
nullGeneral 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.

FieldMeaning
DesignatorAirspace identifier
StatusAUP/UUP status, such as ACTIVE
StartDT, EndDTActivation interval
UpperAlt, LowerAltOriginal text altitude limits
aupuupUpperLimit, aupuupLowerLimitParsed 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.

FieldMeaning
fillColor, fillOpacitySuggested polygon fill color and opacity
lineColor, lineWidth, lineOpacitySuggested outline style
lineDasharrayDash pattern, for example [15, 5]
complexStyleOptional special style marker, such as doubleLine
priority / PriorityDrawing and sorting priority; higher values should render above lower values
polygonPaintDirection / PolygonPaintDirectionDirection 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-Version to 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