Skip to main content


In addition to conventional Telemetry Messages, which you interact with using a publish/subscribe pattern, the DroneDeploy Robotics Portal also supports Services, which provide a way to interact with your robot using a request/response pattern.

Services allow you to remotely invoke ROS Services and ROS Actions, and to create APIs for transferring data to and from your robot without broadcasting that data to other platform users. Compared against Commands, Services are a lower-level concept which provides a request/response data primitive which may either be invoked directly, or by way of a Command to provide additional functionality while also providing a simplified user experience.


Services are supported in DroneDeploy Agent v1.4.0 and onwards.

About Services

In programming terms, a Service is like a function call which can invoked remotely and securely from the cloud. Each Service takes a single input (request), and returns zero or more outputs (responses). Each input and output consists of a payload (usually a JSON object) and accompanying metadata, with a consistent schema for each output message; similar to Telemetry Messages.

Service calls are non-blocking, and may take a long time to complete; long-running Services are able to provide intermediary progress updates to inform the user of their prognosis, and may be cancelled if necessary. The Agent may run many Service calls concurrently.

Exploring and Calling Available Services

When you view the Live Data Viewer tab for a robot with an Agent which supports Services, the tree viewer on the LHS of the tab will automatically be enhanced to show both available Telemetry Message Topics, and also available Service Topics:

Telemetry Message Topics are denoted with an envelop icon:

Service Topics are denoted with a gear icon:

Selecting a Service Topic will show the preview panel for that Service:

The preview panel is divided into three sections:

The upper Request section: in this section, you may enter in the payload to be sent in the request for the Service. The field is automatically populated with an empty JSON object following the schema which the Service indicates it expects. You should fill in the properties of the request object before calling the service. If the Service does take any input, then the Request section will be hidden automatically.

The middle section displays a button on the right; when clicked, the Service is invoked using the current value of the Request section as input. While the Service is in progress, a cancel button will appear, to allow cancelling the Service prematurely. On the left, progress and status messages are displayed as they occur.

The lower Response section: if the Service returns any data, this response data will appear here. If the Services returns multiple responses, each will appear separated by a timestamp, and you can scroll through the list of responses. If the Service does not return any data, then this section will remain empty.