DJI Requests

This page describes how to query, identify, and handle requests initiated by DJI devices.

Endpoint

  • List: GET /api/v1/open/device-requests
  • Detail: GET /api/v1/open/device-requests/{requestId}

Flow

  1. After the device sends a request, the platform records the request_id and the raw inbound_payload.
  2. Your service filters the target request via the list endpoint (by vendor / device_id / request_type).
  3. Your service reads the full context of a single request via the detail endpoint.
  4. When an explicit business reply is needed, use the endpoint described in DJI Requests Reply.

Authentication

  • API ID + API Key + request signature
  • Scope: open:device-request:read

Path Parameters

NameTypeRequiredDescription
requestIdstringyes (detail)Unique device-request identifier (UUID)

Query Parameters

NameTypeRequiredDescription
vendorstringnoFilter by vendor
device_idstringnoFilter by device ID
request_typestringnoFilter by request type

Request Body

None. The requests query endpoints use path and query parameters. For explicit replies, use POST /api/v1/open/device-requests/{requestId}/reply documented in requests-reply.

Request Types

Quick links:
request_typeKey inbound_payload fieldsPurpose
flighttask_resource_getresource_type, resource_idsRequest resources (waylines, media, etc.)
configscope, itemsRequest configuration read/write
update_topotopo_version, topo_payloadRequest topology updates

Responses

List and detail share the same object shape (the list wraps results in items[]):
FieldTypeDescription
request_idstringDevice-request ID
vendorstringVendor
device_idstringDevice ID
request_typestringDevice-request type
inbound_payloadobjectRaw uplink payload
routing_decisionstringRouting decision
reply_codestringCurrent reply code
reply_messagestringCurrent reply message
reply_sourcestringauto or manual
standardized_replyobjectStandardized reply content
received_atstring(date-time)Receive time
replied_atstring(date-time) | nullReply time
updated_atstring(date-time)Update time
List response example:
{
  "items": [
    {
      "request_id": "2b0056c3-b4c8-4994-a286-047e130d38d7",
      "vendor": "dji",
      "device_id": "drone-001",
      "request_type": "config",
      "inbound_payload": {"scope":"dock","items":["network","storage"]},
      "routing_decision": "manual_reply_required",
      "reply_code": "PENDING",
      "reply_message": "awaiting cloud decision",
      "reply_source": "manual",
      "standardized_reply": {},
      "received_at": "2026-04-22T12:00:00Z",
      "replied_at": null,
      "updated_at": "2026-04-22T12:00:00Z"
    }
  ]
}
Detail response example:
{
  "request_id": "2b0056c3-b4c8-4994-a286-047e130d38d7",
  "vendor": "dji",
  "device_id": "drone-001",
  "request_type": "config",
  "inbound_payload": {"scope":"dock","items":["network","storage"]},
  "routing_decision": "manual_reply_required",
  "reply_code": "PENDING",
  "reply_message": "awaiting cloud decision",
  "reply_source": "manual",
  "standardized_reply": {},
  "received_at": "2026-04-22T12:00:00Z",
  "replied_at": null,
  "updated_at": "2026-04-22T12:00:00Z"
}

Example

package main

import "net/http"

func main() {
  listReq, _ := http.NewRequest(http.MethodGet, "https://dev.utmos.dev/api/v1/open/device-requests?vendor=dji&device_id=drone-001&request_type=config", nil)
  listReq.Header.Set("X-Api-Id", "YOUR_API_ID")
  listReq.Header.Set("X-Api-Timestamp", "YOUR_UNIX_SECONDS")
  listReq.Header.Set("X-Api-Signature", "YOUR_SIGNATURE")
  _, _ = http.DefaultClient.Do(listReq)

  detailReq, _ := http.NewRequest(http.MethodGet, "https://dev.utmos.dev/api/v1/open/device-requests/2b0056c3-b4c8-4994-a286-047e130d38d7", nil)
  detailReq.Header.Set("X-Api-Id", "YOUR_API_ID")
  detailReq.Header.Set("X-Api-Timestamp", "YOUR_UNIX_SECONDS")
  detailReq.Header.Set("X-Api-Signature", "YOUR_SIGNATURE")
  _, _ = http.DefaultClient.Do(detailReq)
}

Next Steps

If a request needs an explicit business reply, open DJI Requests Reply and submit the reply.