> ## 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.

# Actualizar una alerta por ID

> Actualiza una alerta existente. El payload se valida según el tipo de trigger (alertTriggerId en el body o el de la alerta actual).
Mismas reglas que creación: speed_limit requiere speedLimit; geofence requiere geofences y geofenceActivationType; ignition y lost_connection solo base.
Si se modifican speedLimit, geofences o minDuration, el sistema actualiza el calculator en Flespi.




## OpenAPI

````yaml /openapi.json put /api/alerts/{id}
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 - Vehículos
    description: Operaciones relacionadas con tipos de vehículos
  - 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 - Restricciones
    description: Operaciones relacionadas con restricciones
  - name: Integraciones - Flespi
    description: Operaciones relacionadas con Flespi
  - name: Integraciones - Vehículo
    description: Información de vehículo por patente (endpoint genérico)
  - name: Otros - Conductores
    description: Operaciones relacionadas con conductores
  - 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 - 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: Mantenimiento - Importación de Facturas
    description: Importación de facturas con extracción por IA
  - 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
paths:
  /api/alerts/{id}:
    put:
      tags:
        - Alertas - Alertas
      summary: Actualizar una alerta por ID
      description: >
        Actualiza una alerta existente. El payload se valida según el tipo de
        trigger (alertTriggerId en el body o el de la alerta actual).

        Mismas reglas que creación: speed_limit requiere speedLimit; geofence
        requiere geofences y geofenceActivationType; ignition y lost_connection
        solo base.

        Si se modifican speedLimit, geofences o minDuration, el sistema
        actualiza el calculator en Flespi.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: ID del recurso
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - allOf:
                    - type: object
                      description: >-
                        Campos comunes a todos los tipos de alerta. El payload
                        de creación/edición depende del alertTriggerId.
                      properties:
                        alertTriggerId:
                          type: string
                          description: >-
                            ID del disparador de alerta (determina el tipo y los
                            campos requeridos)
                        name:
                          type: string
                          description: Nombre de la alerta
                        assets:
                          type: array
                          items:
                            type: string
                          description: IDs de activos asociados
                        users:
                          type: array
                          items:
                            type: string
                          description: >-
                            IDs de usuarios. Si typeNotification.app o
                            typeNotification.browser son true, es obligatorio y
                            debe tener al menos un elemento.
                        emails:
                          type: array
                          items:
                            type: string
                            format: email
                          description: >-
                            Emails para notificaciones. Si
                            typeNotification.email es true, es obligatorio y
                            debe tener al menos un elemento.
                        phones:
                          type: array
                          items:
                            type: string
                          description: >-
                            Teléfonos para notificaciones (whatsapp). Si
                            typeNotification.whatsapp es true, es obligatorio y
                            debe tener al menos un elemento.
                        typeNotification:
                          type: object
                          description: >
                            Canales de notificación. Si un canal está en true,
                            el array asociado no puede estar vacío:

                            - email true requiere al menos un email en `emails`

                            - whatsapp true requiere al menos un teléfono en
                            `phones`

                            - app o browser true requieren al menos un usuario
                            en `users`
                          properties:
                            email:
                              type: boolean
                            whatsapp:
                              type: boolean
                            app:
                              type: boolean
                            browser:
                              type: boolean
                          required:
                            - email
                            - whatsapp
                            - app
                            - browser
                        state:
                          type: boolean
                          description: Estado de la alerta (true activa, false inactiva)
                        description:
                          type: string
                          description: Descripción opcional
                      required:
                        - alertTriggerId
                        - name
                        - assets
                        - users
                    - type: object
                      properties:
                        speedLimit:
                          type: number
                          description: >-
                            Límite de velocidad en km/h. Obligatorio para tipo
                            exceso de velocidad. Crea calculator en Flespi
                            automáticamente.
                        minDuration:
                          type: number
                          description: >-
                            Duración mínima en segundos. Por defecto 30 para
                            exceso de velocidad.
                      required:
                        - speedLimit
                - allOf:
                    - type: object
                      description: >-
                        Campos comunes a todos los tipos de alerta. El payload
                        de creación/edición depende del alertTriggerId.
                      properties:
                        alertTriggerId:
                          type: string
                          description: >-
                            ID del disparador de alerta (determina el tipo y los
                            campos requeridos)
                        name:
                          type: string
                          description: Nombre de la alerta
                        assets:
                          type: array
                          items:
                            type: string
                          description: IDs de activos asociados
                        users:
                          type: array
                          items:
                            type: string
                          description: >-
                            IDs de usuarios. Si typeNotification.app o
                            typeNotification.browser son true, es obligatorio y
                            debe tener al menos un elemento.
                        emails:
                          type: array
                          items:
                            type: string
                            format: email
                          description: >-
                            Emails para notificaciones. Si
                            typeNotification.email es true, es obligatorio y
                            debe tener al menos un elemento.
                        phones:
                          type: array
                          items:
                            type: string
                          description: >-
                            Teléfonos para notificaciones (whatsapp). Si
                            typeNotification.whatsapp es true, es obligatorio y
                            debe tener al menos un elemento.
                        typeNotification:
                          type: object
                          description: >
                            Canales de notificación. Si un canal está en true,
                            el array asociado no puede estar vacío:

                            - email true requiere al menos un email en `emails`

                            - whatsapp true requiere al menos un teléfono en
                            `phones`

                            - app o browser true requieren al menos un usuario
                            en `users`
                          properties:
                            email:
                              type: boolean
                            whatsapp:
                              type: boolean
                            app:
                              type: boolean
                            browser:
                              type: boolean
                          required:
                            - email
                            - whatsapp
                            - app
                            - browser
                        state:
                          type: boolean
                          description: Estado de la alerta (true activa, false inactiva)
                        description:
                          type: string
                          description: Descripción opcional
                      required:
                        - alertTriggerId
                        - name
                        - assets
                        - users
                    - type: object
                      properties:
                        geofences:
                          type: array
                          items:
                            type: string
                          minItems: 1
                          description: >-
                            IDs de las geocercas (ObjectId). Obligatorio para
                            tipo geocerca (al menos una).
                        geofenceActivationType:
                          type: string
                          enum:
                            - entrance
                            - exit
                            - both
                          description: >-
                            Cuándo disparar la alerta: entrance (entrada), exit
                            (salida) o both (ambas). Obligatorio para tipo
                            geocerca.
                      required:
                        - geofences
                        - geofenceActivationType
                - allOf:
                    - type: object
                      description: >-
                        Campos comunes a todos los tipos de alerta. El payload
                        de creación/edición depende del alertTriggerId.
                      properties:
                        alertTriggerId:
                          type: string
                          description: >-
                            ID del disparador de alerta (determina el tipo y los
                            campos requeridos)
                        name:
                          type: string
                          description: Nombre de la alerta
                        assets:
                          type: array
                          items:
                            type: string
                          description: IDs de activos asociados
                        users:
                          type: array
                          items:
                            type: string
                          description: >-
                            IDs de usuarios. Si typeNotification.app o
                            typeNotification.browser son true, es obligatorio y
                            debe tener al menos un elemento.
                        emails:
                          type: array
                          items:
                            type: string
                            format: email
                          description: >-
                            Emails para notificaciones. Si
                            typeNotification.email es true, es obligatorio y
                            debe tener al menos un elemento.
                        phones:
                          type: array
                          items:
                            type: string
                          description: >-
                            Teléfonos para notificaciones (whatsapp). Si
                            typeNotification.whatsapp es true, es obligatorio y
                            debe tener al menos un elemento.
                        typeNotification:
                          type: object
                          description: >
                            Canales de notificación. Si un canal está en true,
                            el array asociado no puede estar vacío:

                            - email true requiere al menos un email en `emails`

                            - whatsapp true requiere al menos un teléfono en
                            `phones`

                            - app o browser true requieren al menos un usuario
                            en `users`
                          properties:
                            email:
                              type: boolean
                            whatsapp:
                              type: boolean
                            app:
                              type: boolean
                            browser:
                              type: boolean
                          required:
                            - email
                            - whatsapp
                            - app
                            - browser
                        state:
                          type: boolean
                          description: Estado de la alerta (true activa, false inactiva)
                        description:
                          type: string
                          description: Descripción opcional
                      required:
                        - alertTriggerId
                        - name
                        - assets
                        - users
                  description: >-
                    Alerta de encendido/apagado. Solo campos base; no requiere
                    campos adicionales.
                - allOf:
                    - type: object
                      description: >-
                        Campos comunes a todos los tipos de alerta. El payload
                        de creación/edición depende del alertTriggerId.
                      properties:
                        alertTriggerId:
                          type: string
                          description: >-
                            ID del disparador de alerta (determina el tipo y los
                            campos requeridos)
                        name:
                          type: string
                          description: Nombre de la alerta
                        assets:
                          type: array
                          items:
                            type: string
                          description: IDs de activos asociados
                        users:
                          type: array
                          items:
                            type: string
                          description: >-
                            IDs de usuarios. Si typeNotification.app o
                            typeNotification.browser son true, es obligatorio y
                            debe tener al menos un elemento.
                        emails:
                          type: array
                          items:
                            type: string
                            format: email
                          description: >-
                            Emails para notificaciones. Si
                            typeNotification.email es true, es obligatorio y
                            debe tener al menos un elemento.
                        phones:
                          type: array
                          items:
                            type: string
                          description: >-
                            Teléfonos para notificaciones (whatsapp). Si
                            typeNotification.whatsapp es true, es obligatorio y
                            debe tener al menos un elemento.
                        typeNotification:
                          type: object
                          description: >
                            Canales de notificación. Si un canal está en true,
                            el array asociado no puede estar vacío:

                            - email true requiere al menos un email en `emails`

                            - whatsapp true requiere al menos un teléfono en
                            `phones`

                            - app o browser true requieren al menos un usuario
                            en `users`
                          properties:
                            email:
                              type: boolean
                            whatsapp:
                              type: boolean
                            app:
                              type: boolean
                            browser:
                              type: boolean
                          required:
                            - email
                            - whatsapp
                            - app
                            - browser
                        state:
                          type: boolean
                          description: Estado de la alerta (true activa, false inactiva)
                        description:
                          type: string
                          description: Descripción opcional
                      required:
                        - alertTriggerId
                        - name
                        - assets
                        - users
                  description: >-
                    Alerta de pérdida de conexión. Solo campos base; no requiere
                    campos adicionales.
              description: >-
                Payload de creación/edición de alerta según tipo (discriminado
                por alertTriggerId). La validación exige los campos del tipo
                correspondiente.
      responses:
        '200':
          description: Alerta actualizada exitosamente
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    description: >-
                      Alerta completa (respuesta del servidor). Incluye todos
                      los campos posibles según el tipo.
                    properties:
                      alertTriggerId:
                        type: string
                      name:
                        type: string
                      assets:
                        type: array
                        items:
                          type: string
                      users:
                        type: array
                        items:
                          type: string
                      emails:
                        type: array
                        items:
                          type: string
                          format: email
                      phones:
                        type: array
                        items:
                          type: string
                      clientId:
                        type: string
                      typeNotification:
                        type: object
                        properties:
                          email:
                            type: boolean
                          whatsapp:
                            type: boolean
                          app:
                            type: boolean
                          browser:
                            type: boolean
                        required:
                          - email
                          - whatsapp
                          - app
                          - browser
                      state:
                        type: boolean
                      description:
                        type: string
                      speedLimit:
                        type: number
                        description: km/h. Solo para tipo exceso de velocidad.
                      minDuration:
                        type: number
                        description: Segundos. Solo para tipo exceso de velocidad.
                      geofences:
                        type: array
                        items:
                          type: string
                        description: Solo para tipo geocerca.
                      geofenceActivationType:
                        type: string
                        enum:
                          - entrance
                          - exit
                          - both
                        description: 'Solo para tipo geocerca: entrance, exit o both.'
                      calculatorId:
                        type: number
                        description: Se asigna automáticamente por el sistema.
                      createdAt:
                        type: string
                        format: date-time
                      updatedAt:
                        type: string
                        format: date-time
                    required:
                      - alertTriggerId
                      - name
                      - assets
                      - users
                      - clientId
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      error:
                        type: string
                        example: El email es requerido
                  - type: object
                    properties:
                      status:
                        type: string
                        example: failed
                      message:
                        type: string
                        example: Error de validación
                      errors:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                            message:
                              type: string
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Token inválido o expirado
        '404':
          description: Recurso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Recurso no encontrado
        '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-`.

````