Referencia de la API

Usuario

Datos y permisos del usuario de la API, sus conductores y el historial de comandos enviados a los equipos.

Estado: Verificado · Revisada el 5 de octubre de 2026

Qué se verificó y cómo: Verificado por lectura del código y diff contra producción; las respuestas se midieron con datos ficticios en un entorno de pruebas. No probado con una cuenta real.

get_user_data es la primera llamada que conviene hacer con un hash nuevo: confirma que la credencial funciona y muestra qué módulos puede ver, editar o eliminar el usuario. Las otras dos operaciones consultan conductores y el historial de comandos enviados; ninguna envía datos.

En get_user_data, group_id identifica el tipo de cuenta (1 administrador, 2 usuario o cliente, 3 gerente o revendedor, 4 demo, 5 operador, 6 supervisor y 7 financiero, este último solo en producción).

Datos y permisos del usuario de la API #

GET /api/get_user_data Verificado

Devuelve el correo, el plan, el vencimiento de la suscripción, los días restantes, el límite de vehículos y la matriz de permisos del usuario. Úsalo para comprobar que la credencial funciona.

Autenticación. Cabecera user-api-hash con tu user_api_hash.

Parámetros

Parámetros de /api/get_user_data
NombreEnTipoObligatorioDescripción
langquerystringNoIdioma de los textos traducibles (SetLang). También se admite la cabecera Accept-Language.

Ejemplo de solicitud

cURL

cURL
curl -sS "https://plataforma.trackerintl.com/api/get_user_data" \
  -H "user-api-hash: TU_API_HASH"

JavaScript · Node.js 22

JavaScript
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";

const respuesta = await fetch(`${BASE_URL}/api/get_user_data`, {
  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_user_data",
    headers={"user-api-hash": API_HASH},
    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_user_data";
$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";

Respuestas

Respuestas de /api/get_user_data
CódigoDescripción
200Respuesta correcta.
401Hash ausente o incorrecto, usuario inactivo, suscripción vencida (también la del gerente) o API deshabilitada por falta de pago del servidor. HTTP 401 con {status: 0, message}.
403Sin permiso del rol para el módulo, vehículo de otro usuario o cuenta restringida por facturación. Incluye perm: 0.
500Error interno de la plataforma. Con la depuración apagada el texto del mensaje es genérico.
Campos de primer nivel de la respuesta 200
Campo (respuesta 200)TipoDescripción
emailstring
expiration_datestring | null
days_leftinteger | null
planstring
devices_limitinteger
group_idinteger1 admin, 2 usuario/cliente, 3 gerente (reseller), 4 demo, 5 operador, 6 supervisor; 7 = financiero (solo en producción).
role_idinteger
permissionsobjectMódulo -> {view,edit,remove}. Incluye claves como "devices", "history", "device.imei".
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "email": "demo@example.invalid",
  "expiration_date": "31-12-2030 23:59:59",
  "days_left": 1547,
  "plan": "Plan de demostracion (ficticio)",
  "devices_limit": 10,
  "group_id": 2,
  "role_id": 2,
  "permissions": {
    "devices": {
      "view": true,
      "edit": false,
      "remove": false
    },
    "alerts": {
      "view": true,
      "edit": false,
      "remove": false
    },
    "events": {
      "view": true,
      "edit": false,
      "remove": false
    },
    "geofences": {
      "view": true,
      "edit": false,
      "remove": false
    },
    "routes": {
      "view": true,
      "edit": false,
      "remove": false
    },
    "reports": {
      "view": true,
      "edit": false,
      "remove": false
    },
    "history": {
      "view": true,
      "edit": false,
      "remove": false
    },
    "send_command": {
      "view": false,
      "edit": false,
      "remove": false
    }
  }
}

Verificación

Estado: Verificado. Revisado el 5 de octubre de 2026. Ruta confirmada en producción y archivos del flujo idénticos a los verificados (comparación por huella y diff). La forma de la respuesta se midió con datos ficticios en un entorno de pruebas; no se probó con una cuenta real de producción.

Conductores del usuario #

GET /api/get_user_drivers Verificado

Lista los conductores del usuario, paginados (limit vale 10 por defecto). Requiere permiso para ver conductores.

Autenticación. Cabecera user-api-hash con tu user_api_hash.

Parámetros

Parámetros de /api/get_user_drivers
NombreEnTipoObligatorioDescripción
limitqueryintegerNo
searchquerystringNo
pagequeryintegerNoNúmero de página.
langquerystringNoIdioma de los textos traducibles (SetLang). También se admite la cabecera Accept-Language.

Ejemplo de solicitud

cURL

cURL
curl -sS "https://plataforma.trackerintl.com/api/get_user_drivers" \
  -H "user-api-hash: TU_API_HASH"

JavaScript · Node.js 22

JavaScript
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";

const respuesta = await fetch(`${BASE_URL}/api/get_user_drivers`, {
  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_user_drivers",
    headers={"user-api-hash": API_HASH},
    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_user_drivers";
$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";

Respuestas

Respuestas de /api/get_user_drivers
CódigoDescripción
200Respuesta correcta.
401Hash ausente o incorrecto, usuario inactivo, suscripción vencida (también la del gerente) o API deshabilitada por falta de pago del servidor. HTTP 401 con {status: 0, message}.
403Sin permiso del rol para el módulo, vehículo de otro usuario o cuenta restringida por facturación. Incluye perm: 0.
500Error interno de la plataforma. Con la depuración apagada el texto del mensaje es genérico.
Campos de primer nivel de la respuesta 200
Campo (respuesta 200)TipoDescripción
status
itemsobject
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "status": 1,
  "items": {
    "drivers": {
      "current_page": 1,
      "data": [
        {
          "id": 21,
          "user_id": 1,
          "device_id": null,
          "name": "Conductor de prueba",
          "rfid": "0000000001",
          "phone": "5550000000",
          "email": "conductor@example.invalid",
          "description": null,
          "created_at": "2026-01-01 00:00:00",
          "updated_at": "2026-01-01 00:00:00"
        }
      ],
      "first_page_url": "https://plataforma.example.invalid/api/get_user_drivers?page=1",
      "from": 1,
      "last_page": 1,
      "last_page_url": "https://plataforma.example.invalid/api/get_user_drivers?page=1",
      "links": [],
      "next_page_url": null,
      "path": "https://plataforma.example.invalid/api/get_user_drivers",
      "per_page": 10,
      "prev_page_url": null,
      "to": 1,
      "total": 1
    }
  }
}

Verificación

Estado: Verificado. Revisado el 5 de octubre de 2026. Ruta confirmada en producción y archivos del flujo idénticos a los verificados (comparación por huella y diff). La forma de la respuesta se midió con datos ficticios en un entorno de pruebas; no se probó con una cuenta real de producción.

Historial de comandos enviados a los equipos #

GET /api/sent_commands Verificado

Historial de los comandos enviados a los equipos, 15 por página. Es solo lectura: no envía ningún comando. Requiere permiso para ver comandos.

Autenticación. Cabecera user-api-hash con tu user_api_hash.

Parámetros

Parámetros de /api/sent_commands
NombreEnTipoObligatorioDescripción
searchquerystringNo
pagequeryintegerNoNúmero de página.
langquerystringNoIdioma de los textos traducibles (SetLang). También se admite la cabecera Accept-Language.

Ejemplo de solicitud

cURL

cURL
curl -sS "https://plataforma.trackerintl.com/api/sent_commands" \
  -H "user-api-hash: TU_API_HASH"

JavaScript · Node.js 22

JavaScript
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";

const respuesta = await fetch(`${BASE_URL}/api/sent_commands`, {
  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/sent_commands",
    headers={"user-api-hash": API_HASH},
    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/sent_commands";
$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";

Respuestas

Respuestas de /api/sent_commands
CódigoDescripción
200Respuesta correcta.
401Hash ausente o incorrecto, usuario inactivo, suscripción vencida (también la del gerente) o API deshabilitada por falta de pago del servidor. HTTP 401 con {status: 0, message}.
403Sin permiso del rol para el módulo, vehículo de otro usuario o cuenta restringida por facturación. Incluye perm: 0.
500Error interno de la plataforma. Con la depuración apagada el texto del mensaje es genérico.
Campos de primer nivel de la respuesta 200
Campo (respuesta 200)TipoDescripción
dataarray de SentCommand
paginationobject
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "data": [
    {
      "id": 401,
      "user_id": 1,
      "imei": "999000000000001",
      "connection": "gprs",
      "command_title": "Posicion unica (ficticio)",
      "parameters": {
        "data": "WHERE#"
      },
      "response": "OK",
      "status": 1,
      "created_at": "01-10-2026 09:00:00",
      "updated_at": "01-10-2026 09:00:05"
    }
  ],
  "pagination": {
    "total": 1,
    "per_page": 15,
    "current_page": 1,
    "last_page": 1,
    "next_page_url": null,
    "prev_page_url": null
  }
}

Verificación

Estado: Verificado. Revisado el 5 de octubre de 2026. Ruta confirmada en producción y archivos del flujo idénticos a los verificados (comparación por huella y diff). La forma de la respuesta se midió con datos ficticios en un entorno de pruebas; no se probó con una cuenta real de producción.