> ## 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 contacto de una empresa

> Crea un contacto asociado a una empresa que ya existe en Pruff. La empresa se identifica con `businessIdentifier`.

Si envías `identifier` (el RUT o Nit de la persona de contacto), no puede existir otro contacto con el mismo `identifier` en esa empresa; en ese caso la solicitud responde 400.

Los RUT y Nit se validan con su dígito verificador y se envían sin puntos y con guion. Si el dígito verificador de un RUT es `K`, envíalo en mayúscula; en minúscula la solicitud responde 400. El teléfono se envía solo con dígitos.



## OpenAPI

````yaml openapi/clients.yaml POST /contacts
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:
  /contacts:
    post:
      tags:
        - Contactos
      summary: Crear contacto de una empresa
      description: >-
        Crea un contacto asociado a una empresa que ya existe en Pruff. La
        empresa se identifica con `businessIdentifier`.


        Si envías `identifier` (el RUT o Nit de la persona de contacto), no
        puede existir otro contacto con el mismo `identifier` en esa empresa; en
        ese caso la solicitud responde 400.


        Los RUT y Nit se validan con su dígito verificador y se envían sin
        puntos y con guion. Si el dígito verificador de un RUT es `K`, envíalo
        en mayúscula; en minúscula la solicitud responde 400. El teléfono se
        envía solo con dígitos.
      operationId: createBusinessContact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreateRequest'
            example:
              businessIdentifier: 76111111-6
              name: María Pérez
              email: maria.perez@example.com
              phone: '912345678'
              role: Gerente de finanzas
              identifier: 11111111-1
      responses:
        '200':
          description: >-
            Contacto creado. La respuesta es un resumen del contacto, no incluye
            todos los campos que enviaste.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactCreated'
              example:
                id: 42
                businessIdentifier: 76111111-6
                name: María Pérez
                email: maria.perez@example.com
                phone: '912345678'
                role: Gerente de finanzas
                identifier: 11111111-1
        '400':
          description: >-
            El body es inválido, o ya existe un contacto con el mismo
            `identifier` en la empresa. Cuando falla la validación del body,
            `data.errors` lista cada campo con error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalidEmail:
                  summary: Email con formato inválido
                  value:
                    message: invalid_format
                    displayMessage: El formato del email es inválido
                    data:
                      errors:
                        - path: email
                          message: El formato del email es inválido
                          code: invalid_format
                invalidPhone:
                  summary: Teléfono con formato inválido
                  value:
                    message: invalid_union
                    displayMessage: >-
                      El teléfono debe ser un número de Chile válido (ej. 56 9
                      1234 5678, 9 1234 5678, 56 2 1234 5678, 2 1234 5678 o 600
                      123 4567)
                    data:
                      errors:
                        - path: phone
                          message: >-
                            El teléfono debe ser un número de Chile válido (ej.
                            56 9 1234 5678, 9 1234 5678, 56 2 1234 5678, 2 1234
                            5678 o 600 123 4567)
                          code: invalid_union
                contactAlreadyExists:
                  summary: Ya existe un contacto con ese identifier en la empresa
                  value:
                    message: Contact already exists
                    displayMessage: Ya existe un contacto con el mismo RUT para esta empresa
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: El `businessIdentifier` no corresponde a ninguna empresa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Business not found for the provided identifier
                displayMessage: La empresa indicada no existe.
        '409':
          description: >-
            Ya existe un registro con ese nombre. Ocurre, por ejemplo, si dos
            solicitudes simultáneas intentan crear un contacto con el mismo
            `identifier` en la empresa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Duplicate name
                displayMessage: Ya existe un registro con ese nombre.
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    ContactCreateRequest:
      type: object
      required:
        - businessIdentifier
        - name
        - email
      properties:
        businessIdentifier:
          type: string
          description: >-
            RUT o Nit de la empresa a la que pertenece el contacto, sin puntos y
            con guion. Si el dígito verificador es `K`, envíalo en mayúscula. La
            empresa debe existir en Pruff. Se valida el dígito verificador.
          example: 76111111-6
        name:
          type: string
          minLength: 1
          description: Nombre del contacto.
          example: María Pérez
        email:
          type: string
          format: email
          description: Email del contacto.
          example: maria.perez@example.com
        phone:
          type: string
          description: >-
            Teléfono del contacto, solo con dígitos: sin espacios, sin puntos y
            sin signo `+`. Chile: nueve dígitos que parten con 9 o 2, con `56`
            opcional al inicio, o `600` más siete dígitos. Colombia: `3` más
            nueve dígitos, o `601` a `608` más siete dígitos, con `57` opcional
            al inicio.
          example: '912345678'
        identifier:
          type: string
          description: >-
            RUT o Nit de la persona de contacto, sin puntos y con guion. Si el
            dígito verificador es `K`, envíalo en mayúscula. Se valida el dígito
            verificador. No puede repetirse dentro de la misma empresa.
          example: 11111111-1
        role:
          type: string
          description: Cargo del contacto.
          example: Gerente de finanzas
        customRole:
          type: string
          description: Cargo personalizado, para cuando `role` no calza con el cargo real.
          example: Encargada de tesorería
        observation:
          type: string
          description: Observación libre sobre el contacto.
          example: Prefiere contacto por correo
        country:
          type: string
          description: País del contacto. Si no lo envías, se guarda `CL`.
          example: CL
        profession:
          type: string
          description: Profesión del contacto.
          example: Ingeniera comercial
        maritalStatus:
          type: string
          description: Estado civil del contacto.
          example: Casada
        isLegalRepresentative:
          type: boolean
          default: false
          description: Marca al contacto como representante legal de la empresa.
          example: false
        isPartner:
          type: boolean
          default: false
          description: Marca al contacto como socio de la empresa.
          example: false
        invoicing:
          type: boolean
          default: false
          description: Marca al contacto como destinatario de facturación.
          example: false
        selected:
          type: boolean
          default: false
          description: Marca al contacto como seleccionado.
          example: false
    ContactCreated:
      type: object
      required:
        - id
        - businessIdentifier
        - name
        - email
        - phone
        - role
        - identifier
      properties:
        id:
          type: integer
          description: Id del contacto creado.
          example: 42
        businessIdentifier:
          type: string
          description: RUT o Nit de la empresa a la que pertenece el contacto.
          example: 76111111-6
        name:
          type: string
          description: Nombre del contacto.
          example: María Pérez
        email:
          type: string
          format: email
          description: Email del contacto.
          example: maria.perez@example.com
        phone:
          type:
            - string
            - 'null'
          description: Teléfono del contacto. Es `null` si no lo enviaste.
          example: '912345678'
        role:
          type:
            - string
            - 'null'
          description: Cargo del contacto. Es `null` si no lo enviaste.
          example: Gerente de finanzas
        identifier:
          type:
            - string
            - 'null'
          description: RUT o Nit de la persona de contacto. Es `null` si no lo enviaste.
          example: 11111111-1
    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'
    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.