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

# Listar últimas sincronizaciones

> Lista las sincronizaciones que se pidieron para los clientes de tu empresa, ya sea desde la plataforma o con el endpoint de ejecutar sincronización. Por cada una indica quién la pidió, cuándo, y si los datos del cliente ya se actualizaron (`isUpdated`).

Por defecto devuelve las sincronizaciones desde un día antes de la hora actual hasta un día después. Para consultar otro rango envía `startDate` y `endDate` juntos, con `startDate` no posterior a `endDate`; si envías solo uno, la solicitud responde `400`.

Solo aparecen sincronizaciones de clientes de tu cartera que estén activos. Los registros vienen ordenados desde la más reciente y la respuesta no está paginada.

Para saber si una sincronización terminó, revisa `isUpdated`. Para el SII es `true` cuando las facturas de venta y las cesiones del cliente se actualizaron después de la solicitud (las facturas de compra y el IVA no se consideran). Para la TGR, compara `lastScrapedAt` con `date` en lugar de usar `isUpdated`.

Una lista vacía significa que no hay sincronizaciones en el rango. Si Pruff no logra leer el historial de sincronizaciones, responde `503` en vez de una lista vacía: reintenta más tarde.



## OpenAPI

````yaml openapi/clients.yaml GET /syncronizations
openapi: 3.1.0
info:
  title: API de clientes de Pruff
  version: '1'
  description: >-
    Endpoints que tus sistemas llaman para leer y operar los datos de tu empresa
    en Pruff. Todas las solicitudes van por HTTPS y se autentican con el header
    `x-api-key`. Las convenciones de formato, paginación y errores se describen
    en https://docs.pruff.com/api/introduccion.
servers:
  - url: https://api.pruff.com/api/clients
security:
  - ApiKeyAuth: []
tags:
  - name: Facturas
    description: Consulta de facturas electrónicas, facturas transables y cesiones.
  - name: Documentos
    description: Consulta y creación de documentos asociados a tus clientes.
  - name: Archivos
    description: Carga de archivos a operaciones y a los requerimientos de tus documentos.
  - name: Financiamiento
    description: >-
      Simula créditos, crea solicitudes de factoring y consulta las prórrogas de
      tu empresa.
  - name: Comité
    description: >-
      Consulta las aprobaciones de una solicitud en los comités de riesgo y de
      operaciones, y registra nuevas firmas.
  - name: Chat
    description: Exporta y envía mensajes del chat de una solicitud.
  - name: Reportes
    description: >-
      Reportes de operaciones, cartera, recaudaciones, cuentas pendientes y
      flujos de tu empresa.
  - name: Datahub
    description: >-
      Consulta de la información tributaria, financiera y de riesgo que Pruff
      tiene de tus clientes y deudores.
  - name: Mercado Público
    description: >-
      Licitaciones y órdenes de compra de Mercado Público (ChileCompra) cargadas
      en Pruff.
  - name: CRM
    description: >-
      Datos comerciales de tu CRM en Pruff: empresas con su ficha, pipeline,
      prospectos, gestiones y simulaciones.
  - name: SGR
    description: Operaciones SGR (garantías) de tu empresa.
  - name: Sincronizador
    description: >-
      Pide sincronizar a un cliente con el SII o la TGR para obtener su
      información más actualizada, y consulta el estado de esas
      sincronizaciones.
  - name: Usuarios
    description: >-
      Administra los usuarios de tu empresa en Pruff (crear, editar, eliminar,
      consultar su perfil y asignar subordinados) y consulta las cuentas
      (empresas conectadas) a las que cada usuario tiene acceso.
  - name: Contactos
    description: Crea contactos asociados a las empresas de tu cartera.
paths:
  /syncronizations:
    get:
      tags:
        - Sincronizador
      summary: Listar últimas sincronizaciones
      description: >-
        Lista las sincronizaciones que se pidieron para los clientes de tu
        empresa, ya sea desde la plataforma o con el endpoint de ejecutar
        sincronización. Por cada una indica quién la pidió, cuándo, y si los
        datos del cliente ya se actualizaron (`isUpdated`).


        Por defecto devuelve las sincronizaciones desde un día antes de la hora
        actual hasta un día después. Para consultar otro rango envía `startDate`
        y `endDate` juntos, con `startDate` no posterior a `endDate`; si envías
        solo uno, la solicitud responde `400`.


        Solo aparecen sincronizaciones de clientes de tu cartera que estén
        activos. Los registros vienen ordenados desde la más reciente y la
        respuesta no está paginada.


        Para saber si una sincronización terminó, revisa `isUpdated`. Para el
        SII es `true` cuando las facturas de venta y las cesiones del cliente se
        actualizaron después de la solicitud (las facturas de compra y el IVA no
        se consideran). Para la TGR, compara `lastScrapedAt` con `date` en lugar
        de usar `isUpdated`.


        Una lista vacía significa que no hay sincronizaciones en el rango. Si
        Pruff no logra leer el historial de sincronizaciones, responde `503` en
        vez de una lista vacía: reintenta más tarde.
      operationId: listSyncronizations
      parameters:
        - name: startDate
          in: query
          required: false
          description: >-
            Inicio del rango, en UTC y en formato ISO 8601: `YYYY-MM-DD` o
            `YYYY-MM-DDTHH:mm:ssZ` (por ejemplo `2026-01-16` o
            `2026-01-16T00:00:00Z`). Otros formatos, como `January 16, 2026` o
            una marca de tiempo en milisegundos, responden `400`. Debes enviarlo
            junto con `endDate` y no puede ser posterior a él.
          schema:
            type: string
            format: date-time
          example: '2026-01-16T00:00:00Z'
        - name: endDate
          in: query
          required: false
          description: >-
            Fin del rango, en UTC y en formato ISO 8601: `YYYY-MM-DD` o
            `YYYY-MM-DDTHH:mm:ssZ` (por ejemplo `2026-01-17` o
            `2026-01-17T00:00:00Z`). Debes enviarlo junto con `startDate`.
          schema:
            type: string
            format: date-time
          example: '2026-01-17T00:00:00Z'
      responses:
        '200':
          description: Sincronizaciones del rango, de la más reciente a la más antigua.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SyncronizationListResponse'
              example:
                syncronizations:
                  - scrapingId: Documentos SII
                    businessIdentifier: 11111111-1
                    date: '2026-01-19T13:09:36.340Z'
                    userName: Ana Pérez
                    businessName: Cliente Ejemplo SpA
                    isUpdated: true
                    lastScrapedAt: '2026-01-19T13:09:37.489Z'
        '400':
          description: >-
            Los parámetros de fecha no son válidos. Es el formato estándar de
            validación; `data.errors` lista cada problema con su `path`.
            Responde `400` si envías solo uno de `startDate` y `endDate`, si
            alguno no tiene el formato ISO 8601 pedido, o si `startDate` es
            posterior a `endDate`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              examples:
                soloUnExtremo:
                  summary: Enviaste solo startDate o solo endDate
                  value:
                    message: custom
                    displayMessage: Debes enviar startDate y endDate juntos.
                    data:
                      errors:
                        - path: (root)
                          message: Debes enviar startDate y endDate juntos.
                          code: custom
                formatoInvalido:
                  summary: Fecha con un formato que no es ISO 8601
                  value:
                    message: custom
                    displayMessage: startDate debe ser una fecha ISO 8601 válida.
                    data:
                      errors:
                        - path: startDate
                          message: startDate debe ser una fecha ISO 8601 válida.
                          code: custom
                rangoInvertido:
                  summary: startDate es posterior a endDate
                  value:
                    message: custom
                    displayMessage: startDate no puede ser posterior a endDate.
                    data:
                      errors:
                        - path: (root)
                          message: startDate no puede ser posterior a endDate.
                          code: custom
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          description: >-
            Pruff no pudo leer el historial de sincronizaciones. Es una falla
            temporal, no significa que no haya sincronizaciones. Reintenta más
            tarde. El campo `message` siempre es `Internal server error`; el
            detalle viene en `displayMessage`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Internal server error
                displayMessage: No se pudieron obtener las sincronizaciones
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    SyncronizationListResponse:
      type: object
      required:
        - syncronizations
      properties:
        syncronizations:
          type: array
          description: Sincronizaciones del rango, de la más reciente a la más antigua.
          items:
            $ref: '#/components/schemas/SyncronizationItem'
    ValidationError:
      type: object
      required:
        - message
        - displayMessage
        - data
      description: Error de validación del body, de los query params o de los path params.
      properties:
        message:
          type: string
          description: >-
            Código del primer error de validación (por ejemplo `custom`,
            `invalid_type`, `invalid_format`, `invalid_value`, `invalid_union`).
        displayMessage:
          type: string
          description: >-
            Mensaje del primer error de validación, pensado para mostrarlo a una
            persona. Normalmente en español; algunos mensajes de validación
            vienen en inglés.
        data:
          type: object
          required:
            - errors
          properties:
            errors:
              type: array
              description: Todos los errores de validación encontrados.
              items:
                type: object
                required:
                  - path
                  - message
                  - code
                properties:
                  path:
                    type: string
                    description: >-
                      Campo con el error. Para listas incluye la posición, por
                      ejemplo `types.0`. `(root)` si el error es del body
                      completo.
                  message:
                    type: string
                    description: Descripción del error en español.
                  code:
                    type: string
                    description: Código del tipo de error.
    Error:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: >-
            Identifica el error. En algunos casos es un texto en inglés con
            valores variables. Para tu lógica, usa el código HTTP y, cuando
            exista, `data.code`.
        displayMessage:
          type: string
          description: >-
            Mensaje pensado para mostrarlo a una persona. Normalmente en
            español; algunos mensajes de validación vienen en inglés.
        data:
          description: Detalle adicional del error, cuando existe.
    SyncronizationItem:
      type: object
      required:
        - scrapingId
        - businessIdentifier
        - date
        - userName
        - businessName
        - isUpdated
      properties:
        scrapingId:
          type: string
          enum:
            - Documentos SII
            - TGR
          description: >-
            Tipo de sincronización pedida (`sii` se muestra como `Documentos
            SII` y `tgr` como `TGR`).
          example: Documentos SII
        businessIdentifier:
          type: string
          description: RUT del cliente sincronizado.
          example: 11111111-1
        date:
          type: string
          format: date-time
          description: Fecha y hora (ISO 8601, UTC) en que se pidió la sincronización.
          example: '2026-01-19T13:09:36.340Z'
        userName:
          type:
            - string
            - 'null'
          description: >-
            Nombre de quien pidió la sincronización. Es `Bot` si no hubo un
            usuario asociado; `null` si el usuario no tiene nombre.
          example: Ana Pérez
        businessName:
          type: string
          description: Nombre del cliente.
          example: Cliente Ejemplo SpA
        isUpdated:
          type: boolean
          description: >-
            `true` si los datos del cliente ya se actualizaron. En `sii` es
            `true` cuando las facturas de venta y las cesiones se actualizaron
            después de la solicitud (las facturas de compra y el IVA no se
            consideran). En `tgr`, para saber si tu solicitud terminó compara
            `lastScrapedAt` con `date` en lugar de usar este campo. Es `false`
            si aún no terminó o si no hay registro de actualización.
          example: true
        lastScrapedAt:
          type: string
          format: date-time
          description: >-
            Fecha y hora (ISO 8601, UTC) de la actualización más antigua entre
            los datos relevantes del cliente. No viene en la respuesta si el
            cliente no tiene registro de actualización.
          example: '2026-01-19T13:09:37.489Z'
  responses:
    Unauthorized:
      description: >-
        Falta el header `x-api-key`, su valor no es válido o la cuenta de API de
        tu empresa no está habilitada.
      content:
        application/json:
          schema:
            type: object
            required:
              - message
            properties:
              message:
                type: string
          example:
            message: 'Unauthorized: Invalid API Key'
    TooManyRequests:
      description: >-
        Tu empresa superó el límite de solicitudes. Todas las API keys de tu
        empresa comparten el mismo límite. Espera los segundos que indica el
        header `Retry-After` (o `data.retryAfterSeconds`) antes de reintentar.
      headers:
        Retry-After:
          description: Segundos que debes esperar antes de reintentar.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: >-
              Rate limit exceeded: 501 requests in the current 60s window, limit
              is 500. Retry in 12s.
            displayMessage: >-
              Superaste el límite de 500 solicitudes cada 60 segundos. Vuelve a
              intentarlo en 12 segundos.
            data:
              code: RATE_LIMIT_EXCEEDED
              scope: All API keys of your company share this budget.
              limit: 500
              used: 501
              windowSeconds: 60
              retryAfterSeconds: 12
              resetAt: '2026-11-04T15:00:12.000Z'
              hint: >-
                Wait until resetAt (or honor the Retry-After header) before
                retrying. Avoid repeating identical requests: reuse responses
                you already fetched, use filters and larger pageSize values
                instead of one request per item, and cap your client
                concurrency.
    InternalError:
      description: >-
        Error inesperado en Pruff. El texto de `message` puede variar (por
        ejemplo en mayúsculas); no dependas de él.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Internal server error
    Timeout:
      description: >-
        La solicitud superó el tiempo máximo de 55 segundos. La operación puede
        haberse completado igual: antes de reintentar una solicitud que crea o
        modifica datos, verifica su estado.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: request_timeout
            displayMessage: La solicitud excedió el tiempo máximo permitido
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key que Pruff entrega a tu empresa.

````

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