Send Command
curl --request POST \
--url https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name} \
--header 'Content-Type: application/json' \
--data '{
"payload": {}
}'import requests
url = "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}"
payload = { "payload": {} }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({payload: {}})
};
fetch('https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'payload' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}"
payload := strings.NewReader("{\n \"payload\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}")
.header("Content-Type", "application/json")
.body("{\n \"payload\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"payload\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"asset_id": "<string>",
"command_name": "<string>",
"payload": {},
"status": "<string>",
"requested_by": "<string>",
"created_at": "<string>"
}Assets
Send Command
Dispatch a command to an asset. Returns a task that tracks execution status.
POST
/
api
/
kits
/
{kit_id}
/
assets
/
{asset_id}
/
commands
/
{command_name}
Send Command
curl --request POST \
--url https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name} \
--header 'Content-Type: application/json' \
--data '{
"payload": {}
}'import requests
url = "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}"
payload = { "payload": {} }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({payload: {}})
};
fetch('https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'payload' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}"
payload := strings.NewReader("{\n \"payload\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}")
.header("Content-Type", "application/json")
.body("{\n \"payload\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/commands/{command_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"payload\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"asset_id": "<string>",
"command_name": "<string>",
"payload": {},
"status": "<string>",
"requested_by": "<string>",
"created_at": "<string>"
}string
required
UUID of the kit.
string
required
UUID of the asset.
string
required
Name of the command to dispatch (e.g.
arm, ptz_move, reboot). Must match a command returned by List Commands.Body
object
Command-specific parameters. Must conform to the command’s
input_schema. Pass {} or omit for commands that take no parameters.Response
Returns a task object. The task is immediately dispatched to the connector via MQTT and also available for polling.string
Task UUID. Use this to poll for status.
string
UUID of the target asset.
string
The command that was dispatched.
object
The payload that was sent.
string
Initial status: always
pending.string
UUID of the user who issued the command.
string
ISO 8601 UTC timestamp.
Task lifecycle
Tasks move through these statuses as the connector processes them:| Status | Meaning |
|---|---|
pending | Created, waiting to be picked up by the connector |
running | Connector has started execution |
completed | Command succeeded. Check result for output. |
failed | Command failed. Check result.error for the reason. |
Example
import time
# Send a command
task = client.send_command(kit_id, asset_id, "set_mode", payload={"mode": "GUIDED"})
print(f"Task {task['id']} — status: {task['status']}")
# Fly to a waypoint
task = client.send_command(
kit_id, asset_id, "goto_waypoint",
payload={"lat": 31.1234, "lon": -93.4567, "alt_m": 50.0},
)
# PTZ camera move
task = client.send_command(
kit_id, camera_id, "ptz_move",
payload={"direction": "left", "speed": 25},
)
# Commands with no payload
client.send_command(kit_id, asset_id, "return_home")
client.send_command(kit_id, asset_id, "disarm")
// Set flight mode
const task = await client.sendCommand(kitId, assetId, 'set_mode', {
payload: { mode: 'GUIDED' },
})
console.log(task.id, task.status)
// PTZ move
await client.sendCommand(kitId, cameraId, 'ptz_move', {
payload: { direction: 'left', speed: 25 },
})
// No-payload command
await client.sendCommand(kitId, assetId, 'return_home')
# Fly to waypoint
curl -X POST \
"https://argus.hoplynk.com/api/kits/$KIT_ID/assets/$ASSET_ID/commands/goto_waypoint" \
-H "X-API-Key: hlk_..." \
-H "Content-Type: application/json" \
-d '{"payload": {"lat": 31.1234, "lon": -93.4567, "alt_m": 50.0}}'
# PTZ move (no payload body needed for commands with no params)
curl -X POST \
"https://argus.hoplynk.com/api/kits/$KIT_ID/assets/$CAMERA_ID/commands/ptz_move" \
-H "X-API-Key: hlk_..." \
-H "Content-Type: application/json" \
-d '{"payload": {"direction": "left", "speed": 25}}'
Response
{
"id": "e5f6g7h8-0000-0000-0000-000000000001",
"asset_id": "cf210dda-fad8-4e69-ac9c-fe88f42f06a7",
"command_name": "set_mode",
"payload": { "mode": "GUIDED" },
"status": "pending",
"result": {},
"requested_by": "a1b2c3d4-0000-0000-0000-000000000001",
"created_at": "2026-05-18T14:30:00Z"
}
Common commands by asset type
Drone (MAVLink)| Command | Payload |
|---|---|
arm | — |
disarm | — |
return_home | — |
set_mode | { "mode": "GUIDED" | "AUTO" | "LOITER" | "RTL" | "LAND" } |
goto_waypoint | { "lat": 31.1234, "lon": -93.4567, "alt_m": 50.0 } |
| Command | Payload |
|---|---|
ptz_move | { "direction": "up" | "down" | "left" | "right" | "stop", "speed": 1–64 } |
ptz_preset | { "preset_id": 1 } |
set_motion_detection | { "enabled": true } |
reboot | — |
| Command | Payload |
|---|---|
ptz_move | { "direction": "up" | "down" | "left" | "right" | "stop", "speed": 0.0–1.0 } |
ptz_preset | { "preset_token": "1" } |