Introduction

The Spanish Tax Agency (AEAT) is still finalizing VERI*FACTU’s technical and legal requirements. Invopop’s implementation may change accordingly.
VERI*FACTU is is a fiscal initiative by the Spanish Tax Agency (AEAT) that requires businesses to report invoices through certified software. The system generates unique identifiers for each invoice and creates digitally signed XML files that are submitted to the tax authorities.
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 register a supplier and issue invoices, you need:
  • Supplier details:
    • Company name
    • Spanish tax ID (NIF)
    • Signed supplier agreement and legal representative ID (collected during supplier onboarding)
  • For B2B sales, customer details including:
    • Tax ID (for Spanish/EU entities)
  • Invoice line items with:
    • Price
    • VAT rates

Setup

Configure your Invopop Workspace for VERI*FACTU invoicing by following these steps:
1

Connect the VERI*FACTU app

  1. Go to ConfigurationApps in the Console.
  2. Find VERI*FACTU Spain in the app list.
  3. Click Connect to activate the app.
VERI*FACTU app connected

Connect the VERI*FACTU app

After connecting, you’ll see VERI*FACTU listed in the Enabled Apps section.
2

Configure the Supplier Registration Workflow

Add a new workflow to your workspace for registering suppliers. You should start with the template below:Keep the Workflow ID at hand, you’ll use it later.
3

Configure invoice workflow

Add a new workflow to your workspace for issuing invoices. You can start with the template below.Keep the Workflow 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.

How VERI*FACTU supplier registration works

Invopop has a collaboration agreement with the Spanish tax agency (AEAT) allowing us to issue invoices on behalf of any entity using our certificate. This eliminates the need for you to request the entity’s certificate. The process is best explained looking at the workflow steps:
Supplier Registration Workflow

Supplier Registration Workflow

  1. Register with VERI*FACTU will generate a unique URL and add it into a url key value within the meta property. You would add a webhook after this step to notify the supplier.
  2. Set State to Processing labels the silo entry so you know it’s in process of registration.
  3. Wait for Supplier Registration VERI*FACTU waits for the supplier to upload the required documents (signed agreement and ID). The supplier will be entitled to issue invoices through VERI*FACTU immediately after the documents are uploaded.
  4. Set State to Registered labels the silo entry so you know registration is complete.
  5. Wait for Approval VERI*FACTU Invopop will review the documents provided by the supplier in less than 72 hours. If there are any problems the workflow will error with a KO and the reason for rejection can be reviewed in the Supplier’s job history. The supplier’s invoice issuing entitlement will be revoked immediately.
In sandbox, the supplier will be approved as long as the original agreement is uploaded, even if it’s not signed. If you want to test rejection, upload any other PDF document. IDs are not taken into consideration in sandbox.

Register a Supplier

Suppliers need to provide the following documents for Invopop to issue invoices on their behalf:
  1. A signed and stamped direct representation agreement. If the supplier is a self-employed individual (autónomo), stamping is unnecessary.
  2. A copy of signatory’s fiscal ID (DNI/NIE or passport in the case of non-residents).
These documents will be collected through a multi-step web form (wizard) which is sent to the supplier (or your company) through the Supplier Registration Workflow we created during setup.
Supplier Registration Wizard

Supplier Registration Wizard

Whether you issue invoices on behalf of third parties (white label) or under your own name, the process is essentially the same. However, we divide the use case here for clarity:
1

Upload a Supplier

Use the Create an entry endpoint to upload a new supplier. Include a party (you can copy the example below) object in the data field. The following fields are required:
  • name
  • tax_id
  • address
  • email
You should see the supplier in the Contacts section with status Empty after creating the entry.
Upload supplier to Invopop

Upload supplier to Invopop

2

Send the Supplier to the registration workflow

With the API: Send the supplier to the registration workflow using the Create a job endpoint. Use:
  • The Silo Entry ID of the supplier you uploaded on the previous step
  • The Supplier Registration Workflow ID from the Setup section
Through the Console: Locate the recently created supplier in the Contacts section and tap on “Select Workflow”. From the side panel, select the VERI*FACTU supplier registration workflow you created in the Setup section.
The supplier’s status will change to Processing while waiting for supplier registration and verification. Once these steps are completed successfully, the supplier’s status will change to Registered. If not successful because the supplier did not complete the process or their documentation was rejected, the status will change to Error, and you can inspect the job history of this document to see the reason.
Supplier registered

Supplier registered successfully

If you need to unregister an entity (because the supplier is no longer your client, for example), use the following workflow template:
If you need to re-register a previously unregistered supplier, you should treat the entity as a new supplier by creating a new silo entry, then run the registration workflow for the supplier to be registered and approved again.

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:
  • 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.
After successful upload, you’ll see the invoice in the Invoices section with status Empty.
Empty invoice

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:
  • workflow_id: use the Workflow ID of the _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 Sent when the workflow completes successfully.
Sent invoice

Sent invoice

You can verify that the PDF was generated by clicking on the Invoice and selecting the PDF from the “Files” tab.
Example VERI*FACTU invoice with QR

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.
For example, if you issued an invoice for €100 but later realized it should have been €80, you can either:
  • Issue a credit note for €20, or
  • Issue a corrective invoice for €80.
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. 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:
  • 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 one of the example credit notes below as a reference.
After successful upload, you’ll see the credit note in the Invoices section with status 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.
Invoice related to a credit note

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 setup
  • silo_entry_id: use the The Silo Entry ID of the credit note you’ve just uploaded.
The credit note’s status will change to 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 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 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 one of the example corrective invoices below as a reference.
After successful upload, you’ll see the corrective invoice in the Invoices section with status 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.
Invoice related to a corrective 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 setup
  • silo_entry_id: use the The Silo Entry ID of the corrective invoice you’ve just uploaded.
The corrective invoice’s status will change to 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 VERI*FACTU (Spain) 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