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

# Solicitar consultas de Datahub

> Pide consultas de Datahub sobre un cliente y sus deudores. Es asíncrono: esta solicitud responde de inmediato con un `requestId`, y el resultado se lee después con `GET /datahub/response/{id}`.

Envía al menos `client` o `payers`, cada uno con su lista de consultas (`clientRequests` y `payersRequests`). Los RUT deben ser válidos, sin puntos y con guion, y puedes enviar hasta 100 deudores por solicitud. Esta referencia documenta la consulta `ndf` (nómina de difícil fiscalización del SII); la guía https://docs.pruff.com/api/datahub/consultar-ndf muestra el flujo completo. Si envías un valor de consulta que Pruff no reconoce, no se crea ninguna consulta para él.

La solicitud es válida aunque no pidas ninguna consulta conocida (por ejemplo, si omites las listas de consultas). En ese caso recibes un `requestId`, pero al leerlo con `GET /datahub/response/{id}` obtienes `404` con `No consults found`. Ese mismo `404` puede llegar justo después de crear una solicitud válida, antes de que Pruff registre sus consultas: vuelve a consultar en unos segundos.



## OpenAPI

````yaml openapi/clients.yaml POST /datahub/request
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:
  /datahub/request:
    post:
      tags:
        - Datahub
      summary: Solicitar consultas de Datahub
      description: >-
        Pide consultas de Datahub sobre un cliente y sus deudores. Es asíncrono:
        esta solicitud responde de inmediato con un `requestId`, y el resultado
        se lee después con `GET /datahub/response/{id}`.


        Envía al menos `client` o `payers`, cada uno con su lista de consultas
        (`clientRequests` y `payersRequests`). Los RUT deben ser válidos, sin
        puntos y con guion, y puedes enviar hasta 100 deudores por solicitud.
        Esta referencia documenta la consulta `ndf` (nómina de difícil
        fiscalización del SII); la guía
        https://docs.pruff.com/api/datahub/consultar-ndf muestra el flujo
        completo. Si envías un valor de consulta que Pruff no reconoce, no se
        crea ninguna consulta para él.


        La solicitud es válida aunque no pidas ninguna consulta conocida (por
        ejemplo, si omites las listas de consultas). En ese caso recibes un
        `requestId`, pero al leerlo con `GET /datahub/response/{id}` obtienes
        `404` con `No consults found`. Ese mismo `404` puede llegar justo
        después de crear una solicitud válida, antes de que Pruff registre sus
        consultas: vuelve a consultar en unos segundos.
      operationId: requestDatahubConsults
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatahubConsultsRequestBody'
            examples:
              clientAndPayers:
                summary: Un cliente y un deudor
                value:
                  client: 11111111-1
                  payers:
                    - 22222222-2
                  clientRequests:
                    - ndf
                  payersRequests:
                    - ndf
              onlyPayers:
                summary: Solo deudores
                value:
                  payers:
                    - 22222222-2
                    - 33333333-3
                  payersRequests:
                    - ndf
      responses:
        '200':
          description: Solicitud recibida. Usa el `requestId` para leer el resultado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatahubConsultsRequested'
              example:
                requestId: 3f1c2b7e-9a4d-4c1e-8b55-2d7f6a0e9c11
        '400':
          description: El body no es válido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalidInput:
                  summary: >-
                    RUT inválido, sin `client` ni `payers`, o listas de
                    consultas vacías
                  value:
                    message: Invalid input
                tooManyPayers:
                  summary: Más de 100 deudores
                  value:
                    message: Too many payers
                malformedJson:
                  summary: El body no es un JSON válido
                  value:
                    message: entity.parse.failed
                    displayMessage: No se pudieron leer los datos enviados
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          description: El body supera los 500 KB.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: entity.too.large
                displayMessage: Los datos enviados superan el límite de 500 KB
        '429':
          description: >-
            Superaste el límite de solicitudes. Este endpoint y los cuatro
            endpoints de Mercado Público comparten un máximo de **300
            solicitudes por hora por empresa** (todas las API keys de tu empresa
            suman en el mismo contador). Además, todos los endpoints de la API
            de clientes comparten un máximo de **500 solicitudes por minuto por
            empresa**. El body y el header `Retry-After` indican cuándo puedes
            reintentar.
          headers:
            Retry-After:
              description: Segundos que debes esperar antes de reintentar.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatahubRateLimitError'
              example:
                message: >-
                  Rate limit exceeded: 301 requests in the current 3600s window,
                  limit is 300. Retry in 1200s.
                displayMessage: >-
                  Superaste el límite de 300 solicitudes cada 3600 segundos.
                  Vuelve a intentarlo en 1200 segundos.
                data:
                  code: RATE_LIMIT_EXCEEDED
                  scope: All API keys of your company share this budget.
                  limit: 300
                  used: 301
                  windowSeconds: 3600
                  retryAfterSeconds: 1200
                  resetAt: '2026-03-10T16:00:00.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:
    DatahubConsultsRequestBody:
      type: object
      description: >-
        Envía al menos `client` o `payers`. Cada grupo lleva su propia lista de
        consultas.
      properties:
        client:
          type: string
          pattern: ^\d{1,8}-[kK\d]$
          example: 11111111-1
          description: >-
            RUT del cliente, sin puntos y con guion. Debe tener un dígito
            verificador válido.
        payers:
          type: array
          maxItems: 100
          description: >-
            RUT de los deudores, sin puntos y con guion, cada uno con un dígito
            verificador válido. Máximo 100.
          items:
            type: string
            pattern: ^\d{1,8}-[kK\d]$
          example:
            - 22222222-2
        clientRequests:
          type: array
          description: >-
            Consultas que quieres para el cliente. Para la NDF, `["ndf"]`. No
            puede ser una lista vacía si es lo único que pides (sin `payers`),
            ni vacía a la vez que `payersRequests`.
          items:
            type: string
          example:
            - ndf
        payersRequests:
          type: array
          description: >-
            Consultas que quieres para los deudores. Para la NDF, `["ndf"]`. No
            puede ser una lista vacía si es lo único que pides (sin `client`),
            ni vacía a la vez que `clientRequests`.
          items:
            type: string
          example:
            - ndf
    DatahubConsultsRequested:
      type: object
      required:
        - requestId
      properties:
        requestId:
          type: string
          format: uuid
          description: >-
            Identificador de la solicitud. Úsalo en `GET
            /datahub/response/{id}`.
    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.
    DatahubRateLimitError:
      type: object
      required:
        - message
        - displayMessage
        - data
      description: Respuesta cuando superas el límite de solicitudes.
      properties:
        message:
          type: string
          description: Detalle del límite superado, en inglés.
        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
              enum:
                - RATE_LIMIT_EXCEEDED
              description: Código estable del error.
            scope:
              type: string
              description: A quién aplica el límite.
            limit:
              type: integer
              description: Máximo de solicitudes permitidas en la ventana.
            used:
              type: integer
              description: Solicitudes contadas en la ventana actual.
            windowSeconds:
              type: integer
              description: Duración de la ventana, en segundos.
            retryAfterSeconds:
              type: integer
              description: Segundos que debes esperar antes de reintentar.
            resetAt:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                Instante (ISO 8601, UTC) en que se reinicia el contador. Puede
                ser `null`.
            hint:
              type: string
              description: Recomendación para evitar el límite.
  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.