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

Parámetros de /api/get_reports
NombreEnTipoObligatorioDescripción
limitqueryintegerNo
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 -G "https://plataforma.trackerintl.com/api/get_reports" \
  -H "user-api-hash: TU_API_HASH" \
  --data-urlencode "limit=10"

JavaScript · Node.js 22

JavaScript
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

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

Respuestas de /api/get_reports
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": {
    "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

Parámetros de /api/get_reports_types
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_reports_types" \
  -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_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

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

Respuestas de /api/get_reports_types
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
itemsarray de ReportType
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "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.