Skip to content

Verifactu Direct API · operation types ​

You provide the breakdown already classified on each line. The full registration body is in Getting started; only lineas and, for international operations, id_otro change here. Sample data is fictitious.

Multiple VAT rates ​

json
"lineas": [
  { "base_imponible": "350", "tipo_impositivo": "21", "cuota_repercutida": "73.50" },
  { "base_imponible": "180", "tipo_impositivo": "10", "cuota_repercutida": "18" }
]

VAT exempt ​

json
{ "serie": "FV", "numero": "1050", "fecha_expedicion": "2026-04-01",
  "tipo_factura": "F1", "descripcion": "Exempt healthcare services",
  "nif": "B66912043", "nombre": "Valley Clinic Ltd",
  "lineas": [ { "base_imponible": "500", "operacion_exenta": "E1" } ],
  "importe_total": "500" }

Not subject ​

json
"lineas": [ { "base_imponible": "500", "calificacion_operacion": "N1" } ]

Reverse charge ​

The recipient accounts for VAT: calificacion_operacion: "S2", with zero rate and amount.

json
{ "tipo_factura": "F1", "descripcion": "Construction work (reverse charge)",
  "nif": "B85447761", "nombre": "Northwind Works Ltd",
  "lineas": [ { "base_imponible": "1200", "tipo_impositivo": "0",
               "cuota_repercutida": "0", "calificacion_operacion": "S2" } ],
  "importe_total": "1200" }

Intra-EU supply of goods ​

Use the recipient's VAT-IES number (id_type: "02") and exemption E5.

json
{ "tipo_factura": "F1", "descripcion": "Supply of goods to an EU company",
  "id_otro": { "codigo_pais": "FR", "id_type": "02", "id": "FR47812904563" },
  "nombre": "Atelier Vionnet SARL",
  "lineas": [ { "base_imponible": "800", "operacion_exenta": "E5" } ],
  "importe_total": "800" }

Intra-EU B2B services ​

json
{ "tipo_factura": "F1", "descripcion": "B2B services to an EU company",
  "id_otro": { "codigo_pais": "DE", "id_type": "02", "id": "DE293847561" },
  "nombre": "Brückner Logistik GmbH",
  "lineas": [ { "base_imponible": "800", "calificacion_operacion": "N2" } ],
  "importe_total": "800" }

Intra-EU B2C below the threshold ​

Identify a private customer without VAT-IES using id_type: "03" and charge Spanish VAT.

json
{ "tipo_factura": "F1", "descripcion": "Sale to an EU consumer",
  "id_otro": { "codigo_pais": "IT", "id_type": "03", "id": "YA1846723" },
  "nombre": "Giulia Ferraro",
  "lineas": [ { "base_imponible": "250", "tipo_impositivo": "21", "cuota_repercutida": "52.50" } ],
  "importe_total": "302.50" }

Intra-EU B2C under OSS ​

Above the threshold, use clave_regimen: "17" and calificacion_operacion: "N2", without a Spanish rate or amount.

json
{ "tipo_factura": "F1", "descripcion": "Sale to an EU consumer (OSS)",
  "id_otro": { "codigo_pais": "PT", "id_type": "03", "id": "K9920841" },
  "nombre": "Tiago Sousa",
  "lineas": [ { "base_imponible": "250", "clave_regimen": "17", "calificacion_operacion": "N2" } ],
  "importe_total": "250" }

Export of goods ​

json
{ "tipo_factura": "F1", "descripcion": "Export of goods",
  "id_otro": { "codigo_pais": "US", "id_type": "03", "id": "P472019583" },
  "nombre": "Northbridge Trading LLC",
  "lineas": [ { "base_imponible": "900", "clave_regimen": "02", "operacion_exenta": "E2" } ],
  "importe_total": "900" }

Export of services ​

json
{ "tipo_factura": "F1", "descripcion": "Services to a non-EU customer",
  "id_otro": { "codigo_pais": "US", "id_type": "03", "id": "P472019583" },
  "nombre": "Northbridge Trading LLC",
  "lineas": [ { "base_imponible": "900", "calificacion_operacion": "N2" } ],
  "importe_total": "900" }

Equivalence surcharge ​

Use clave_regimen: "18" and supply the surcharge rate and amount.

json
"lineas": [
  { "base_imponible": "200", "tipo_impositivo": "21", "cuota_repercutida": "42",
    "clave_regimen": "18", "tipo_recargo_equivalencia": "5.2",
    "cuota_recargo_equivalencia": "10.4" }
]

IGIC and IPSI ​

json
"lineas": [ { "impuesto": "03", "base_imponible": "200", "tipo_impositivo": "7", "cuota_repercutida": "14" } ]
json
"lineas": [ { "impuesto": "02", "base_imponible": "200", "tipo_impositivo": "10", "cuota_repercutida": "20" } ]

Used-goods margin scheme (REBU) ​

VAT is calculated on the margin, but importe_total is the sale price. clave_regimen: "03" disables the base + tax = total validation.

json
{ "tipo_factura": "F1", "descripcion": "Sale of used goods (REBU)",
  "nif": "B72648193", "nombre": "Northwind Workshop Ltd",
  "lineas": [ { "base_imponible": "826.45", "tipo_impositivo": "21",
               "cuota_repercutida": "173.55", "clave_regimen": "03" } ],
  "importe_total": "3000" }

Issued by a third party or the recipient ​

json
"especial": { "emitida_por_tercero_o_destinatario": "T",
              "nombre_tercero": "Summit Advisors Ltd", "nif_tercero": "B66912043" }
json
"especial": { "emitida_por_tercero_o_destinatario": "D" }

Code table ​

FieldValues
tipo_facturaF1, F2, F3, R1–R5
impuesto01 VAT, 02 IPSI, 03 IGIC
operacion_exentaE1–E6
calificacion_operacionS1, S2, N1, N2
clave_regimen01 general, 02 export, 03 REBU, 17 OSS, 18 surcharge
id_otro.id_type02 VAT ID, 03 passport, 04 country ID, 06 other
tipo_rectificativaS replacement, I differences
rechazo_previoN, X, S

Bilteo · Documentation