Introduction
The Spanish Tax Agency (AEAT) is still finalizing VERI*FACTU’s technical and legal requirements. Invopop’s implementation may change accordingly.
VERI*FACTU will be mandatory for companies from January 1st, 2026. The rest of tax payers from 1 July 2026. Companies reporting with SII or TicketBAI are exempt from reporting with VERI*FACTU.
Prerequisites
To issue your first VERI*FACTU invoice, you must have had registered at least one supplier. Make sure you read and implemented the VERI*FACTU supplier registration guide before continuing with this guide.Setup
Add a new workflow to your workspace for issuing invoices. You can start with the template below. Keep theWorkflow ID
at hand, you’ll use it later.
VERI*FACTU allows for document modifications after submission. If a document is rejected or contains errors, update the GOBL details and resubmit to the same workflow.
Issue an Invoice
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:
After uploading you’ll see the document in the Invoices section with status 
regime
:ES
- Add the
es-verifactu-v1
addon supplier
: Use the details of the supplier you’ve registered before.
B2C Standard Invoice
B2C Standard Invoice
VERI*FACTU B2C Invoice
B2B Standard Invoice
B2B Standard Invoice
VERI*FACTU B2B Invoice
Empty
.
Empty invoice
2
Send the Invoice to the VERI*FACTU invoice workflow
Send the invoice to the VERI*FACTU workflow using the Create a job endpoint. Use:
You can verify that the PDF was generated by clicking on the invoice and selecting the PDF from the “Files” tab.
workflow_id
: use the Workflow ID of the _VERI*FACTU invoice: workflow we created during setupsilo_entry_id
: use the Silo Entry ID of the invoice you’ve just uploaded.
Sent
when the workflow completes successfully.
Sent invoice

Example VERI*FACTU invoice with QR
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.
- Issue a credit note for €20, or
- Issue a corrective invoice for €80.
1
Upload a Credit Note
A credit note in Invopop is an invoice of the type credit note. So 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:
After successful upload, you’ll see the credit note in the Invoices section with status 
regime
:ES
- Add the
es-verifactu-v1
addon supplier
: use the same supplier details as in the original invoicetype
: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 invoiceissue_date
: the date of the original invoiceseries
: the series of the original invoicecode
: the code of the original invoice
Credit Note
Credit Note
VERI*FACTU Credit Note
Empty
. If you’ve included the uuid
of the invoice in preceding, you’ll see a link to the credit note we’ve just created in the Related tab of the invoice.
Link to the credit note
2
Send the Credit Note to the VERI*FACTU invoice workflow
Send the credit note to the VERI*FACTU workflow using the Create a job endpoint. Use:
workflow_id
: use the Workflow ID of the _VERI*FACTU invoice _workflow we created during setupsilo_entry_id
: use the The Silo Entry ID of the credit note you’ve just uploaded.
Sent
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
After successful upload, you’ll see the corrective invoice in the Invoices section with status 
corrective
. So 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 invoicetype
: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 invoiceissue_date
: the date of the original invoiceseries
: the series of the original invoicecode
: the code of the original invoicetax
: the tax section of the original invoice, you can copy it from the original invoice
Corrective Invoice
Corrective Invoice
VERI*FACTU Corrective Invoice
Empty
. If you’ve included the uuid
of the invoice in preceding, you’ll see a link to the corrective invoice we’ve just created in the Related tab of the invoice.
Link to the corrective invoice
2
Send the Corrective Invoice to the VERI*FACTU invoice workflow
Send the corrective invoice to the VERI*FACTU workflow using the Create a job endpoint. Use:
workflow_id
: use the Workflow ID of the VERI*FACTU invoice workflow we created during setupsilo_entry_id
: use the The Silo Entry ID of the corrective invoice you’ve just uploaded.
Sent
when the workflow completes successfully.Cancel an Invoice
VERI*FACTU also allows you to cancel an invoice. In general, you should only cancel an invoice if it hasn’t been handed to the customer nor accepted by the tax authority. Different from a credit note or a corrective, canceling an invoice doesn’t produce a second document, which means you don’t have a paper to hand to your customer to show the cancellation. That’s why, if the invoice has been handed to the customer, 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 Cancel invoice step. You can start with the template below.
2
Send to cancellation workflow
To cancel an invoice, simply send it to the 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.FAQ
Is VERI*FACTU compliance mandatory in Spain?
Is VERI*FACTU compliance mandatory in Spain?
VERI*FACTU will be mandatory for companies from January 1st, 2026. The rest of tax payers (mainly self-employed indidividuals) from 1 July 2026. Companies reporting with SII (large companies) or TicketBAI are exempt from reporting with VERI*FACTU.
How can I correct an invoice?
How can I correct an invoice?
There are three ways to correct an invoice:
- The recommended approach is to issue a GOBL Invoice with the type
credit-note
ordebit-note
, which in VERI*FACTU translates to a “Factura Rectificativa por Diferencias”. - If the above approach does not apply, you can issue an invoice of type
corrective
, which in VERI*FACTU translates to a “Factura Rectificativa por Sustitución”. - Lastly, you can use the
Cancel VERI\*FACTU (Spain)
step, which will void the invoice in the tax authority. This should only be used under special circumstances and not as part of a regular workflow.
What should I do if an invoice is rejected by VERI*FACTU?
What should I do if an invoice is rejected by VERI*FACTU?
The response from VERI*FACTU should contain all the details you need to be able to decide what changes need to be made to the GOBL document in order to be processed correctly. Make the changes either via the Invopop API or console directly on the same document, and simply resend to the VERI*FACTU workflow.Invopop will ensure that the correct substitution document is generated by checking previous attempts and including the correct codes in the new request.
What is the VERI*FACTU chain?
What is the VERI*FACTU chain?
VERI*FACTU requires every request to be linked with a fingerprint or hash. During the “Generate VERI*FACTU” and “Cancel VERI*FACTU” actions, Invopop will automatically find the last request made for the same supplier, and incorporate the chained data into the new request.Its important to understand the VERI*FACTU focuses on requests, and not individual documents; a single invoice may have multiple entries in the chain if it has been processed multiple times due to incorrect details, cancellations, or substitutions.Invopop guarantees the chain is never broken using database transactions and retries in the case of collisions.