Skip to main content

Get downlink frame history

Returns the downlink frames queued during the given period — sent, waiting and withdrawn — together with their statuses. Use it to check what happened to frames if you did not receive downlink_status messages.

The response arrives as two get_downlink_data_resp messages with the same operation_id: first status: 1 — the request is accepted, then status: 3 — the data.

Request and response: get_downlink_data_req → get_downlink_data_resp (two messages).
Access: a low access level token sees the devices of its application and of applications that granted it access; a high access level token sees all devices of the owner.

Request​

Fields not marked as required may be omitted.

FieldTypeDescription
cmdstringget_downlink_data_req
operation_idstringAny string; the server returns it in the response to match the request and the response
date_fromstringRequired. Period start, inclusive. Format YYYY-MM-DD HH:MM:SS+HHMM
date_tostringRequired. Period end, exclusive. Same format
devEuistringDevice DevEUI, 16 hex characters. Without it — all available devices
limituint32How many frames to return. Default 10; the server reduces a value above 100 to 100
descendingbooltrue — newest first. Default false: oldest first
{
"cmd": "get_downlink_data_req",
"operation_id": "rsm234",
"devEui": "7950D20CBBB77561",
"date_from": "2026-10-07 00:00:00+0500",
"date_to": "2026-10-08 00:00:00+0500",
"limit": 10
}

Response​

The first message acknowledges the request:

{
"cmd": "get_downlink_data_resp",
"operation_id": "rsm234",
"status": 1
}

The second one carries the data:

FieldTypeDescription
cmdstringget_downlink_data_resp
operation_idstringValue from the request
statusuint81 — request accepted, 3 — data, 2 — error
dataCountuint32Number of frames in the list
dataListarrayFrames; their fields are in the table below
error_code, error_textuint8, stringOnly on error, see below

Frame fields in dataList:

FieldTypeDescription
devEui, devAddrstringThe device
timestringQueuing time, UTC
datastringPayload in hex
downlink_statusuint8Frame status code, see the status table
downlink_status_textstringStatus name, e.g. Delivered
downlink_ackbooltrue — the frame has a final status
downlink_ack_timestring or nullWhen the frame got its final status; null while there is no final status
{
"cmd": "get_downlink_data_resp",
"operation_id": "rsm234",
"status": 3,
"dataCount": 1,
"dataList": [
{
"devEui": "7950D20CBBB77561",
"devAddr": "7950D20C",
"time": "2026-10-07 09:15:03+0000",
"data": "FFFFFFFFFFFF",
"downlink_status": 3,
"downlink_status_text": "Delivered",
"downlink_ack": true,
"downlink_ack_time": "2026-10-07 09:47:21+0000"
}
]
}

Errors​

error_codeerror_textWhat happened
3Invalid date rangedate_from or date_to is missing

On error a single message with status: 2 arrives, without the acknowledgement.

Good to know​

  • Check the date format. If a date cannot be parsed, the server sends only the first message (status: 1) and no data.
  • Specify the time zone in dates. Times in the response are UTC.
  • The server does not use the appId and devAddr request fields for filtering — filter by devEui.
  • downlink_ack means the frame has a final status, not that the device acknowledged reception: frames are sent unconfirmed. For details, see frame status.
Current ONS version

The downlink_status and downlink_status_text fields were added to the server in June 2026 and are not in the v0.17 description.

See also​