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

# Get timeline of activities and visits for a client

> Get timeline of activities and visits for a client



## OpenAPI

````yaml /generated/specs/operations.json get /api/v1/activity/by-client/{clientId}
openapi: 3.0.0
info:
  title: Raul API - Operaciones
  description: Suscripciones, GPS, actividades, visitas y operacion tecnica.
  version: 2.0.0
  contact: {}
servers:
  - url: https://api.raul.ugps.io
    description: Production
security: []
tags: []
paths:
  /api/v1/activity/by-client/{clientId}:
    get:
      tags:
        - Activities
      summary: Get timeline of activities and visits for a client
      description: Get timeline of activities and visits for a client
      operationId: ActivityTimelineController_getByClient
      parameters:
        - name: clientId
          required: true
          in: path
          description: Client UUID
          schema:
            type: string
        - name: activity_type_id
          required: false
          in: query
          description: Filter by activity type
          schema:
            type: number
        - name: contact_id
          required: false
          in: query
          description: Filter by contact
          schema:
            type: string
        - name: date_from
          required: false
          in: query
          description: Filter from date (ISO)
          schema:
            type: string
            example: '2026-01-01'
        - name: date_to
          required: false
          in: query
          description: Filter to date (ISO)
          schema:
            example: '2026-12-31'
            type: string
        - name: include_emails
          required: false
          in: query
          description: 'Include emails in timeline (default: true)'
          schema:
            default: true
            type: boolean
        - name: group_threads
          required: false
          in: query
          description: 'Group emails by thread_id into conversations (default: true)'
          schema:
            default: true
            type: boolean
        - name: whatsapp_gap_hours
          required: false
          in: query
          description: >-
            WhatsApp: split huge conversations into sessions when inactivity gap
            >= N hours (0 = no split). Recommended: 24.
          schema:
            default: 0
            type: number
      responses:
        '200':
          description: Timeline items (activities + visits) sorted by date DESC
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TimelineItemDto'
      security:
        - bearerAuth: []
components:
  schemas:
    TimelineItemDto:
      type: object
      properties:
        item_type:
          type: string
          description: >-
            Tipo de item: activity, visit, task, ticket_comment (comentario de
            un ticket vinculado al negocio) o fiscal_event (evento fiscal de la
            factura)
          enum:
            - activity
            - visit
            - task
            - ticket_comment
            - fiscal_event
        date:
          format: date-time
          type: string
          description: Fecha del evento (para ordenamiento)
        client_id:
          type: object
          description: ID del cliente
          nullable: true
        activity_id:
          type: string
          description: ID de la actividad (si item_type = activity)
        contact_id:
          type: object
          description: ID del contacto asociado
        opportunity_id:
          type: object
          description: ID de la oportunidad asociada
        occurred_at:
          type: object
          description: Fecha/hora efectiva de la actividad
        website_form_submission_id:
          type: object
          description: ID del formulario web asociado
        activity_type_id:
          type: number
          description: ID del tipo de actividad
        activity_type_name:
          type: string
          description: Nombre del tipo de actividad
        content:
          type: string
          description: Contenido de la actividad o tarea
        files_count:
          type: number
          description: Cantidad de archivos adjuntos
        contact_name:
          type: object
          description: Nombre del contacto
        participants:
          type: array
          description: Contactos participantes de la actividad
        created_by:
          type: object
          description: ID del usuario autor de la actividad
          nullable: true
        created_by_name:
          type: object
          description: Nombre del creador
        edited_at:
          type: object
          description: Última edición del contenido por su autor
          nullable: true
        editable:
          type: boolean
          description: >-
            El usuario actual puede editar el contenido (autor de un registro
            manual)
        external_source:
          type: object
          description: Fuente externa (outlook, whatsapp, etc.)
        external_id:
          type: object
          description: ID externo en el sistema de origen
        websiteFormSubmission:
          type: object
          description: Datos estructurados del formulario web asociado
        emailMeta:
          type: object
          description: Metadatos de correo asociados a la actividad
        whatsappMeta:
          type: object
          description: Metadatos de WhatsApp asociados a la actividad
        visit_detail_id:
          type: string
          description: ID de la visita (si item_type = visit)
        visit_date:
          type: object
          description: Fecha de la visita
        description:
          type: object
          description: Descripción de la visita
        visit_type_name:
          type: object
          description: Tipo de visita
        visit_status_name:
          type: object
          description: Estado de la visita
        technician_name:
          type: object
          description: Nombre del técnico
        address:
          type: object
          description: Dirección de la visita
        task_id:
          type: string
          description: ID de la tarea
        task_status:
          type: string
          description: Estado de la tarea
        assigned_to_name:
          type: object
          description: Nombre del responsable asignado
        assigned_to_id:
          type: object
          description: ID del responsable asignado
        task_due_date:
          type: object
          description: Vencimiento de la tarea
        task_completed_at:
          type: object
          description: Cuándo se completó la tarea
        task_priority:
          type: object
          description: 'Prioridad de la tarea: low, medium o high'
        task_version:
          type: number
          description: Versión de la tarea para editarla
        ticket_comment_id:
          type: string
          description: ID del comentario (si item_type = ticket_comment)
        comment_visibility:
          type: string
          description: Nota interna o respuesta al cliente del ticket vinculado
          enum:
            - internal
            - external
        fiscal_event_id:
          type: string
          description: >-
            ID del evento de la factura, o `<documento>:intercambio` /
            `<documento>:aceptacion` si sale del documento tributario (si
            item_type = fiscal_event)
        fiscal_event_type:
          type: string
          description: >-
            Tipo del evento de la factura (dte_emitted, sii_accepted,
            payment_received, email_sent…) o dte_intercambio_sent /
            dte_acceptance
        fiscal_acceptance_status:
          type: string
          description: Aceptación comercial del receptor en dte_acceptance
          enum:
            - TACIT
            - EXPRESS
            - CLAIMED
          nullable: true
        fiscal_recipient:
          type: object
          description: Casilla de intercambio en dte_intercambio_sent
          nullable: true
        origin:
          description: >-
            Registro donde ocurrió (timeline del negocio): el negocio o un
            ticket vinculado
          allOf:
            - $ref: '#/components/schemas/CaseActivityOriginDto'
        isThread:
          type: boolean
          description: Indica si este item es un thread agrupado de emails
          default: false
        threadCount:
          type: number
          description: Cantidad de mensajes en el thread (cuando isThread = true)
        threadMessages:
          type: array
          description: >-
            Array de actividades que forman parte del thread (cuando isThread =
            true)
        threadType:
          type: string
          description: Tipo de hilo agrupado
          enum:
            - email
            - whatsapp
      required:
        - item_type
        - date
        - client_id
    CaseActivityOriginDto:
      type: object
      properties:
        kind:
          type: string
          enum:
            - ticket
            - visit
            - thread
            - opportunity
        id:
          type: string
          description: >-
            Identificador del registro; en una conversación, el id del hilo en
            la Bandeja
        label:
          type: string
          description: 'Etiqueta legible: «Visita del 3-oct», «WhatsApp», título'
        channel:
          type: string
          enum:
            - email
            - whatsapp
          description: Canal de la conversación (sólo kind = thread)
      required:
        - kind
        - id
        - label
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Token de sesión Better Auth para rutas de backoffice; las rutas de
        portal usan su token propio.

````

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