> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.kubifactu.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Subir documentos de autorización

> Sube documentos de autorización y/o identidad para una empresa cliente.

Este endpoint permite subir uno o ambos documentos simultáneamente:
- Solo documento de autorización
- Solo documento de identidad
- Ambos documentos a la vez
- Documento de autorización con indicador de firma digital del cliente (`authorization_document_has_digital_signature`)

El campo `authorization_document_has_digital_signature` puede enviarse junto con `authorization_document`.
Si se sube solo `identity_document`, este indicador no aplica.

**Nota:** Este endpoint solo está disponible para intermediarios que NO usen su propio certificado digital.




## OpenAPI

````yaml /api-reference/openapi/openapi.yaml post /api/clientcompanies/{companyId}/authorization-documents
openapi: 3.0.0
info:
  title: Kubifactu API
  description: API para el procesamiento y gestión de facturas de Veri*Factu
  version: 1.0.0
  contact:
    email: soporte@kubifactu.com
    name: Soporte KubiFACTU
    url: https://apidocs.kubifactu.com
servers:
  - url: https://api.kubifactu.com
    description: Servidor de producción
  - url: https://devapi.kubifactu.com
    description: Servidor de pruebas
security: []
paths:
  /api/clientcompanies/{companyId}/authorization-documents:
    post:
      summary: Subir documentos de autorización
      description: >
        Sube documentos de autorización y/o identidad para una empresa cliente.


        Este endpoint permite subir uno o ambos documentos simultáneamente:

        - Solo documento de autorización

        - Solo documento de identidad

        - Ambos documentos a la vez

        - Documento de autorización con indicador de firma digital del cliente
        (`authorization_document_has_digital_signature`)


        El campo `authorization_document_has_digital_signature` puede enviarse
        junto con `authorization_document`.

        Si se sube solo `identity_document`, este indicador no aplica.


        **Nota:** Este endpoint solo está disponible para intermediarios que NO
        usen su propio certificado digital.
      operationId: uploadAuthorizationDocuments
      parameters:
        - name: companyId
          in: path
          description: ID de la empresa cliente.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UploadAuthorizationDocumentsRequest'
      responses:
        '200':
          description: Documento(s) subido(s) con éxito.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadAuthorizationDocumentsResponse'
        '403':
          description: No autorizado. La API-KEY proporcionada no es válida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedApiKeyErrorResponse'
        '422':
          description: |
            Errores de validación. Posibles causas:
            - La empresa no existe o no pertenece al owner
            - No se proporcionó ningún documento
            - El archivo excede 25MB
            - Tipo de archivo no permitido (solo pdf, jpg, jpeg, png)
            - El owner usa su propio certificado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '500':
          description: Error interno del servidor.
      security:
        - owner_api_key: []
components:
  schemas:
    UploadAuthorizationDocumentsRequest:
      type: object
      properties:
        authorization_document:
          type: string
          format: binary
          description: >
            Documento de autorización firmado. Formatos permitidos: PDF, JPG,
            JPEG, PNG.

            Tamaño máximo: 25MB.
        identity_document:
          type: string
          format: binary
          description: >
            Documento de identidad del representante legal. Sólo necesario si el
            documento de autorización no está firmado digitalmente por el
            cliente. Formatos permitidos: PDF, JPG, JPEG, PNG.

            Tamaño máximo: 25MB.
        authorization_document_has_digital_signature:
          type: boolean
          description: >
            Indicador de que el documento de autorización está firmado
            digitalmente con el certificado digital del cliente.

            Solo se tiene en cuenta cuando se envía `authorization_document`.
      description: >
        Al menos uno de los dos documentos es requerido.

        El campo `authorization_document_has_digital_signature` permite indicar
        firma digital en el documento de autorización y, en ese caso, considerar
        opcional el documento de identidad para la lógica de completitud.
    UploadAuthorizationDocumentsResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            message:
              type: string
              description: Mensaje de confirmación.
              example: Documents uploaded successfully.
            authorization_document:
              type: string
              nullable: true
              description: Nombre del archivo de autorización guardado.
              example: auth_20260129153045.pdf
            identity_document:
              type: string
              nullable: true
              description: Nombre del archivo de identidad guardado.
              example: identity_20260129153046.jpg
    UnauthorizedApiKeyErrorResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            error:
              type: object
              properties:
                code:
                  type: string
                  description: Código de error que indica el tipo de problema.
                  example: E-UNAUTH-APIKEY
                message:
                  type: string
                  description: Mensaje detallado del error.
                  example: >-
                    No client with API-KEY
                    '5tVySMGJOpq8HfMgIX28Qz6kF0dFOoq37x55PLZcWsGeGeYkNgJyAcRTlFJ5NbVoDRm8qtCywEoiN3A9JkBanMBXYmxiqR3BItxgxx'
                    was found.
                http_code:
                  type: integer
                  description: Código HTTP asociado al error.
                  example: 403
                errors:
                  type: object
                  nullable: true
                  description: >
                    Detalles adicionales del error. Puede ser `null` si no hay
                    información específica.
                  example: null
                details:
                  type: object
                  properties:
                    request_id:
                      type: string
                      description: Identificador único de la solicitud para rastreo.
                      example: 2cc8ef846029ec69613711ad1d85f6dfebf16ffb
    ValidationErrorResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            error:
              type: object
              properties:
                message:
                  type: string
                  description: Mensaje general del error.
                  example: The given data was invalid.
                errors:
                  type: object
                  additionalProperties:
                    type: array
                    items:
                      type: string
                  description: >
                    Lista de errores de validación organizados por campo.

                    Cada clave es el nombre del campo asociado al error y
                    contiene un array de mensajes.
                  example:
                    invoice_exists:
                      - >-
                        An invoice already exists with the indicated invoice
                        number and fiscal for the provided SIF. Existing invoice
                        ID: [9db6bb78-6799-4abb-b9a0-22d127c543ed].
                    incorrect_total_quota:
                      - >-
                        The total quota of the invoice does not match the total
                        tax quota and equalization_tax_quota of the lines.
                        Calculated total quota: [26.25].
                    incorrect_total_amount:
                      - >-
                        The total amount of the invoice does not match the total
                        tax base of the lines. Calculated total amount:
                        [151.25].
                details:
                  type: object
                  properties:
                    request_id:
                      type: string
                      format: uuid
                      description: Identificador único de la solicitud para rastreo.
                      example: 9ded9e2c-d59e-4432-a926-652cbcfac365
  securitySchemes:
    owner_api_key:
      type: apiKey
      name: X-Qbikode-UserApiKey
      in: header
      description: >
        API-KEY del intermediario que hace la petición. Este dato se puede
        consultar en el panel web, en la página de _Perfil de usuario_.

````