Saltar al contenido principal

Ingesta de telemetría

Ingesta lotes de datos GPS y de sensores desde dispositivos de rastreo.

POST/apidev/v1/telemetry
PermisoAPICLI_POST_TELEMETRY
Límite de solicitudesToken bucket — capacidad 180, recarga 30/seg
CachéNinguna

Resumen

Acepta arreglos de puntos de datos GPS y de sensores desde dispositivos de rastreo. Usa un patrón fire-and-forget: el servidor valida el contenido enviado, devuelve 200 OK con un conteo de aceptados y procesa los datos de forma asíncrona en segundo plano.

Una respuesta exitosa confirma que los puntos fueron aceptados para su procesamiento, no que ya hayan sido persistidos.


Solicitud

Cuerpo

El cuerpo de la solicitud es un arreglo JSON de objetos de punto de telemetría:

CampoTipoRequeridoLongitud máximaDescripción
imeistring50Identificador IMEI del dispositivo
eventcodestring20Código de evento; consultá la tabla Códigos de evento más abajo
fixbooleanSi el GPS tiene una posición válida
datetimestring40Marca de tiempo de la lectura (ISO 8601, sin zona horaria)
latitudestring25Latitud en grados decimales
longitudestring25Longitud en grados decimales
altitudenumberAltitud en metros
speednumberVelocidad en km/h
headingnumberRumbo en grados (0–360)
satellitesintegerNoCantidad de satélites GPS visibles
ignitionbooleanNoEstado de la ignición
accuracystringNo30Precisión del GPS en metros
odometerstringNo50Lectura del odómetro en km
horometernumberNoLectura del horómetro
addressstringNo500Dirección obtenida por geocodificación inversa

Códigos de evento

El campo eventcode debe ser uno de los siguientes valores:

CódigoEventoDescripción
101POSICIONReporte de posición periódico
113POSICION_STANDBYReporte de posición en modo de espera
116BATTERY_LOWAlerta de batería baja
117EXCESO_VELOCIDADLímite de velocidad superado
118IGNICION_ONIgnición encendida
119IGNICION_OFFIgnición apagada
120POWER_ONAlimentación externa conectada
121POWER_OFFAlimentación externa desconectada
122INPUT01_ONEntrada 1 activada
123INPUT01_OFFEntrada 1 desactivada
124INPUT02_ONEntrada 2 activada
125INPUT02_OFFEntrada 2 desactivada
126INPUT03_ONEntrada 3 activada
127INPUT03_OFFEntrada 3 desactivada
128OUTPUT01_ONSalida 1 activada
129OUTPUT01_OFFSalida 1 desactivada
130OUTPUT02_ONSalida 2 activada
131OUTPUT02_OFFSalida 2 desactivada
132OUTPUT03_ONSalida 3 activada
133OUTPUT03_OFFSalida 3 desactivada
149REMOLQUE_INICIORemolque enganchado
150REMOLQUE_FINRemolque desenganchado
151BATERIA_EXT_LOWBatería externa baja
152BATERIA_INT_LOWBatería interna baja
153POWER_UPEncendido del dispositivo
162COLISIONColisión detectada
163ACELERACIONBRUSCAAceleración brusca
164FRENADOBRUSCOFrenado brusco
165GIROBRUSCOGiro brusco
Lista blanca aplicada

Los campos desconocidos en el cuerpo son rechazados. Solo se aceptan los campos enumerados arriba; cualquier propiedad adicional provoca un VALIDATION_ERROR.


Ejemplos de código

curl -s -X POST "https://$TENANT/apidev/v1/telemetry" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '[
{
"imei": "352093081234567",
"eventcode": "101",
"fix": true,
"datetime": "2026-04-04T14:30:00",
"latitude": "-34.6037",
"longitude": "-58.3816",
"altitude": 25,
"speed": 45,
"heading": 180,
"satellites": 12,
"ignition": true,
"odometer": "125430",
"accuracy": "3.5"
},
{
"imei": "352093081234567",
"eventcode": "101",
"fix": true,
"datetime": "2026-04-04T14:30:30",
"latitude": "-34.6040",
"longitude": "-58.3820",
"altitude": 25,
"speed": 48,
"heading": 185
}
]'

Respuesta

Éxito — 200 OK

CampoTipoDescripción
successbooleantrue — puntos aceptados para procesamiento asíncrono
data.acceptedintegerCantidad de puntos de telemetría aceptados
data.rejectedintegerCantidad de puntos rechazados (actualmente siempre 0 cuando es exitoso)
data.statusstringEstado del procesamiento ("OK")
metaobjectObjeto vacío
{
"success": true,
"data": {
"accepted": 2,
"rejected": 0,
"status": "OK"
},
"meta": {}
}
Fire-and-forget

Un 200 OK confirma que los puntos pasaron la validación y fueron encolados. El procesamiento ocurre de forma asíncrona; es posible que los datos no se puedan consultar de inmediato mediante el endpoint Posición del dispositivo.


Límite de solicitudes

La telemetría usa un algoritmo de token bucket en dos niveles. Consultá Límites de solicitudes para la explicación completa.

ParámetroGlobal (por usuario)Por IMEI
Capacidad del bucket180 tokens90 tokens
Tasa de recarga30 tokens/seg15 tokens/seg
Costo por solicitudceil(points / 20) tokensceil(points / 20) tokens

Ejemplos:

  • 1 punto = 1 token → podés enviar ~180 solicitudes de un solo punto antes de vaciar el bucket
  • 100 puntos = 5 tokens → podés enviar ~36 lotes de 100 antes de vaciar el bucket
  • Rendimiento sostenido: ~600 puntos/seg a nivel global, ~300 puntos/seg por dispositivo

Errores

CódigoHTTPDescripción
VALIDATION_ERROR400Campos inválidos o ausentes, propiedades desconocidas, o el cuerpo no es un arreglo
UNAUTHORIZED401tenant / Authorization / X-API-Key ausente, inválido o expirado
FORBIDDEN403El usuario no tiene APICLI_POST_TELEMETRY
RATE_LIMITED429Token bucket agotado (global o por IMEI)
INTERNAL_ERROR500Error inesperado del servidor durante la ingesta

Buenas prácticas

  • Agrupá tus puntos en lotes — enviá hasta 100 puntos por solicitud para una relación óptima entre rendimiento y costo en tokens
  • Un solo IMEI por lote cuando sea posible — evita la contención del bucket por IMEI entre dispositivos
  • Monitoreá los encabezados del límite de solicitudes — revisá X-RateLimit-Remaining para regular el ritmo antes de llegar al 429
  • Marcas de tiempo sin zona horaria — enviá como "2026-04-04T14:30:00", no como "2026-04-04T14:30:00Z"
  • GPS fix = false — el servidor acepta el punto pero las coordenadas pueden no ser confiables