API de Track Center
Consultá los vehículos, la última posición, los recorridos y los eventos de las flotas monitoreadas por Track Center. Es una API REST de solo lectura que responde JSON.
Primeros pasos
Track Center te entrega una clave de acceso (empieza con tc_live_). Cada clave tiene asignados los clientes que puede ver y lo que puede consultar. Probala con /v1/estado, que te dice exactamente eso:
curl https://api.trackcenter.com.ar/v1/estado \
-H "Authorization: Bearer tc_live_TU_CLAVE"
const res = await fetch("https://api.trackcenter.com.ar/v1/posiciones", { headers: { Authorization: `Bearer ${process.env.TRACKCENTER_CLAVE}` } }); if (!res.ok) throw new Error((await res.json()).error.mensaje); const { datos } = await res.json(); for (const p of datos) console.log(p.patente, p.latitud, p.longitud, p.velocidad_kmh);
import os, requests r = requests.get( "https://api.trackcenter.com.ar/v1/posiciones", headers={"Authorization": f"Bearer {os.environ['TRACKCENTER_CLAVE']}"}, timeout=30, ) r.raise_for_status() for p in r.json()["datos"]: print(p["patente"], p["latitud"], p["longitud"], p["velocidad_kmh"])
Un recorrido típico de una integración:
GET /v1/vehiculosuna vez al día (o al arrancar) para tener la flota y sus ids.GET /v1/posicionescada 30 a 60 segundos para el mapa en vivo.GET /v1/eventos?desde=…cada pocos minutos, pidiendo desde el último evento recibido.GET /v1/vehiculos/{id}/recorridocuando alguien quiere ver por dónde anduvo un vehículo.
Autenticación
Mandá la clave en cada consulta, en el encabezado Authorization:
Authorization: Bearer tc_live_TU_CLAVE
También se acepta el encabezado X-Api-Key: tc_live_TU_CLAVE. La clave nunca va en la URL.
Una clave puede estar limitada a ciertas IPs, tener fecha de vencimiento o estar pausada. En esos casos la API responde 401 o 403 con un código que explica el motivo (ver Errores).
Convenciones
Respuestas
Todas las respuestas exitosas traen los datos en datos. Las listas suman cantidad:
{ "datos": [ … ], "cantidad": 12 }Identificadores
Vehículos, clientes y eventos tienen ids propios con prefijo: veh_3f9a1c7b2d4e, cli_51b0a9e2c4d7, evt_9c1e5a77b02f4d6e8a13. Son estables: guardalos en tu sistema. No uses la patente como clave, porque puede cambiar o faltar.
Fechas y horas
Todas las fechas están en hora de Argentina, en ISO 8601 con el huso explícito: 2026-10-06T15:04:05-03:00. En los parámetros desde y hasta podés mandar:
| Formato | Se interpreta como |
|---|---|
2026-10-06T10:00:00-03:00 | Exactamente esa hora (cualquier huso, o Z para UTC) |
2026-10-06T10:00 | 10:00 hora de Argentina |
2026-10-06 | 00:00 de ese día, hora de Argentina |
Unidades
El nombre del campo dice la unidad: velocidad_kmh (km/h), odometro_km, distancia_km, tension_alimentacion_v (voltios), temperatura_c (°C). rumbo va en grados de 0 a 359 desde el norte. Las coordenadas son WGS84 con 6 decimales.
Datos faltantes
Si un equipo no informa un dato (temperatura, tensión, conductor), el campo viene en null. El campo siempre está presente.
Límites
Cada clave tiene un presupuesto de unidades por minuto (120 por defecto). Las consultas livianas cuestan 1 unidad; las de historia (/recorrido y /eventos) cuestan 5.
| Encabezado | Qué indica |
|---|---|
X-RateLimit-Limit | Unidades por minuto de tu clave |
X-RateLimit-Remaining | Unidades que te quedan en el minuto actual |
Retry-After | Solo en un 429: segundos a esperar antes de reintentar |
- Recorridos y eventos: hasta 7 días por consulta, dentro de los últimos 90 días. Para períodos más largos, pedilos en partes.
- Eventos: hasta 500 vehículos por consulta (filtrá por
clienteovehiculos). - Las posiciones se actualizan cada 10 a 30 segundos. Consultar más seguido no trae datos más nuevos.
Errores
Los errores responden con el código HTTP correspondiente y este cuerpo:
{
"error": {
"codigo": "rango_invalido",
"mensaje": "El rango no puede superar 7 días por consulta. Pedilo en partes.",
"solicitud": "64ba9f08-19e9-40e0-af47-2b30e03920d2"
}
}Programá contra codigo, que no cambia; mensaje es para personas. Si consultás a Track Center por un error, mandá el id de solicitud.
| HTTP | codigo | Cuándo |
|---|---|---|
| 400 | parametro_invalido | Un parámetro no tiene el formato esperado (una fecha, un tipo de evento). |
| 400 | rango_invalido | desde es posterior a hasta, el rango supera 7 días o empieza hace más de 90. |
| 400 | demasiados_vehiculos | La consulta de eventos abarca más de 500 vehículos. |
| 401 | no_autenticado | Falta el encabezado Authorization. |
| 401 | clave_invalida | La clave no existe o está mal copiada. |
| 401 | clave_vencida | La clave pasó su fecha de vencimiento. |
| 401 | clave_revocada | La clave fue dada de baja (por ejemplo, al rotarla). |
| 403 | clave_pausada | La clave está suspendida temporalmente. |
| 403 | ip_no_autorizada | La clave solo se puede usar desde ciertas IPs. |
| 403 | sin_permiso | La clave no tiene el permiso que pide esa ruta. |
| 404 | vehiculo_inexistente | El vehículo no existe o tu clave no lo ve. |
| 404 | cliente_inexistente | El cliente no existe o tu clave no lo ve. |
| 404 | sin_posicion | El vehículo todavía no informó ninguna posición. |
| 404 | ruta_inexistente | La ruta no existe. |
| 405 | metodo_no_permitido | Se usó un método distinto de GET. |
| 429 | demasiadas_solicitudes | Se superó el límite por minuto de la clave, o hay demasiadas consultas de historia en curso para esos vehículos. Esperá lo que indica Retry-After. |
| 429 | demasiados_intentos | Demasiadas claves inválidas desde tu IP. Esperá 10 minutos. |
| 501 | no_disponible | Esa consulta no está disponible para ese vehículo. |
| 503 | servicio_no_disponible | El servicio de posicionamiento no respondió. Reintentá en unos minutos. |
| 500 | error_interno | Error inesperado. Avisá a Track Center con el id de solicitud. |
Buenas prácticas
- Mirá la frescura del dato. Cada posición trae
fecha(hora del GPS) yactualizado(cuándo la obtuvimos). Un vehículo en un galpón puede seguiren_lineacon unafechavieja: perdió la señal satelital pero el equipo sigue comunicándose. - Deduplicá eventos por
id. Pedir rangos que se solapan es seguro: el mismo evento trae siempre el mismo id. - Reintentá con espera. Ante un
503o un429, esperá y reintentá: 5 s, 15 s, 60 s. - Cacheá lo que cambia poco. La lista de vehículos y el catálogo de eventos cambian muy de vez en cuando.
Endpoints
Todas las rutas son GET y van debajo de https://api.trackcenter.com.ar. Las que necesitan un permiso lo indican; listar vehículos y clientes funciona con cualquier clave.
Estado de la clave
Qué ve tu clave, con qué permisos y hasta cuándo. Útil para validar la configuración al arrancar.
{
"datos": {
"acceso": {
"nombre": "Integración Transporte Ejemplo",
"permisos": ["posiciones", "recorridos", "eventos"],
"clientes": [{ "id": "cli_51b0a9e2c4d7", "nombre": "Transporte Ejemplo" }],
"limite_por_minuto": 120,
"vence": null
},
"servicio": { "estado": "ok", "hora": "2026-10-06T15:28:07-03:00" }
}
}Clientes
Los clientes (empresas o personas dueñas de la flota) que ve tu clave, con su cantidad de vehículos.
{ "datos": [{ "id": "cli_51b0a9e2c4d7", "nombre": "Transporte Ejemplo", "vehiculos": 14 }], "cantidad": 1 }Vehículos
La flota que ve tu clave. Ver el objeto Vehículo.
| Parámetro | Tipo | Descripción |
|---|---|---|
cliente | string | Solo los vehículos de ese cliente (cli_…). |
vehiculos | string | Solo esos vehículos: ids separados por coma. |
{
"datos": [{
"id": "veh_3f9a1c7b2d4e",
"patente": "AB123CD",
"nombre": "AB123CD",
"cliente": { "id": "cli_51b0a9e2c4d7", "nombre": "Transporte Ejemplo" },
"equipo": { "tipo": "gps", "modelo": "Track GPS" },
"conductor": "Juan Pérez"
}],
"cantidad": 1
}Última posición
La última posición conocida de cada vehículo. La lista incluye solo los vehículos que informaron alguna posición; sin_posicion cuenta los que todavía no. Acepta los mismos filtros que /v1/vehiculos. Ver el objeto Posición.
{
"datos": [{
"vehiculo": "veh_3f9a1c7b2d4e",
"patente": "AB123CD",
"fecha": "2026-10-06T15:04:05-03:00",
"latitud": -33.895214,
"longitud": -60.573198,
"velocidad_kmh": 72,
"rumbo": 184,
"encendido": true,
"en_linea": true,
"ultima_comunicacion": "2026-10-06T15:04:20-03:00",
"odometro_km": 152340.7,
"tension_alimentacion_v": 27.6,
"temperatura_c": null,
"actualizado": "2026-10-06T15:04:31-03:00"
}],
"cantidad": 1,
"sin_posicion": 0
}Recorrido
Los puntos por donde pasó un vehículo, ordenados por hora, y la distancia recorrida. Hasta 7 días por consulta dentro de los últimos 90. Cuesta 5 unidades.
| Parámetro | Tipo | Descripción |
|---|---|---|
desde | fecha | Inicio. Por defecto, 24 horas antes de hasta. |
hasta | fecha | Fin. Por defecto, ahora. |
curl "https://api.trackcenter.com.ar/v1/vehiculos/veh_3f9a1c7b2d4e/recorrido?desde=2026-10-06T06:00&hasta=2026-10-06T18:00" \ -H "Authorization: Bearer tc_live_TU_CLAVE"
{
"datos": {
"vehiculo": "veh_3f9a1c7b2d4e",
"patente": "AB123CD",
"desde": "2026-10-06T06:00:00-03:00",
"hasta": "2026-10-06T18:00:00-03:00",
"distancia_km": 412.6,
"cantidad_puntos": 1874,
"puntos": [
{ "fecha": "2026-10-06T06:02:11-03:00", "latitud": -33.895214, "longitud": -60.573198,
"velocidad_kmh": 0, "rumbo": 0, "encendido": true, "origen": "gps" },
…
]
}
}origen indica cómo se ubicó el punto: gps, red_celular (aproximado, por antenas) o wifi. La distancia se calcula solo con los puntos de GPS.
Eventos
Alarmas y sucesos informados por los equipos (pánico, puertas, corte de combustible, encendido, excesos, etc.), en orden cronológico. Hasta 7 días por consulta dentro de los últimos 90. Cuesta 5 unidades. Ver tipos de evento.
| Parámetro | Tipo | Descripción |
|---|---|---|
desde | fecha | Inicio. Por defecto, 24 horas antes de hasta. |
hasta | fecha | Fin. Por defecto, ahora. |
tipos | string | Solo esos tipos, separados por coma: panico,puerta_abierta. |
cliente | string | Solo /v1/eventos: los de ese cliente. |
vehiculos | string | Solo /v1/eventos: los de esos vehículos. |
{
"datos": [{
"id": "evt_9c1e5a77b02f4d6e8a13",
"vehiculo": "veh_3f9a1c7b2d4e",
"patente": "AB123CD",
"tipo": "panico",
"categoria": "seguridad",
"descripcion": "Botón de pánico",
"fecha": "2026-10-06T03:12:44-03:00",
"latitud": -34.60372,
"longitud": -58.38159,
"velocidad_kmh": 0
}],
"cantidad": 1,
"desde": "2026-10-05T15:00:00-03:00",
"hasta": "2026-10-06T15:00:00-03:00"
}Para seguir los eventos casi en vivo, consultá cada 2 a 5 minutos con desde igual a la fecha del último evento recibido menos un minuto, y descartá los id que ya tenés.
Catálogo de eventos
Todos los tipos de evento posibles con su descripción. Es la misma tabla de Tipos de evento, para leerla desde tu código.
Objetos
Vehículo
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Id estable del vehículo (veh_…). |
patente | string · null | Dominio en mayúsculas, sin espacios ni guiones. null si no está cargado. |
nombre | string · null | Nombre para mostrar (alias o patente). |
cliente | objeto | id y nombre del cliente dueño de la flota. |
equipo | objeto | tipo (gps o camara) y modelo comercial. |
conductor | string · null | Conductor asignado, si está cargado. |
Posición
| Campo | Tipo | Descripción |
|---|---|---|
vehiculo | string | Id del vehículo. |
patente | string · null | Para mostrar; usá vehiculo como clave. |
fecha | fecha | Hora del GPS en que se tomó la posición. |
latitud, longitud | número | WGS84, 6 decimales. |
velocidad_kmh | entero · null | Velocidad en km/h. |
rumbo | entero · null | 0 a 359 grados desde el norte. |
encendido | booleano · null | Motor (contacto) encendido. |
en_linea | booleano · null | El equipo se está comunicando ahora. |
ultima_comunicacion | fecha · null | Último contacto del equipo, aunque no tenga posición nueva. |
odometro_km | número · null | Kilometraje acumulado según el equipo. |
tension_alimentacion_v | número · null | Tensión de la batería del vehículo, en voltios. |
temperatura_c | número · null | Sensor de temperatura (equipos de frío). |
actualizado | fecha | Cuándo Track Center obtuvo este dato. |
Evento
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Id estable (evt_…): el mismo evento siempre trae el mismo id. |
vehiculo, patente | string | Vehículo que lo informó. |
tipo | string | Uno de los tipos de evento. |
categoria, descripcion | string | Para agrupar y mostrar. |
fecha | fecha | Cuándo ocurrió. |
latitud, longitud, velocidad_kmh | número · null | Dónde y a qué velocidad, si el equipo lo informó. |
entrada, sensor | entero · string | Solo en entrada_activada y entrada_desactivada: qué entrada cambió y, si se sabe, qué tiene conectado (enganche_acoplado). |
Tipos de evento
Qué eventos aparecen depende del equipo instalado y de los sensores que tenga conectados. Un evento sin tipo específico llega como otro.
| tipo | Descripción | Categoría |
|---|---|---|
panico | Botón de pánico | Seguridad |
puerta_abierta | Puerta abierta | Seguridad |
puerta_cerrada | Puerta cerrada | Seguridad |
ventanilla_abierta | Ventanilla abierta | Seguridad |
ventanilla_cerrada | Ventanilla cerrada | Seguridad |
corte_combustible_activado | Corte de combustible activado | Seguridad |
corte_combustible_desactivado | Corte de combustible desactivado | Seguridad |
sabotaje | Manipulación o desconexión del equipo | Seguridad |
inhibidor_detectado | Inhibidor de señal detectado | Seguridad |
inhibidor_finalizado | Fin de la inhibición de señal | Seguridad |
vibracion | Vibración detectada | Seguridad |
desplazamiento | Desplazamiento con el vehículo detenido | Seguridad |
alarma_activada | Alarma del vehículo activada | Seguridad |
alarma_desactivada | Alarma del vehículo desactivada | Seguridad |
alarma_disparada | Alarma del vehículo disparada | Seguridad |
encendido | Motor encendido | Conducción |
apagado | Motor apagado | Conducción |
exceso_velocidad | Exceso de velocidad | Conducción |
frenada_brusca | Frenada brusca | Conducción |
aceleracion_brusca | Aceleración brusca | Conducción |
giro_brusco | Giro brusco | Conducción |
cambio_carril_brusco | Cambio de carril brusco | Conducción |
colision | Choque detectado | Conducción |
vuelco | Vuelco detectado | Conducción |
conduccion_prolongada | Conducción prolongada sin descanso | Conducción |
conduccion_nocturna | Conducción en horario nocturno | Conducción |
detencion_prolongada | Detención prolongada | Conducción |
ralenti | Motor en ralentí prolongado | Conducción |
desvio_de_ruta | Desvío de la ruta asignada | Conducción |
fatiga | Fatiga del conductor | Conductor (cámara) |
distraccion | Distracción del conductor | Conductor (cámara) |
uso_celular | Uso del celular al volante | Conductor (cámara) |
fumando | Conductor fumando | Conductor (cámara) |
aviso_colision_frontal | Aviso de colisión frontal | Conductor (cámara) |
salida_de_carril | Salida de carril | Conductor (cámara) |
distancia_insuficiente | Distancia insuficiente con el vehículo de adelante | Conductor (cámara) |
peaton_detectado | Peatón en riesgo de colisión | Conductor (cámara) |
corte_alimentacion | Alimentación principal desconectada | Energía y equipo |
alimentacion_baja | Tensión de alimentación baja | Energía y equipo |
bateria_baja | Batería interna del equipo baja | Energía y equipo |
equipo_conectado | Equipo conectado | Energía y equipo |
equipo_reiniciado | Equipo encendido o reiniciado | Energía y equipo |
sin_conexion | Equipo sin conexión | Energía y equipo |
sin_senal_gps | Sin señal GPS | Energía y equipo |
senal_gps_recuperada | Señal GPS recuperada | Energía y equipo |
cambio_de_chip | Cambio de chip de datos | Energía y equipo |
geocerca_entrada | Entrada a una geocerca | Ubicación |
geocerca_salida | Salida de una geocerca | Ubicación |
temperatura_alta | Temperatura alta | Sensores |
temperatura_baja | Temperatura baja | Sensores |
temperatura_fuera_de_rango | Temperatura fuera de rango | Sensores |
temperatura_normal | Temperatura de nuevo en rango | Sensores |
humedad_alta | Humedad alta | Sensores |
humedad_baja | Humedad baja | Sensores |
posible_robo_combustible | Caída brusca del nivel de combustible | Sensores |
carga_combustible | Carga de combustible | Sensores |
entrada_activada | Entrada auxiliar activada | Sensores |
entrada_desactivada | Entrada auxiliar desactivada | Sensores |
identificacion_conductor | Identificación de conductor (llave o tarjeta) | Sensores |
falla_vehiculo | Falla informada por la computadora del vehículo | Vehículo |
mantenimiento | Mantenimiento por kilometraje | Vehículo |
otro | Otro evento del equipo | Otros |
Especificación OpenAPI
La API está descripta en OpenAPI 3.1, para importarla en Postman o Insomnia, o para generar un cliente en tu lenguaje.
Novedades
| Versión | Fecha | Cambios |
|---|---|---|
1.0.0 | Octubre 2026 | Primera versión: vehículos, clientes, última posición, recorridos y eventos. |
Los cambios dentro de v1 solo agregan campos o rutas. Tu integración tiene que ignorar los campos que no conoce.