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

# Enviar mensaje al chat de una solicitud

> Publica un mensaje en el chat de una solicitud, a nombre del usuario cuyo email va en la URL. Usa el email de un usuario activo de tu empresa que tenga al menos un rol asignado en Pruff. Los demás participantes de la solicitud reciben una notificación.

Para mencionar a un usuario escribe `@[Nombre](id)` dentro del texto, con el id del usuario en Pruff, y para mencionar a todos los participantes escribe `@[todos](all)`. Los usuarios mencionados que participan en la solicitud reciben además una notificación y un correo; quien envía el mensaje no se notifica a sí mismo.

Si `requestId` no corresponde a una solicitud existente del tipo indicado, responde 404 y el mensaje no se guarda. Una solicitud borrada de tipo `factoring`, `verification`, `creditLine`, `confirming`, `creditRequest`, `leasing` o `resellNominee` cuenta como inexistente y responde el mismo 404.



## OpenAPI

````yaml openapi/clients.yaml POST /chat/send/{requestType}/{requestId}/{email}
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:
  /chat/send/{requestType}/{requestId}/{email}:
    post:
      tags:
        - Chat
      summary: Enviar mensaje al chat de una solicitud
      description: >-
        Publica un mensaje en el chat de una solicitud, a nombre del usuario
        cuyo email va en la URL. Usa el email de un usuario activo de tu empresa
        que tenga al menos un rol asignado en Pruff. Los demás participantes de
        la solicitud reciben una notificación.


        Para mencionar a un usuario escribe `@[Nombre](id)` dentro del texto,
        con el id del usuario en Pruff, y para mencionar a todos los
        participantes escribe `@[todos](all)`. Los usuarios mencionados que
        participan en la solicitud reciben además una notificación y un correo;
        quien envía el mensaje no se notifica a sí mismo.


        Si `requestId` no corresponde a una solicitud existente del tipo
        indicado, responde 404 y el mensaje no se guarda. Una solicitud borrada
        de tipo `factoring`, `verification`, `creditLine`, `confirming`,
        `creditRequest`, `leasing` o `resellNominee` cuenta como inexistente y
        responde el mismo 404.
      operationId: sendRequestChatMessage
      parameters:
        - $ref: '#/components/parameters/ChatRequestTypeParam'
        - name: requestId
          in: path
          required: true
          description: >-
            Id numérico de la solicitud del tipo indicado en `requestType`, un
            entero entre 1 y 2147483647.
          schema:
            type: integer
            minimum: 1
            maximum: 2147483647
          example: 1
        - name: email
          in: path
          required: true
          description: >-
            Email del usuario que envía el mensaje. Usa el email de un usuario
            activo de tu empresa en Pruff. Codifícalo en la URL si contiene
            caracteres especiales.
          schema:
            type: string
            format: email
          example: ana.perez@example.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatSendBody'
            example:
              message: Mensaje de ejemplo
      responses:
        '200':
          description: Mensaje enviado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatSendResponse'
              example:
                message: Mensaje enviado exitosamente.
        '400':
          description: >-
            Algún parámetro o el body no cumplen las validaciones. `message`
            trae el código del error y `displayMessage` el detalle del primer
            problema. En `data.errors` los problemas vienen agrupados en una
            lista por cada parte que falló, en orden: parámetros de la URL y
            luego body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalidRequestType:
                  summary: requestType inválido
                  value:
                    message: invalid_value
                    displayMessage: >-
                      Invalid option: expected one of
                      "creditLine"|"factoring"|"sgr"|"confirming"|"creditRequest"|"verification"|"resellNominee"|"externalFactoringQuote"|"leasing"
                    data:
                      errors:
                        - - path: requestType
                            message: >-
                              Invalid option: expected one of
                              "creditLine"|"factoring"|"sgr"|"confirming"|"creditRequest"|"verification"|"resellNominee"|"externalFactoringQuote"|"leasing"
                            code: invalid_value
                invalidEmail:
                  summary: email inválido
                  value:
                    message: invalid_format
                    displayMessage: Not valid email
                    data:
                      errors:
                        - - path: email
                            message: Not valid email
                            code: invalid_format
                invalidRequestId:
                  summary: requestId no numérico, cero o mayor a 2147483647
                  value:
                    message: custom
                    displayMessage: 'Invalid params: Request id must be a number'
                    data:
                      errors:
                        - - path: requestId
                            message: 'Invalid params: Request id must be a number'
                            code: custom
                emptyMessage:
                  summary: Mensaje vacío
                  value:
                    message: too_small
                    displayMessage: El mensaje no puede estar vacío.
                    data:
                      errors:
                        - - path: message
                            message: El mensaje no puede estar vacío.
                            code: too_small
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            La solicitud indicada en `requestType` y `requestId` no existe o
            está borrada, o no existe un usuario con el email indicado. Se
            revisa primero la solicitud. La respuesta trae `message` y, para la
            solicitud, también `displayMessage`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                requestNotFound:
                  summary: La solicitud no existe
                  value:
                    message: Request factoring 987654321 not found
                    displayMessage: No se encontró la solicitud
                userNotFound:
                  summary: No existe un usuario con el email
                  value:
                    message: User ana.perez@example.com not found
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  parameters:
    ChatRequestTypeParam:
      name: requestType
      in: path
      required: true
      description: |-
        Tipo de solicitud a la que pertenece el chat.

        - `creditLine`: línea de crédito.
        - `factoring`: factoring.
        - `sgr`: garantía SGR.
        - `confirming`: confirming.
        - `creditRequest`: crédito.
        - `verification`: verificación.
        - `resellNominee`: nómina de venta a fondo.
        - `externalFactoringQuote`: cotización externa de factoring.
        - `leasing`: leasing.
      schema:
        $ref: '#/components/schemas/ChatRequestType'
      example: factoring
  schemas:
    ChatSendBody:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          minLength: 1
          description: >-
            Texto del mensaje. Puede incluir menciones con `@[Nombre](id)` o
            `@[todos](all)`.
          example: Mensaje de ejemplo
    ChatSendResponse:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: Confirmación del envío.
    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.
    ChatRequestType:
      type: string
      enum:
        - creditLine
        - factoring
        - sgr
        - confirming
        - creditRequest
        - verification
        - resellNominee
        - externalFactoringQuote
        - leasing
      description: Tipo de solicitud a la que pertenece el chat.
  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.