JSON
JSON is the complete export, meant for your own software. It has everything the CSV files have, plus accuracies, all identifiers, the pilot's positions and the terrain credits. The current version is 1.0.
- With tracks has every flight or detection with all its positions. The file name ends in
-telemetry.json. - Summary is the same file without
trackandoperator_track. Everything else is identical. The file name ends in-summary.json.
The file is written on one line to keep it small. To read it, open it in a code editor and format it, or run jq . file.json.
Where DUMP (Dronetag Unified Message Protocol) has a name and shape for something, the export uses it. The JSON Schema of the file is published at:
https://api.dronetag.app/v2/export/schemas/export-v1.json
This page describes the file. The export endpoints are described in the Dronetag API documentation.
The Shape of the File
{ schema_version, operations: [ { id, summary, operator_track, track }, … ], attribution }
| Key | Type | Present | What it is |
|---|---|---|---|
schema_version | string | Always | "1.0" |
operations[] | array | Always | The flights and detections |
attribution | object | When needed | Terrain credits for the whole file. See Attribution. |
summary.source.kind tells you what each entry is. rid_transmitter is a flight from a Dronetag device, rid_receiver is a detection and network_rid is network Remote ID.
The Who column in the tables on this page says which kind fills a key. F means flights, D means detections, F D means both when the source stated it.
Each entry has up to four keys, always in this order.
| Key | Type | Who | What it is |
|---|---|---|---|
id | string | F D | ID of the flight or detection, the same as in the CSV files |
summary | object | F D | Everything about it. First what the source reported, then what Dronetag calculated from the track. Identical in both exports. |
operator_track[] | array of operator points | D | The pilot's positions. With tracks only. |
track[] | array of track points | F D | The aircraft's positions. Always the last key. With tracks only. |
CSV Summary is a flat copy of summary.
When a value wasn't reported and couldn't be calculated, its key is left out. It is never null and never replaced by zero.
Positions and Altitudes
A track point from the example detection, formatted for reading:
{
"timestamp": "2026-09-22T15:31:25.923000Z",
"timestamp_accuracy": 0.1,
"sensor_id": "SCT-EXAMPLE-01",
"operational_state": "airborne",
"location": { "latitude": 49.9600514, "longitude": 14.5000551, "accuracy": 3.0 },
"altitudes": [
{ "type": "HAE-WGS84", "value": 459.4, "accuracy": 10.0 },
{ "type": "MSL", "value": 413.9 },
{ "type": "ATO", "value": 60.9 },
{ "type": "PA-QNE", "value": 388.6 },
{ "type": "AGL", "value": 59.99999999999994, "accuracy": 10.009657003780566 }
],
"velocity": { "horizontal_speed": 9.12, "vertical_speed": 0.83, "heading": 32.7, "speed_accuracy": 0.3 }
}
altitudes is a list with one item per kind of altitude. Look items up by type, not by their place in the list. The five types are explained in Altitudes Explained.
accuracy says how exact a value is, in metres (m/s for speeds). Roughly two times in three, the true value is within this amount. It appears only when the source reported it or Dronetag calculated it.
Two keys list longitude before latitude, because they follow the GeoJSON standard. They are summary.bbox (west, south, east, north) and summary.operation_area. Everywhere else latitude and longitude are named keys.
A Short Example
The example detection, shortened. … marks what was left out.
{
"schema_version": "1.0",
"operations": [
{
"id": "6d2f8a41-93c7-4e0b-b5d2-1f7a9c3e8b60",
"summary": {
"source": {
"kind": "rid_receiver",
"transmission_technologies": ["wifi_beacon", "wifi_nan"],
"sources": [
{ "name": "SCT-EXAMPLE-01", "type": "rid_receiver", "message_count": 66 },
{ "name": "SCT-EXAMPLE-02", "type": "rid_receiver", "message_count": 128 }
]
},
"identifiers": [
{ "type": "caa_assigned", "value": "OK-UAS-EXAMPLE-4" },
{ "type": "serial_number", "value": "1581FEXAMPLE00000004" },
…
],
"uas_operator_id": "CZEexampleoper04",
"ua_classification": { "type": "european_union", "category": "open", "class": "class_1" },
…
"aircraft_model": "DJI Mavic 3",
"status": "past",
…
"duration": 192.977,
…
"point_count": 194,
"total_distance": 973.7599886011964,
…
"max_altitudes": [
{ "type": "HAE-WGS84", "value": 494.7, "accuracy": 3.0 },
…
{ "type": "AGL", "value": 97.37793678299658, "accuracy": 3.0320345204719112 }
],
"operator_track_kind": "operator",
"max_operator_distance": 261.9408504975598,
…
},
"operator_track": [
{ "timestamp": "2026-09-22T15:31:04.091000Z",
"location": { "latitude": 49.9599127, "longitude": 14.4998279, "accuracy": 4.0 },
"altitudes": [{ "type": "HAE-WGS84", "value": 401.4 }],
"source_type": "dynamic" },
…
],
"track": [ … 194 points like the one above … ]
}
],
"attribution": {
"terrain_credits": ["„ČÚZK, 2026“ … by Dronetag"]
}
}
The complete example files can be downloaded from Which Export to Choose.
Every Key
Summary Keys Stated by the Source
These come first in summary, in this order.
| Key | Type | Who | Description |
|---|---|---|---|
source | object | F D | Where the data come from. See Source. |
identifiers[] | array of {type, value} | F D | Types per DUMP. For drones serial_number, caa_assigned (registration from the aviation authority), utm_assigned, specific_session_id, custom_callsign (the name the pilot gave the flight). For manned aircraft callsign, icao_address, registration, squawk_code, flarm_id, ogn_address. Also other. A flight has serial_number (the device's) and custom_callsign. |
uas_operator_id | string | F D | The UAS operator's registration number |
ua_classification | object {type, category, class} | D | type is european_union. category is open, specific or certified. class is class_0 to class_6. |
aircraft_category | string | D | DUMP value, for example rotorcraft (helicopter and multirotor), aeroplane, glider or unknown. The full list of 28 values is in the JSON Schema. |
aircraft_manufacturer | string | D | Manufacturer |
aircraft_model | string | F D | Full model name, usually starting with the manufacturer, for example DJI Mavic 3 |
descriptions[] | array of {type, value} | F D | Types text_description (Self-ID text), emergency_description, extended_status_description, custom_color. The callsign is not here. It is in identifiers as custom_callsign. |
status | string | F D | The values and their meaning are listed in CSV Summary. |
pilot | object {id, name} | F | The pilot. Removed when the export is made safe to share publicly. |
time_start, time_end | string (time) | F D | Start and end as the source states them. These are not the first and last positions. |
take_off | point object | F (D rarely) | Take-off location as the source states it |
home_location | point object | F D | Return-to-home point, if the source states it |
operation_area | object | F | The declared area, exactly the GeoJSON the source sends. Any geometry or Feature, longitude before latitude. |
Source
| Key | Type | Who | Description |
|---|---|---|---|
kind | string | F D | rid_transmitter (a flight from a Dronetag device), network_rid (network Remote ID) or rid_receiver (a detection) |
standard | string | F D | The Remote ID standard, if the source states it |
transmission_technologies[] | array of string | D | DUMP 0.15 values. Remote ID wifi_beacon, wifi_nan, bluetooth_legacy, bluetooth_long_range. Manned aviation ads_b, ads_l, uat, flarm, ogn. Also ocusync and external. |
sources[] | array of {name, type, position, message_count} | D | The receivers that heard the operation. name is the receiver ID, type is rid_receiver, position is a point object when known and message_count is how many messages it heard. |
Track Point
| Key | Type, unit | Who | Description |
|---|---|---|---|
timestamp | string (time) | F D | Time of the position |
timestamp_accuracy | number, s | D | Stated accuracy of the time |
sensor_id | string | D | The receiver that heard the position |
operational_state | string | D | grounded, airborne or emergency |
location | object | F D | latitude and longitude in degrees (WGS 84), accuracy in metres when stated |
altitudes[] | array of altitude items | F D | Every altitude of the point |
velocity | object | F D | horizontal_speed (m/s), vertical_speed (m/s, positive up), heading (degrees clockwise from north), speed_accuracy (m/s). Also turn_rate (degrees per second), components (east, north and up speed in m/s) and components_accuracy (m/s). Each key only when stated. |
rssi | number, dBm | D | Signal strength, only when the source states it |
Altitude Item
| Key | Type, unit | Description |
|---|---|---|
type | string | HAE-WGS84, MSL, ATO, PA-QNE or AGL. See Altitudes Explained. |
value | number, m | The value |
accuracy | number, m | One standard deviation. When it is present is described in Altitudes Explained. |
A flight from a Dronetag device usually has HAE-WGS84, ATO and PA-QNE. A detection usually has HAE-WGS84 and PA-QNE, often ATO and sometimes MSL stated by the source. Dronetag adds MSL when the source didn't state it and it can be calculated, and AGL when terrain data is available.
Point Object
Used for take_off, home_location and sources[].position.
{"location":{"latitude":49.1679989,"longitude":16.4950113},"altitudes":[{"type":"HAE-WGS84","value":327.1},{"type":"PA-QNE","value":255.81}]}
| Key | Type | Description |
|---|---|---|
location | object | latitude and longitude in degrees, accuracy in metres when stated |
altitudes[] | array of altitude items | The altitudes the source stated for the point. May be empty. |
Operator Point
| Key | Type | Description |
|---|---|---|
timestamp | string (time) | Time of the position |
location | object | As in a track point |
altitudes[] | array of altitude items | When the source stated them |
source_type | string | dynamic (the pilot's real position over time), fixed (stated once) or take_off (the take-off location sent in place of the pilot's position) |
Summary Keys Calculated by Dronetag
These follow the source keys in summary and are identical in both exports.
| Key | Type, unit | Who | Description |
|---|---|---|---|
time_first_telemetry, time_last_telemetry | string (time) | F D | First and last received position |
duration | number, s | F D | The difference of the two |
first, last | object {latitude, longitude} | F D | First and last position in degrees |
bbox | array of 4 numbers | F D | Envelope of the track as a GeoJSON bbox, [min_lon, min_lat, max_lon, max_lat] |
point_count | integer | F D | Number of received positions |
total_distance | number, m | F D | Horizontal distance flown. Small movement while standing still is not counted. |
max_horizontal_speed | number, m/s | F D | Highest ground speed |
max_altitudes[] | array of altitude items | F D | The highest value of each altitude type in the track, with the accuracy of the point where it occurred (only when that point has one). There are no minimums. |
operator_track_kind | string | D | operator (real positions), take_off (take-off location only) or mixed |
max_operator_distance | number, m | D | Largest horizontal distance between the aircraft and the pilot, or the take-off location |
operator_movement_extent | number, m | D | Diagonal of the envelope of the pilot's positions |
message_count | integer | D | Messages heard by all receivers together |
Attribution
{"terrain_credits":["…"],"terrain_liability_notices":["…"]}
| Key | Type | Description |
|---|---|---|
terrain_credits[] | array of string | The credit each terrain model's licence requires, word for word, each text once |
terrain_liability_notices[] | array of string | The legal notice, when a licence requires one, each text once |
The credits belong to the whole file, not to an operation. When they appear and why they must stay with the data is described in Terrain Data and Attribution.