TRA INFO HUB

API Documentation

JSON exports for current TRA activations and Austria Widget airspace status, intended for external systems that need machine-readable airspace information.

What are TRAs?

TRAs are temporary reserved airspaces in Austria for VFR operations. They are located in airspace class G/W and are activated only for defined time windows; outside those times they are inactive.

Endpoints

export_activations.php

Returns exportable activation, extension and deactivation records whose start or deactivation time is within the last 26 hours and the next 12 hours.

https://tra-dev.airspace.at/export_activations.php?importer=abc123

export_activations_48h.php

Uses the same JSON structure, but extends the lookback window to the last 48 hours plus the next 12 hours.

https://tra-dev.airspace.at/export_activations_48h.php?importer=abc123

export_dev.php

Returns the latest 20 exportable system interactions using the same JSON structure. This is useful for integration tests because it is not limited to the rolling time window. This endpoint is always hash-only.

https://tra-dev.airspace.at/export_dev.php?importer=abc123

Only records from clubs and TRAs enabled for JSON export are included. Rejected requests and "no extension possible" notices are not part of this export.

Access

Importer hash

API consumers currently need an assigned importer hash. Pass it as the importer query parameter. The value shown in the examples is a placeholder and must be replaced with the assigned hash.

Firewall allowlisting

Please also provide the source IP address of the consuming system if possible. IP allowlisting for the firewall is currently optional, but may be required later or for selected integrations.

Free access

API access is provided free of charge. We are happy to present data users as partners on the homepage, including their logo where appropriate.

Support welcome

For commercial or profit-oriented projects, we appreciate voluntary financial support to help keep the service reliable, maintained and available to the community.

Missing access

If the export is not public and the hash is missing or invalid, the endpoint responds with HTTP 403 and a JSON error message.

JSON Structure

The response is a JSON array. Each array item is a command for XContest. Commands use type=activation, type=cancel or type=stop_activation. Grouped internal TRA Manager actions are exported per TRA so a later stop_activation can stop only the affected airspace.

Field Type Meaning
activation_id integer Unique exported command ID. For per-TRA commands it is derived from the internal interaction ID and TRA ID so individual airspaces can later be stopped or cancelled independently.
type string Command type: activation, cancel or stop_activation.
addedTimestamp string UTC timestamp when the event was entered. Also present for cancellations.
cancelled_activation_id integer Only for type=cancel. References the previously exported activation_id that should be removed by the consumer.
stop_activation_id integer Only for type=stop_activation. References the previously exported activation command that should be shortened.
stopTime string Only for type=stop_activation. UTC time at which the referenced activation stops.
activations array Only for type=activation. List of opened TRA intervals.
airspace string Name of the TRA, for example TRA Almenland.
start string UTC start time of the activation interval.
end string UTC end time of the activation interval.
upperLimit string Optional upper-limit override, for example FL95 or 8500ft AMSL.

Event Handling

Activation

A command with type=activation opens the listed TRA for the exported time interval.

Breaks during the day

If the same TRA is activated multiple times with real breaks between the windows, each operational window is exported as its own type=activation command.

Extension

Extensions are also exported as type=activation with a new activation_id. The start time remains the same as the previous activation, while end contains the new end time.

Deactivation

An early deactivation is exported as type=stop_activation with stop_activation_id and stopTime. It shortens only the referenced activation command.

Cancel

A cancellation command has type=cancel, its own activation_id, addedTimestamp and cancelled_activation_id. It is intended for correcting mistakes and should remove the referenced previous command from the consumer side.

Consumers should evaluate events by timestamp or activation_id and update their local state per airspace accordingly.

Examples

TRA Almenland activation and two extensions

The first event opens TRA Almenland until 11:00 UTC. The second event extends the same TRA until 13:00 UTC. The third event keeps the same start time and extends the TRA until ECET on that day, 18:49:34 UTC.

[
    {
        "activation_id": 10421,
        "type": "activation",
        "addedTimestamp": "2026-05-06 06:15:02",
        "activations": [
            {
                "airspace": "TRA Almenland",
                "start": "2026-05-06 07:00:00",
                "end": "2026-05-06 11:00:00",
                "upperLimit": "8500ft AMSL"
            }
        ]
    },
    {
        "activation_id": 10436,
        "type": "activation",
        "addedTimestamp": "2026-05-06 10:32:18",
        "activations": [
            {
                "airspace": "TRA Almenland",
                "start": "2026-05-06 07:00:00",
                "end": "2026-05-06 13:00:00"
            }
        ]
    },
    {
        "activation_id": 10458,
        "type": "activation",
        "addedTimestamp": "2026-05-06 12:44:07",
        "activations": [
            {
                "airspace": "TRA Almenland",
                "start": "2026-05-06 07:00:00",
                "end": "2026-05-06 18:49:34"
            }
        ]
    }
]

Multiple TRAs handled independently

This example shows an internal group activation exported as separate per-TRA commands. The later stop_activation affects only TRA BRUCK because it references only BRUCKs exported activation_id.

[
    {
        "activation_id": 118800001,
        "type": "activation",
        "addedTimestamp": "2026-05-06 06:45:06",
        "activations": [
            {
                "airspace": "TRA SCHOECKL",
                "start": "2026-05-06 07:00:00",
                "end": "2026-05-06 12:00:00"
            }
        ]
    },
    {
        "activation_id": 118800002,
        "type": "activation",
        "addedTimestamp": "2026-05-06 06:45:06",
        "activations": [
            {
                "airspace": "TRA ALMENLAND",
                "start": "2026-05-06 07:00:00",
                "end": "2026-05-06 12:00:00"
            }
        ]
    },
    {
        "activation_id": 118800003,
        "type": "activation",
        "addedTimestamp": "2026-05-06 06:45:06",
        "activations": [
            {
                "airspace": "TRA BRUCK",
                "start": "2026-05-06 07:00:00",
                "end": "2026-05-06 12:00:00"
            }
        ]
    },
    {
        "activation_id": 119000003,
        "type": "stop_activation",
        "addedTimestamp": "2026-05-06 10:15:21",
        "stop_activation_id": 118800003,
        "stopTime": "2026-05-06 10:15:00"
    }
]

Same TRA with separate windows

TRA POELS is active three times with breaks in between. Each operational window is exported separately so consumers can display 15:00-17:00 local time as the current window instead of merging the day to 09:00-17:00 local time.

[
    {
        "activation_id": 1441,
        "type": "activation",
        "addedTimestamp": "2026-05-21 08:55:00",
        "activations": [
            {
                "airspace": "TRA POELS (W)",
                "start": "2026-05-21 07:00:00",
                "end": "2026-05-21 08:00:00",
                "upperLimit": "8500ft AMSL"
            }
        ]
    },
    {
        "activation_id": 1442,
        "type": "activation",
        "addedTimestamp": "2026-05-21 12:20:00",
        "activations": [
            {
                "airspace": "TRA POELS (W)",
                "start": "2026-05-21 10:30:00",
                "end": "2026-05-21 11:30:00",
                "upperLimit": "9000ft AMSL"
            }
        ]
    },
    {
        "activation_id": 1443,
        "type": "activation",
        "addedTimestamp": "2026-05-21 14:50:00",
        "activations": [
            {
                "airspace": "TRA POELS (W)",
                "start": "2026-05-21 13:00:00",
                "end": "2026-05-21 15:00:00",
                "upperLimit": "9500ft AMSL"
            }
        ]
    }
]

TRA Feldkirchen activation and deactivation

The first command opens TRA Feldkirchen until 14:00 UTC. The stop_activation command shortens that activation from 12:30 UTC onward.

[
    {
        "activation_id": 20510,
        "type": "activation",
        "addedTimestamp": "2026-05-06 06:45:11",
        "activations": [
            {
                "airspace": "TRA Feldkirchen",
                "start": "2026-05-06 08:00:00",
                "end": "2026-05-06 14:00:00"
            }
        ]
    },
    {
        "activation_id": 20528,
        "type": "stop_activation",
        "addedTimestamp": "2026-05-06 11:58:44",
        "stop_activation_id": 20510,
        "stopTime": "2026-05-06 12:30:00"
    }
]

Cancel and corrected activation

The cancel command has its own activation_id 1441 and removes the previously exported activation_id 1440 via cancelled_activation_id. The following activation_id 1442 exports the corrected interval as a new command.

[
    {
        "activation_id": 1441,
        "type": "cancel",
        "addedTimestamp": "2026-05-21 08:10:00",
        "cancelled_activation_id": 1440
    },
    {
        "activation_id": 1442,
        "type": "activation",
        "addedTimestamp": "2026-05-21 08:55:00",
        "activations": [
            {
                "airspace": "TRA POELS (W)",
                "start": "2026-05-21 09:00:00",
                "end": "2026-05-21 10:00:00"
            }
        ]
    }
]