Referencia de la API

Geocercas

Consulta tus geocercas y rutas planificadas, y averigua qué geocercas contienen un punto o la posición actual de un vehículo.

Estado: Parcial · Revisada el 5 de octubre de 2026

Qué se verificó y cómo: Rutas y código confirmados en producción por diff. La respuesta 200 de dos operaciones solo se leyó del código y la forma de las rutas planificadas no se midió. No hay operaciones de creación o edición documentadas.

Esta sección es de lectura: lista geocercas y rutas, y responde en qué geocercas está un punto o un vehículo. Crear, editar o eliminar geocercas no está documentado.

  • Una geocerca es un polígono o un círculo (type) que dibujó el usuario. Sus coordenadas llegan en coordinates como una cadena JSON que debes decodificar.
  • Una ruta planificada es una línea de referencia dibujada por el usuario; no es el recorrido real. Para el recorrido real usa Historial y rutas.
  • point_in_geofences y devices_in_geofences devuelven los nombres de las geocercas que contienen el punto. Tienen límites de peticiones por minuto (mira Límites).

Geocercas del usuario #

GET /api/get_geofences Verificado

Lista los polígonos y círculos propios del usuario. coordinates es una cadena JSON que debes decodificar. Si el usuario no tiene permiso, devuelve items.geofences vacío.

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

Parámetros

Parámetros de /api/get_geofences
NombreEnTipoObligatorioDescripción
searchquerystringNo
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_geofences" \
  -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_geofences`, {
  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_geofences",
    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_geofences";
$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_geofences
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
itemsobject
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "items": {
    "geofences": [
      {
        "id": 301,
        "user_id": 1,
        "group_id": 0,
        "active": 1,
        "name": "Base ficticia",
        "coordinates": "[{\"lat\":-17.78,\"lng\":-63.19},{\"lat\":-17.78,\"lng\":-63.17},{\"lat\":-17.79,\"lng\":-63.17},{\"lat\":-17.79,\"lng\":-63.19}]",
        "polygon_color": "#d000df",
        "created_at": "2026-02-24 21:09:52",
        "updated_at": "2026-02-24 21:09:52",
        "type": "polygon",
        "radius": null,
        "center": null,
        "device_id": null,
        "speed_limit": 0,
        "diem_rate_id": null,
        "additional": 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.

Geocercas que contienen un punto #

GET /api/point_in_geofences Parcial

Devuelve los nombres de las geocercas del usuario que contienen el punto (lat, lng). Límite de 30 peticiones por minuto. Si faltan lat o lng, responde HTTP 200 con {status: 0, errors}; si el usuario no tiene geocercas, responde 404.

Autenticación. Cabecera user-api-hash con tu user_api_hash. Límite de la plataforma: 30 peticiones por minuto.

Parámetros

Parámetros de /api/point_in_geofences
NombreEnTipoObligatorioDescripción
latquerynumberSíLatitud.
lngquerynumberSíLongitud.
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/point_in_geofences" \
  -H "user-api-hash: TU_API_HASH" \
  --data-urlencode "lat=-17.78" \
  --data-urlencode "lng=-63.18"

JavaScript · Node.js 22

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

const params = new URLSearchParams({
  lat: "-17.78",
  lng: "-63.18",
});
const respuesta = await fetch(`${BASE_URL}/api/point_in_geofences?${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/point_in_geofences",
    headers={"user-api-hash": API_HASH},
    params={"lat": "-17.78", "lng": "-63.18"},
    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/point_in_geofences?" . http_build_query(["lat" => "-17.78", "lng" => "-63.18"]);
$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/point_in_geofences
CódigoDescripción
200OK, o error de validación con HTTP 200.
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.
404El usuario no tiene geocercas.
429Límite de peticiones superado (inferido del comportamiento estándar; no medido).
500Error interno de la plataforma. Con la depuración apagada el texto del mensaje es genérico.
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "status": 1,
  "zones": [
    "Base ficticia"
  ]
}

Verificación

Estado: Parcial. Revisado el 5 de octubre de 2026. Ruta y código confirmados en producción. La validación y el límite de peticiones se midieron en un entorno de pruebas; la respuesta 200 solo se leyó del código porque ese entorno no podía calcularla.

Geocercas que contienen la posición actual de un vehículo #

GET /api/devices_in_geofences Parcial

Igual que point_in_geofences, pero usa la última posición de un vehículo del usuario. Límite de 1800 peticiones por minuto. Responde 404 si el usuario no tiene geocercas.

Autenticación. Cabecera user-api-hash con tu user_api_hash. Límite de la plataforma: 1800 peticiones por minuto.

Parámetros

Parámetros de /api/devices_in_geofences
NombreEnTipoObligatorioDescripción
device_idqueryintegerSíID del vehículo (campo id de get_devices).
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/devices_in_geofences" \
  -H "user-api-hash: TU_API_HASH" \
  --data-urlencode "device_id=9001"

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",
});
const respuesta = await fetch(`${BASE_URL}/api/devices_in_geofences?${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/devices_in_geofences",
    headers={"user-api-hash": API_HASH},
    params={"device_id": "9001"},
    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/devices_in_geofences?" . http_build_query(["device_id" => "9001"]);
$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/devices_in_geofences
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.
404El usuario no tiene geocercas.
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
zonesarray de stringNombres de las geocercas que contienen el punto.
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "status": 1,
  "zones": [
    "Base ficticia"
  ]
}

Verificación

Estado: Parcial. Revisado el 5 de octubre de 2026. Ruta y código confirmados en producción. La respuesta 200 no se midió; se leyó del código.

Rutas planificadas #

GET /api/get_routes Parcial

Lista las rutas de referencia que dibujó el usuario (no es el recorrido real), 500 por página. Requiere permiso para ver rutas.

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

Parámetros

Parámetros de /api/get_routes
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/get_routes" \
  -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_routes`, {
  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_routes",
    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_routes";
$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_routes
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 object
paginationobject
Ejemplo de respuesta 200 (datos ficticios)
JSON
{
  "data": [],
  "pagination": {
    "total": 0,
    "per_page": 500,
    "current_page": 1,
    "last_page": 1,
    "next_page_url": null,
    "prev_page_url": null
  }
}

Verificación

Estado: Parcial. Revisado el 5 de octubre de 2026. Ruta confirmada en producción. La forma de data[] no se midió porque el entorno de pruebas no tenía rutas.