Push Location
curl --request POST \
--url https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location \
--header 'Content-Type: application/json' \
--data '
{
"lat": 123,
"lon": 123,
"alt_m": 123,
"bearing": 123,
"speed_mps": 123
}
'import requests
url = "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location"
payload = {
"lat": 123,
"lon": 123,
"alt_m": 123,
"bearing": 123,
"speed_mps": 123
}
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({lat: 123, lon: 123, alt_m: 123, bearing: 123, speed_mps: 123})
};
fetch('https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location', 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}/location",
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([
'lat' => 123,
'lon' => 123,
'alt_m' => 123,
'bearing' => 123,
'speed_mps' => 123
]),
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}/location"
payload := strings.NewReader("{\n \"lat\": 123,\n \"lon\": 123,\n \"alt_m\": 123,\n \"bearing\": 123,\n \"speed_mps\": 123\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}/location")
.header("Content-Type", "application/json")
.body("{\n \"lat\": 123,\n \"lon\": 123,\n \"alt_m\": 123,\n \"bearing\": 123,\n \"speed_mps\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location")
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 \"lat\": 123,\n \"lon\": 123,\n \"alt_m\": 123,\n \"bearing\": 123,\n \"speed_mps\": 123\n}"
response = http.request(request)
puts response.read_bodyAssets
Push Location
Push a GPS fix for a partner-managed asset. Appears on the Argus map immediately.
POST
/
api
/
kits
/
{kit_id}
/
assets
/
{asset_id}
/
location
Push Location
curl --request POST \
--url https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location \
--header 'Content-Type: application/json' \
--data '
{
"lat": 123,
"lon": 123,
"alt_m": 123,
"bearing": 123,
"speed_mps": 123
}
'import requests
url = "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location"
payload = {
"lat": 123,
"lon": 123,
"alt_m": 123,
"bearing": 123,
"speed_mps": 123
}
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({lat: 123, lon: 123, alt_m: 123, bearing: 123, speed_mps: 123})
};
fetch('https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location', 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}/location",
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([
'lat' => 123,
'lon' => 123,
'alt_m' => 123,
'bearing' => 123,
'speed_mps' => 123
]),
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}/location"
payload := strings.NewReader("{\n \"lat\": 123,\n \"lon\": 123,\n \"alt_m\": 123,\n \"bearing\": 123,\n \"speed_mps\": 123\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}/location")
.header("Content-Type", "application/json")
.body("{\n \"lat\": 123,\n \"lon\": 123,\n \"alt_m\": 123,\n \"bearing\": 123,\n \"speed_mps\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/location")
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 \"lat\": 123,\n \"lon\": 123,\n \"alt_m\": 123,\n \"bearing\": 123,\n \"speed_mps\": 123\n}"
response = http.request(request)
puts response.read_bodystring
required
UUID of the kit.
string
required
UUID of the asset (returned by Create Asset).
Body
number
required
Latitude in decimal degrees (WGS-84).
number
required
Longitude in decimal degrees (WGS-84).
number
Altitude in meters above WGS-84 ellipsoid.
number
Heading in degrees true north (0–360). Displayed as the asset’s orientation arrow on the map.
number
Ground speed in meters per second.
Response
Returns204 No Content on success. The fix is:
- Stored as a
gpsfeed message (visible via Get Asset Telemetry and the Asset WebSocket) - Written to the asset’s
lat/lon/alt_mcolumns for quick map queries - Broadcast to any active WebSocket subscribers immediately
Push at whatever rate your system produces fixes. 1 Hz is typical for drones; lower rates are fine for vehicles.
Example
# One-shot push
client.push_location(
kit_id, asset["id"],
lat=31.1234, lon=-93.4567,
alt_m=120.5, bearing=245.0, speed_mps=4.2,
)
# Continuous loop from a GPS source
import time
while True:
fix = gps.read()
client.push_location(
kit_id, asset_id,
lat=fix.lat, lon=fix.lon,
alt_m=fix.alt, bearing=fix.bearing,
speed_mps=fix.speed,
)
time.sleep(1)
// One-shot
await client.pushLocation(kitId, asset.id, {
lat: 31.1234,
lon: -93.4567,
alt_m: 120.5,
bearing: 245.0,
speed_mps: 4.2,
})
// 1 Hz loop
setInterval(async () => {
const fix = gps.read()
await client.pushLocation(kitId, assetId, {
lat: fix.lat, lon: fix.lon, bearing: fix.bearing,
})
}, 1000)
curl -X POST \
https://argus.hoplynk.com/api/kits/$KIT_ID/assets/$ASSET_ID/location \
-H "X-API-Key: hlk_..." \
-H "Content-Type: application/json" \
-d '{
"lat": 31.1234,
"lon": -93.4567,
"alt_m": 120.5,
"bearing": 245.0,
"speed_mps": 4.2
}'