Saltar al contenido principal

Reporte de Viajes

Registros de viajes individuales con origen, destino, distancia, duración y consumo de combustible por trayecto de vehículo.

GET/apidev/v1/reports/avl/trips
PermisoAPICLI_RPTAVL_VIAJES
Límite de solicitudes10 req/min (ventana deslizante)
Caché300s (5 min)
Rango máximo31 días

Resumen​

Desglosa la actividad del vehículo en viajes individuales. Un viaje comienza cuando un vehículo empieza a moverse y termina cuando permanece detenido durante una duración configurable.

  • Umbral de parada personalizado — idle_min define el tiempo mínimo de parada que marca el fin de un viaje
  • Filtrado de micromovimientos — duration_min excluye viajes cortos causados por ruido del GPS o maniobras de estacionamiento
  • Subtotales — subtotals=true incluye filas de resumen agregadas

Solicitud​

Encabezados de la solicitud​

Every request to a protected endpoint requires these headers:

HeaderRequiredDescription
AuthorizationYesBearer token obtained from the Login endpoint. Format: Bearer <token>
X-API-KeyYesCompany integration key provided during onboarding. Format: gtk_xxx...
tenantYesYour assigned tenant domain (default: geotareas.com) — always send your assigned tenant
Content-TypeConditionalapplication/json — required for POST and PUT requests

Parámetros de consulta​

ParámetroTipoRequeridoPredeterminadoDescripción
startdatestringSí—Fecha-hora de inicio en ISO 8601 (ej. 2026-03-01T00:00:00)
enddatestringSí—Fecha-hora de fin en ISO 8601. Rango máximo 31 días
devicesstringNoTodos los visiblesIDs de dispositivo separados por coma. Máximo 500
idle_minintegerNo0Tiempo mínimo de parada en minutos para finalizar un viaje
duration_minintegerNo0Duración mínima del viaje en minutos. Los viajes más cortos se excluyen
subtotalsbooleanNofalseIncluye filas de subtotal
limitintegerNo25Registros por página (1–100)
offsetintegerNo0Registros a omitir
Con subtotals=true cambia el comportamiento de limit

Las filas de subtotal y de total general se agregan después de haber cortado la página, y recién ahí el resultado se recorta a limit. O sea que con subtotals=true la respuesta sigue trayendo como máximo limit filas, pero parte de ese cupo se va en filas de resumen — vas a recibir menos filas de detalle que en una página normal del mismo tamaño.

Las filas de resumen no vienen marcadas en la respuesta. La única forma de reconocerlas es por device_name: un subtotal por móvil dice "<nombre del móvil> (subtotal)" y el total general dice "Total general". Si estás sumando los datos por tu cuenta, filtrá esas filas o vas a contar dos veces.

meta.total cuenta siempre solo las filas de detalle. Para paginar limpio, dejá subtotals apagado y calculá tus propios totales.


Ejemplos de código​

curl -s "https://$TENANT/apidev/v1/reports/avl/trips?startdate=2026-03-01T00:00:00&enddate=2026-03-15T23:59:59&limit=50&idle_min=5" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"

Campos de la respuesta​

CampoTipoDescripción
device_namestringNombre visible del vehículo/dispositivo
person_namestringConductores del viaje (nombres; cadena vacía si no hay)
trip_startstring | nullMarca de tiempo de cuando comenzó el viaje
trip_start_addressstring | nullDirección geocodificada inversa del origen
trip_endstring | nullMarca de tiempo de cuando terminó el viaje
trip_end_addressstring | nullDirección geocodificada inversa del destino
kmsnumberDistancia recorrida (km)
duration_minnumberDuración del viaje en minutos
idle_minnumberTiempo detenido durante el viaje en minutos
max_speednumberVelocidad máxima registrada (km/h)
fuelnumberCombustible consumido estimado (litros)
costnumberCosto de combustible estimado
temperaturenumberLectura del sensor de temperatura 1. 0 si el vehículo no tiene sensor
Combustible y costo

fuel y cost se calculan usando la tasa de consumo y el precio de combustible configurados por vehículo. Si no están configurados, estos devuelven 0.

Ejemplo de respuesta​

{
"success": true,
"data": [
{
"device_name": "Truck A-101",
"person_name": "Carlos Martinez",
"trip_start": "2026-03-05T07:15:00",
"trip_start_address": "Av. 18 de Julio 1234, Montevideo",
"trip_end": "2026-03-05T09:42:00",
"trip_end_address": "Ruta 1 km 42, San Jose",
"kms": 38.5,
"duration_min": 147,
"idle_min": 12,
"max_speed": 95,
"fuel": 4.62,
"cost": 6.93,
"temperature": 0
},
{
"device_name": "Van B-205",
"person_name": "Ana Lopez",
"trip_start": "2026-03-05T10:05:00",
"trip_start_address": "Bulevar Artigas 1550, Montevideo",
"trip_end": "2026-03-05T10:38:00",
"trip_end_address": "Av. Italia 3210, Montevideo",
"kms": 8.2,
"duration_min": 33,
"idle_min": 5,
"max_speed": 58,
"fuel": 0.98,
"cost": 1.47,
"temperature": -2.5
}
],
"meta": {
"total": 156,
"limit": 50,
"offset": 0
}
}

Errores​

CódigoHTTPDescripción
INVALID_DATE_RANGE400El rango de fechas supera el máximo de 31 días, el fin es anterior al inicio, o fechas no ISO
VALIDATION_ERROR400Parámetros inválidos: faltan fechas, limit > 100, > 500 dispositivos
UNAUTHORIZED401tenant / Authorization / X-API-Key faltante, inválido o expirado
FORBIDDEN403El usuario carece del permiso APICLI_RPTAVL_VIAJES
RATE_LIMITED429Se superaron las 10 req/min
INTERNAL_ERROR500Error inesperado del servidor