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

# Obtener flujos

> Devuelve los totales diarios de los flujos (libro de ingresos) en un rango de fechas: colocación, cartera, recaudación, ingresos por tipo y costos. Retorna una entrada por cada día del rango, sin el detalle por documento. El servicio no está paginado.

**Rango.** `startDate` y `endDate` son obligatorios, el rango máximo es de 92 días contando ambos extremos (cubre cualquier trimestre calendario completo) y `endDate` debe ser igual o posterior a `startDate`. Cualquier parámetro que no esté documentado aquí responde un error 400.

**Criterio contable.** Flujos es un reflejo de la contabilidad: cada monto se informa en la fecha en que se reconoce contablemente, que no necesariamente coincide con la fecha operativa del ingreso, costo o colocación correspondiente.

**Reversos.** Según la configuración de tu empresa, los reversos de movimientos que afectan a Flujos (por ejemplo, una conciliación reversada) se registran como montos negativos en la fecha del reverso, y el movimiento original se mantiene en su propia fecha. Por eso un día con un reverso grande puede traer saldos negativos en `totalConciliated`, en los ingresos y costos asociados, y en `totalIncome` y `accumulatedIncome`. Si el reverso ocurre el mismo día de la conciliación, no aparece ni el movimiento ni el reverso.

**Días sin movimientos.** Los días sin ingresos, costos ni documentos en cartera vienen con todos los montos en 0, salvo `accumulatedIncome`, que mantiene el acumulado del día anterior. Un día con documentos en cartera pero sin otros movimientos sigue informando los saldos de cartera (`totalWallet`, `totalRealWallet` y sus montos netos).

**Montos.** Los montos se suman sin convertir moneda: los documentos en USD o UF se suman con su monto nominal en esa moneda junto a los de CLP. No están redondeados; pueden traer decimales.

**Límite de consultas.** Este endpoint admite 1 consulta cada 10 minutos por empresa: todas las API keys de tu empresa comparten ese cupo. La ventana empieza con la primera consulta aceptada y, mientras no termine, el servicio responde un error 429 con los segundos de espera en `data.retryAfterSeconds` y en el header `Retry-After`. Las consultas con parámetros inválidos responden un error 400 y no consumen el cupo. Si la consulta falla con un error 500 o 504, el cupo se devuelve y puedes reintentar de inmediato. Cualquier otro error de la consulta, como un 502, sí consume el cupo: espera a que termine la ventana antes de reintentar.



## OpenAPI

````yaml openapi/clients.yaml GET /reporting/cashFlows
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:
  /reporting/cashFlows:
    get:
      tags:
        - Reportes
      summary: Obtener flujos
      description: >-
        Devuelve los totales diarios de los flujos (libro de ingresos) en un
        rango de fechas: colocación, cartera, recaudación, ingresos por tipo y
        costos. Retorna una entrada por cada día del rango, sin el detalle por
        documento. El servicio no está paginado.


        **Rango.** `startDate` y `endDate` son obligatorios, el rango máximo es
        de 92 días contando ambos extremos (cubre cualquier trimestre calendario
        completo) y `endDate` debe ser igual o posterior a `startDate`.
        Cualquier parámetro que no esté documentado aquí responde un error 400.


        **Criterio contable.** Flujos es un reflejo de la contabilidad: cada
        monto se informa en la fecha en que se reconoce contablemente, que no
        necesariamente coincide con la fecha operativa del ingreso, costo o
        colocación correspondiente.


        **Reversos.** Según la configuración de tu empresa, los reversos de
        movimientos que afectan a Flujos (por ejemplo, una conciliación
        reversada) se registran como montos negativos en la fecha del reverso, y
        el movimiento original se mantiene en su propia fecha. Por eso un día
        con un reverso grande puede traer saldos negativos en
        `totalConciliated`, en los ingresos y costos asociados, y en
        `totalIncome` y `accumulatedIncome`. Si el reverso ocurre el mismo día
        de la conciliación, no aparece ni el movimiento ni el reverso.


        **Días sin movimientos.** Los días sin ingresos, costos ni documentos en
        cartera vienen con todos los montos en 0, salvo `accumulatedIncome`, que
        mantiene el acumulado del día anterior. Un día con documentos en cartera
        pero sin otros movimientos sigue informando los saldos de cartera
        (`totalWallet`, `totalRealWallet` y sus montos netos).


        **Montos.** Los montos se suman sin convertir moneda: los documentos en
        USD o UF se suman con su monto nominal en esa moneda junto a los de CLP.
        No están redondeados; pueden traer decimales.


        **Límite de consultas.** Este endpoint admite 1 consulta cada 10 minutos
        por empresa: todas las API keys de tu empresa comparten ese cupo. La
        ventana empieza con la primera consulta aceptada y, mientras no termine,
        el servicio responde un error 429 con los segundos de espera en
        `data.retryAfterSeconds` y en el header `Retry-After`. Las consultas con
        parámetros inválidos responden un error 400 y no consumen el cupo. Si la
        consulta falla con un error 500 o 504, el cupo se devuelve y puedes
        reintentar de inmediato. Cualquier otro error de la consulta, como un
        502, sí consume el cupo: espera a que termine la ventana antes de
        reintentar.
      operationId: getCashFlows
      parameters:
        - name: startDate
          in: query
          required: true
          description: Fecha de inicio del rango (YYYY-MM-DD). Incluye el día completo.
          schema:
            type: string
            format: date
          example: '2026-07-01'
        - name: endDate
          in: query
          required: true
          description: >-
            Fecha de fin del rango (YYYY-MM-DD). Incluye el día completo. Debe
            ser igual o posterior a `startDate`, y el rango no puede superar 92
            días.
          schema:
            type: string
            format: date
          example: '2026-09-30'
      responses:
        '200':
          description: Totales diarios del rango, en orden ascendente por fecha.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportCashFlowsResponse'
              example:
                data:
                  - date: '2026-07-01'
                    totalPlaced: 25000000
                    totalPlacedNet: 21008403
                    totalWallet: 480000000
                    totalWalletNet: 403361345
                    totalRealWallet: 452300000
                    totalRealWalletNet: 380084034
                    totalConciliated: 18500000
                    totalPriceIncome: 182340
                    totalArrearIncome: 12500
                    totalComissionIncome: 45000
                    totalExpensesIncome: 15000
                    totalDocumentExtensionPriceIncome: 0
                    totalDocumentExtensionCommissionIncome: 0
                    totalDocumentOtherIncome: 0
                    totalIncome: 254840
                    accumulatedIncome: 254840
                    totalDocumentResellExpense: 61200
                    totalDiscountExpense: 0
                    totalWriteOffExpense: 0
                  - date: '2026-07-02'
                    totalPlaced: 0
                    totalPlacedNet: 0
                    totalWallet: 461500000
                    totalWalletNet: 387815126
                    totalRealWallet: 440100000
                    totalRealWalletNet: 369831933
                    totalConciliated: 12200000
                    totalPriceIncome: 185110
                    totalArrearIncome: 9800
                    totalComissionIncome: 0
                    totalExpensesIncome: 0
                    totalDocumentExtensionPriceIncome: 12000
                    totalDocumentExtensionCommissionIncome: 5000
                    totalDocumentOtherIncome: 0
                    totalIncome: 211910
                    accumulatedIncome: 466750
                    totalDocumentResellExpense: 60950
                    totalDiscountExpense: 15000
                    totalWriteOffExpense: 0
        '400':
          description: Algún parámetro es inválido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              examples:
                required:
                  summary: Fechas obligatorias
                  value:
                    message: invalid_type
                    displayMessage: >-
                      startDate and endDate are required, formatted as
                      YYYY-MM-DD
                    data:
                      errors:
                        - path: startDate
                          message: >-
                            startDate and endDate are required, formatted as
                            YYYY-MM-DD
                          code: invalid_type
                invalidDate:
                  summary: Fecha inválida
                  value:
                    message: custom
                    displayMessage: Date must be a valid calendar date formatted as YYYY-MM-DD
                    data:
                      errors:
                        - path: startDate
                          message: >-
                            Date must be a valid calendar date formatted as
                            YYYY-MM-DD
                          code: custom
                rangeInvalid:
                  summary: Rango invertido
                  value:
                    message: custom
                    displayMessage: startDate must be before or equal to endDate
                    data:
                      errors:
                        - path: endDate
                          message: startDate must be before or equal to endDate
                          code: custom
                rangeTooLong:
                  summary: Rango mayor a 92 días
                  value:
                    message: custom
                    displayMessage: The date range cannot exceed 92 days
                    data:
                      errors:
                        - path: endDate
                          message: The date range cannot exceed 92 days
                          code: custom
                unrecognizedKeys:
                  summary: Parámetro no permitido
                  value:
                    message: unrecognized_keys
                    displayMessage: 'Unrecognized key: "folio"'
                    data:
                      errors:
                        - path: (root)
                          message: 'Unrecognized key: "folio"'
                          code: unrecognized_keys
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          description: Superaste el límite de 1 consulta cada 10 minutos por empresa.
          headers:
            Retry-After:
              description: Segundos que debes esperar antes de volver a consultar.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                  - displayMessage
                  - data
                properties:
                  message:
                    type: string
                    description: Código del error.
                  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:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Siempre `RATE_LIMIT_EXCEEDED`.
                      scope:
                        type: string
                        description: A quién aplica el cupo.
                      limit:
                        type: integer
                        description: Consultas permitidas por ventana.
                      used:
                        type: integer
                        description: Consultas hechas en la ventana actual.
                      windowSeconds:
                        type: integer
                        description: Duración de la ventana, en segundos.
                      retryAfterSeconds:
                        type: integer
                        description: Segundos que faltan para que termine la ventana.
                      resetAt:
                        type:
                          - string
                          - 'null'
                        format: date-time
                        description: Momento en que termina la ventana.
                      hint:
                        type: string
                        description: Recomendación para evitar el límite.
              example:
                message: >-
                  Rate limit exceeded: 2 requests in the current 600s window,
                  limit is 1. Retry in 412s.
                displayMessage: >-
                  Superaste el límite de 1 solicitudes cada 600 segundos. Vuelve
                  a intentarlo en 412 segundos.
                data:
                  code: RATE_LIMIT_EXCEEDED
                  scope: All API keys of your company share this budget.
                  limit: 1
                  used: 2
                  windowSeconds: 600
                  retryAfterSeconds: 412
                  resetAt: '2026-10-22T15:40: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.
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    ReportCashFlowsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ReportCashFlowDay'
          description: Una entrada por cada día del rango, en orden ascendente.
      required:
        - data
    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.
    ReportCashFlowDay:
      type: object
      description: >-
        Totales de un día. Los montos se suman sin convertir moneda (ver la
        descripción del endpoint) y no están redondeados; pueden traer
        decimales.
      properties:
        date:
          type: string
          description: Día al que corresponden los totales (YYYY-MM-DD).
          format: date
          example: '2026-07-01'
        totalPlaced:
          type: number
          description: Monto de los documentos cuya operación se cursó ese día (colocado).
          example: 25000000
        totalPlacedNet:
          type: number
          description: '`totalPlaced` en monto neto.'
          example: 21008403
        totalWallet:
          type: number
          description: Monto nominal de todos los documentos en cartera ese día.
          example: 480000000
        totalWalletNet:
          type: number
          description: '`totalWallet` en monto neto.'
          example: 403361345
        totalRealWallet:
          type: number
          description: >-
            Saldo en cartera ese día: el monto de cada documento menos lo ya
            recaudado a esa fecha.
          example: 452300000
        totalRealWalletNet:
          type: number
          description: '`totalRealWallet` en monto neto.'
          example: 380084034
        totalConciliated:
          type: number
          description: Monto recaudado ese día.
          example: 18500000
        totalPriceIncome:
          type: number
          description: Ingreso por devengo de interés.
          example: 182340
        totalArrearIncome:
          type: number
          description: Ingreso por mora.
          example: 12500
        totalComissionIncome:
          type: number
          description: Ingreso por comisión.
          example: 45000
        totalExpensesIncome:
          type: number
          description: Ingreso por gastos.
          example: 15000
        totalDocumentExtensionPriceIncome:
          type: number
          description: Ingreso por precio de prórrogas.
          example: 0
        totalDocumentExtensionCommissionIncome:
          type: number
          description: Ingreso por comisión de prórrogas.
          example: 0
        totalDocumentOtherIncome:
          type: number
          description: Otros ingresos.
          example: 0
        totalIncome:
          type: number
          description: >-
            Ingreso total del día: suma de los ingresos por devengo, mora,
            comisión, gastos, prórrogas y otros.
          example: 254840
        accumulatedIncome:
          type: number
          description: Ingreso total acumulado desde `startDate` hasta ese día.
          example: 254840
        totalDocumentResellExpense:
          type: number
          description: Costo de fondo.
          example: 61200
        totalDiscountExpense:
          type: number
          description: Costo por condonación.
          example: 0
        totalWriteOffExpense:
          type: number
          description: Costo por castigo.
          example: 0
      required:
        - date
        - totalPlaced
        - totalPlacedNet
        - totalWallet
        - totalWalletNet
        - totalRealWallet
        - totalRealWalletNet
        - totalConciliated
        - totalPriceIncome
        - totalArrearIncome
        - totalComissionIncome
        - totalExpensesIncome
        - totalDocumentExtensionPriceIncome
        - totalDocumentExtensionCommissionIncome
        - totalDocumentOtherIncome
        - totalIncome
        - accumulatedIncome
        - totalDocumentResellExpense
        - totalDiscountExpense
        - totalWriteOffExpense
    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.
  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'
    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.