Empezar
Primeros pasos
De cero a tu primera consulta: inicia sesión, lista tus vehículos, pide su última posición y trae el historial de un día, con ejemplos ejecutables.
Estado: Parcial · Revisada el 5 de octubre de 2026
Qué se verificó y cómo: Los endpoints se verificaron en producción por lectura del código y diff. Los ejemplos se ejecutaron contra un servidor simulado con datos ficticios; todavía no se han ejecutado contra una cuenta real.
En esta guía haces cuatro llamadas: iniciar sesión, listar vehículos, pedir sus últimas posiciones y traer el historial de un día. Necesitas un usuario de la plataforma y, según el lenguaje, cURL, Node.js 22, Python 3 con requests o PHP 8 con cURL.
1. Inicia sesión y obtén tu hash #
Iniciar sesión y obtener el hash
cURL
curl -sS -X POST "https://plataforma.trackerintl.com/api/login" \
-H "Content-Type: application/json" \
-d '{"email":"demo@example.com","password":"TU_CONTRASENA"}'JavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
const respuesta = await fetch(`${BASE_URL}/api/login`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: "demo@example.com", password: "TU_CONTRASENA" }),
});
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"
respuesta = requests.post(
f"{BASE_URL}/api/login",
json={"email": "demo@example.com", "password": "TU_CONTRASENA"},
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";
$url = $baseUrl . "/api/login";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(["email" => "demo@example.com", "password" => "TU_CONTRASENA"]),
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
]);
$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";La respuesta trae tu user_api_hash y tus permisos:
Fragmento del ejemplo de respuesta (datos ficticios; se omiten campos).
{
"status": 1,
"user_api_hash": "TU_API_HASH"
}Copia el valor de user_api_hash: lo usarás en las llamadas siguientes. Ver más en Autenticación.
2. Lista tus vehículos #
Listar vehículos
cURL
curl -sS -G "https://plataforma.trackerintl.com/api/get_devices" \
-H "user-api-hash: TU_API_HASH" \
--data-urlencode "limit=50" \
--data-urlencode "page=1"JavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";
const params = new URLSearchParams({
limit: "50",
page: "1",
});
const respuesta = await fetch(`${BASE_URL}/api/get_devices?${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",
headers={"user-api-hash": API_HASH},
params={"limit": "50", "page": "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?" . http_build_query(["limit" => "50", "page" => "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";La respuesta es un arreglo de grupos; cada grupo trae sus vehículos en items. El grupo 0 reúne los vehículos sin grupo. Un vehículo del ejemplo, con algunos de sus campos:
Fragmento del ejemplo de respuesta (datos ficticios; se omiten campos).
{
"id": 9001,
"name": "Camioneta de prueba 01",
"online": "online",
"lat": -17.7733,
"lng": -63.192099999999996,
"speed": 42,
"time": "05-10-2026 16:11:06"
}El campo id identifica al vehículo en el resto de la API (por ejemplo, como device_id).
3. Pide las últimas posiciones #
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";Con time=1 obtienes todos los vehículos. En consultas posteriores envía el valor time que devolvió la respuesta anterior y recibirás solo los vehículos con posición nueva. La guía Posición en vivo lo explica paso a paso.
4. Trae el historial de un día #
Sustituye device_id por el id de uno de tus vehículos. Las fechas se interpretan en la zona horaria de tu cuenta.
Recorrido de un vehículo por tramos
cURL
curl -sS -G "https://plataforma.trackerintl.com/api/get_history" \
-H "user-api-hash: TU_API_HASH" \
--data-urlencode "device_id=9001" \
--data-urlencode "from_date=2026-10-01" \
--data-urlencode "from_time=00:00" \
--data-urlencode "to_date=2026-10-02" \
--data-urlencode "to_time=23:59"JavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";
const params = new URLSearchParams({
device_id: "9001",
from_date: "2026-10-01",
from_time: "00:00",
to_date: "2026-10-02",
to_time: "23:59",
});
const respuesta = await fetch(`${BASE_URL}/api/get_history?${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_history",
headers={"user-api-hash": API_HASH},
params={"device_id": "9001", "from_date": "2026-10-01", "from_time": "00:00", "to_date": "2026-10-02", "to_time": "23:59"},
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_history?" . http_build_query(["device_id" => "9001", "from_date" => "2026-10-01", "from_time" => "00:00", "to_date" => "2026-10-02", "to_time" => "23:59"]);
$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";La respuesta trae el recorrido dividido en tramos de conducción y de parada, y totales del periodo. El rango máximo es de 31 días. Un fragmento de los totales:
Fragmento del ejemplo de respuesta (datos ficticios; se omiten campos).
{
"distance_sum": "9.2 Km",
"top_speed": "31 kph",
"move_duration": "1h 28min 0s",
"stop_duration": "30min 0s"
}Todo junto en un script #
Este script encadena los cuatro pasos: inicia sesión, toma el primer vehículo de tu lista y pide su historial.
Script completo
cURL
#!/usr/bin/env bash
# Requiere curl y jq.
BASE_URL="https://plataforma.trackerintl.com"
# 1. Inicio de sesión
HASH=$(curl -sS -X POST "$BASE_URL/api/login" \
-H "Content-Type: application/json" \
-d '{"email":"demo@example.com","password":"TU_CONTRASENA"}' | jq -r '.user_api_hash')
# 2. Vehículos (arreglo de grupos con sus vehículos en "items")
VEHICULOS=$(curl -sS -G "$BASE_URL/api/get_devices" -H "user-api-hash: $HASH" --data-urlencode "limit=50")
echo "Vehículos: $(echo "$VEHICULOS" | jq '[.[].items[]] | length')"
# 3. Historial del primer vehículo
ID=$(echo "$VEHICULOS" | jq -r '[.[].items[]][0].id')
curl -sS -G "$BASE_URL/api/get_history" -H "user-api-hash: $HASH" \
--data-urlencode "device_id=$ID" \
--data-urlencode "from_date=2026-10-01" --data-urlencode "from_time=00:00" \
--data-urlencode "to_date=2026-10-02" --data-urlencode "to_time=23:59" \
| jq -r '"\(.distance_sum) en \(.items | length) tramos"'JavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
async function llamar(ruta, { metodo = "GET", query = {}, cuerpo, hash } = {}) {
const url = `${BASE_URL}${ruta}?${new URLSearchParams(query)}`;
const headers = {};
if (hash) headers["user-api-hash"] = hash;
if (cuerpo) headers["Content-Type"] = "application/json";
const respuesta = await fetch(url, { method: metodo, headers, body: cuerpo && JSON.stringify(cuerpo) });
if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status} en ${ruta}`);
return respuesta.json();
}
// 1. Inicio de sesión
const sesion = await llamar("/api/login", {
metodo: "POST",
cuerpo: { email: "demo@example.com", password: "TU_CONTRASENA" },
});
const hash = sesion.user_api_hash;
// 2. Vehículos (arreglo de grupos con sus vehículos en "items")
const grupos = await llamar("/api/get_devices", { hash, query: { limit: "50" } });
const vehiculos = grupos.flatMap((grupo) => grupo.items);
console.log(`Vehículos: ${vehiculos.length}`);
// 3. Historial del primer vehículo
const primero = vehiculos[0];
const historial = await llamar("/api/get_history", {
hash,
query: { device_id: String(primero.id), from_date: "2026-10-01", from_time: "00:00", to_date: "2026-10-02", to_time: "23:59" },
});
console.log(`${primero.name}: ${historial.distance_sum} en ${historial.items.length} tramos`);Python · Python 3 con requests
import requests
BASE_URL = "https://plataforma.trackerintl.com"
def llamar(ruta, metodo="GET", query=None, cuerpo=None, hash_api=None):
cabeceras = {"user-api-hash": hash_api} if hash_api else {}
respuesta = requests.request(metodo, f"{BASE_URL}{ruta}", params=query, json=cuerpo, headers=cabeceras, timeout=30)
respuesta.raise_for_status()
return respuesta.json()
# 1. Inicio de sesión
sesion = llamar("/api/login", metodo="POST", cuerpo={"email": "demo@example.com", "password": "TU_CONTRASENA"})
hash_api = sesion["user_api_hash"]
# 2. Vehículos (arreglo de grupos con sus vehículos en "items")
grupos = llamar("/api/get_devices", query={"limit": "50"}, hash_api=hash_api)
vehiculos = [vehiculo for grupo in grupos for vehiculo in grupo["items"]]
print(f"Vehículos: {len(vehiculos)}")
# 3. Historial del primer vehículo
primero = vehiculos[0]
historial = llamar(
"/api/get_history",
query={"device_id": str(primero["id"]), "from_date": "2026-10-01", "from_time": "00:00", "to_date": "2026-10-02", "to_time": "23:59"},
hash_api=hash_api,
)
print(f"{primero['name']}: {historial['distance_sum']} en {len(historial['items'])} tramos")PHP · PHP 8 con cURL
<?php
$baseUrl = "https://plataforma.trackerintl.com";
function llamar(string $ruta, array $query = [], ?array $cuerpo = null, ?string $hash = null): array
{
global $baseUrl;
$ch = curl_init($baseUrl . $ruta . ($query ? "?" . http_build_query($query) : ""));
$cabeceras = $hash ? ["user-api-hash: " . $hash] : [];
$opciones = [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30];
if ($cuerpo !== null) {
$cabeceras[] = "Content-Type: application/json";
$opciones[CURLOPT_POST] = true;
$opciones[CURLOPT_POSTFIELDS] = json_encode($cuerpo);
}
$opciones[CURLOPT_HTTPHEADER] = $cabeceras;
curl_setopt_array($ch, $opciones);
$texto = curl_exec($ch);
$codigo = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($texto === false || $codigo !== 200) {
fwrite(STDERR, "HTTP $codigo en $ruta\n");
exit(1);
}
return json_decode($texto, true);
}
// 1. Inicio de sesión
$sesion = llamar("/api/login", [], ["email" => "demo@example.com", "password" => "TU_CONTRASENA"]);
$hash = $sesion["user_api_hash"];
// 2. Vehículos (arreglo de grupos con sus vehículos en "items")
$grupos = llamar("/api/get_devices", ["limit" => "50"], null, $hash);
$vehiculos = array_merge(...array_column($grupos, "items"));
echo "Vehículos: " . count($vehiculos) . "\n";
// 3. Historial del primer vehículo
$primero = $vehiculos[0];
$historial = llamar("/api/get_history", [
"device_id" => (string) $primero["id"],
"from_date" => "2026-10-01", "from_time" => "00:00",
"to_date" => "2026-10-02", "to_time" => "23:59",
], null, $hash);
echo $primero["name"] . ": " . $historial["distance_sum"] . " en " . count($historial["items"]) . " tramos\n";Siguientes pasos #
- Convenciones: zonas horarias, formatos y paginación.
- Errores: qué significa cada respuesta de error.
- Referencia de la API: todas las operaciones documentadas.
- Guías: sincronizar con un ERP o CRM, posición en vivo e historial por periodos.