Skip to main content

Introduction

NO VERI*FACTU is one of the two compliance modalities defined by Spainโ€™s Real Decreto 1007/2023. In this modality, invoicing records are not sent to the AEAT in real time. Instead, they are digitally signed using XAdES Enveloped Signature and stored locally to guarantee integrity and inalterability. Records are only submitted to the AEAT upon explicit requirement.

Prerequisites

To issue your first NO VERI*FACTU invoice, you must have registered at least one supplier. Make sure you read and implemented the NO VERI*FACTU supplier onboarding guide before continuing with this guide.

Setup

Add a new workflow to your workspace for issuing invoices. You can start with the template below.

NO VERI*FACTU invoice workflow

This workflow will generate, sign, and store an invoice record locally, then produce a PDF.
Keep the Workflow ID at hand, youโ€™ll use it later.
NO VERI*FACTU allows for document modifications after recording. If a document contains errors, update the GOBL details and resubmit to the same workflow.

Issue an Invoice

The GOBL invoice format for NO VERI*FACTU is identical to VERI*FACTU โ€” both use the same es-verifactu-v1 addon. The difference is in how the records are processed: NO VERI*FACTU signs and stores them locally rather than sending them to the AEAT.
1

Upload an Invoice

Use the Create an entry endpoint to upload the invoice details. Include an invoice object in the data field with these required fields:
  • regime: ES
  • Add the es-verifactu-v1 addon
  • supplier: Use the details of the supplier youโ€™ve registered before.
You can copy one of the example invoices below as a reference.
Simplified invoices are used for B2C transactions when the customer is not a business. The transaction amount should be under โ‚ฌ400 (VAT included) with some exceptions in which this threshold is increased to โ‚ฌ3,000.To create a simplified VERI*FACTU invoice, include the simplified tag in your GOBL document with the es-verifactu-v1 addon.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "$tags": [
        "simplified"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "issue_date": "2024-11-13",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "general"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with a standard tax"
        }
    ]
}
Regular invoices are used for B2B transactions. Regular invoices must be issued when:
  • The customer is a registered business (has a tax identification number).
  • The transaction amount is โ‚ฌ400 VAT included or above, or the customer requires a full invoice.
  • The customer needs a complete invoice with all tax details for accounting or tax purposes.
To create a regular VERI*FACTU invoice, include the es-verifactu-v1 addon and ensure the customer field contains valid tax identification details. The addon will automatically set the document type to F1 when the silo entry is built (which happens automatically when saving a silo entry through the API or console).
The supplier must be previously registered with the tax authority and the customer NIF or VAT ID must be valid.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "004",
    "issue_date": "2024-11-13",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "ES",
            "code": "B63272603"
        }
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "general"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with a exempt tax"
        }
    ]
}
Reverse charge invoices are used for B2B services provided to customers in other EU member states. Reverse charge must be applied when:
  • The customer is a registered business in another EU member state (has a valid EU VAT ID).
  • The service is provided to a business customer (B2B), not a consumer.
  • The service is subject to VAT but the customer accounts for the VAT in their own country.
To create a reverse charge VERI*FACTU invoice, use the tax key reverse-charge in your invoice lines. The es-verifactu-v1 addon will automatically set the operation class to S2 (Subject and Not Exempt - With reverse charge) when the silo entry is built.
With reverse charge, no VAT is charged by the supplier. The customer accounts for VAT in their own country. The supplier must be previously registered with the tax authority and the customer VAT ID must be valid and registered in the EU VIES system.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "sett/000001",
    "issue_date": "2024-11-13",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "DE",
            "code": "111111125"
        }
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "key": "reverse-charge"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with reverse charge"
        }
    ]
}
Intra-community supply invoices are used for B2B goods delivered to customers in other EU member states. Intra-community supplies must be applied when:
  • The customer is a registered business in another EU member state (has a valid EU VAT ID).
  • Goods are physically delivered to another EU member state.
  • The supply is exempt from VAT in the origin country (Spain) and subject to VAT in the destination country.
To create an intra-community supply VERI*FACTU invoice, use the tax key intra-community in your invoice lines. The es-verifactu-v1 addon will automatically set the exemption code to E5 (Artรญculo 25 Ley de IVA) when the silo entry is built.
With intra-community supplies, no VAT is charged in Spain. The customer accounts for VAT in their destination country. The supplier must be previously registered with the tax authority and the customer VAT ID must be valid and registered in the EU VIES system.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "sett/000003",
    "issue_date": "2024-11-13",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "DE",
            "code": "111111125"
        }
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Goods",
                "price": "90.00"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "key": "intra-community"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with a intra-community"
        }
    ]
}
Outside scope invoices are used for B2B services provided to customers outside the EU.To create an outside scope VERI*FACTU invoice, use the tax key outside-scope in your invoice lines. The es-verifactu-v1 addon will automatically set the operation class to N2 (Not Subject - Due to location rules) when the silo entry is built.
Services provided to non-EU customers are generally outside the scope of Spanish VAT. The supplier must be previously registered with the tax authority. Customer tax identification is optional but recommended for record-keeping purposes.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "sett/000002",
    "issue_date": "2025-11-17",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "SG",
            "code": "201312345A"
        }
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "key": "outside-scope"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with a outside-scope tax"
        }
    ]
}
Export invoices are used for B2B goods delivered to customers outside the EU.To create an export VERI*FACTU invoice, use the tax key export in your invoice lines. The es-verifactu-v1 addon will automatically set the exemption code to E2 (Artรญculo 21 Ley de IVA) and regime code to 02 (Export) when the silo entry is built.
Exported goods are exempt from Spanish VAT. The supplier must be previously registered with the tax authority. Customer tax identification is optional but recommended for record-keeping purposes.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "sett/000004",
    "issue_date": "2025-11-17",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "SG",
            "code": "201312345A"
        }
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Goods",
                "price": "90.00"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "key": "export"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with a export"
        }
    ]
}
Exempt E1 invoices are used for B2B transactions that are exempt from VAT pursuant (Artรญculo 20 Ley de IVA), which covers exemptions in internal operations.To create an exempt E1 VERI*FACTU invoice, use the tax key exempt in your invoice lines. The es-verifactu-v1 addon will automatically set the exemption code to E1 when the silo entry is built.
Exempt operations are not subject to VAT but must still be reported. The supplier must be previously registered with the tax authority and the customer NIF must be valid.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "004",
    "issue_date": "2024-11-13",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "ES",
            "code": "B63272603"
        }
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "key": "exempt"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with a exempt tax"
        }
    ]
}
One-Stop-Shop (OSS) invoices are used for B2C distance sales of goods and services to consumers in other EU member states when the supplier is registered under the OSS scheme.To create an OSS VERI*FACTU invoice, include the simplified tag in your GOBL document with the es-verifactu-v1 addon. The invoice will be treated as a simplified invoice (document type F2) and VAT is accounted for through the OSS scheme in the destination country.
OSS allows suppliers to register for VAT in one EU member state and account for VAT on all EU distance sales through that single registration. The supplier must be previously registered with the tax authority and enrolled in the OSS scheme.
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "$tags": [
        "simplified"
    ],
    "type": "standard",
    "series": "SAMPLE",
    "code": "004",
    "issue_date": "2024-11-13",
    "currency": "EUR",
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "lines": [
        {
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "standard"
                }
            ],
            "total": "1800.00"
        }
    ],
    "notes": [
        {
            "key": "general",
            "text": "This is a sample invoice with a standard tax"
        }
    ]
}
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "uuid": "01971bb1-1499-7001-81ea-26f51cf396e1",
    "type": "credit-note",
    "series": "CN",
    "issue_date": "2025-05-29",
    "currency": "EUR",
    "preceding": [
        {
            "uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0",
            "type": "standard",
            "issue_date": "2024-11-13",
            "series": "SAMPLE",
            "code": "004"
        }
    ],
    "supplier": {
        "name": "Invopop S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B85905495"
        },
        "addresses": [
            {
                "num": "42",
                "street": "Calle Pradillo",
                "locality": "Madrid",
                "region": "Madrid",
                "code": "28002",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Sample Consumer",
        "tax_id": {
            "country": "ES",
            "code": "B63272603"
        }
    },
    "lines": [
        {
            "i": 1,
            "quantity": "20",
            "item": {
                "name": "Development services",
                "price": "90.00",
                "unit": "h"
            },
            "sum": "1800.00",
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "general"
                }
            ],
            "total": "1800.00"
        }
    ]
}
Built version
{
	"$schema": "https://gobl.org/draft-0/bill/invoice",
	"$regime": "ES",
	"$addons": [
		"es-verifactu-v1"
	],
	"type": "corrective",
	"series": "CO",
	"issue_date": "2025-05-29",
	"currency": "EUR",
	"preceding": [
		{
			"uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0",
			"type": "standard",
			"issue_date": "2024-11-13",
			"series": "SAMPLE",
			"code": "004",
			"tax": {
				"categories": [
					{
						"code": "VAT",
						"rates": [
							{
								"key": "standard",
								"ext": {
									"es-verifactu-op-class": "S1",
									"es-verifactu-regime": "01"
								},
								"base": "1800.00",
								"percent": "21.0%",
								"amount": "378.00"
							}
						],
						"amount": "378.00"
					}
				],
				"sum": "378.00"
			}
		}
	],
	"tax": {
		"ext": {
			"es-verifactu-correction-type": "S",
			"es-verifactu-doc-type": "R1"
		}
	},
	"supplier": {
		"name": "Invopop S.L.",
		"tax_id": {
			"country": "ES",
			"code": "B85905495"
		},
		"addresses": [
			{
				"num": "42",
				"street": "Calle Pradillo",
				"locality": "Madrid",
				"region": "Madrid",
				"code": "28002",
				"country": "ES"
			}
		]
	},
	"customer": {
		"name": "Sample Consumer",
		"tax_id": {
			"country": "ES",
			"code": "B63272603"
		}
	},
	"lines": [
		{
			"i": 1,
			"quantity": "20",
			"item": {
				"name": "Development services",
				"price": "90.00",
				"unit": "h"
			},
			"sum": "1800.00",
			"taxes": [
				{
					"cat": "VAT",
					"key": "standard",
					"rate": "general",
					"percent": "21.0%",
					"ext": {
						"es-verifactu-op-class": "S1",
						"es-verifactu-regime": "01"
					}
				}
			],
			"total": "1800.00"
		}
	],
	"totals": {
		"sum": "1800.00",
		"total": "1800.00",
		"taxes": {
			"categories": [
				{
					"code": "VAT",
					"rates": [
						{
							"key": "standard",
							"ext": {
								"es-verifactu-op-class": "S1",
								"es-verifactu-regime": "01"
							},
							"base": "1800.00",
							"percent": "21.0%",
							"amount": "378.00"
						}
					],
					"amount": "378.00"
				}
			],
			"sum": "378.00"
		},
		"tax": "378.00",
		"total_with_tax": "2178.00",
		"payable": "2178.00"
	}
}
Factura de canje
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "tax": {
        "tags": [
            "replacement"
        ]
    },
    "series": "FC",
    "issue_date": "2026-02-26",
    "currency": "EUR",
    "preceding": [
        {
            "type": "standard",
            "issue_date": "2026-02-20",
            "series": "FS",
            "code": "001"
        }
    ],
    "supplier": {
        "name": "Easor Software Solutions S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B24830515"
        },
        "addresses": [
            {
                "num": "532",
                "street": "Avenida Diagonal",
                "locality": "Barcelona",
                "region": "Barcelona",
                "code": "08006",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Cliente Ejemplo S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B63272603"
        }
    },
    "lines": [
        {
            "quantity": "1",
            "item": {
                "name": "Servicio de consultorรญa",
                "price": "500.00"
            },
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "general"
                }
            ]
        }
    ]
}
After uploading youโ€™ll see the document in the Invoices section with status Empty.
2

Send the Invoice to the NO VERI*FACTU invoice workflow

Send the invoice to the NO VERI*FACTU workflow using the Create a job endpoint. Use:
  • workflow_id: use the Workflow ID of the NO VERI*FACTU invoice workflow we created during setup
  • silo_entry_id: use the Silo Entry ID of the invoice youโ€™ve just uploaded.
The invoiceโ€™s status will change to Recorded when the workflow completes successfully. The signed XML record will be available in the โ€œFilesโ€ section of the silo entry, and the generated PDF will include the required QR code.

Issue a Credit Note (Rectificativa por Diferencias)

In Spain, one way to correct an invoice is by issuing a credit note, known as a Rectificativa por Diferencias. An alternative method is to issue a Rectificativa por Sustituciรณn, which involves creating a new invoice with the type corrective. The difference between the two is subtle but important:
  • A credit note adjusts the value of the original invoice.
  • A corrective invoice replaces the original invoice entirely.
For example, if you issued an invoice for 100 EUR but later realized it should have been 80 EUR, you can either:
  • Issue a credit note for 20 EUR, or
  • Issue a corrective invoice for 80 EUR.
Unless you have a specific requirement to use a corrective invoice we recommend only using credit notes. Theyโ€™re more widely supported across countries, while corrective invoices are specific to a few jurisdictions like Spain.
1

Upload a Credit Note

A credit note in Invopop is an invoice of the type credit note. The process is very similar to uploading an invoice, use the Create an entry endpoint to upload a credit note. Include an invoice object in the data, with these required fields:
  • regime: ES
  • Add the es-verifactu-v1 addon
  • supplier: use the same supplier details as in the original invoice
  • type: credit-note
  • preceding: references the original invoice, within it, you must include:
    • uuid: the UUID of the original invoice (optional but recommended)
    • type: type of the original invoice
    • issue_date: the date of the original invoice
    • series: the series of the original invoice
    • code: the code of the original invoice
You can copy the example credit note below as a reference.
Built version
{
	"$schema": "https://gobl.org/draft-0/bill/invoice",
	"$regime": "ES",
	"$addons": [
		"es-verifactu-v1"
	],
	"uuid": "01971bb1-1499-7001-81ea-26f51cf396e1",
	"type": "credit-note",
	"series": "CN",
	"issue_date": "2025-05-29",
	"currency": "EUR",
	"preceding": [
		{
			"uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0",
			"type": "standard",
			"issue_date": "2024-11-13",
			"series": "SAMPLE",
			"code": "004"
		}
	],
	"tax": {
		"ext": {
			"es-verifactu-correction-type": "I",
			"es-verifactu-doc-type": "R1"
		}
	},
	"supplier": {
		"name": "Invopop S.L.",
		"tax_id": {
			"country": "ES",
			"code": "B85905495"
		},
		"addresses": [
			{
				"num": "42",
				"street": "Calle Pradillo",
				"locality": "Madrid",
				"region": "Madrid",
				"code": "28002",
				"country": "ES"
			}
		]
	},
	"customer": {
		"name": "Sample Consumer",
		"tax_id": {
			"country": "ES",
			"code": "B63272603"
		}
	},
	"lines": [
		{
			"i": 1,
			"quantity": "20",
			"item": {
				"name": "Development services",
				"price": "90.00",
				"unit": "h"
			},
			"sum": "1800.00",
			"taxes": [
				{
					"cat": "VAT",
					"key": "standard",
					"rate": "general",
					"percent": "21.0%",
					"ext": {
						"es-verifactu-op-class": "S1",
						"es-verifactu-regime": "01"
					}
				}
			],
			"total": "1800.00"
		}
	],
	"totals": {
		"sum": "1800.00",
		"total": "1800.00",
		"taxes": {
			"categories": [
				{
					"code": "VAT",
					"rates": [
						{
							"key": "standard",
							"ext": {
								"es-verifactu-op-class": "S1",
								"es-verifactu-regime": "01"
							},
							"base": "1800.00",
							"percent": "21.0%",
							"amount": "378.00"
						}
					],
					"amount": "378.00"
				}
			],
			"sum": "378.00"
		},
		"tax": "378.00",
		"total_with_tax": "2178.00",
		"payable": "2178.00"
	}
}
After successful upload, youโ€™ll see the credit note in the Invoices section with status Empty.
2

Send the Credit Note to the NO VERI*FACTU invoice workflow

Send the credit note to the NO VERI*FACTU workflow using the Create a job endpoint. Use:
  • workflow_id: use the Workflow ID of the NO VERI*FACTU invoice workflow we created during setup
  • silo_entry_id: use the Silo Entry ID of the credit note youโ€™ve just uploaded.
The credit noteโ€™s status will change to Recorded when the workflow completes successfully.

Issue a Corrective Invoice (Rectificativa por Sustituciรณn)

1

Upload a Corrective Invoice

A corrective invoice in Invopop is an invoice of the type corrective. The process is very similar to uploading an invoice, use the Create an entry endpoint to upload a corrective invoice. Include an invoice object in the data, with these required fields:
  • regime: ES
  • Add the es-verifactu-v1 addon
  • supplier_id: use the same supplier details as in the original invoice
  • type: corrective
  • preceding: references the original invoice, within it, you must include:
    • uuid: the UUID of the original invoice (optional but recommended)
    • type: type of the original invoice
    • issue_date: the date of the original invoice
    • series: the series of the original invoice
    • code: the code of the original invoice
    • tax: the tax section of the original invoice, you can copy it from the original invoice
You can copy the example corrective invoice below as a reference.
Built version
{
	"$schema": "https://gobl.org/draft-0/bill/invoice",
	"$regime": "ES",
	"$addons": [
		"es-verifactu-v1"
	],
	"type": "corrective",
	"series": "CO",
	"issue_date": "2025-05-29",
	"currency": "EUR",
	"preceding": [
		{
			"uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0",
			"type": "standard",
			"issue_date": "2024-11-13",
			"series": "SAMPLE",
			"code": "004",
			"tax": {
				"categories": [
					{
						"code": "VAT",
						"rates": [
							{
								"key": "standard",
								"ext": {
									"es-verifactu-op-class": "S1",
									"es-verifactu-regime": "01"
								},
								"base": "1800.00",
								"percent": "21.0%",
								"amount": "378.00"
							}
						],
						"amount": "378.00"
					}
				],
				"sum": "378.00"
			}
		}
	],
	"tax": {
		"ext": {
			"es-verifactu-correction-type": "S",
			"es-verifactu-doc-type": "R1"
		}
	},
	"supplier": {
		"name": "Invopop S.L.",
		"tax_id": {
			"country": "ES",
			"code": "B85905495"
		},
		"addresses": [
			{
				"num": "42",
				"street": "Calle Pradillo",
				"locality": "Madrid",
				"region": "Madrid",
				"code": "28002",
				"country": "ES"
			}
		]
	},
	"customer": {
		"name": "Sample Consumer",
		"tax_id": {
			"country": "ES",
			"code": "B63272603"
		}
	},
	"lines": [
		{
			"i": 1,
			"quantity": "20",
			"item": {
				"name": "Development services",
				"price": "90.00",
				"unit": "h"
			},
			"sum": "1800.00",
			"taxes": [
				{
					"cat": "VAT",
					"key": "standard",
					"rate": "general",
					"percent": "21.0%",
					"ext": {
						"es-verifactu-op-class": "S1",
						"es-verifactu-regime": "01"
					}
				}
			],
			"total": "1800.00"
		}
	],
	"totals": {
		"sum": "1800.00",
		"total": "1800.00",
		"taxes": {
			"categories": [
				{
					"code": "VAT",
					"rates": [
						{
							"key": "standard",
							"ext": {
								"es-verifactu-op-class": "S1",
								"es-verifactu-regime": "01"
							},
							"base": "1800.00",
							"percent": "21.0%",
							"amount": "378.00"
						}
					],
					"amount": "378.00"
				}
			],
			"sum": "378.00"
		},
		"tax": "378.00",
		"total_with_tax": "2178.00",
		"payable": "2178.00"
	}
}
After successful upload, youโ€™ll see the corrective invoice in the Invoices section with status Empty.
2

Send the Corrective Invoice to the NO VERI*FACTU invoice workflow

Send the corrective invoice to the NO VERI*FACTU workflow using the Create a job endpoint. Use:
  • workflow_id: use the Workflow ID of the NO VERI*FACTU invoice workflow we created during setup
  • silo_entry_id: use the Silo Entry ID of the corrective invoice youโ€™ve just uploaded.
The corrective invoiceโ€™s status will change to Recorded when the workflow completes successfully.

Issue a Replacement Invoice (Factura de Canje)

A replacement invoice (Factura de Canje) is used to replace a simplified invoice with a full invoice. This is common when a customer who originally received a simplified invoice (e.g., a receipt) later requests a full invoice with their tax identification details.
1

Upload a Replacement Invoice

A replacement invoice is a standard invoice with the replacement tag. Use the Create an entry endpoint to upload the replacement invoice. Include an invoice object in the data, with these required fields:
  • regime: ES
  • Add the es-verifactu-v1 addon
  • type: standard
  • tax.tags: include replacement
  • supplier: use the same supplier details as in the original invoice
  • preceding: references the original simplified invoice, within it, you must include:
    • type: type of the original invoice
    • issue_date: the date of the original invoice
    • series: the series of the original invoice
    • code: the code of the original invoice
You can copy the example replacement invoice below as a reference.
Factura de canje
{
    "$schema": "https://gobl.org/draft-0/bill/invoice",
    "$regime": "ES",
    "$addons": [
        "es-verifactu-v1"
    ],
    "type": "standard",
    "tax": {
        "tags": [
            "replacement"
        ]
    },
    "series": "FC",
    "issue_date": "2026-02-26",
    "currency": "EUR",
    "preceding": [
        {
            "type": "standard",
            "issue_date": "2026-02-20",
            "series": "FS",
            "code": "001"
        }
    ],
    "supplier": {
        "name": "Easor Software Solutions S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B24830515"
        },
        "addresses": [
            {
                "num": "532",
                "street": "Avenida Diagonal",
                "locality": "Barcelona",
                "region": "Barcelona",
                "code": "08006",
                "country": "ES"
            }
        ]
    },
    "customer": {
        "name": "Cliente Ejemplo S.L.",
        "tax_id": {
            "country": "ES",
            "code": "B63272603"
        }
    },
    "lines": [
        {
            "quantity": "1",
            "item": {
                "name": "Servicio de consultorรญa",
                "price": "500.00"
            },
            "taxes": [
                {
                    "cat": "VAT",
                    "rate": "general"
                }
            ]
        }
    ]
}
After successful upload, youโ€™ll see the replacement invoice in the Invoices section with status Empty.
2

Send the Replacement Invoice to the NO VERI*FACTU invoice workflow

Send the replacement invoice to the NO VERI*FACTU workflow using the Create a job endpoint. Use:
  • workflow_id: use the Workflow ID of the NO VERI*FACTU invoice workflow we created during setup
  • silo_entry_id: use the Silo Entry ID of the replacement invoice youโ€™ve just uploaded.
The replacement invoiceโ€™s status will change to Recorded when the workflow completes successfully.

Cancel an Invoice

NO VERI*FACTU allows you to cancel an invoice by generating a cancellation record. Unlike VERI*FACTU, the cancellation is not sent to the AEAT โ€” it is signed and stored locally. In general, you should only cancel an invoice if it hasnโ€™t been handed to the customer. Canceling an invoice doesnโ€™t produce a second document to hand to your customer. If the invoice has already been delivered, we recommend issuing a credit note instead.
1

Add a cancel invoice workflow (only once)

To cancel an invoice, you need a workflow with the Generate Cancellation Record and Store Record steps. You can start with the template below.

NO VERI*FACTU cancel invoice workflow

This workflow will generate and store a cancellation record.
2

Send to cancellation workflow

To cancel an invoice, simply send it to the NO VERI*FACTU cancel invoice workflow created earlier using the Create a job endpoint.The invoiceโ€™s status will change to Void when the workflow completes successfully.

Spain FAQ

Find answers to frequently asked questions about invoicing in Spain โ†’

Participate in our community

Ask and answer questions about invoicing in Spain โ†’