Referencia de la API
Reportes
Catálogo de tipos de reporte de tu cuenta y plantillas guardadas. La generación de reportes no está documentada.
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. Solo se documentan consultas: generar o descargar reportes queda fuera.
Estas operaciones no generan reportes. Sirven para saber qué tipos de reporte puede generar tu cuenta y qué plantillas guardó el usuario. La generación y descarga de reportes todavía no está documentada.
Plantillas de reporte guardadas #
GET /api/get_reports Verificado
Lista las plantillas de reporte guardadas por el usuario. No genera reportes. limit vale 10 por defecto.
Autenticación. Cabecera user-api-hash con tu user_api_hash.
Parámetros
| Nombre | En | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
limit | query | integer | No | |
page | query | integer | No | Número de página. |
lang | query | string | No | Idioma de los textos traducibles (SetLang). También se admite la cabecera Accept-Language. |
Ejemplo de solicitud
cURL
curl -sS -G "https://plataforma.trackerintl.com/api/get_reports" \
-H "user-api-hash: TU_API_HASH" \
--data-urlencode "limit=10"JavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";
const params = new URLSearchParams({
limit: "10",
});
const respuesta = await fetch(`${BASE_URL}/api/get_reports?${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_reports",
headers={"user-api-hash": API_HASH},
params={"limit": "10"},
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_reports?" . http_build_query(["limit" => "10"]);
$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
| Código | Descripción |
|---|---|
200 | Respuesta correcta. |
401 | Hash 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}. |
403 | Sin permiso del rol para el módulo, vehículo de otro usuario o cuenta restringida por facturación. Incluye perm: 0. |
500 | Error interno de la plataforma. Con la depuración apagada el texto del mensaje es genérico. |
| Campo (respuesta 200) | Tipo | Descripción |
|---|---|---|
status | ||
items | object |
Ejemplo de respuesta 200 (datos ficticios)
{
"status": 1,
"items": {
"reports": {
"current_page": 1,
"data": [],
"first_page_url": "https://plataforma.example.invalid/api/get_reports?page=1",
"from": null,
"last_page": 1,
"last_page_url": "https://plataforma.example.invalid/api/get_reports?page=1",
"links": [],
"next_page_url": null,
"path": "https://plataforma.example.invalid/api/get_reports",
"per_page": 10,
"prev_page_url": null,
"to": null,
"total": 0
},
"types": [
{
"id": 1,
"title": "General information"
},
{
"id": 2,
"title": "Stops"
}
]
}
}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.
Tipos de reporte habilitados para la cuenta #
GET /api/get_reports_types Verificado
Catálogo de los tipos de reporte disponibles para la cuenta: id, nombre, formatos, campos y reglas de validación. La respuesta es grande: unos 128 KB en una cuenta de pruebas con 79 tipos.
Autenticación. Cabecera user-api-hash con tu user_api_hash.
Parámetros
| Nombre | En | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
lang | query | string | No | Idioma de los textos traducibles (SetLang). También se admite la cabecera Accept-Language. |
Ejemplo de solicitud
cURL
curl -sS "https://plataforma.trackerintl.com/api/get_reports_types" \
-H "user-api-hash: TU_API_HASH"JavaScript · Node.js 22
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";
const respuesta = await fetch(`${BASE_URL}/api/get_reports_types`, {
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_reports_types",
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
$baseUrl = "https://plataforma.trackerintl.com";
$apiHash = "TU_API_HASH";
$url = $baseUrl . "/api/get_reports_types";
$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
| Código | Descripción |
|---|---|
200 | Respuesta correcta. |
401 | Hash 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}. |
403 | Sin permiso del rol para el módulo, vehículo de otro usuario o cuenta restringida por facturación. Incluye perm: 0. |
500 | Error interno de la plataforma. Con la depuración apagada el texto del mensaje es genérico. |
| Campo (respuesta 200) | Tipo | Descripción |
|---|---|---|
status | ||
items | array de ReportType |
Ejemplo de respuesta 200 (datos ficticios)
{
"status": 1,
"items": [
{
"type": 1,
"name": "General information",
"formats": [
"html",
"xls",
"pdf",
"pdf_land",
"json",
"csv"
],
"fields": [
"date_from",
"date_to"
],
"validation": {
"type": "required"
},
"parameters": []
},
{
"type": 2,
"name": "Stops",
"formats": [
"html",
"xls",
"pdf"
],
"fields": [
"date_from",
"date_to",
"stops"
],
"validation": {
"type": "required"
},
"parameters": []
}
]
}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.