> ## 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 aprobaciones faltantes

> Obtiene los roles que el comité exige para aprobar la solicitud, con la cantidad de firmas que necesita cada rol, las firmas ya registradas y si el usuario indicado en `email` todavía puede firmar con cada rol.

Si no envías `comiteeType`, se usa el comité de riesgo (`RISK`). La solicitud debe tener un comité asignado para el comité consultado. `PaymentRequestPassive` solo tiene comité de riesgo y `ResellNominee` solo tiene comité de operaciones. `CreditLineRequest` y `FactoringResell` se firman solo en el comité de riesgo; los demás tipos tienen ambos.

`isFullyApproved` es `true` cuando cada rol reunió las firmas que exige. `isRejected` es `true` apenas existe una firma de rechazo en cualquier rol.

Para `FactoringRequest`, `requestId` es el id de la solicitud de factoring (el mismo `factoringRequestId` que recibes al crearla).



## OpenAPI

````yaml openapi/clients.yaml GET /approvals/missing/{requestType}/{requestId}
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:
  /approvals/missing/{requestType}/{requestId}:
    get:
      tags:
        - Comité
      summary: Obtener aprobaciones faltantes
      description: >-
        Obtiene los roles que el comité exige para aprobar la solicitud, con la
        cantidad de firmas que necesita cada rol, las firmas ya registradas y si
        el usuario indicado en `email` todavía puede firmar con cada rol.


        Si no envías `comiteeType`, se usa el comité de riesgo (`RISK`). La
        solicitud debe tener un comité asignado para el comité consultado.
        `PaymentRequestPassive` solo tiene comité de riesgo y `ResellNominee`
        solo tiene comité de operaciones. `CreditLineRequest` y
        `FactoringResell` se firman solo en el comité de riesgo; los demás tipos
        tienen ambos.


        `isFullyApproved` es `true` cuando cada rol reunió las firmas que exige.
        `isRejected` es `true` apenas existe una firma de rechazo en cualquier
        rol.


        Para `FactoringRequest`, `requestId` es el id de la solicitud de
        factoring (el mismo `factoringRequestId` que recibes al crearla).
      operationId: getMissingApprovals
      parameters:
        - $ref: '#/components/parameters/ApprovalRequestTypeParam'
        - $ref: '#/components/parameters/ApprovalRequestIdParam'
        - name: email
          in: query
          required: true
          description: >-
            Email del usuario para quien se calcula `userCanApprove`. Usa el
            email de un usuario activo de tu empresa en Pruff.
          schema:
            type: string
          example: ana.perez@example.com
        - name: comiteeType
          in: query
          required: false
          description: Comité a consultar.
          schema:
            $ref: '#/components/schemas/ApprovalComiteeType'
          example: RISK
      responses:
        '200':
          description: Estado de las aprobaciones por rol.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApprovalMissingResponse'
              example:
                comiteeName: Comité de riesgo
                roles:
                  - roleId: 1
                    roleName: Administrador
                    requiredApprovals: 1
                    approved:
                      - id: 1
                        status: APPROVED
                        reason: Aprobado por API
                        type: FactoringRequest
                        comiteeType: RISK
                        createdAt: '2026-01-07T19:55:04.589Z'
                        updatedAt: '2026-01-07T19:55:04.589Z'
                        user: ana.perez@example.com
                        roleId: 1
                        roleName: Administrador
                    rejected: []
                    userCanApprove: false
                isFullyApproved: true
                isRejected: false
        '400':
          description: >-
            Parámetros inválidos o solicitud sin comité asignado. La respuesta
            trae solo `message`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalidRequestType:
                  summary: requestType inválido
                  value:
                    message: >-
                      Invalid params: Expected request type CreditLineRequest,
                      FactoringRequest, ConfirmingRequest, FactoringResell,
                      CreditRequest, FactoringExtension, SGRWarrantyRequest,
                      PaymentRequestPassive, ResellNominee, LeasingRequest
                invalidRequestId:
                  summary: requestId no numérico, cero o mayor a 2147483647
                  value:
                    message: 'Invalid params: Request id must be a number'
                missingEmail:
                  summary: Falta el query param email
                  value:
                    message: 'Missing required query param: email'
                invalidComiteeType:
                  summary: comiteeType inválido
                  value:
                    message: >-
                      Error in query param comiteeType. Expected one of the
                      following values: RISK, OPERATIONS.
                comiteeTypeNotSupported:
                  summary: El tipo de solicitud no tiene ese comité
                  value:
                    message: Comitee type not supported
                noComitee:
                  summary: La solicitud no tiene comité asignado
                  value:
                    message: SGRWarrantyRequest 42 has not been assigned to a comitee.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            El usuario o la solicitud no existe. La respuesta trae solo
            `message`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                userNotFound:
                  summary: No existe un usuario con ese email
                  value:
                    message: User ana.perez@example.com not found
                factoringQuoteNotFound:
                  summary: >-
                    La solicitud de factoring no existe o no tiene cotización
                    activa
                  value:
                    message: Factoring quote not found from request 987654321
                requestNotFound:
                  summary: La solicitud no existe (el texto depende del tipo)
                  value:
                    message: Confirming request not found
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  parameters:
    ApprovalRequestTypeParam:
      name: requestType
      in: path
      required: true
      description: >-
        Tipo de solicitud sobre la que se consultan o registran las
        aprobaciones.


        - `CreditLineRequest`: solicitud de línea de crédito.

        - `FactoringRequest`: solicitud de factoring.

        - `ConfirmingRequest`: solicitud de confirming.

        - `FactoringResell`: venta de documentos a fondos.

        - `CreditRequest`: solicitud de crédito.

        - `FactoringExtension`: prórroga de factoring.

        - `SGRWarrantyRequest`: solicitud de garantía SGR.

        - `PaymentRequestPassive`: devolución de pasivos.

        - `ResellNominee`: nómina de venta a fondo.

        - `LeasingRequest`: solicitud de leasing.
      schema:
        $ref: '#/components/schemas/ApprovalRequestType'
      example: FactoringRequest
    ApprovalRequestIdParam:
      name: requestId
      in: path
      required: true
      description: >-
        Id numérico de la solicitud del tipo indicado, un entero entre 1 y
        2147483647. Para `FactoringRequest` es el id de la solicitud de
        factoring.
      schema:
        type: integer
        minimum: 1
        maximum: 2147483647
      example: 1
  schemas:
    ApprovalComiteeType:
      type: string
      enum:
        - RISK
        - OPERATIONS
      description: >-
        Comité de la firma. `RISK` es el comité de riesgo y `OPERATIONS` el de
        operaciones.
    ApprovalMissingResponse:
      type: object
      required:
        - comiteeName
        - roles
        - isFullyApproved
        - isRejected
      properties:
        comiteeName:
          type: string
          description: Nombre del comité asignado a la solicitud.
        roles:
          type: array
          description: Roles que exige el comité, con su avance.
          items:
            $ref: '#/components/schemas/ApprovalMissingRole'
        isFullyApproved:
          type: boolean
          description: '`true` cuando todos los roles reunieron las aprobaciones que exigen.'
        isRejected:
          type: boolean
          description: '`true` cuando existe al menos un rechazo en cualquier rol.'
    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.
    ApprovalRequestType:
      type: string
      enum:
        - CreditLineRequest
        - FactoringRequest
        - ConfirmingRequest
        - FactoringResell
        - CreditRequest
        - FactoringExtension
        - SGRWarrantyRequest
        - PaymentRequestPassive
        - ResellNominee
        - LeasingRequest
      description: Tipo de solicitud que se aprueba en un comité.
    ApprovalMissingRole:
      type: object
      required:
        - roleId
        - roleName
        - requiredApprovals
        - approved
        - rejected
        - userCanApprove
      properties:
        roleId:
          type: integer
          description: Id del rol. Envíalo como `roleId` al registrar una firma.
        roleName:
          type: string
          description: Nombre del rol.
        requiredApprovals:
          type: integer
          description: Cantidad de aprobaciones que el comité exige a este rol.
        approved:
          type: array
          description: Aprobaciones ya registradas con este rol.
          items:
            $ref: '#/components/schemas/ApprovalItem'
        rejected:
          type: array
          description: Rechazos ya registrados con este rol.
          items:
            $ref: '#/components/schemas/ApprovalItem'
        userCanApprove:
          type: boolean
          description: >-
            `true` si el usuario indicado en `email` tiene este rol y todavía no
            ha firmado con él en esta solicitud.
    ApprovalItem:
      type: object
      required:
        - id
        - status
        - reason
        - type
        - comiteeType
        - createdAt
        - updatedAt
        - user
        - roleId
        - roleName
      properties:
        id:
          type: integer
          description: Id de la firma.
        status:
          type: string
          enum:
            - APPROVED
            - REJECTED
            - PENDING
          description: >-
            Decisión de la firma. Al registrar firmas por API envía solo
            `APPROVED` o `REJECTED`.
        reason:
          type:
            - string
            - 'null'
          description: Observación de la firma.
        type:
          $ref: '#/components/schemas/ApprovalRequestType'
        comiteeType:
          oneOf:
            - $ref: '#/components/schemas/ApprovalComiteeType'
            - type: 'null'
          description: >-
            Comité en que se firmó. Es `null` en firmas antiguas que no lo
            registraron.
        createdAt:
          type: string
          format: date-time
          description: Fecha y hora de la firma, en formato ISO 8601 (UTC).
        updatedAt:
          type: string
          format: date-time
          description: >-
            Fecha y hora de la última modificación de la firma, en formato ISO
            8601 (UTC).
        user:
          type: string
          description: Email del usuario que firmó.
        roleId:
          type:
            - integer
            - 'null'
          description: >-
            Id del rol con el que firmó. Es `null` en firmas antiguas que no lo
            registraron.
        roleName:
          type:
            - string
            - 'null'
          description: >-
            Nombre del rol con el que firmó. Es `null` cuando `roleId` es
            `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.