En esta sección se muestran numerosos ejemplos de llamadas y peticiones a la API Verifactu. Empezamos con la emisión de facturas simplificadas en las que no se identifica al destinatario ya que son las más sencillas.
Después, discutimos en detalle las facturas normales, es decir, aquellas en que se identifica al destinatario. Mostramos ejemplos en los que el destinatario es un ciudadano o empresa española censada en la AEAT. También incluimos ejemplos en que el destinatario es una empresa de un país miembro identificada mediante un IVA del censo VIES.
Después, pasamos a discutir los diferentes tipos de facturas rectificativas incluyendo varios ejemplos de facturas rectificativas de diferencia y de sustitución, así como facturas de canje, en las que convierte una factura simplificada en una normal.
Por último, se muestran ejemplos de anulación de facturas y subsanación.
La factura simplificada es posible en determinados casos como, por ejemplo, cuando los importes son pequeños. Este tipo de factura conlleva unos requisitos de información menores a la factura normal, no siendo obligatorio por ejemplo incluir información fiscal sobre el destinatario. A ojos de la administración tributaria, los "tickets" por importes pequeños son facturas simplificadas.
Este tipo de factura se genera haciendo una llamada al endpoint /verifactu/create utilizando el campo tipo_factura igual a F2.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F2",
"descripcion": "Factura simplificada",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
},
{
"base_imponible": "100",
"tipo_impositivo": "10",
"cuota_repercutida": "10"
}
],
"importe_total": "352"
}Nuestra API validará que el importe sea inferior a 3.000€ y rechazará la factura si no lo es.
La factura normal conlleva obligaciones de información superiores a las de la factura simplificada, siendo obligatorio especificar datos fiscales del receptor de la misma. Este tipo de factura se genera utilizando el campo tipo_factura igual a F1.
Cuando el destinatario es un ciudadano o empresa española, podemos identificarlo mediante los campos nif y nombre. El campo nif debe ser un DNI, NIE o CIF válido. El campo nombre corresponde al nombre y apellidos para ciudadanos y la razón social para empresas. A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura normal",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Cuando el destinatario corresponde a una empresa, es suficiente con que el NIF sea correcto. Sin embargo, cuando el destinatario corresponde a una persona física, también es necesario que el nombre coincida con el que aparece en el DNI o NIE.
Nuestra API realiza esta validación de forma automática y rechaza la factura si no lo está. Esto previene que se genere un registro de facturación que la AEAT rechazará. En la API de gestión de NIFs disponemos de un endpoint específico para consultar el censo de la AEAT.
En algunos casos, las facturas pueden contener múltiples IVAs. En este caso, el campo lineas debe contener un array con los tipos impositivos correspondientes.
A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura con multiples IVAs",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
},
{
"base_imponible": "100",
"tipo_impositivo": "10",
"cuota_repercutida": "10"
}
],
"importe_total": "352"
}En el caso de venta de productos a empresas o autónomos de la UE, cuando ambas partes están inscritas en el ROI, la factura no incluye IVA. Aunque a efectos prácticos el destinatario autoliquida el impuesto en su país (mecanismo que allí actúa como "inversión del sujeto pasivo"), para la Hacienda española y VeriFactu esto no se clasifica con la etiqueta de inversión del sujeto pasivo (S2). A nivel técnico y legal en España, se declara y debe constar explícitamente en la factura como una entrega exenta por el artículo 25 de la Ley del IVA. Esto se traduce en que se debe marcar la operación como exenta usando el campo operacion_exenta con el valor E5.
Al tratarse de un destinatario extranjero, se debe usar el campo id_otro para identificarlo indicando que el tipo de documento es 02 (IVA-VIES intracomunitario) y el código de país correspondiente. Nuestra API valida por defecto que dicho IVA-VIES está correctamente inscrito en el censo.
A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura B2B intracomunitaria - Venta de bienes",
"id_otro": {
"codigo_pais": "BE",
"id_type": "02",
"id": "BE0404621642"
},
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"operacion_exenta": "E5"
}
],
"importe_total": "200"
}En el caso de prestación de servicios a empresas o profesionales de la UE, la regla general de localización (artículo 69 de la Ley del IVA) establece que el servicio se entiende realizado en la sede del destinatario. Por tanto, para la Hacienda española, esta operación no está sujeta al IVA español.
Al igual que ocurre con los bienes, aunque el cliente autoliquide el impuesto en su país, para VeriFactu esto no se clasifica como inversión del sujeto pasivo (S2) ni como una operación exenta. A nivel técnico, esto se traduce en que se debe marcar la operación como no sujeta usando el campo calificacion_operacion con el valor N2 (No sujeta por reglas de localización).
Para identificar al destinatario extranjero, se emplea igualmente el campo id_otro, indicando que el tipo de documento es 02 (IVA-VIES intracomunitario) junto con su código de país. Nuestra API valida por defecto que dicho IVA-VIES está correctamente inscrito en el censo.
A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura B2B intracomunitaria - Prestación de servicios",
"id_otro": {
"codigo_pais": "BE",
"id_type": "02",
"id": "BE0404621642"
},
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"calificacion_operacion": "N2"
}
],
"importe_total": "200"
}Cuando se venden bienes o servicios a un consumidor final (particular) residente en otro país de la Unión Europea y el volumen global de estas ventas no supera el umbral de 10.000 € anuales, la operación tributa en origen. Esto significa que la factura debe incluir el IVA español, exactamente igual que si el cliente estuviera en España.
A efectos de VeriFactu, esto se clasifica como una operación sujeta y no exenta convencional. En el JSON se debe reflejar usando el campo calificacion_operacion con el valor por defecto S1 (Sujeta y no exenta - sin inversión del sujeto pasivo). A diferencia de los casos B2B, aquí sí es obligatorio enviar la base imponible junto con el tipo_impositivo (por ejemplo, 21) y su correspondiente cuota_repercutida.
Al tratarse de un cliente particular, no dispondrá de un NIF-IVA intracomunitario. Para identificarlo en la factura se emplea el campo id_otro, pero indicando que el tipo de documento es 03 (Número de pasaporte) o también se puede usar 04 (ID en pais de residencia) o 06 (Otro documento probatorio), acompañado del código de su país.
A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura B2C intracomunitaria - Por debajo del umbral",
"id_otro": {
"codigo_pais": "DE",
"id_type": "03",
"id": "F8624KW3J6"
},
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Cuando el volumen de ventas a particulares de otros países de la UE supera los 10.000 € anuales, la normativa exige que se aplique el IVA del país de residencia del comprador (país de destino). Para simplificar la declaración de estos IVAs extranjeros sin tener que darse de alta fiscalmente en cada país, se utiliza el régimen especial de Ventanilla Única (OSS).
Al estar sujeta a un IVA extranjero, para la Hacienda española esta es una operación no sujeta. En VeriFactu, esto exige informar la clave_regimen con el valor 17 (Régimen OSS); por otro, se debe usar calificacion_operacion con el valor N2 (No sujeta por reglas de localización). Como el bloque de desglose de IVA en VeriFactu está diseñado para el IVA español, no se deben enviar los campos tipo_impositivo ni cuota_repercutida en estas líneas.
Al tratarse de un cliente particular, no dispondrá de un NIF-IVA intracomunitario. Para identificarlo en la factura se emplea el campo id_otro, pero indicando que el tipo de documento es 03 (Número de pasaporte) o también se puede usar 04 (ID en pais de residencia) o 06 (Otro documento probatorio), acompañado del código de su país.
A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura B2C intracomunitaria - OSS",
"id_otro": {
"codigo_pais": "DE",
"id_type": "03",
"id": "F8624KW3J6"
},
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"clave_regimen": "17",
"calificacion_operacion": "N2"
}
],
"importe_total": "200"
}La exportación de bienes implica la venta de productos físicos que salen del territorio de aplicación del IVA de la Unión Europea. En estos casos, la operación está sujeta pero exenta de IVA español, independientemente de si el destinatario es una empresa, un profesional o un consumidor final.
Para reflejar correctamente esta exención en VeriFactu, el JSON requiere una configuración específica. En primer lugar, se debe utilizar la clave_regimen con el valor 02 (Exportación). En segundo lugar, la línea debe marcarse explícitamente como exenta usando el campo operacion_exenta con el valor E2 (Exenta por el artículo 21 de la Ley del IVA). Al existir una causa de exención, la API no aceptará que se envíen los campos de tipo impositivo ni cuota repercutida.
La identificación del cliente extracomunitario se realiza siempre a través del bloque id_otro. Dependiendo del documento que nos facilite el cliente, se utilizarán tipos de documento como el 03 (Pasaporte) , 04 (ID en país de residencia) o 06 (Otro documento probatorio), acompañados siempre de su código de país ISO.
A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura extracomunitaria - Exportación de bienes",
"id_otro": {
"codigo_pais": "US",
"id_type": "03",
"id": "M76543210"
},
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"clave_regimen": "02",
"operacion_exenta": "E2"
}
],
"importe_total": "200"
}La prestación de servicios a clientes ubicados fuera de la Unión Europea se rige por las reglas de localización del IVA. Por norma general, el servicio se entiende prestado en la sede del destinatario. Por lo tanto, la operación no está sujeta al IVA español, independientemente de si el cliente es una empresa (B2B) o un consumidor final (B2C).
A nivel de integración con VeriFactu, al no estar sujeta la operación al impuesto nacional, el JSON debe reflejar esta situación usando el campo calificacion_operacion con el valor N2 (No sujeta por reglas de localización). Al tratarse de una operación no sujeta, no se deben incluir los campos tipo_impositivo ni cuota_repercutida en la línea de la factura.
Para identificar al cliente extracomunitario en la factura, se debe utilizar el bloque id_otro. Se emplearán tipos de documento como el 03 (Pasaporte), 04 (ID en el país de residencia) o 06 (Otro documento probatorio), indicando siempre el código de país correspondiente.
A continuación se muestra un ejemplo de dicha factura.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura extracomunitaria - Prestación de servicios",
"id_otro": {
"codigo_pais": "US",
"id_type": "03",
"id": "M76543210"
},
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"calificacion_operacion": "N2"
}
],
"importe_total": "200"
}Una factura exenta de IVA es aquella en la que no se aplica este impuesto porque la ley lo permite en ciertos casos, como servicios médicos, educativos, sociales, seguros o el alquiler de viviendas. En estas facturas no se añade IVA al precio, pero sí debe incluirse una nota que indique la exención según el artículo Ley del IVA (BOE-A-1992-28740) que corresponda.
Para emitir una factura exenta de IVA usando nuestra API se debe usar el campo operacion_exenta para indicar la exención de IVA. Un ejemplo es el siguiente:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Operación exenta",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"operacion_exenta": "E1"
}
],
"importe_total": "200"
}Los valores posibles de operacion_exenta se encuentran en nuestra documentación, aquí.
El IGIC es el impuesto que grava el consumo de bienes y servicios en las Islas Canarias, similar al IVA en la península. Se aplica a todas las actividades empresariales y profesionales realizadas en Canarias. Los tipos impositivos varían según el tipo de bien o servicio, con un tipo general del 7% y tipos reducidos para productos esenciales como alimentos, medicamentos o transporte. La ley que regula el IGIC es la Ley 4/2012, de 25 de Junio, de Medidas Administrativas y Fiscales de Canarias(BOE-A-2012-9282).
Para emitir una factura con IGIC usando nuestra API se debe indicar usando el campo impuesto igual a 03. Un ejemplo es el siguiente:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Operacion con IGIC",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"impuesto": "03",
"base_imponible": "200",
"tipo_impositivo": "7",
"cuota_repercutida": "14"
}
],
"importe_total": "214"
}Además de marcar el impuesto, hemos indicado el tipo impositivo igual al 7%, que es el régimen general. Sin embargo, se pueden otros valores dependiendo del caso concreto.
Los valores posibles de impuesto se encuentran en nuestra documentación, aquí.
El IPSI es el impuesto que grava el consumo de bienes y servicios en las ciudades autónomas de Ceuta y Melilla, similar al IVA en la península. Se aplica a todas las actividades empresariales y profesionales realizadas en estas ciudades. Los tipos impositivos varían según el tipo de bien o servicio, con tipos que van desde el 0,5% hasta el 10%. La ley que regula el IPSI es la Ley 8/1991, de 25 de Marzo (BOE-A-1991-7645).
Para emitir una factura con IPSI usando nuestra API se debe indicar usando el campo impuesto igual a 02. Un ejemplo es el siguiente:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Operacion con IPSI",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"impuesto": "02",
"base_imponible": "200",
"tipo_impositivo": "4",
"cuota_repercutida": "8"
}
],
"importe_total": "208"
}Además de marcar el impuesto, hemos indicado el tipo impositivo igual al 5% pero se pueden usar otros valores dependiendo del caso concreto.
Los valores posibles de impuesto se encuentran en nuestra documentación, aquí.
Una factura con retención de IRPF es aquella en la que se aplica una reducción porcentual sobre la base imponible, según lo establecido por la normativa fiscal. Esta retención se descuenta directamente del importe a cobrar y debe ser ingresada por el cliente en Hacienda en nombre del autónomo.
Una pregunta habitual es cómo se indica la retención de IRPF en una factura en el sistema Verifactu. La respuesta de la AEAT es clara: la retención no de debe indicarse en absoluto.
Los gastos suplidos representan una categoría específica de gastos en el ámbito de la facturación y contabilidad. Son aquellos que un profesional o empresa paga en nombre de su cliente y posteriormente reclama a este. De la misma forma, los suplidos no debes indicarse en el registro de facturación en el sistema Verifactu.
Esto se puede leer en las preguntas frecuentes de la AEAT, aquí.
Una factura no sujeta a IVA es aquella en la que no se aplica este impuesto porque la operación no está incluida en el ámbito de aplicación del IVA según la Ley del IVA (BOE-A-1992-28740). Esto significa que, por su naturaleza, la operación no constituye un hecho imponible para el impuesto. Por ejemplo, cuando un inquilino paga una vivienda de alquiler o cuando un vehículo se vende entre particulares.
Es importante destacar que una operación no sujeta a IVA no es lo mismo que una operación exenta de IVA. Mientras que en una operación exenta el impuesto se aplica pero la ley permite no cobrarlo en ciertos casos, en una operación no sujeta el impuesto no se aplica desde el principio.
Para emitir una factura no sujeta usando nuestra API se debe usar el campo calificacion_operacion para indicar el motivo por el cual la operación no está sujeta a IVA. Un ejemplo es el siguiente:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Operación no sujeta",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"calificacion_operacion": "N1"
}
],
"importe_total": "200"
}Los valores posibles de calificacion_operacion se encuentran en nuestra documentación, aquí.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura de abono",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "-200",
"tipo_impositivo": "21",
"cuota_repercutida": "-42"
}
],
"importe_total": "-242"
}Una operación frecuente consiste en transformar una factura simplificada en una factura normal, lo que se conoce como factura de canje.
Supongamos que hemos enviado un registro de facturación correspondiente a una factura simplificada, es decir, una con tipo_factura igual a F2 en la que no se identifica al destinatario.
{
"serie": "SIMPLE",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F2",
"descripcion": "Descripcion de la operacion",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Si, una vez emitida esta factura, nos surge la necesidad de identificar al destinatario tenemos dos opciones dentro del sistema Verifactu, que mostramos a continuación.
La primera opción requiere el envío de dos registros de facturación adicionales, uno correspondiente a una factura de abono (importe total negativo) y otro para emitir la factura ordinaria.
{
"serie": "SIMPLE",
"numero": "2",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F2",
"descripcion": "Factura de abono",
"lineas": [
{
"base_imponible": "-200",
"tipo_impositivo": "21",
"cuota_repercutida": "-42"
}
],
"importe_total": "-242"
}A continuación se procede a emitir una factura ordinaria con tipo_factura igual a F1.
{
"serie": "EJEMPLO",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Descripcion de la operacion: factura normal",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Aunque este procedimiento requiere el envío de dos registros de facturación adicionales, tiene la ventaja de ser muy fácil de trabajar con él ya que fácilmente se ve que la suma total de los tres registros de facturación suman a lo que debería.
Una manera alternativa de realizar la misma operación es hacerlo en un único paso creando un resgistro de facturación con tipo_factura igual a F3 (sustitutiva de factura simple). A continuación se muestra un ejemplo del JSON que se debería enviar.
Como se puede ver, la serie y el número de la factura sustitutiva son diferentes a la de la factura simplificada original. Usando el campo facturas_sustituidas se indican las facturas que se sustituyen. En general, este campo es de tipo array ya que se puede hacer referencia a varias facturas.
{
"serie": "SUSTITUTIVA",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F3",
"descripcion": "Descripcion de la operacion",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"facturas_sustituidas": [
{
"serie": "SIMPLE",
"numero": "1",
"fecha_expedicion": "19-12-2024"
}
],
"importe_total": "242"
}Las facturas rectificativas son documentos esenciales para corregir errores o modificar datos de facturas previas. En la API Verifactu, la creación de una factura rectificativa requiere indicar el tipo de factura rectificativa mediante el campo tipo_factura. Existen cinco opciones, cada una basada en artículos específicos de la Ley del IVA (Ley 37/1992) y sus regulaciones.
Cuando se haya producido un error fundado de derecho o alguna de las causas del art. 80.Uno, Dos y Seis LIVA (devoluciones de mercancías, descuentos o alteraciones en el precio posteriores a la realización de la operación, resolución de operaciones, importe de la contraprestación provisional) deberá emitirse una factura rectificativa con serie específica cuya información se registrará con el tipo de factura R1.
En el caso de la devolución de mercancías o de envases y embalajes que se realicen con ocasión de un posterior suministro al mismo destinatario y tipo impositivo no será necesario la expedición de una factura rectificativa, sino que se restará el importe de las mercancías o de los envases y embalajes devueltos del importe de dicha operación posterior, pudiendo ser el resultado positivo o negativo.
Se incluirá como fecha de operación la fecha en que se realizó la entrega o prestó el servicio, indicada en la factura inicial. En el caso de rectificar varias facturas con una única factura rectificativa se indicará la fecha más reciente.
Cuando se haya producido una modificación de la base imponible del IVA por encontrarse el cliente en concurso de acreedores (art. 80.Tres LIVA) deberá emitirse una factura rectificativa con serie específica cuya información se registrará con el tipo de factura R2.
Asimismo, se deberá identificar el tipo de factura rectificativa con las claves "S- por sustitución" o "I- por diferencias" según la forma en que el empresario desee llevar a cabo la rectificación.
Se incluirá como fecha de operación la fecha en que se realizó la entrega o presto el servicio, indicada en la factura inicial. En el caso de rectificar varias facturas con una única factura rectificativa se indicará la fecha más reciente.
La identificación de las facturas rectificadas será opcional. En el caso de que se identifiquen se deberá informar el número y la fecha de expedición.
Cuando se haya producido una modificación de la base imponible del IVA por incobro del cliente (art. 80.Cuatro LIVA) deberá emitirse una factura rectificativa con serie específica cuya información se registrará con el tipo de factura R3.
Asimismo, se deberá identificar el tipo de factura rectificativa con las claves "S- por sustitución" o "I- por diferencias" según la forma en que el empresario desee llevar a cabo la rectificación.
Se incluirá como fecha de operación la fecha en que se realizó la entrega o presto el servicio, indicada en la factura inicial. En el caso de rectificar varias facturas con una única factura rectificativa se indicará la fecha más reciente.
La identificación de las facturas rectificadas será opcional. En el caso de que se identifiquen se deberá informar el número y la fecha de expedición.
Se indicará tipo de factura R4 en estas situaciones:
La rectificación de una factura simplificada se registrará con la clave R5 cualquiera que sea el motivo de la misma.
Al igual que ocurre en el caso de la factura de canje, tenemos la opción de realizar la rectificación de dos manera diferentes: en dos pasos, o en un paso.
Podría parecer que es más conveniente hacer la rectificación en un solo paso ya que te ahorras un registro de facturación. Sin embargo, la ventaja de hacer la rectificación en dos pasos es que la suma del campo importe_total de todos los registros de facturación da como resultado el balance total final. Con la rectificación en un solo paso, es necesario tener en cuenta el valor de los campos base_rectificada y cuota_rectificada para obtener el balance total, lo que puede complicar la implementación. En cualquier caso, ambos métodos son posibles e igualmente válidos de cara a la AEAT.
A continuación mostramos varios ejemplos de facturas rectificativas por sustitución. En todos ellos daremos los JSON correspondientes a la rectificación usando los dos métodos descritos anteriormente: la rectificación en dos pasos y en un solo paso.
Supongamos que se emite una factura normal con base imponible igual a 1.000€ y tipo impositivo del 21%, con fecha de operación 01-04-2025 y fecha de expedición 07-04-2025. Es decir, usando la API de Verifactu, se registra la factura con el siguiente JSON:
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "F1",
"descripcion": "Factura original",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "1000",
"tipo_impositivo": "21",
"cuota_repercutida": "210"
}
],
"importe_total": "1210"
}Después de emitir esta factura, se quiere rectificar siendo la rectificación una disminución de la base imponible de 200 euros. A continuación mostramos los JSONs necesarios para realizar la sustitución usando las dos opciones: rectificación en dos pasos y rectificación en un paso.
Usando la opción de rectificación en dos pasos, se emiten dos registros de facturación adicionales para realizar la rectificación. En el primero se emite una factura en negativo con base imponible igual a -1.000€:
{
"serie": "A",
"numero": "2",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura en negativo",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "-1000",
"tipo_impositivo": "21",
"cuota_repercutida": "-210"
}
],
"importe_total": "-1210"
}En el segundo registro de facturación se emite una rectificativa con base imponible igual a 800€. Nótese que los campos base_rectificada y cuota_rectificada valen cero.
{
"serie": "RECTIFICATIVA",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "Rx",
"tipo_rectificativa": "S",
"descripcion": "Rectificacion por sustitucion en dos pasos",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "800",
"tipo_impositivo": "21",
"cuota_repercutida": "168"
}
],
"importe_total": "968",
"importe_rectificativa": {
"base_rectificada": "0",
"cuota_rectificada": "0"
},
"facturas_rectificadas": [
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "07-04-2025"
}
]
}Como se puede observar, la suma de los tres registros de facturación es 1210 + (-1210) + 968 = 968, que corresponde al importe total deseado. Esta es la ventaja de hacer la rectificativa en dos pasos, su interpretación es muy clara.
Supongamos que, en vez de emitir una factura en negativo seguida de la rectificativa, quisieramos hacer la rectificativa con un único registro de facturación. Esto se puede hacer simplemente emitiendo una rectificativa con base imponible igual a 800€ y con los campos base_rectificada y cuota_rectificada igual al valor de la factura que se quiere rectificar.
{
"serie": "RECTIFICATIVA",
"numero": "2",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "Rx",
"tipo_rectificativa": "S",
"descripcion": "Rectificacion por sustitucion en un paso",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "800",
"tipo_impositivo": "21",
"cuota_repercutida": "168"
}
],
"importe_total": "968",
"importe_rectificativa": {
"base_rectificada": "1000",
"cuota_rectificada": "210"
},
"facturas_rectificadas": [
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "07-04-2025"
}
]
}En este caso, como se puede observar, es necesario tener en cuenta los campos base_rectificada y cuota_rectificada para calcular el balance final de la operación.
Supongamos que se emite una factura normal con base imponible igual a 1.000€ y tipo impositivo del 21%, con fecha de operación 01-04-2025 y fecha de expedición 07-04-2025. Es decir, usando la API de Verifactu, se registra la factura con el siguiente JSON:
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "F1",
"descripcion": "Factura original",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "1000",
"tipo_impositivo": "21",
"cuota_repercutida": "210"
}
],
"importe_total": "1210"
}Después de emitir esta factura, va a ser objecto de rectificación por impago, eliminando la totalidad de la cuota repercutida. A continuación mostramos los JSONs necesarios para realizar la sustitución usando las dos opciones: rectificación en dos pasos y rectificación en un paso.
Usando la opción de rectificación en dos pasos, se emiten dos registros de facturación adicionales para realizar la rectificación. En el primero se emite una factura en negativo con base imponible igual a -1.000€ y tipo impositivo del 21%:
{
"serie": "A",
"numero": "2",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura en negativo",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "-1000",
"tipo_impositivo": "21",
"cuota_repercutida": "-210"
}
],
"importe_total": "-1210"
}En el segundo registro de facturación se emite una rectificativa con base imponible igual a 1.000€. Nótese que los campos base_rectificada y cuota_rectificada valen cero.
{
"serie": "RECTIFICATIVA",
"numero": "3",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "Rx",
"tipo_rectificativa": "S",
"descripcion": "Rectificacion por sustitucion en dos pasos",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "1000",
"tipo_impositivo": "0",
"cuota_repercutida": "0"
}
],
"importe_total": "1000",
"importe_rectificativa": {
"base_rectificada": "0",
"cuota_rectificada": "0"
},
"facturas_rectificadas": [
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "07-04-2025"
}
]
}Supongamos que, en vez de emitir una factura en negativo seguida de la rectificativa, quisieramos hacer la rectificativa con un único registro de facturación. Esto se puede hacer simplemente emitiendo una rectificativa con base imponible igual a 1.000€, cuota repercutida igual a cero y con los campos base_rectificada y cuota_rectificada igual al valor de la factura que se quiere rectificar.
{
"serie": "RECTIFICATIVA",
"numero": "4",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "Rx",
"tipo_rectificativa": "S",
"descripcion": "Rectificacion por sustitucion en un paso",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "1000",
"tipo_impositivo": "0",
"cuota_repercutida": "0"
}
],
"importe_total": "1000",
"importe_rectificativa": {
"base_rectificada": "1000",
"cuota_rectificada": "210"
},
"facturas_rectificadas": [
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "07-04-2025"
}
]
}La factura rectificativa por diferencias corrige errores en una factura original, ajustando el importe mediante una suma o resta. Puede ser positiva (si se cobró de menos) o negativa (si se cobró de más). Se usa principalmente para errores en el IVA o en la base imponible. Según el tipo de error (por impago o no), puede optarse por una factura rectificativa por diferencias o sustitutiva, siguiendo procedimientos distintos.
A diferencia de las facturas rectificativas por sustitución, las rectificativas por diferencias se hacen siempre en un solo paso y se deberá informar directamente del importe de la rectificación.
A continuación mostramos varios ejemplos de las facturas rectificativas por diferencias.
Supongamos que se emite una factura normal con base imponible igual a 1.000€ y tipo impositivo del 21%, con fecha de operación 01-04-2025 y fecha de expedición 07-04-2025. Es decir, usando la API de Verifactu, se registra la factura con el siguiente JSON:
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "F1",
"descripcion": "Factura original",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "1000",
"tipo_impositivo": "21",
"cuota_repercutida": "210"
}
],
"importe_total": "1210"
}Después de emitir esta factura, se quiere rectificar siendo la rectificación una disminución de la base imponible de 500€. La modificación por diferencias supondría emitir una única factura adicional con base imponible de -500€.
{
"serie": "RECTIFICATIVA",
"numero": "5",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "Rx",
"tipo_rectificativa": "I",
"descripcion": "Descripcion de la operacion: rectificacion por diferencias",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "-500",
"tipo_impositivo": "21",
"cuota_repercutida": "-105"
}
],
"importe_total": "-605",
"facturas_rectificadas": [
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "07-04-2025"
}
]
}Supongamos que se emite una factura normal con base imponible igual a 1.000€ y tipo impositivo del 21%, con fecha de operación 01-04-2025 y fecha de expedición 07-04-2025. Es decir, usando la API de Verifactu, se registra la factura con el siguiente JSON:
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"fecha_operacion": "01-04-2025",
"tipo_factura": "F1",
"descripcion": "Factura original",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "1000",
"tipo_impositivo": "21",
"cuota_repercutida": "210"
}
],
"importe_total": "1210"
}Después de emitir esta factura, se quiere rectificar siendo la rectificación por impago, eliminando la totalidad de la cuota repercutida. La modificación por diferencias supondría emitir una única factura adicional con base imponible de 0€ y cuota repercutida de -210€.
{
"serie": "RECTIFICATIVA",
"numero": "6",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "Rx",
"tipo_rectificativa": "I",
"descripcion": "Descripcion de la operacion: rectificacion por diferencias impago",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "0",
"tipo_impositivo": "21",
"cuota_repercutida": "-210"
}
],
"importe_total": "-210",
"facturas_rectificadas": [
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "07-04-2025"
}
]
}El recargo de equivalencia es un régimen especial de IVA para minoristas que venden productos sin transformación. Consiste en pagar un recargo adicional a los proveedores, según el tipo de IVA del producto.
Este recargo debe incluirse en la factura, que sirve como prueba de que la operación se ha realizado conforme a la ley. Para ello, el minorista debe informar al proveedor de que tributa bajo este régimen. En la API de Verifacti, esto se hace marcando el campo clave_regimen=18 de la línea, como muestra nuestra documentación.
Los recargos aplicables se informan en el campo tipo_recargo_equivalencia de cada línea y son:
Un ejemplo de JSON es:
{
"serie": "RECARGO",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Descripcion de la operacion",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42",
"clave_regimen": "18",
"tipo_recargo_equivalencia": "5.2",
"cuota_recargo_equivalencia": "10.4"
}
],
"importe_total": "252.4"
}Una factura emitida por terceros es aquella factura que, aunque los servicios o productos los presta una empresa o profesional, el documento lo expide una tercera persona autorizada. La empresa sigue siendo responsable legalmente, y sus datos deben aparecer en la factura.
Para emitir una factura emitida por terceros usando nuestra API se debe usar el campo emitida_por_tercero_o_destinatario con valor igual a T así como el nombre y nif del tercero.
Supongamos que una empresa con NIF B12345678 presta un servicio a un cliente con NIF A15022510 pero es el NIF B86561412 el que emite la factura. En ese caso, el JSON correcto sería el siguiente:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura emitida por terceros",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"especial": {
"emitida_por_tercero_o_destinatario": "T",
"nombre_tercero": "Nombre tercero",
"nif_tercero": "B86561412"
},
"importe_total": "242"
}En el JSON no aparece el NIF de la empresa que realiza los servicios porque esto ya viene determinado por la API key que se ha usado para realizar la petición.
Es una factura que no la genera el proveedor, sino el propio cliente (destinatario del servicio o producto). Aunque la expida el cliente, la responsabilidad legal sigue siendo del proveedor, cuyos datos deben aparecer en la factura.
Para emitir una factura emitida por el destinatario usando nuestra API se debe usar el campo emitida_por_tercero_o_destinatario con valor igual a D. Por ejemplo, se puede usar este JSON:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura emitida por destinatario",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"especial": {
"emitida_por_tercero_o_destinatario": "D"
},
"importe_total": "242"
}El REBU es el régimen voluntario de IVA aplicable a empresas y autónomos que comercializan bienes usados, objetos de arte o antigüedades. Su principal ventaja radica en la reducción de la carga fiscal, ya que permite liquidar el impuesto basándose únicamente en el margen de reventa y no en el precio final del producto.
Vamos a ver cómo emitir una factura en REBU usando nuestra API a través de un ejemplo. Supongamos que se vende un bien usado con un precio de venta de 3.000€ y un coste de adquisición de 2.000€. El margen de beneficio sería entonces de 1.000€. Si el tipo impositivo aplicable es del 21%, la base imponible y la cuota repercutida se calculan de la siguiente manera:
Hay que destacar que el importe total que hay que indicar en la factura es el precio de venta total, es decir, 3.000€ en este ejemplo. Normalmente, se realiza la valicación de que la suma de las bases imponibles y cuotas repercutidas de todas las líneas coincida con el importe total. Sin embargo, en el caso de las facturas en REBU, esta validación no se aplica, ya que el importe total se basa en el precio de venta.
Para evitar dicha validación, es necesario indicar que la factura se emite bajo el régimen especial de bienes usados (REBU). Para ello, en cada línea del detalle de la factura se debe usar el campo clave_regimen con valor igual a 03.
A continuación mostramos el JSON completo para registrar esta factura en REBU usando nuestra API:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura en regimen especial de bienes usados (REBU)",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "826.45",
"tipo_impositivo": "21",
"cuota_repercutida": "173.55",
"clave_regimen": "03"
}
],
"importe_total": "3000"
}La inversión del sujeto pasivo es un mecanismo especial del IVA en el que la responsabilidad de liquidar el impuesto recae sobre el destinatario de la operación (el comprador) en lugar del emisor (el vendedor). Este régimen se aplica en determinadas operaciones específicas como trabajos de construcción, entregas de oro, teléfonos móviles, consolas de videojuegos, ordenadores portátiles y tabletas, entre otros casos regulados por la normativa del IVA.
Para crear una factura con inversión del sujeto pasivo, se utiliza el campo calificacion_operacion con el valor S2 (Operación sujeta y no exenta - con inversión del sujeto pasivo). En este tipo de facturas, el tipo impositivo y la cuota repercutida deben indicarse con valor 0, ya que será el destinatario quien deba autoliquidar el IVA correspondiente.
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "12-03-2026",
"tipo_factura": "F1",
"descripcion": "Factura con inversión del sujeto pasivo",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"lineas": [
{
"base_imponible": "1000",
"tipo_impositivo": "0",
"cuota_repercutida": "0",
"calificacion_operacion": "S2"
}
],
"importe_total": "1000"
}Como se puede observar, el importe total coincide con la base imponible, ya que el IVA no se repercute en la factura.
Un registro de alta enviado previamente y que no procede se dará de baja mediante un registro de facturación de anulación identificando el número de la factura original. Esto se puede hacer usando el endpoint /verifactu/cancel.
Es importante entender que la anulación no debe usarse para cancelar facturas emitidas con errores, si no para facturas emitidas por error. En el caso de haber emitido una factura con algún error que deba ser corregido, se debe emitir una nueva factura rectificativa que haga referencia a la factura original.
Si se ha emitido una factura for error, se puede anular usando un JSON como el que mostramos a continuación.
{
"serie": "A",
"numero": "1",
"fecha_expedicion": "25-02-2025"
}En el caso de que proceda emitir una nueva factura correcta se deberá registrar con un alta y con un número de factura o fecha de expedición diferente.
La API de Verifacti contiene el endpoint /verifactu/modify que se corresponde con la operación que la administración llama "subsanación" de registro de facturación.
Los casos en los que se puede usar este endpoint son muy limitados por lo que debe considerarse una operación extraordinaria. Es muy poco frecuente verse en la situación de tener (o poder) realizar esta operación. A pesar de lo que el nombre pueda sugerir, esto no tiene nada que ver con las facturas rectificativas.
Este endpoint solo puede usarse para subsanar registros de facturación en aquellos casos en los que la subsanación no tiene ninguna repercusión fiscal, lo que limita mucho su uso.
A continuación incluimos los tres ejemplos en los que sí se puede usar este endpoint, controlados por el campo rechazo_previo, y que dejan claro que no es algo que se vaya a hacer de forma habitual.
Supongamos que enviamos el siguiente registro de facturación, al que llamaremos Registro A, que ha sido aceptado correctamente por la Agencia Tributaria:
{
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "24-02-2025",
"tipo_factura": "F1",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"descripcion": "Descripcion inicial",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Si ahora quisieramos modificar, por ejemplo, el importe, deberíamos emitir una rectificativa, como explicamos en otros ejemplos. Sin embargo, si quisieramos cambiar el campo descripcion de la factura, entonces se puede enviar un nuevo registro de facturación al endpoint /verifactu/modify marcando el campo rechazo_previo=N ya que el registro de facturación inicial no fue rechazado. Por lo tanto, el JSON para el registro de subsanación, que llamaremos Registro B, sería el siguiente:
{
"rechazo_previo": "N",
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "24-02-2025",
"tipo_factura": "F1",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"descripcion": "Descripcion modificada",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Supongamos ahora que la factura inicial del párrafo anterior (Registro A) hubiera causado rechazo en la AEAT porque el certificado usado para enviarla no estaba vigente. En ese caso, el registro de facturación sería rechazado y habría que generar un nuevo registro de subsanación marchando el campo rechazo_previo=X.
{
"rechazo_previo": "X",
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "24-02-2025",
"tipo_factura": "F1",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"descripcion": "Descripcion inicial",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Supongamos ahora que la factura inicial del párrafo anterior (Registro A) hubiera sido aceptada correctamente y, en cambio, hubiera sido rechazado el registro de subsanación siguiente (Registro B). En ese caso, deberíamos generar y enviar un nuevo registro de subsanación, marcando el campo rechazo_previo=S.
{
"rechazo_previo": "S",
"serie": "Ejemplos",
"numero": "1",
"fecha_expedicion": "24-02-2025",
"tipo_factura": "F1",
"nif": "A15022510",
"nombre": "Nombre destinatario",
"descripcion": "Descripcion modificada",
"lineas": [
{
"base_imponible": "200",
"tipo_impositivo": "21",
"cuota_repercutida": "42"
}
],
"importe_total": "242"
}Como se puede ver, debido a la limitación de que las modificaciones no tengan impacto fiscal, el endpoint de subsanación /verifactu/modify tiene muy pocos casos de uso.