Skip to main content
POST
/
api
/
invoices
Enviar registro de facturación
curl --request POST \
  --url https://api.kubifactu.com/api/invoices \
  --header 'Content-Type: application/json' \
  --header 'X-Qbikode-ClientApiKey: <api-key>' \
  --data '
{
  "sif_id": "9db0bca1-187e-4cf4-b87c-96f2044008d7",
  "invoice_type_key": "F1",
  "sender_data": {
    "company_name": "<string>",
    "tax_id_number": "<string>"
  },
  "full_invoice_number": "2025-00001",
  "fiscal_year": 2025,
  "issue_date": "2025-09-15",
  "operation_description": "<string>",
  "lines": [
    {
      "tax_type_key": "01",
      "vat_tax_regime_key": "01",
      "igic_tax_regime_key": "01",
      "operation_type_key": "S1",
      "tax_base": 200,
      "exemption_cause_key": "E1",
      "tax_base_at_cost": 123,
      "tax_rate": 21,
      "tax_quota": 42,
      "equalization_tax_rate": 5.2,
      "equalization_tax_quota": 10.4
    }
  ],
  "total_quota": 123,
  "total_amount": 123,
  "client_invoice_id": "96f2044008d7iujfd78jspo4",
  "callback_url": "https://www.tuempresa.com/kubifactu/callback",
  "recipients": [
    {
      "company_name": "<string>",
      "tax_id_number": "<string>",
      "other_country_code": "<string>",
      "other_tax_id_type_key": "02",
      "other_tax_id_number": "<string>"
    }
  ],
  "representative_company_name": "<string>",
  "representative_tax_id_number": "<string>",
  "previous_rejection_key": "X",
  "correction_key": "S",
  "operation_date": "2025-02-26",
  "simplified_invoice_key": "S",
  "without_recipient_identification_key": "S",
  "macrodata_key": "S",
  "issued_by_third_party_or_recipient_key": "T",
  "third_party_data": {
    "company_name": "<string>",
    "tax_id_number": "<string>",
    "other_country_code": "<string>",
    "other_tax_id_type_key": "02",
    "other_tax_id_number": "<string>"
  },
  "rectificative_type_key": "S",
  "rectified_tax_base": 2500.55,
  "rectified_tax_quota": 42.3,
  "rectified_equalization_tax_quota": 5.2,
  "rectified_invoices": [
    {
      "tax_id_number": "<string>",
      "full_invoice_number": "<string>",
      "issue_date": "2025-02-26"
    }
  ],
  "substituted_invoices": [
    {
      "tax_id_number": "<string>",
      "full_invoice_number": "<string>",
      "issue_date": "2025-02-26"
    }
  ],
  "coupon_key": "N",
  "invoicing_agreement_registration_number": "<string>",
  "sif_agreement_id": "<string>"
}
'
{
  "data": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "record_type": "creation",
    "request_id": "2cc8ef846029ec69613711ad1d85f6dfebf16ffb",
    "sif_id": "0995C42C-6708-44FB-BFBF-B363A5FE873E",
    "fiscal_year": 123,
    "full_invoice_number": "<string>",
    "issue_date": "2025-09-15",
    "created_at": "2025-09-15T07:35:24.992854Z",
    "fingerprint": "<string>",
    "csv": "<string>",
    "vf_post_status": "success",
    "vf_record_registration_status": "success",
    "has_warnings": false,
    "vf_error_descriptions": "<string>",
    "next_request_waiting_time": 123,
    "next_request_datetime": "1977-04-22T06:00:00Z",
    "qr_value": "<string>",
    "qr_image": "aSDinaTvuI8gbWludGxpZnk=",
    "xml_contents": "aSDinaTvuI8gbWludGxpZnk="
  }
}

Authorizations

X-Qbikode-ClientApiKey
string
header
required

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.

Body

application/json
sif_id
string<uuid>
required

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
enum<string>
required

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
Available options:
F1,
F2,
F3,
R1,
R2,
R3,
R4,
R5
Example:

"F1"

sender_data
object
required

Información referente al emisor de la factura.

full_invoice_number
string
required

Serie+Nº Factura que identifica a la factura emitida. Sólo puedo contener caracteres ASCII del 32 a 126 (caracteres imprimibles). Ejemplo: 2025-00001.

Example:

"2025-00001"

fiscal_year
integer
required

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:

2025

issue_date
string<date>
required

Fecha de expedición del registro de facturación.

No puede ser una fecha futura.

Example:

"2025-09-15"

operation_description
string
required

Descripción del objeto de la factura.

lines
object[]
required

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.

El desglose debe agruparse por condición fiscal completa: tax_rate + vat_tax_regime_key o igic_tax_regime_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 o igic_tax_regime_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
Maximum array length: 12
total_quota
number<decimal>
required

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
number<decimal>
required

Importe total de la factura. Ʃ(tax_base + tax_quota + equalization_tax_quota) de todas las líneas de detalle de desglose (agrupación lines). Valor con 12 dígitos en la parte entera y 2 decimales. Ejemplo: 2450.75.

client_invoice_id
string

Identificador único de la factura dentro del sistema del cliente. Si se envía y ya existe una factura con ese mismo client_invoice_id para la empresa actual, no se generará una nueva factura: el sistema devolverá directamente la factura existente.

Maximum string length: 50
Example:

"96f2044008d7iujfd78jspo4"

callback_url
string<url>

Sólo aplicable a facturas diferidas. 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 emisira.
  • sender_tax_id_number: string. CIF/NIF de la empresa emisora.
  • full_invoice_number: string. Número de factura.
  • fingerprint: string. Huella del registro de facturación.
  • vf_post_status: string. 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. 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.
  • xml_contents: string|null. XML del registro de facturación enviado a Veri*Factu en formato Base64. Si el registro de facturación forma parte de un envío en diferido, el XML puede contener información sobre otros registros de facturación incluidos en el envío.
Example:

"https://www.tuempresa.com/kubifactu/callback"

recipients
object[]

Información de los receptores de la factura. Obligatorio para facturas ordinarias.

representative_company_name
string

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
string

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
enum<string>

Indica si el registro que se envía corresponde a una subsanación de un envío anterior rechazado por la AEAT.

  • X: El registro se reenvía porque el envío anterior fue rechazado (no llegó a registrarse en la AEAT). Solo puede informarse cuando correction_key = S. Se utiliza al reenviar una factura previamente rechazada para que la AEAT la procese como una corrección del intento fallido, sin alterar los datos originales de emisión ni generar una nueva factura.
  • N: No, se trata de un alta normal/inicial.
Available options:
X,
N
correction_key
enum<string>

Indicador que especifica que se trata de una subsanación de un registro de facturación de alta previamente generado y exitente en la AEAT. 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).

  • S: Sí, se trata de una subsanación de un registro de facturación anterior que existe en la AEAT.
  • N: No, se trata de un alta normal/inicial.
Available options:
S,
N
operation_date
string<date>

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:

"2025-02-26"

simplified_invoice_key
enum<string>

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
Available options:
S,
N
without_recipient_identification_key
enum<string>

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
Available options:
S,
N
macrodata_key
enum<string>

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
Available options:
S,
N
issued_by_third_party_or_recipient_key
enum<string>

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

Available options:
T,
D
third_party_data
object

Información del tercero que expide la factura.

rectificative_type_key
enum<string>

Campo que identifica si el tipo de factura rectificativa es por sustitución o por diferencias.

  • S: Por sustitución.
  • I: Por diferencias.
Available options:
S,
I
rectified_tax_base
number<decimal>

Base imponible rectificada. Valor con 12 dígitos en la parte entera y 2 decimales. Ejemplo: 2500.55.

Example:

2500.55

rectified_tax_quota
number<decimal>

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
number<decimal>

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
object[]

Lista de facturas que se están rectificando.

substituted_invoices
object[]

Lista de facturas que se quieren sustituir.

Sólo podrá incluirse esta agrupación cuando el campo invoice_type_key sea F3.

coupon_key
enum<string>

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.

Available options:
S,
N
Example:

"N"

invoicing_agreement_registration_number
string

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
string

Identificación del acuerdo (resolución) a que se refiere el artículo 5 del Reglamento.

Response

Factura enviada con éxito.

data
object