> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ugps.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Estado en vivo de los trackers

> Una fila por tracker del alcance del usuario (su empresa y, si lo tiene, su acceso a
vehículos), con la posición, el estado de conexión y el movimiento que mantiene el servicio
en tiempo real, la misma fuente que el mapa. El estado de conexión se resuelve al leer, con la hora
actual, a partir del último contacto y el último fix recibido: puede adelantarse hasta 3
minutos al que muestra el mapa. El movement status es el que calcula el servicio en tiempo
real con el perfil de detección del tracker: en el perfil de ignición, con la ignición
apagada queda estacionado aunque tenga velocidad.

Sin estado en vivo para un tracker (todavía no hay datos o el estado en tiempo real no
responde) la fila llega con `live: null`; la respuesta sigue siendo 200.

`counters` trae el odómetro y las horas de motor de cada tracker, leídos de la base con el
mismo cálculo que `GET /api/trackers/{flespiId}/odometer` (el valor que muestra la ficha
del activo), no del servicio en tiempo real. Un tracker sin counters configurados llega
con `counters: null`.

Se une con el activo por `flespiId` = `mainTrackerId`. Contrato:
`TrackerLiveStatus` de `@atlas/shared/tracker-live`.




## OpenAPI

````yaml /openapi.json get /api/trackers/live-status
openapi: 3.0.0
info:
  title: UGPS Atlas API
  version: 1.0.0
  description: >-
    Documentación de la API REST principal de UGPS Atlas (plataforma de rastreo
    GPS)
servers:
  - url: https://api.ugps.io
    description: Servidor de producción
security:
  - bearerAuth: []
  - cookieAuth: []
tags:
  - name: Auth - Autenticación
    description: Operaciones de autenticación
  - name: Usuarios - Usuarios
    description: Operaciones relacionadas con usuarios
  - name: Usuarios - Roles
    description: Operaciones relacionadas con roles
  - name: Usuarios - Permisos
    description: Operaciones relacionadas con permisos
  - name: Activos - Assets
    description: Operaciones relacionadas con activos
  - name: Activos - Tipos
    description: Operaciones relacionadas con tipos de activos
  - name: Activos - Grupos
    description: Operaciones relacionadas con grupos de activos
  - name: Activos - Campos personalizados
    description: >-
      Campos propios que cada empresa define para sus activos (nombre interno,
      tipo, reglas y opciones)
  - name: Activos - Grupos de campos
    description: Grupos que ordenan los campos personalizados de la empresa
  - name: Activos - Vehículos
    description: Operaciones relacionadas con tipos de vehículos
  - name: Activos - QR
    description: >-
      QR del activo (identidad escaneable del activo): resolver, stickers,
      reemplazo e historial
  - name: Tracking - Trackers
    description: Operaciones relacionadas con trackers
  - name: Tracking - Viajes
    description: Operaciones relacionadas con viajes y paradas
  - name: Tracking - Geocercas
    description: Operaciones relacionadas con geocercas
  - name: Alertas - Alertas
    description: Operaciones relacionadas con alertas
  - name: Alertas - Disparadores
    description: Operaciones relacionadas con disparadores de alertas
  - name: Alertas - Notificaciones
    description: Operaciones relacionadas con notificaciones
  - name: Clientes - Clientes
    description: Operaciones relacionadas con clientes
  - name: Clientes - Restricciones
    description: Operaciones relacionadas con restricciones
  - name: Integraciones - Flespi
    description: Operaciones relacionadas con Flespi
  - name: Otros - Conductores
    description: Operaciones relacionadas con conductores
  - name: Formularios dinámicos
    description: Plantillas de formulario propias de Atlas, asignables a activos
  - name: Inspecciones
    description: >-
      Inspecciones de activos enviadas desde la app al escanear el QR, con
      resultado apta / no apta
  - name: Otros - Capas
    description: Operaciones relacionadas con capas
  - name: User Tracker Access
    description: Operaciones de acceso personalizado a trackers por usuario
  - name: Reportes - Historial de Posiciones
    description: Estadísticas y detalle de posiciones GPS por activo
  - name: Reportes - Excesos de Velocidad
    description: Reportes de excesos de velocidad por tracker
  - name: Reportes - Ralentí
    description: Reportes de ralentí (motor encendido sin movimiento) por tracker
  - name: Reportes - Horas de Trabajo
    description: >-
      Reportes de horas de trabajo (conducción + paradas dentro de horario
      laboral) por tracker
  - name: Reportes - Última Actividad
    description: Reporte de estado de comunicación y última posición de activos
  - name: Reportes - Reportes Programados
    description: Gestión de reportes programados (CRUD)
  - name: Device Health
    description: Operaciones de salud de dispositivos del cliente
  - name: Activity Log
    description: Registro de actividad del cliente
  - name: Work - Importaciones
    description: Operaciones de importación de datos
  - name: Work - Plantillas
    description: Operaciones de plantillas de importación
  - name: Cargo - Transportistas
    description: Gestión de transportistas
  - name: Cargo - Pedidos
    description: Gestión de pedidos de carga
  - name: Cargo - Monitoreo
    description: Monitoreo en vivo de carga y transporte
  - name: Integraciones - Navixy
    description: Integración con plataforma Navixy
  - name: Mantenimiento - Dashboard
    description: Dashboard y métricas generales de mantenimiento
  - name: Mantenimiento - Proveedores
    description: Gestión de proveedores de servicio
  - name: Mantenimiento - Tareas
    description: Catálogo de tareas con que se arman las pautas de mantención
  - name: Mantenimiento - Pautas
    description: Pautas de mantención, con sus tareas del catálogo y su familia de activos
  - name: Mantenimiento - Estado
    description: Estado de mantenimiento de activos
  - name: Mantenimiento - Perfiles
    description: Perfiles de mantenimiento por activo
  - name: Mantenimiento - Fallas
    description: Gestión de fallas activas
  - name: Mantenimiento - DVIR
    description: Driver Vehicle Inspection Reports
  - name: Mantenimiento - Defectos
    description: Gestión de defectos detectados
  - name: Mantenimiento - Programaciones
    description: Programación de mantenimientos preventivos
  - name: Mantenimiento - Próximos
    description: Ítems de mantenimiento próximos
  - name: Mantenimiento - Órdenes de Trabajo
    description: Gestión de órdenes de trabajo
  - name: Mantenimiento - Registros de Servicio
    description: Registros históricos de servicios realizados
  - name: Mantenimiento - Problemas
    description: Gestión de problemas de mantenimiento
  - name: Mantenimiento - Tareas de Servicio
    description: Tareas específicas dentro de órdenes de trabajo
  - name: Mantenimiento - Inventario
    description: Gestión de partes, ubicaciones y stock
  - name: Mantenimiento - Costos
    description: Gestión y agregación de costos de mantenimiento
  - name: Trabajo - Tareas
    description: Gestión de tareas, tareas recurrentes, rutas y operaciones en lote
  - name: Trabajo - Empleados
    description: Gestión de empleados, departamentos y sus catálogos (tags, trackers)
  - name: Otros - Lugares
    description: Gestión de lugares (places) del cliente
  - name: Cargo - Activos
    description: Disponibilidad de activos de carga
  - name: Cargo - Ubicaciones
    description: Gestión de ubicaciones de carga
  - name: Cargo - Rendimiento
    description: Métricas de rendimiento de pedidos de carga
  - name: Reportes - Check-ins
    description: Reporte de check-ins de tareas
  - name: Reportes - Utilización
    description: Reporte de utilización de activos
  - name: Reportes - Visitas por Geocercas
    description: Reporte de visitas a geocercas
  - name: Reportes - Visitas por Trackers
    description: Reporte de visitas por tracker/activo
  - name: Reportes - Progreso de Geozonas
    description: Reporte de progreso de cobertura de geozonas (agricultura)
  - name: Reportes - Temperatura
    description: Reporte de temperatura por activo
  - name: Reportes - Exportación
    description: Exportación de reportes a archivo
  - name: Público - Business Time
    description: Reloj de servidor (endpoint público, sin autenticación)
  - name: Formularios
    description: Definiciones y envíos de formularios de la app
  - name: Sistema
    description: Endpoints de salud del servicio (liveness/readiness), sin autenticación
  - name: Facturación
    description: >-
      Portal del cliente — facturas publicadas de la empresa (proyección de
      Raúl)
  - name: Tienda de módulos
    description: >-
      Catálogo de módulos y productos UGPS con el estado de cada uno para el
      usuario
  - name: Soporte
    description: Portal del cliente — tickets de soporte de la empresa (proyección de Raúl)
  - name: Asistente
    description: Historial de conversaciones del Asistente de Atlas (spec
paths:
  /api/trackers/live-status:
    get:
      tags:
        - Tracking - Trackers
      summary: Estado en vivo de los trackers
      description: >
        Una fila por tracker del alcance del usuario (su empresa y, si lo tiene,
        su acceso a

        vehículos), con la posición, el estado de conexión y el movimiento que
        mantiene el servicio

        en tiempo real, la misma fuente que el mapa. El estado de conexión se
        resuelve al leer, con la hora

        actual, a partir del último contacto y el último fix recibido: puede
        adelantarse hasta 3

        minutos al que muestra el mapa. El movement status es el que calcula el
        servicio en tiempo

        real con el perfil de detección del tracker: en el perfil de ignición,
        con la ignición

        apagada queda estacionado aunque tenga velocidad.


        Sin estado en vivo para un tracker (todavía no hay datos o el estado en
        tiempo real no

        responde) la fila llega con `live: null`; la respuesta sigue siendo 200.


        `counters` trae el odómetro y las horas de motor de cada tracker, leídos
        de la base con el

        mismo cálculo que `GET /api/trackers/{flespiId}/odometer` (el valor que
        muestra la ficha

        del activo), no del servicio en tiempo real. Un tracker sin counters
        configurados llega

        con `counters: null`.


        Se une con el activo por `flespiId` = `mainTrackerId`. Contrato:

        `TrackerLiveStatus` de `@atlas/shared/tracker-live`.
      responses:
        '200':
          description: Estado en vivo de los trackers del alcance
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: array
                    items:
                      type: object
                      required:
                        - flespiId
                        - live
                        - counters
                      properties:
                        flespiId:
                          type: string
                          example: '6512345'
                        live:
                          nullable: true
                          allOf:
                            - type: object
                              required:
                                - connectionStatus
                                - lastContactAt
                                - lastFixReceivedAt
                                - position
                                - positionAt
                                - movementStatus
                                - stationarySince
                                - speedKmh
                                - ignitionOn
                              properties:
                                connectionStatus:
                                  type: string
                                  enum:
                                    - just_registered
                                    - offline
                                    - idle
                                    - active
                                  description: >
                                    `active` en línea; `idle` GPS no actualizado
                                    (contacto en los últimos 10 minutos y

                                    último fix de hace más de 5); `offline`
                                    fuera de línea (sin contacto hace más de 10

                                    minutos); `just_registered` recién
                                    registrado (nunca reportó).
                                lastContactAt:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Último contacto (recepción del último
                                    mensaje), epoch en segundos.
                                  example: 1763128800
                                lastFixReceivedAt:
                                  type: number
                                  nullable: true
                                  description: Último fix recibido, epoch en segundos.
                                  example: 1763128800
                                position:
                                  type: object
                                  nullable: true
                                  description: >-
                                    Última posición aceptada; `null` si el
                                    tracker nunca informó una válida.
                                  required:
                                    - latitude
                                    - longitude
                                  properties:
                                    latitude:
                                      type: number
                                      example: -33.4489
                                    longitude:
                                      type: number
                                      example: -70.6693
                                positionAt:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Hora de la última posición aceptada, epoch
                                    en segundos.
                                  example: 1763128795
                                movementStatus:
                                  type: string
                                  enum:
                                    - moving
                                    - stopped
                                    - parked
                                  description: >
                                    `moving` en movimiento; `stopped` detenido
                                    (quieto con la ignición encendida hace

                                    menos de 5 minutos); `parked` estacionado
                                    (quieto con la ignición apagada o

                                    desconocida, o quieto hace 5 minutos o más).
                                stationarySince:
                                  type: number
                                  nullable: true
                                  description: >
                                    Quieto desde (el último movimiento visto),
                                    epoch en segundos; `null` en movimiento o

                                    si no se conoce.
                                  example: 1763125200
                                speedKmh:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Velocidad de la última posición en km/h;
                                    `null` si el tracker nunca reportó.
                                  example: 0
                                ignitionOn:
                                  type: boolean
                                  nullable: true
                                  description: >-
                                    Ignición encendida; `null` si el dispositivo
                                    no la informa.
                                  example: false
                        counters:
                          nullable: true
                          allOf:
                            - type: object
                              required:
                                - odometer
                                - engineHours
                              properties:
                                odometer:
                                  nullable: true
                                  description: >-
                                    Odómetro del tracker; `null` si no tiene
                                    odómetro configurado.
                                  allOf:
                                    - type: object
                                      required:
                                        - km
                                        - source
                                        - stale
                                      properties:
                                        km:
                                          type: number
                                          nullable: true
                                          description: >
                                            Odómetro visible en km; `null` si la
                                            fuente es el dispositivo y todavía no
                                            llegó

                                            ninguna lectura.
                                          example: 118000
                                        source:
                                          type: string
                                          enum:
                                            - device
                                            - calculated
                                          description: >
                                            `device` lo informa el dispositivo;
                                            `calculated` lo calcula Atlas desde el
                                            último

                                            ajuste.
                                        stale:
                                          type: boolean
                                          description: >
                                            La lectura del dispositivo tiene más de
                                            48 horas o nunca llegó: el valor puede
                                            estar

                                            congelado. Siempre `false` con la fuente
                                            calculada.
                                engineHours:
                                  nullable: true
                                  description: >-
                                    Horas de motor del tracker; `null` si no las
                                    tiene configuradas.
                                  allOf:
                                    - type: object
                                      required:
                                        - hours
                                        - source
                                        - stale
                                      properties:
                                        hours:
                                          type: number
                                          nullable: true
                                          description: >
                                            Horas de motor visibles; `null` si la
                                            fuente es el dispositivo y todavía no
                                            llegó

                                            ninguna lectura.
                                          example: 5321.5
                                        source:
                                          type: string
                                          enum:
                                            - device
                                            - calculated
                                          description: >
                                            `device` lo informa el dispositivo;
                                            `calculated` lo calcula Atlas desde el
                                            último

                                            ajuste.
                                        stale:
                                          type: boolean
                                          description: >
                                            La lectura del dispositivo tiene más de
                                            48 horas o nunca llegó: el valor puede
                                            estar

                                            congelado. Siempre `false` con la fuente
                                            calculada.
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Token inválido o expirado
        '403':
          description: Sin permisos
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: No tiene permisos para realizar esta acción
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      message:
                        type: string
                        example: Error interno del servidor
                  - type: object
                    properties:
                      status:
                        type: string
                        example: failed
                      message:
                        type: string
                        example: Error interno del servidor
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Token de sesión Better Auth o API token (`atk_...`) en el header
        `Authorization: Bearer <token>`. Los JWT legacy ya no son válidos.
    cookieAuth:
      type: apiKey
      in: cookie
      name: better-auth.session_token
      description: >-
        Cookie de sesión Better Auth emitida al iniciar sesión en el frontend
        web. En producción el nombre lleva prefijo `__Secure-`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.