Guías
Posición en vivo
Sigue las posiciones de tu flota con get_devices_latest en modo delta: qué enviar, qué guardar y cómo calcular el vehículo más cercano en tu sistema.
Estado: Parcial · Revisada el 5 de octubre de 2026
Qué se verificó y cómo: Usa operaciones verificadas por diff contra producción. El script se ejecutó contra un servidor simulado; la latencia real de actualización de posiciones no se midió y no se publica.
get_devices_latest está pensado para sondeo: en lugar de pedir toda la flota cada vez, le dices desde qué instante quieres cambios y devuelve solo los vehículos con posición nueva.
Cómo funciona #
- Primera llamada con
time=1: devuelve todos los vehículos. (timevacío o0equivale a "hace 5 segundos", así que no uses0). - Guarda el valor
timede la respuesta. - En la siguiente llamada envía ese valor como
time: recibes solo los vehículos con posición actualizada desde entonces. - Repite. La respuesta también trae
eventscon los eventos recientes (hasta 5 minutos atrás).
Las coordenadas de cada vehículo son lat y lng. Los campos sensors, services y tail llegan como cadenas JSON que debes decodificar.
Solicitud #
Posiciones actualizadas desde un instante
cURL
curl -sS -G "https://plataforma.trackerintl.com/api/get_devices_latest" \
-H "user-api-hash: TU_API_HASH" \
--data-urlencode "time=1"JavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";
const params = new URLSearchParams({
time: "1",
});
const respuesta = await fetch(`${BASE_URL}/api/get_devices_latest?${params}`, {
headers: { "user-api-hash": API_HASH },
});
if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status}: ${await respuesta.text()}`);
console.log(JSON.stringify(await respuesta.json(), null, 2));Python · Python 3 con requests
import json
import requests
BASE_URL = "https://plataforma.trackerintl.com"
API_HASH = "TU_API_HASH"
respuesta = requests.get(
f"{BASE_URL}/api/get_devices_latest",
headers={"user-api-hash": API_HASH},
params={"time": "1"},
timeout=30,
)
respuesta.raise_for_status()
print(json.dumps(respuesta.json(), indent=2, ensure_ascii=False))PHP · PHP 8 con cURL
<?php
$baseUrl = "https://plataforma.trackerintl.com";
$apiHash = "TU_API_HASH";
$url = $baseUrl . "/api/get_devices_latest?" . http_build_query(["time" => "1"]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ["user-api-hash: " . $apiHash],
]);
$cuerpo = curl_exec($ch);
$codigo = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($cuerpo === false || $codigo !== 200) {
fwrite(STDERR, "HTTP $codigo\n");
exit(1);
}
echo json_encode(json_decode($cuerpo, true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), "\n";Script de sondeo #
El script hace dos rondas, con una espera corta entre ellas, y muestra cuántos vehículos recibió en cada una. En la segunda ronda llegan menos, porque solo se piden los cambios.
Sondeo en modo delta
cURL
#!/usr/bin/env bash
# Requiere curl y jq.
BASE_URL="https://plataforma.trackerintl.com"
API_HASH="TU_API_HASH"
INTERVALO_SEGUNDOS=1 # en producción, elige un intervalo acorde a tu caso
DESDE=1 # 1 = todos los vehículos en la primera ronda
for RONDA in 1 2; do
DATOS=$(curl -sS -G "$BASE_URL/api/get_devices_latest" \
-H "user-api-hash: $API_HASH" \
--data-urlencode "time=$DESDE")
echo "Ronda $RONDA: $(echo "$DATOS" | jq '.items | length') vehículos con posición nueva"
echo "$DATOS" | jq -r '.items[] | " \(.name): \(.lat), \(.lng)"'
DESDE=$(echo "$DATOS" | jq -r '.time') # la próxima ronda pide solo lo que cambió desde aquí
sleep "$INTERVALO_SEGUNDOS"
doneJavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";
const INTERVALO_MS = 1000; // en producción, elige un intervalo acorde a tu caso
const dormir = (ms) => new Promise((resolver) => setTimeout(resolver, ms));
let desde = 1; // 1 = todos los vehículos en la primera ronda
for (let ronda = 1; ronda <= 2; ronda += 1) {
const params = new URLSearchParams({ time: String(desde) });
const respuesta = await fetch(`${BASE_URL}/api/get_devices_latest?${params}`, {
headers: { "user-api-hash": API_HASH },
});
if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status}`);
const datos = await respuesta.json();
console.log(`Ronda ${ronda}: ${datos.items.length} vehículos con posición nueva`);
for (const vehiculo of datos.items) {
console.log(` ${vehiculo.name}: ${vehiculo.lat}, ${vehiculo.lng}`);
}
desde = datos.time; // la próxima ronda pide solo lo que cambió desde aquí
await dormir(INTERVALO_MS);
}Python · Python 3 con requests
import time
import requests
BASE_URL = "https://plataforma.trackerintl.com"
API_HASH = "TU_API_HASH"
INTERVALO_SEGUNDOS = 1 # en producción, elige un intervalo acorde a tu caso
desde = 1 # 1 = todos los vehículos en la primera ronda
for ronda in (1, 2):
respuesta = requests.get(
f"{BASE_URL}/api/get_devices_latest",
headers={"user-api-hash": API_HASH},
params={"time": str(desde)},
timeout=30,
)
respuesta.raise_for_status()
datos = respuesta.json()
print(f"Ronda {ronda}: {len(datos['items'])} vehículos con posición nueva")
for vehiculo in datos["items"]:
print(f" {vehiculo['name']}: {vehiculo['lat']}, {vehiculo['lng']}")
desde = datos["time"] # la próxima ronda pide solo lo que cambió desde aquí
time.sleep(INTERVALO_SEGUNDOS)PHP · PHP 8 con cURL
<?php
$baseUrl = "https://plataforma.trackerintl.com";
$apiHash = "TU_API_HASH";
$intervaloSegundos = 1; // en producción, elige un intervalo acorde a tu caso
$desde = 1; // 1 = todos los vehículos en la primera ronda
foreach ([1, 2] as $ronda) {
$ch = curl_init($baseUrl . "/api/get_devices_latest?" . http_build_query(["time" => (string) $desde]));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ["user-api-hash: " . $apiHash],
]);
$cuerpo = curl_exec($ch);
$codigo = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($cuerpo === false || $codigo !== 200) {
fwrite(STDERR, "HTTP $codigo\n");
exit(1);
}
$datos = json_decode($cuerpo, true);
echo "Ronda $ronda: " . count($datos["items"]) . " vehículos con posición nueva\n";
foreach ($datos["items"] as $vehiculo) {
echo " {$vehiculo["name"]}: {$vehiculo["lat"]}, {$vehiculo["lng"]}\n";
}
$desde = $datos["time"]; // la próxima ronda pide solo lo que cambió desde aquí
sleep($intervaloSegundos);
}El vehículo más cercano a un punto #
La API no calcula distancias entre un punto y tu flota. Para asignar la unidad más cercana a una tarea, toma lat y lng de cada vehículo desde esta consulta y calcula la distancia en tu sistema (por ejemplo, con la fórmula de Haversine). Verifica antes online y time para no asignar un vehículo sin conexión.
Qué no sabemos #
La latencia entre que un equipo reporta y la plataforma lo expone en la API no se midió, así que no la publicamos. Valídala con tu propia flota antes de depender de ella para decisiones en tiempo real.