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

# Enviar registros de facturación en lote

> Registra entre 1 y 500 registros de facturación que **serán procesados en diferido**.

La respuesta confirma la recepción del lote, pero no incluye los identificadores ni el resultado individual de los registros. Tampoco confirma su aceptación por Veri*Factu. El resultado de cada registro se obtiene posteriormente mediante la URL indicada en su campo `callback_url` o consultando el registro de facturación.

Si algún registro no supera la validación, la respuesta contiene los errores indexados según su posición en el array, por ejemplo, `invoices.0.sif_id`.

### Resultado mediante callback

El campo `callback_url` se configura individualmente en cada elemento de `invoices`. Cuando los registros han sido procesados, KubiFACTU agrupa los resultados de una misma empresa cliente y URL de callback, y realiza una petición `POST` con contenido `application/json`.

El cuerpo del callback siempre es un array y puede contener uno o varios registros. Un callback no tiene por qué corresponder exactamente con el lote original, por lo que la integración debe correlacionar cada resultado mediante `id` o `client_invoice_id`, sin depender de su posición en el array.

```json
[
  {
    "id": "7d76c4a6-6603-4fc6-946a-8b9ffcc93480",
    "client_invoice_id": "FACTURA-2026-0042",
    "record_type": "creation",
    "sif_id": "0995c42c-6708-44fb-bfbf-b363a5fe873e",
    "sender_company_name": "Ferretería Ejemplo, S.L.",
    "sender_tax_id_number": "B12345678",
    "fiscal_year": 2026,
    "full_invoice_number": "F-2026-0042",
    "fingerprint": "8f3d7aa5530f5f6c3a96a5c8a9516a7fd9ce90b9bf3b60375682d8b45ca72867",
    "csv": "CSV-DE-EJEMPLO",
    "vf_post_status": "success",
    "vf_record_registration_status": "success",
    "has_warnings": false,
    "vf_error_descriptions": null,
    "vf_response_body": "PHhtbD5SZXNwdWVzdGEgZGUgZWplbXBsbzwveG1sPg==",
    "qr_value": "https://www2.agenciatributaria.gob.es/wlpl/TIKE-CONT/ValidarQR?nif=B12345678&numserie=F-2026-0042&fecha=01-09-2026&importe=121.00",
    "qr_image_url": "https://api.kubifactu.com/api/invoices/7d76c4a6-6603-4fc6-946a-8b9ffcc93480/qr-image",
    "xml_url": "https://api.kubifactu.com/api/invoices/7d76c4a6-6603-4fc6-946a-8b9ffcc93480/xml"
  }
]
```

El contrato completo de cada elemento se detalla en el campo `callback_url` de la petición. Este callback es independiente de la respuesta HTTP inmediata del endpoint.




## OpenAPI

````yaml /api-reference/openapi/openapi.yaml post /api/invoices/batch
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/invoices/batch:
    post:
      summary: Enviar registros de facturación en lote
      description: >
        Registra entre 1 y 500 registros de facturación que **serán procesados
        en diferido**.


        La respuesta confirma la recepción del lote, pero no incluye los
        identificadores ni el resultado individual de los registros. Tampoco
        confirma su aceptación por Veri*Factu. El resultado de cada registro se
        obtiene posteriormente mediante la URL indicada en su campo
        `callback_url` o consultando el registro de facturación.


        Si algún registro no supera la validación, la respuesta contiene los
        errores indexados según su posición en el array, por ejemplo,
        `invoices.0.sif_id`.


        ### Resultado mediante callback


        El campo `callback_url` se configura individualmente en cada elemento de
        `invoices`. Cuando los registros han sido procesados, KubiFACTU agrupa
        los resultados de una misma empresa cliente y URL de callback, y realiza
        una petición `POST` con contenido `application/json`.


        El cuerpo del callback siempre es un array y puede contener uno o varios
        registros. Un callback no tiene por qué corresponder exactamente con el
        lote original, por lo que la integración debe correlacionar cada
        resultado mediante `id` o `client_invoice_id`, sin depender de su
        posición en el array.


        ```json

        [
          {
            "id": "7d76c4a6-6603-4fc6-946a-8b9ffcc93480",
            "client_invoice_id": "FACTURA-2026-0042",
            "record_type": "creation",
            "sif_id": "0995c42c-6708-44fb-bfbf-b363a5fe873e",
            "sender_company_name": "Ferretería Ejemplo, S.L.",
            "sender_tax_id_number": "B12345678",
            "fiscal_year": 2026,
            "full_invoice_number": "F-2026-0042",
            "fingerprint": "8f3d7aa5530f5f6c3a96a5c8a9516a7fd9ce90b9bf3b60375682d8b45ca72867",
            "csv": "CSV-DE-EJEMPLO",
            "vf_post_status": "success",
            "vf_record_registration_status": "success",
            "has_warnings": false,
            "vf_error_descriptions": null,
            "vf_response_body": "PHhtbD5SZXNwdWVzdGEgZGUgZWplbXBsbzwveG1sPg==",
            "qr_value": "https://www2.agenciatributaria.gob.es/wlpl/TIKE-CONT/ValidarQR?nif=B12345678&numserie=F-2026-0042&fecha=01-09-2026&importe=121.00",
            "qr_image_url": "https://api.kubifactu.com/api/invoices/7d76c4a6-6603-4fc6-946a-8b9ffcc93480/qr-image",
            "xml_url": "https://api.kubifactu.com/api/invoices/7d76c4a6-6603-4fc6-946a-8b9ffcc93480/xml"
          }
        ]

        ```


        El contrato completo de cada elemento se detalla en el campo
        `callback_url` de la petición. Este callback es independiente de la
        respuesta HTTP inmediata del endpoint.
      operationId: createBatchOfInvoiceRecords
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBatchOfInvoicesRecordsRequest'
      responses:
        '200':
          description: Lote recibido para su procesamiento diferido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateBatchOfInvoiceRecordsResponse'
        '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.


            Una subsanación con `correction_key = S` y `previous_rejection_key =
            X` devuelve el error en `invoices.<n>.previous_rejection_key` si en
            KubiFACTU ya existe el alta de la misma factura registrada en la
            AEAT o pendiente de envío. Consulta en la descripción del campo
            `previous_rejection_key` qué valor corresponde en cada caso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                registered_original:
                  summary: Alta original registrada en la AEAT
                  value:
                    data:
                      error:
                        message: The given data was invalid.
                        errors:
                          invoices.0.previous_rejection_key:
                            - >-
                              AEAT already holds this invoice, so
                              previous_rejection_key cannot be X. To correct the
                              registered record, send the correction with
                              previous_rejection_key N. Existing invoice ID:
                              [9db6bb78-6799-4abb-b9a0-22d127c543ed].
                        details:
                          request_id: 9ded9e2c-d59e-4432-a926-652cbcfac365
                pending_original:
                  summary: Alta original pendiente de envío
                  value:
                    data:
                      error:
                        message: The given data was invalid.
                        errors:
                          invoices.0.previous_rejection_key:
                            - >-
                              The original record of this invoice is still
                              pending submission to AEAT, so it cannot be
                              corrected with previous_rejection_key X yet. Wait
                              for its submission result. Existing invoice ID:
                              [9db6bb78-6799-4abb-b9a0-22d127c543ed].
                        details:
                          request_id: 9ded9e2c-d59e-4432-a926-652cbcfac365
        '500':
          description: Error interno del servidor.
      security:
        - client_api_key: []
components:
  schemas:
    CreateBatchOfInvoicesRecordsRequest:
      type: object
      required:
        - invoices
      properties:
        invoices:
          type: array
          minItems: 1
          maxItems: 500
          description: >
            Array de registros de facturación con la misma estructura que la del
            endpoint de **Enviar registro de facturación**.
          items:
            $ref: '#/components/schemas/CreateInvoiceRecordRequest'
    CreateBatchOfInvoiceRecordsResponse:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - response
          properties:
            response:
              type: string
              description: >-
                Confirmación de que el lote se ha registrado para su
                procesamiento diferido.
              example: >-
                Batch of invoice records processed for deferred submission to
                Veri*Factu.
    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 tax
                        breakdown. Calculated total quota: [26.25].
                    incorrect_total_amount:
                      - >-
                        The total amount of the invoice does not match the total
                        tax base of the tax breakdown. 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
    CreateInvoiceRecordRequest:
      type: object
      properties:
        client_invoice_id:
          type: string
          maxLength: 50
          description: >
            Identificador único de la factura **dentro del sistema del
            cliente**.
          example: 96f2044008d7iujfd78jspo4
        callback_url:
          type: string
          format: url
          description: >
            Sólo aplicable a [registros de facturación en
            diferido](/basic-concepts#registros-de-facturación-diferidos) o
            reenvíos de regitros de facturación. URL a la que se llamará con el
            resultado de la AEAT al procesamiento del registro de facturación.


            Se hará una petición POST a esta URL y se enviarán un array en
            formato JSON con los datos de las facturas procesadas cuyos ítems
            contendrán los siguientes campos:


            - `id`: `string`. Identificador de KubiFACTU para el registro de
            facturación.

            - `client_invoice_id`: `string|null`. Identificador del cliente para
            el registro de facturación.

            - `record_type`: `string (creation|cancellation)`. Tipo de registro
            de facturación.

            - `sif_id`: `string`. ID del SIF utilizado para la creación del
            registro.

            - `sender_company_name`: `string`. Nombre de la empresa emisora.

            - `sender_tax_id_number`: `string`. CIF/NIF de la empresa emisora.

            - `fiscal_year`: `integer`. Año fiscal del registro de facturación.

            - `full_invoice_number`: `string`. Número de factura.

            - `fingerprint`: `string|null`. Huella del registro de facturación.

            - `csv`: `string|null`. Código Seguro de Verificación (CSV) de la
            remisión que contiene el registro. Puede ser `null` aunque el
            registro esté aceptado: para saber si está acreditado, usa
            `vf_record_registration_status`, no la presencia del `csv`. [Leer
            más en la FAQ](/faq).

            - `vf_post_status`: `string|null`. Ver valores posibles en la
            documentación del campo `vf_post_status` de la respuesta de envío de
            registros de facturación.

            - `vf_record_registration_status`: `string|null`. Ver valores
            posibles en la documentación del campo
            `vf_record_registration_status` de la respuesta de envío de
            registros de facturación.

            - `has_warnings`: `bool`. Indica si el registro contiene errores que
            deban ser subsanados.

            - `vf_error_descriptions`: `string|null`. Cadena con la descripción
            de los errores devueltos por Veri*Factu.

            - `vf_response_body`: `string|null`. Cuerpo de la respuesta de
            Veri*Factu en formato Base64. Contiene el XML completo devuelto por
            la AEAT tras el envío del registro de facturación.

            - `xml_url`: `string|null`. URL para descargar el XML del registro
            de facturación enviado a Veri*Factu mediante el endpoint [Descargar
            XML del registro de
            facturación](/openapi-reference/descargar-xml-del-registro-de-facturación).
            Será `null` si el XML aún no está disponible.

            - `qr_value`: `string|null`. URL del código QR para validación de la
            factura en Veri*Factu. Será `null` si el registro fue rechazado o no
            aplica mostrar QR.

            - `qr_image_url`: `string|null`. URL para descargar la imagen PNG
            del código QR generado por KubiFACTU mediante el endpoint [Descargar
            imagen QR del registro de
            facturación](/openapi-reference/descargar-imagen-qr-del-registro-de-facturación).
            Será `null` si el registro fue rechazado o no aplica mostrar QR.
          example: https://www.tuempresa.com/kubifactu/callback
        sif_id:
          type: string
          format: uuid
          description: >
            ID del SIF que se quiere utilizar para el envío de la factura. Los
            SIFs se pueden registrar en el panel web de KubiFACTU.


            Un SIF puede procesar registros de facturación de diferentes
            empresas.


            Una empresa puede tener uno o varios SIFs. Por ejemplo, una empresa
            con varias tiendas puede operar con un SIF por cada establecimiento,
            de forma que el encadenamiento/trazabilidad de las facturas se trate
            por separado.
          example: 9db0bca1-187e-4cf4-b87c-96f2044008d7
        invoice_type_key:
          $ref: '#/components/schemas/invoice_type_key'
        sender_data:
          type: object
          description: Información referente al emisor de la factura.
          required:
            - company_name
            - tax_id_number
          properties:
            company_name:
              type: string
              description: Nombre de la empresa emisora.
            tax_id_number:
              type: string
              description: NIF/CIF de la empresa emisora.
        recipients:
          type: array
          description: >-
            Información de los receptores de la factura. Obligatorio para
            facturas ordinarias.
          items:
            type: object
            required:
              - company_name
            properties:
              company_name:
                type: string
                description: Nombre de la empresa receptora.
              tax_id_number:
                type: string
                description: >
                  NIF/CIF de la empresa receptora. Este campo es obligatorio si
                  el receptor es nacional y se identifica mediante CIF/NIF.
              other_country_code:
                $ref: '#/components/schemas/other_country_code'
              other_tax_id_type_key:
                $ref: '#/components/schemas/other_tax_id_type_key'
              other_tax_id_number:
                type: string
                description: >
                  Número de identificación en el país de residencia del
                  destinatario de la operación de la factura expedida. Ejemplo:
                  `L74JF44L2` para una empresa de `DE`.
        representative_company_name:
          type: string
          description: >
            Nombre/razón social del representante del obligado tributario.

            A rellenar solo en caso de que el registro de facturación remitido
            haya sido generado por un representante/asesor del obligado
            tributario.
        representative_tax_id_number:
          type: string
          description: >
            NIF del representante del obligado tributario.

            A rellenar solo en caso de que el registro de facturación remitido
            haya sido generado por un representante/asesor del obligado
            tributario.
        previous_rejection_key:
          $ref: '#/components/schemas/previous_rejection_key'
        correction_key:
          $ref: '#/components/schemas/correction_key'
        full_invoice_number:
          type: string
          description: >
            Serie+Nº Factura que identifica a la factura emitida. Sólo puedo
            contener caracteres ASCII del 32 a 126 (caracteres imprimibles).

            Ejemplo: `2026-00001`.
          example: 2026-00001
        fiscal_year:
          type: integer
          description: >
            Ejercicio fiscal en el que se emite la factura. Aunque este dato no
            se envía a la AEAT, se utiliza junto con el `sif_id` para verificar
            que no se están duplicando los números de factura.
          example: 2026
        issue_date:
          type: string
          format: date
          example: '2026-09-15'
          description: |
            Fecha de expedición del registro de facturación.

            No puede ser una fecha futura.
        operation_date:
          type: string
          format: date
          description: >
            Fecha en la que se ha realizado la operación, siempre que sea
            diferente a la fecha de expedición. Determina el ejercicio y periodo
            fiscal al que pertenece la operación."


            Formato `yyyy-mm-dd`.
          example: '2026-02-26'
        operation_description:
          type: string
          description: |
            Descripción del objeto de la factura.
        tax_breakdown:
          type: array
          maxItems: 12
          description: >
            Anteriormente, este campo se denominaba `lines`. Este nombre sigue
            siendo válido como alias de retrocompatibilidad, pero las nuevas
            integraciones deben utilizar `tax_breakdown`.


            Desglose de la factura con la lista de los conceptos facturados
            **agrupados por condición fiscal completa**. El número máximo de
            líneas es de 12.


            Esta es la propiedad canónica para el desglose fiscal. Los errores
            de validación se devuelven usando la clave incluida en la petición.
            Si no se incluye ninguna clave compatible para el desglose, el error
            se devuelve en `tax_breakdown`.


            En el endpoint por lotes, la ruta de esta propiedad es
            `invoices.*.tax_breakdown` y cada factura se valida de forma
            independiente.


            El desglose debe agruparse por condición fiscal completa: `tax_rate`
            + `vat_tax_regime_key`, `ipsi_tax_regime_key` o
            `igic_tax_regime_key` (según `tax_type_key`) +
            `equalization_tax_rate` (si aplica). Esta agrupación responde a la
            condición fiscal de la operación, y no puede realizarse únicamente
            por tipo impositivo.


            A modo de ejemplo, indicar lo siguiente:


            ### Caso 1: Factura con todas las líneas al 21%

            Si las líneas al 21% se acogen a regímenes diferentes, deben
            generarse múltiples agrupaciones en el desglose, cada una con su
            combinación única de `tax_rate` + `vat_tax_regime_key`,
            `ipsi_tax_regime_key` o `igic_tax_regime_key` (según `tax_type_key`)
            + `equalization_tax_rate` (si aplica).


            Ejemplo válido:

            - Línea 1: 21%, régimen general

            - Línea 2: 21%, régimen criterio de caja


            El desglose debe contener dos entradas distintas, ambas con tipo
            21%, pero con claves de régimen diferentes.


            ### Caso 2: Factura con líneas al 21% y al 10%


            Se pueden informar más de una clave de régimen por cada tipo
            impositivo, siempre que existan líneas que lo justifiquen.


            Ejemplo válido:

            - Línea 1: 21%, régimen general

            - Línea 2: 21%, régimen especial agencias

            - Línea 3: 10%, régimen general


            El desglose incluirá tres agrupaciones:

            1. 21% + régimen general

            2. 21% + régimen especial agencias

            3. 10% + régimen general
          items:
            type: object
            required:
              - operation_type_key
              - tax_base
            oneOf:
              - required:
                  - tax_type_key
                  - vat_tax_regime_key
                properties:
                  tax_type_key:
                    type: string
                    enum:
                      - '01'
                not:
                  anyOf:
                    - required:
                        - igic_tax_regime_key
                    - required:
                        - ipsi_tax_regime_key
              - required:
                  - tax_type_key
                  - ipsi_tax_regime_key
                properties:
                  tax_type_key:
                    type: string
                    enum:
                      - '02'
                not:
                  anyOf:
                    - required:
                        - vat_tax_regime_key
                    - required:
                        - igic_tax_regime_key
              - required:
                  - tax_type_key
                  - igic_tax_regime_key
                properties:
                  tax_type_key:
                    type: string
                    enum:
                      - '03'
                not:
                  anyOf:
                    - required:
                        - vat_tax_regime_key
                    - required:
                        - ipsi_tax_regime_key
              - required:
                  - tax_type_key
                properties:
                  tax_type_key:
                    type: string
                    enum:
                      - '05'
                not:
                  anyOf:
                    - required:
                        - vat_tax_regime_key
                    - required:
                        - ipsi_tax_regime_key
                    - required:
                        - igic_tax_regime_key
            properties:
              tax_type_key:
                $ref: '#/components/schemas/tax_type_key'
              vat_tax_regime_key:
                $ref: '#/components/schemas/vat_tax_regime_key'
              igic_tax_regime_key:
                $ref: '#/components/schemas/igic_tax_regime_key'
              ipsi_tax_regime_key:
                $ref: '#/components/schemas/ipsi_tax_regime_key'
              operation_type_key:
                $ref: '#/components/schemas/operation_type_key'
              exemption_cause_key:
                $ref: '#/components/schemas/exemption_cause_key'
              tax_base:
                type: number
                format: decimal
                description: >
                  Magnitud dineraria sobre la que se aplica el tipo
                  impositivo/importe no sujeto.

                  Valor con 12 dígitos en la parte entera y 2 decimales.
                  Ejemplo: `200.00`.
                example: 200
              tax_base_at_cost:
                type: number
                format: decimal
                description: >
                  Magnitud dineraria sobre la que se aplica el tipo impositivo
                  en **régimen especial de grupos nivel avanzado**.

                  Valor con 12 dígitos en la parte entera y 2 decimales.
                  Ejemplo: `100.00`.
              tax_rate:
                type: number
                format: decimal
                description: >
                  Porcentaje aplicado sobre la base imponible para calcular la
                  cuota.

                  Valor con 3 dígitos en la parte entera y 2 decimales. Ejemplo:
                  `21.00`.
                example: 21
              tax_quota:
                type: number
                format: decimal
                description: >
                  Cuota resultante de aplicar a la base imponible el tipo
                  impositivo.

                  Valor con 12 dígitos en la parte entera y 2 decimales.
                  Ejemplo: `42.00`.
                example: 42
              equalization_tax_rate:
                type: number
                format: decimal
                description: >
                  Tipo de recargo de equivalencia asociado en función del
                  impuesto y tipo impositivo.

                  Valor con 3 dígitos en la parte entera y 2 decimales. Ejemplo:
                  `5.20`.
                example: 5.2
              equalization_tax_quota:
                type: number
                format: decimal
                description: >
                  Cuota de resultante de aplicar a la base imponible el tipo de
                  recargo de equivalencia.

                  Valor con 12 dígitos en la parte entera y 2 decimales.
                  Ejemplo: `10.40`.
                example: 10.4
        total_quota:
          type: number
          format: decimal
          description: >
            Importe total de la cuota (sumatorio de la cuota repercutida y cuota
            de recargo de equivalencia) de la factura.

            Valor con 12 dígitos en la parte entera y 2 decimales. Ejemplo:
            `33.57`.
        total_amount:
          type: number
          format: decimal
          description: >
            Importe total de la factura. Ʃ(`tax_base` + `tax_quota` +
            `equalization_tax_quota`) de todas las entradas de `tax_breakdown`.

            Valor con 12 dígitos en la parte entera y 2 decimales. Ejemplo:
            `2450.75`.
        simplified_invoice_key:
          $ref: '#/components/schemas/simplified_invoice_key'
        without_recipient_identification_key:
          $ref: '#/components/schemas/without_recipient_identification_key'
        macrodata_key:
          $ref: '#/components/schemas/macrodata_key'
        issued_by_third_party_or_recipient_key:
          type: string
          description: >
            Identificador que especifica si la factura ha sido expedida
            materialmente por un tercero o por el destinatario (contraparte).


            - Si es igual a `T` (tercero), el bloque `third_party_data` será de
            cumplimentación obligatoria.

            - Si es igual a `D` (destinatario), el bloque `recipients` será de
            cumplimentación obligatoria.


            - `T`: Tercero

            - `D`: Destinatario
          enum:
            - T
            - D
        third_party_data:
          type: object
          description: Información del tercero que expide la factura.
          required:
            - company_name
          properties:
            company_name:
              type: string
              description: Nombre de la empresa del tercero que expide la factura.
            tax_id_number:
              type: string
              description: >
                NIF/CIF de la empresa. Este campo es obligatorio si el tercero
                que expide la factura es nacional y se identifica mediante
                CIF/NIF
            other_country_code:
              $ref: '#/components/schemas/other_country_code'
            other_tax_id_type_key:
              $ref: '#/components/schemas/other_tax_id_type_key'
            other_tax_id_number:
              type: string
              description: >
                Número de identificación, en el país de residencia del tercero
                que expide la factura. Ejemplo: `L74JF44L2` para una empresa de
                `DE`.
        rectificative_type_key:
          $ref: '#/components/schemas/rectificative_type_key'
        rectified_tax_base:
          type: number
          format: decimal
          description: >
            Base imponible rectificada.

            Valor con 12 dígitos en la parte entera y 2 decimales. Ejemplo:
            `2500.55`.
          example: 2500.55
        rectified_tax_quota:
          type: number
          format: decimal
          description: >
            Cuota de impuesto rectificada.

            Valor con 12 dígitos en la parte entera y 2 decimales. Ejemplo:
            `42.30`.
          example: 42.3
        rectified_equalization_tax_quota:
          type: number
          format: decimal
          description: >
            Cuota de recargo de equivalencia rectificada.

            Valor con 12 dígitos en la parte entera y 2 decimales. Ejemplo:
            `5.20`.
          example: 5.2
        rectified_invoices:
          type: array
          description: |
            Lista de facturas que se están rectificando.
          items:
            type: object
            required:
              - tax_id_number
              - full_invoice_number
              - issue_date
            properties:
              tax_id_number:
                type: string
                description: >
                  NIF/CIF de la empresa emisora de la factura que quiere
                  rectificar.
              full_invoice_number:
                type: string
                description: >
                  Serie+Nº Factura que identifica a la factura que se quiere
                  rectificar.

                  Ejemplo: `2026-00001`.
              issue_date:
                type: string
                format: date
                description: >
                  Fecha de expedición de la factura que se quiere rectificar en
                  formato `yyyy-mm-dd`.

                  Ejemplo: `2026-02-26`.
                example: '2026-02-26'
        substituted_invoices:
          type: array
          description: >
            Lista de facturas que se quieren sustituir.


            Sólo podrá incluirse esta agrupación cuando el campo
            `invoice_type_key` sea `F3`.
          items:
            type: object
            required:
              - tax_id_number
              - full_invoice_number
              - issue_date
            properties:
              tax_id_number:
                type: string
                description: >
                  NIF/CIF de la empresa emisora de la factura que quiere
                  rectificar.
              full_invoice_number:
                type: string
                description: >
                  Serie+Nº Factura que identifica a la factura que se quiere
                  rectificar.

                  Ejemplo: `2026-00001`.
              issue_date:
                type: string
                format: date
                description: >
                  Fecha de expedición de la factura que se quiere rectificar en
                  formato `yyyy-mm-dd`.

                  Ejemplo: `2026-02-26`.
                example: '2026-02-26'
        coupon_key:
          $ref: '#/components/schemas/coupon_key'
        invoicing_agreement_registration_number:
          type: string
          description: >
            Número de registro obtenido al enviar la autorización en materia de
            facturación o de libros registro a que se refiere la disposición
            adicional primera del Real Decreto que aprueba el Reglamento.
        sif_agreement_id:
          type: string
          description: >
            Identificación del acuerdo (resolución) a que se refiere el artículo
            5 del Reglamento.
      required:
        - sif_id
        - invoice_type_key
        - sender_data
        - full_invoice_number
        - fiscal_year
        - issue_date
        - operation_description
        - tax_breakdown
        - total_quota
        - total_amount
    invoice_type_key:
      type: string
      description: >
        Especificación del tipo de factura: factura completa, factura
        simplificada, factura emitida en sustitución de facturas simplificadas o
        factura rectificativa.

        - `F1`: Factura (art. 6, 7.2 y 7.3 del RD 1619/2012).

        - `F2`: Factura Simplificada y Facturas sin identificación del
        destinatario art. 6.1.d) RD 1619/2012.

        - `F3`: Factura emitida en sustitución de facturas simplificadas
        facturadas y declaradas.

        - `R1`: Factura Rectificativa (Error fundado en derecho y Art. 80 Uno
        Dos y Seis LIVA)

        - `R2`: Factura Rectificativa (Art. 80.3)

        - `R3`: Factura Rectificativa (Art. 80.4)

        - `R4`: Factura Rectificativa (Resto)

        - `R5`: Factura Rectificativa en facturas simplificadas
      example: F1
      enum:
        - F1
        - F2
        - F3
        - R1
        - R2
        - R3
        - R4
        - R5
    other_country_code:
      type: string
      description: >
        Código del país en formato [ISO 3166-1
        alpha-2](https://en.wikipedia.org/wiki/ISO_3166-2). Sólo es necesario
        rellenarlo **si el sujeto no es nacional**. El código de país debe ser
        `ES` si `other_tax_id_type_key` es `07 (no censado)`. Ejemplo: `DE`
    other_tax_id_type_key:
      type: string
      description: >
        Clave para identificar el tipo de documento. Los valores posibles son:


        - `02`: **NIF-IVA**: Número de Identificación Fiscal para IVA.

        - `03`: **Pasaporte**: Documento oficial que acredita la identidad y
        nacionalidad del portador.

        - `04`: **Documento oficial de identificación expedido por el país o
        territorio de residencia**.

        - `05`: **Certificado de residencia**: Documento que acredita la
        residencia fiscal.

        - `06`: **Otro documento probatorio**: Documento adicional que sirve
        como prueba de identidad.

        - `07`: **No censado**: El receptor no está registrado en el censo
        fiscal.
      enum:
        - '02'
        - '03'
        - '04'
        - '05'
        - '06'
        - '07'
    previous_rejection_key:
      type: string
      description: >
        Indicador de rechazo previo que, en las subsanaciones, distingue si la
        factura **ya está registrada en la AEAT** o si se subsana **sin registro
        previo**.


        En una subsanación se informa `correction_key = S` y se utiliza el valor
        de `previous_rejection_key` que corresponda a la situación de la factura
        en la AEAT.


        Un rechazo **no debe confundirse con un error técnico en el envío**
        (timeout, error de red, fallo del servicio, ausencia de respuesta, error
        SOAP técnico, etc.) que tendrá el campo `vf_post_status = failure`. En
        esos casos **el registro no se considera rechazado**, y debe
        **reenviarse exactamente igual**, **sin modificar datos** y **sin
        informar** `correction_key` ni `previous_rejection_key`. [Ver más
        información al
        respecto](/faq#¿qué-debo-hacer-si-no-puedo-enviar-un-registro-porque-veri-factu-tiene-problemas-técnicos-de-conexión).


        Los errores SOAP causados por el NIF o el nombre del obligado a emitir o
        del representante (códigos 4104, 4105, 4107, 4109, 4115, 4116, 4117,
        4123 y 4124) **sí son un rechazo**: se guardan con `vf_post_status =
        success` y `vf_record_registration_status = failed`, porque reenviar los
        mismos datos no los resuelve. Corrige los datos y subsana con
        `correction_key = S` y `previous_rejection_key = X`. [Ver más
        información al
        respecto](/faq#¿qué-ocurre-si-veri-factu-no-identifica-el-nif-o-el-nombre-del-emisor).


        - `X`: El alta inicial fue **rechazada** y la factura **no está
        registrada en la AEAT**. También corresponde a las operativas especiales
        de **subsanación sin registro previo**. Solo puede informarse cuando
        `correction_key = S`; **no significa simplemente que el último envío fue
        rechazado**.

        - `S`: La factura **ya está registrada en la AEAT**, pero una
        subsanación posterior fue **rechazada**. Solo puede informarse cuando
        `correction_key = S`.

        - `N` u omitido: En una subsanación habitual de una factura **ya
        registrada en la AEAT**, se informa `correction_key = S`. También
        corresponde a un alta normal/inicial, sin subsanación.


        Con `correction_key = S` y `previous_rejection_key = X`, la API busca en
        KubiFACTU un registro de alta de la misma factura (mismo número y mismo
        ejercicio o fecha de expedición, en la misma empresa cliente) y devuelve
        HTTP `422` con el error en `previous_rejection_key` si ese registro:


        - Está **registrado en la AEAT** (`vf_record_registration_status` =
        `success`, `accepted_with_errors` o `cancelled`). La AEAT rechazaría la
        subsanación como registro duplicado (código 3000), porque con `X` la
        factura no debe existir previamente en la AEAT. No envíes `X`: para
        corregir el contenido del registro aceptado, envía la subsanación con
        `previous_rejection_key = N`.

        - Está **pendiente de envío** a la AEAT. Espera a conocer su resultado,
        mediante `callback_url` o consultando el registro, antes de decidir cómo
        subsanarlo.


        `X` sigue admitiéndose cuando el alta original fue rechazada (`failed`),
        no está registrada (`not_registered`) o no existe en KubiFACTU.
      enum:
        - X
        - S
        - 'N'
    correction_key:
      type: string
      description: >
        Indicador que especifica que se trata de una subsanación de un registro
        de facturación de alta previamente generado, con o sin registro previo
        en la AEAT según el valor de `previous_rejection_key`. El contenido de
        este nuevo registro de facturación es el correcto y el que deberá
        tenerse en cuenta. Si no se informa este campo, se entenderá que tiene
        valor `N` (alta normal/inicial). [Ver más información al
        respecto](/faq#¿qué-debo-hacer-cuando-veri-factu-“acepta-con-errores”-una-de-mis-facturas).


        - `S`: Sí, se trata de una subsanación; debe utilizarse con el valor de
        `previous_rejection_key` que corresponda.

        - `N`: No, se trata de un alta normal/inicial.
      enum:
        - S
        - 'N'
    tax_type_key:
      type: string
      description: >
        Impuesto de aplicación. Los valores posibles son:


        - `01`: Impuesto sobre el Valor Añadido (IVA).

        - `02`: Impuesto sobre la Producción, los Servicios y la Importación
        (IPSI) de Ceuta y Melilla.

        - `03`: Impuesto General Indirecto Canario (IGIC).

        - `05`: Otros.


        En las peticiones, `vat_tax_regime_key` solo corresponde a `01`,
        `ipsi_tax_regime_key` a `02` y `igic_tax_regime_key` a `03`. Para `05`
        no se informa una clave de régimen. Estas opciones documentan los tipos
        admitidos por la API; no representan cobertura completa de todos los
        impuestos o regímenes IPSI.
      enum:
        - '01'
        - '02'
        - '03'
        - '05'
    vat_tax_regime_key:
      type: string
      description: >
        Clave que identificará el tipo de régimen del impuesto o una operación
        con trascendencia tributaria en el contexto del IVA. Este campo no debe
        incluirse si se está incluyendo `igic_tax_regime_key` o `tax_type_key`
        tiene un valor diferente de `01`. Los valores posibles son:


        - `01`: Operación de régimen general.

        - `02`: Exportación.

        - `03`: Operaciones a las que se aplique el régimen especial de bienes
        usados, objetos de arte, antigüedades y objetos de colección.

        - `04`: Régimen especial del oro de inversión.

        - `05`: Régimen especial de las agencias de viajes.

        - `06`: Régimen especial grupo de entidades en IVA (Nivel Avanzado).

        - `07`: Régimen especial del criterio de caja.

        - `08`: Operaciones sujetas al IPSI / IGIC (Impuesto sobre la
        Producción, los Servicios y la Importación / Impuesto General Indirecto
        Canario).

        - `09`: Facturación de las prestaciones de servicios de agencias de
        viaje que actúan como mediadoras en nombre y por cuenta ajena (D.A.4ª
        RD1619/2012).

        - `10`: Cobros por cuenta de terceros de honorarios profesionales o de
        derechos derivados de la propiedad industrial, de autor u otros por
        cuenta de sus socios, asociados o colegiados efectuados por sociedades,
        asociaciones, colegios profesionales u otras entidades que realicen
        estas funciones de cobro.

        - `11`: Operaciones de arrendamiento de local de negocio.

        - `14`: Factura con IVA pendiente de devengo en certificaciones de obra
        cuyo destinatario sea una Administración Pública.

        - `15`: Factura con IVA pendiente de devengo en operaciones de tracto
        sucesivo.

        - `17`: Operación acogida a alguno de los regímenes previstos en el
        Capítulo XI del Título IX (OSS e IOSS).

        - `18`: Recargo de equivalencia.

        - `19`: Operaciones de actividades incluidas en el Régimen Especial de
        Agricultura, Ganadería y Pesca (REAGYP).

        - `20`: Régimen simplificado.
      enum:
        - '01'
        - '02'
        - '03'
        - '04'
        - '05'
        - '06'
        - '07'
        - '08'
        - '09'
        - '10'
        - '11'
        - '14'
        - '15'
        - '17'
        - '18'
        - '19'
        - '20'
    igic_tax_regime_key:
      type: string
      description: >
        Clave que identificará el tipo de régimen del impuesto o una operación
        con trascendencia tributaria en el contexto del IGIC. Este campo no debe
        incluirse se se está incluyendo `vat_tax_regime_key`. Los valores
        posibles son:


        - `01`: Operación de régimen general.

        - `02`: Exportación.

        - `03`: Operaciones a las que se aplique el régimen especial de bienes
        usados, objetos de arte, antigüedades y objetos de colección.

        - `04`: Régimen especial del oro de inversión.

        - `05`: Régimen especial de las agencias de viajes.

        - `06`: Régimen especial grupo de entidades en IGIC (Nivel Avanzado).

        - `07`: Régimen especial del criterio de caja.

        - `08`: Operaciones sujetas al IPSI / IVA (Impuesto sobre la Producción,
        los Servicios y la Importación / Impuesto sobre el Valor Añadido).

        - `09`: Facturación de las prestaciones de servicios de agencias de
        viaje que actúan como mediadoras en nombre y por cuenta ajena (D.A.4ª
        RD1619/2012).

        - `10`: Cobros por cuenta de terceros de honorarios profesionales o de
        derechos derivados de la propiedad industrial, de autor u otros por
        cuenta de sus socios, asociados o colegiados efectuados por sociedades,
        asociaciones, colegios profesionales u otras entidades que realicen
        estas funciones de cobro.

        - `11`: Operaciones de arrendamiento de local de negocio.

        - `14`: Factura con IGIC pendiente de devengo en certificaciones de obra
        cuyo destinatario sea una Administración Pública.

        - `15`: Factura con IGIC pendiente de devengo en operaciones de tracto
        sucesivo.

        - `17`: Régimen especial de comerciante minorista.

        - `18`: Régimen especial del pequeño empresario o profesional.

        - `19`: Operaciones interiores exentas por aplicación artículo 25 Ley
        19/1994.
      enum:
        - '01'
        - '02'
        - '03'
        - '04'
        - '05'
        - '06'
        - '07'
        - '08'
        - '09'
        - '10'
        - '11'
        - '14'
        - '15'
        - '17'
        - '18'
        - '19'
    ipsi_tax_regime_key:
      type: string
      description: >
        Clave del régimen de IPSI aplicable a una operación sujeta a este
        impuesto. Es obligatoria para las nuevas peticiones con `tax_type_key:
        "02"` desde esta actualización. No se deben incluir `vat_tax_regime_key`
        ni `igic_tax_regime_key` en esas peticiones; las claves de régimen IPSI
        tampoco son compatibles con otros tipos impositivos. Los valores
        admitidos son:


        - `01`: Régimen general.

        - `08`: Operaciones sujetas al IGIC / IVA.

        - `11`: Arrendamiento de local de negocio.

        - `18`: Operaciones a que se refiere el artículo 73, apartados 4 y 5, de
        la Ordenanza fiscal del IPSI (solo aplicable en Ceuta).

        - `19`: Operaciones interiores exentas.

        - `20`: Régimen de estimación objetiva.
      enum:
        - '01'
        - '08'
        - '11'
        - '18'
        - '19'
        - '20'
    operation_type_key:
      type: string
      description: >
        Código que identifica el tipo de operación según su sujeción o exención
        tributaria. Los valores posibles son:


        - `S1`: Operación Sujeta y No exenta - Sin inversión del sujeto pasivo.

        - `S2`: Operación Sujeta y No exenta - Con Inversión del sujeto pasivo.

        - `N1`: Operación No Sujeta artículo 7, 14, otros.

        - `N2`: Operación No Sujeta por Reglas de localización.
      enum:
        - S1
        - S2
        - N1
        - N2
    exemption_cause_key:
      type: string
      description: |
        Causa de la exención. Los valores posibles son:

        - `E1`: Exenta por el artículo 20.
        - `E2`: Exenta por el artículo 21.
        - `E3`: Exenta por el artículo 22.
        - `E4`: Exenta por los artículos 23 y 24.
        - `E5`: Exenta por el artículo 25.
        - `E6`: Exenta por otros.
      enum:
        - E1
        - E2
        - E3
        - E4
        - E5
        - E6
    simplified_invoice_key:
      type: string
      description: >
        Factura simplificada Articulo 7.2 Y 7.3 RD 1619/2012.


        Si no se informa este campo se entenderá que tiene valor `N`.


        Sólo se podrá rellenar con `S` si `invoice_type_key` es `F1`, `F3`,
        `R1`, `R2`, `R3` o `R4`.


        - `S`: Sí

        - `N`: No
      enum:
        - S
        - 'N'
    without_recipient_identification_key:
      type: string
      description: >
        Factura sin identificación del destinatario según el artículo 6.1.d del
        RD 1619/2012.


        Si no se informa este campo, se entenderá que tiene valor `"N"`.


        Sólo se podrá rellenar con `"S"` si `invoice_type_key` es `F2` o `R5`.


        - `S`: Sí

        - `N`: No
      enum:
        - S
        - 'N'
    macrodata_key:
      type: string
      description: >
        Identificador que especifica aquellas facturas con base o importe >=
        |100.000.000,00| (valor absoluto).


        Si no se informa este campo, se entenderá que tiene valor `"N"`.


        Sólo se podrá rellenar con `"S"` si `invoice_type_key` es `F2` o `R5`.


        - `S`: Sí

        - `N`: No
      enum:
        - S
        - 'N'
    rectificative_type_key:
      type: string
      description: >
        Campo que identifica si el tipo de factura rectificativa es por
        **sustitución** o por **diferencias**.


        - `S`: Por sustitución.

        - `I`: Por diferencias.
      enum:
        - S
        - I
    coupon_key:
      type: string
      description: >
        Identificador que especifica si tiene minoración de la base imponible
        por la concesión de cupones, bonificaciones o descuentos cuando solo se
        expide el original de la factura.

        Si no se informa este campo, se entenderá que tiene valor `"N"`.


        Sólo se podrá rellenar con `"S"` si `invoice_type_key` es `R5` o `R1`.
      enum:
        - S
        - 'N'
      example: 'N'
  securitySchemes:
    client_api_key:
      type: apiKey
      name: X-Qbikode-ClientApiKey
      in: header
      description: >
        API-KEY de la empresa que hace la petición. Este dato se puede consultar
        en el panel web, accediendo a la sección _Empresas_ y accediendo a la
        ficha de la empresa en.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.