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

# Crear documentos

> Crea uno o más documentos (facturas electrónicas) asociados a un cliente y a un subproducto. La operación es idempotente: un documento que ya existe no se vuelve a crear y se devuelve en `documentsRepetead`. Un documento ya existe si coincide el RUT del emisor del documento (su `businessIdentifier`), el folio, el tipo de documento y el subproducto, o si coincide su `cufe` cuando lo envías.

Si el emisor, el deudor o el cliente de un documento aún no existen en Pruff, se crean automáticamente con los nombres que envías. Si Pruff ya conoce la fecha de recepción de la factura según el SII, esa fecha reemplaza la que envíes en `receiptDate`.

Los RUT (o Nit) se validan según la moneda de la solicitud: en `CLP`, `UF` y `UTM` se valida un RUT chileno (sin puntos, con guion y dígito verificador válido); en `COP`, un Nit colombiano (por ejemplo `900111222-1`). La moneda `PEN` aún no está disponible en este endpoint. Usa una de las monedas `CLP`, `UF`, `UTM` o `COP`.

El RUT del deudor no puede ser igual al del emisor del documento, salvo que el `subProductId` sea `promissory-note` (pagaré), donde pueden coincidir. Con cualquier otro subproducto, si alguno lo es, la solicitud completa se rechaza con 400 y `data.folios` lista los folios afectados.

Cuando el emisor factura en pesos colombianos (`currency: COP`), cada documento puede incluir el `cufe` emitido por la DIAN. Si lo envías, el documento se crea con `id` igual al `cufe`. Si ya existe un documento con ese `id`, no se vuelve a crear y se devuelve en `documentsRepetead`, incluso si el folio es distinto. El `cufe` solo se permite con `COP`, no puede ir vacío, admite hasta 191 caracteres y no puede repetirse dentro de la misma solicitud.

Pruff quita los espacios al inicio y al final de cada folio. Un folio vacío o formado solo por espacios se rechaza con 400. No repitas el mismo folio (con el mismo emisor y `type`) dentro de una misma solicitud: si lo haces, la solicitud completa se rechaza con 400 y `message` lista los folios repetidos.

Para las monedas disponibles en este endpoint, cada `amount` se redondea al entero más cercano. Si el monto redondeado es mayor que 9007199254740991, no se puede guardar y la solicitud completa se rechaza con 400.

La creación es atómica: si falla la creación de algún documento nuevo, no se crea ninguno y tampoco los emisores, deudores o clientes nuevos de esa solicitud. Si una solicitud responde 500, reenvíala completa: los documentos que ya existan vendrán en `documentsRepetead`.

Cada solicitud admite como máximo 250 documentos; si necesitas crear más, divídelos en varias solicitudes. El body no puede superar 500 KB.



## OpenAPI

````yaml openapi/clients.yaml POST /documents
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:
  /documents:
    post:
      tags:
        - Documentos
      summary: Crear documentos
      description: >-
        Crea uno o más documentos (facturas electrónicas) asociados a un cliente
        y a un subproducto. La operación es idempotente: un documento que ya
        existe no se vuelve a crear y se devuelve en `documentsRepetead`. Un
        documento ya existe si coincide el RUT del emisor del documento (su
        `businessIdentifier`), el folio, el tipo de documento y el subproducto,
        o si coincide su `cufe` cuando lo envías.


        Si el emisor, el deudor o el cliente de un documento aún no existen en
        Pruff, se crean automáticamente con los nombres que envías. Si Pruff ya
        conoce la fecha de recepción de la factura según el SII, esa fecha
        reemplaza la que envíes en `receiptDate`.


        Los RUT (o Nit) se validan según la moneda de la solicitud: en `CLP`,
        `UF` y `UTM` se valida un RUT chileno (sin puntos, con guion y dígito
        verificador válido); en `COP`, un Nit colombiano (por ejemplo
        `900111222-1`). La moneda `PEN` aún no está disponible en este endpoint.
        Usa una de las monedas `CLP`, `UF`, `UTM` o `COP`.


        El RUT del deudor no puede ser igual al del emisor del documento, salvo
        que el `subProductId` sea `promissory-note` (pagaré), donde pueden
        coincidir. Con cualquier otro subproducto, si alguno lo es, la solicitud
        completa se rechaza con 400 y `data.folios` lista los folios afectados.


        Cuando el emisor factura en pesos colombianos (`currency: COP`), cada
        documento puede incluir el `cufe` emitido por la DIAN. Si lo envías, el
        documento se crea con `id` igual al `cufe`. Si ya existe un documento
        con ese `id`, no se vuelve a crear y se devuelve en `documentsRepetead`,
        incluso si el folio es distinto. El `cufe` solo se permite con `COP`, no
        puede ir vacío, admite hasta 191 caracteres y no puede repetirse dentro
        de la misma solicitud.


        Pruff quita los espacios al inicio y al final de cada folio. Un folio
        vacío o formado solo por espacios se rechaza con 400. No repitas el
        mismo folio (con el mismo emisor y `type`) dentro de una misma
        solicitud: si lo haces, la solicitud completa se rechaza con 400 y
        `message` lista los folios repetidos.


        Para las monedas disponibles en este endpoint, cada `amount` se redondea
        al entero más cercano. Si el monto redondeado es mayor que
        9007199254740991, no se puede guardar y la solicitud completa se rechaza
        con 400.


        La creación es atómica: si falla la creación de algún documento nuevo,
        no se crea ninguno y tampoco los emisores, deudores o clientes nuevos de
        esa solicitud. Si una solicitud responde 500, reenvíala completa: los
        documentos que ya existan vendrán en `documentsRepetead`.


        Cada solicitud admite como máximo 250 documentos; si necesitas crear
        más, divídelos en varias solicitudes. El body no puede superar 500 KB.
      operationId: createDocuments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentCreateRequest'
            examples:
              clp:
                summary: Factura en CLP
                value:
                  businessIdentifier: 76000000-0
                  subProductId: electronic-invoice
                  currency: CLP
                  documents:
                    - folio: '1333'
                      type: electronic-invoice
                      businessIdentifier: 76000000-0
                      businessName: Cliente Ejemplo SpA
                      stakeholderIdentifier: 77777777-7
                      stakeholderName: Pagador Ejemplo SpA
                      clientName: Cliente Ejemplo SpA
                      issuedDate: '2025-07-09'
                      receiptDate: '2025-07-10'
                      amount: 4123123
              cop:
                summary: Factura en COP con cufe
                value:
                  businessIdentifier: 900111222-1
                  subProductId: electronic-invoice
                  currency: COP
                  documents:
                    - folio: '1333'
                      type: electronic-invoice
                      businessIdentifier: 900111222-1
                      businessName: Emisor Ejemplo SAS
                      stakeholderIdentifier: 800222333-2
                      stakeholderName: Pagador Ejemplo SAS
                      clientName: Emisor Ejemplo SAS
                      issuedDate: '2025-07-09'
                      amount: 4123123
                      cufe: >-
                        a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90
      responses:
        '200':
          description: >-
            Resultado de la creación. Los documentos nuevos están en
            `documentsCreated` y los que ya existían, en `documentsRepetead`. Si
            todos existían, `documentsCreated` es un arreglo vacío.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentCreateResponse'
              examples:
                created:
                  summary: Documento creado
                  value:
                    documentsRepetead: []
                    documentsCreated:
                      - id: c1d2e3f4-5678-4abc-8def-1234567890ab
                        folio: '1333'
                        type: electronic-invoice
                        subType: '33'
                        businessIdentifier: 76000000-0
                        stakeholderIdentifier: 77777777-7
                        clientIdentifier: 76000000-0
                        issuedDate: '2025-07-09T00:00:00.000Z'
                        receiptDate: '2025-07-10T00:00:00.000Z'
                        amount: 4123123
                        currency: CLP
                        paidAt: null
                repeated:
                  summary: Documento que ya existía
                  value:
                    documentsRepetead:
                      - id: c1d2e3f4-5678-4abc-8def-1234567890ab
                        folio: '1333'
                        type: electronic-invoice
                        subType: '33'
                        businessIdentifier: 76000000-0
                        businessName: Cliente Ejemplo SpA
                        stakeholderIdentifier: 77777777-7
                        stakeholderName: Pagador Ejemplo SpA
                        clientIdentifier: 76000000-0
                        clientName: Cliente Ejemplo SpA
                        issuedDate: '2025-07-09T00:00:00.000Z'
                        receiptDate: '2025-07-10T00:00:00.000Z'
                        amount: 4123123
                    documentsCreated: []
        '400':
          description: >-
            El body no cumple el formato esperado, trae más de 250 documentos,
            un identificador no es válido para la moneda, un folio está vacío o
            repetido, un monto es demasiado grande para guardarse, el deudor es
            igual al emisor (salvo con `promissory-note`) o el JSON no se puede
            leer. En los errores de validación, `displayMessage` describe el
            primer error y `data.errors` los lista todos. No se crea ningún
            documento.
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ValidationError'
                  - $ref: '#/components/schemas/Error'
              examples:
                missingFolio:
                  summary: Falta un campo requerido
                  value:
                    message: invalid_type
                    displayMessage: El folio es requerido
                    data:
                      errors:
                        - path: documents.0.folio
                          message: El folio es requerido
                          code: invalid_type
                blankFolio:
                  summary: Folio vacío o solo con espacios
                  value:
                    message: too_small
                    displayMessage: El folio es requerido
                    data:
                      errors:
                        - path: documents.0.folio
                          message: El folio es requerido
                          code: too_small
                emptyDocuments:
                  summary: Lista de documentos vacía
                  value:
                    message: too_small
                    displayMessage: Debe enviar al menos un documento
                    data:
                      errors:
                        - path: documents
                          message: Debe enviar al menos un documento
                          code: too_small
                tooManyDocuments:
                  summary: Más de 250 documentos en la solicitud
                  value:
                    message: too_big
                    displayMessage: Puedes enviar como máximo 250 documentos por solicitud
                    data:
                      errors:
                        - path: documents
                          message: >-
                            Puedes enviar como máximo 250 documentos por
                            solicitud
                          code: too_big
                invalidType:
                  summary: Tipo de documento no permitido
                  value:
                    message: invalid_value
                    displayMessage: >-
                      Invalid option: expected one of
                      "electronic-invoice"|"electronic-invoice-exempt"|"electronic-invoice-buyer"
                    data:
                      errors:
                        - path: documents.0.type
                          message: >-
                            Invalid option: expected one of
                            "electronic-invoice"|"electronic-invoice-exempt"|"electronic-invoice-buyer"
                          code: invalid_value
                invalidIdentifier:
                  summary: Identificador no válido para la moneda
                  value:
                    message: custom
                    displayMessage: >-
                      El identificador Rut 77777777-1 no es válido para la
                      moneda CLP.
                    data:
                      errors:
                        - path: documents.0.stakeholderIdentifier
                          message: >-
                            El identificador Rut 77777777-1 no es válido para la
                            moneda CLP.
                          code: custom
                cufeWithoutCop:
                  summary: cufe enviado con una moneda distinta de COP
                  value:
                    message: custom
                    displayMessage: El cufe solo está permitido para documentos en moneda COP.
                    data:
                      errors:
                        - path: documents.0.cufe
                          message: >-
                            El cufe solo está permitido para documentos en
                            moneda COP.
                          code: custom
                selfInvoice:
                  summary: >-
                    Deudor igual al emisor, con un subproducto distinto de
                    promissory-note
                  value:
                    message: STAKEHOLDER_EQUALS_BUSINESS
                    displayMessage: >-
                      El RUT del deudor no puede ser igual al del emisor del
                      documento.
                    data:
                      folios:
                        - '1333'
                repeatedFolios:
                  summary: Folios repetidos en la solicitud
                  value:
                    message: 'Repeated folios in request: 1333'
                    displayMessage: Hay folios repetidos en la solicitud.
                amountTooLarge:
                  summary: Monto que no se puede guardar
                  value:
                    message: Amount is not representable in CLP minor units
                    displayMessage: El monto no se puede guardar en la moneda indicada.
                unreadableJson:
                  summary: JSON mal formado
                  value:
                    message: entity.parse.failed
                    displayMessage: No se pudieron leer los datos enviados
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: El subproducto indicado en `subProductId` no existe.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Subproduct electronic-invoice not found
                displayMessage: El subproducto indicado no existe.
        '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':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    DocumentCreateRequest:
      type: object
      required:
        - documents
      properties:
        businessIdentifier:
          type: string
          description: >-
            RUT (o Nit) del cliente dueño de los documentos. Es opcional y Pruff
            no lo usa: la búsqueda de documentos que ya existen usa el
            `businessIdentifier` de cada documento. Si lo envías, se valida
            según la moneda y un valor inválido responde 400.
          example: 76000000-0
        subProductId:
          type: string
          minLength: 1
          default: electronic-invoice
          description: >-
            Identificador del subproducto de factoring al que se asocian los
            documentos. Si no existe en tu empresa, la solicitud responde 404.
            Algunos valores habituales son `electronic-invoice`,
            `check-invoice`, `buy-order`, `check`, `contract`,
            `pending-account`, `promissory-note` y `renegotiation`. Con
            `promissory-note` el RUT del deudor puede ser igual al del emisor;
            con cualquier otro subproducto se rechaza.
          example: electronic-invoice
        currency:
          type: string
          enum:
            - CLP
            - UF
            - UTM
            - COP
          default: CLP
          description: >-
            Moneda de los documentos. Define cómo se valida el identificador de
            emisor, deudor y cliente. `PEN` aún no está disponible en este
            endpoint.
          example: CLP
        documents:
          type: array
          minItems: 1
          maxItems: 250
          description: Documentos a crear. Debe haber al menos uno y como máximo 250.
          items:
            $ref: '#/components/schemas/DocumentCreateItem'
    DocumentCreateResponse:
      type: object
      required:
        - documentsRepetead
        - documentsCreated
      properties:
        documentsRepetead:
          type: array
          description: >-
            Documentos de la solicitud que ya existían y no se volvieron a
            crear. El nombre del campo se escribe así, con esa ortografía.
            Arreglo vacío si todos eran nuevos.
          items:
            $ref: '#/components/schemas/DocumentDuplicated'
        documentsCreated:
          type: array
          description: >-
            Documentos creados en esta solicitud. Arreglo vacío si todos ya
            existían.
          items:
            $ref: '#/components/schemas/DocumentCreated'
    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.
    DocumentCreateItem:
      type: object
      description: Documento a crear.
      required:
        - folio
        - type
        - businessIdentifier
        - businessName
        - stakeholderIdentifier
        - stakeholderName
        - clientName
        - issuedDate
        - amount
      properties:
        folio:
          type: string
          minLength: 1
          description: >-
            Folio del documento. Pruff quita los espacios al inicio y al final.
            No puede quedar vacío ni repetirse dentro de la solicitud con el
            mismo emisor y `type`.
          example: '1333'
        type:
          type: string
          enum:
            - electronic-invoice
            - electronic-invoice-exempt
            - electronic-invoice-buyer
          description: >-
            Tipo de documento. `electronic-invoice` es factura afecta (DTE 33),
            `electronic-invoice-exempt` es factura exenta (DTE 34) y
            `electronic-invoice-buyer` es factura de compra (DTE 46).
          example: electronic-invoice
        businessIdentifier:
          type: string
          description: RUT (o Nit, según la moneda) del emisor del documento.
          example: 76000000-0
        businessName:
          type: string
          minLength: 1
          description: Razón social del emisor.
          example: Cliente Ejemplo SpA
        stakeholderIdentifier:
          type: string
          description: >-
            RUT (o Nit) del deudor, el receptor del documento. No puede ser
            igual al del emisor, salvo que el `subProductId` de la solicitud sea
            `promissory-note`.
          example: 77777777-7
        stakeholderName:
          type: string
          minLength: 1
          description: Razón social del deudor.
          example: Pagador Ejemplo SpA
        clientIdentifier:
          type: string
          description: >-
            RUT (o Nit) del cliente dueño del documento. Si lo omites, se usa el
            `businessIdentifier` del documento.
          example: 76000000-0
        clientName:
          type: string
          minLength: 1
          description: Razón social del cliente.
          example: Cliente Ejemplo SpA
        issuedDate:
          type: string
          description: >-
            Fecha de emisión del documento, en formato ISO 8601 (por ejemplo
            `2025-07-09` o `2025-07-09T12:00:00Z`).
          example: '2025-07-09'
        receiptDate:
          type: string
          description: >-
            Fecha de recepción del documento, en formato ISO 8601. Si Pruff ya
            conoce la fecha de recepción de la factura según el SII, se usa esa.
          example: '2025-07-10'
        amount:
          type: number
          exclusiveMinimum: 0
          description: >-
            Monto total del documento, mayor a 0, en la unidad principal de la
            moneda. Pruff lo redondea al entero más cercano. Si el monto
            redondeado es mayor que 9007199254740991, la solicitud responde 400.
          example: 4123123
        cufe:
          type: string
          minLength: 1
          maxLength: 191
          description: >-
            Código Único de Facturación Electrónica (Colombia). Solo se acepta
            cuando `currency` es `COP`. Si lo envías, se usa como `id` del
            documento.
          example: >-
            a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90
    DocumentDuplicated:
      type: object
      description: >-
        Documento de la solicitud que ya existía y por eso no se volvió a crear.
        Repite los datos que enviaste, con los RUT normalizados, y agrega el
        `id` del documento existente.
      required:
        - id
        - folio
        - type
        - businessIdentifier
        - stakeholderIdentifier
        - issuedDate
        - amount
      properties:
        id:
          type: string
          description: Identificador del documento que ya existía.
          example: c1d2e3f4-5678-4abc-8def-1234567890ab
        folio:
          type: string
          description: Folio enviado, sin espacios al inicio ni al final.
          example: '1333'
        type:
          type: string
          enum:
            - electronic-invoice
            - electronic-invoice-exempt
            - electronic-invoice-buyer
          description: >-
            Tipo de documento enviado. A diferencia de `documentsCreated`, no es
            el subproducto.
          example: electronic-invoice
        subType:
          type:
            - string
            - 'null'
          description: Código del tipo de documento tributario resuelto a partir de `type`.
          example: '33'
        businessIdentifier:
          type: string
          description: RUT del emisor enviado.
          example: 76000000-0
        businessName:
          type: string
          description: Razón social del emisor enviada.
          example: Cliente Ejemplo SpA
        stakeholderIdentifier:
          type: string
          description: RUT del deudor enviado.
          example: 77777777-7
        stakeholderName:
          type: string
          description: Razón social del deudor enviada.
          example: Pagador Ejemplo SpA
        clientIdentifier:
          type: string
          description: RUT del cliente. Si no lo enviaste, es el RUT del emisor.
          example: 76000000-0
        clientName:
          type: string
          description: Razón social del cliente enviada.
          example: Cliente Ejemplo SpA
        issuedDate:
          type: string
          format: date-time
          description: Fecha de emisión enviada, en formato ISO 8601 (UTC).
          example: '2025-07-09T00:00:00.000Z'
        receiptDate:
          type: string
          format: date-time
          description: Fecha de recepción enviada. Se omite si no la enviaste.
          example: '2025-07-10T00:00:00.000Z'
        amount:
          type: number
          description: Monto enviado, sin redondear.
          example: 4123123
        cufe:
          type: string
          description: Valor de `cufe` enviado. Se omite si no lo enviaste.
          example: >-
            a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90
    DocumentCreated:
      type: object
      description: >-
        Documento recién creado. Puede incluir campos adicionales con valores
        por defecto; usa solo los que se documentan aquí.
      required:
        - id
        - folio
        - type
        - subType
        - businessIdentifier
        - stakeholderIdentifier
        - clientIdentifier
        - issuedDate
        - receiptDate
        - amount
        - currency
        - paidAt
      properties:
        id:
          type: string
          description: >-
            Identificador único del documento. Es un UUID generado por Pruff, o
            el `cufe` si lo enviaste.
          example: c1d2e3f4-5678-4abc-8def-1234567890ab
        folio:
          type: string
          description: Folio del documento, sin espacios al inicio ni al final.
          example: '1333'
        type:
          type: string
          description: >-
            Identificador del subproducto de factoring al que se asoció el
            documento. Es el mismo valor que `type` en **Obtener documentos**.
          example: electronic-invoice
        subType:
          type:
            - string
            - 'null'
          description: Código del tipo de documento tributario (`33`, `34` o `46`).
          example: '33'
        businessIdentifier:
          type: string
          description: RUT del emisor del documento.
          example: 76000000-0
        stakeholderIdentifier:
          type: string
          description: RUT del deudor.
          example: 77777777-7
        clientIdentifier:
          type:
            - string
            - 'null'
          description: RUT del cliente dueño del documento.
          example: 76000000-0
        issuedDate:
          type: string
          format: date-time
          description: Fecha de emisión, en formato ISO 8601 (UTC).
          example: '2025-07-09T00:00:00.000Z'
        receiptDate:
          type:
            - string
            - 'null'
          format: date-time
          description: Fecha de recepción. Es null si no se informó y Pruff no la conoce.
          example: '2025-07-10T00:00:00.000Z'
        amount:
          type: integer
          description: Monto total del documento, redondeado al entero más cercano.
          example: 4123123
        currency:
          type: string
          description: Moneda del documento.
          example: CLP
        paidAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Fecha en que el documento se registró como pagado. Es null en un
            documento recién creado.
          example: null
  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.