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
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

JavaScript
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

Python
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
<?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).

JSON
{
  "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
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

JavaScript
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

Python
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
<?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).

JSON
{
  "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
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

JavaScript
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

Python
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
<?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
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

JavaScript
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

Python
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
<?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).

JSON
{
  "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

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

JavaScript
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

Python
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
<?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.