Skip to main content

SII Guide

Spain's Suministro Inmediato de Información (SII) is AEAT's real-time invoice reporting system for large businesses. FiscalAPI supports SII as a third Spanish fiscalization system alongside TicketBAI and Verifactu.

What is SII?

SII requires businesses to electronically submit invoice records to AEAT within four calendar days of issuance. Unlike TicketBAI (Basque Country) and Verifactu (nationwide for smaller businesses), SII targets companies with annual revenue of EUR 6 million or more.

Who must use SII?

SII is mandatory for:

  • Companies with annual turnover exceeding EUR 6,336,000
  • Businesses enrolled in the monthly VAT refund scheme (REDEME)
  • Groups filing consolidated VAT returns (grupos de IVA)
  • Businesses that voluntarily opt in

SII vs TicketBAI vs Verifactu

FeatureSIITicketBAIVerifactu
ScopeLarge businesses (>=EUR 6M)Basque Country onlyRest of Spain
AuthorityAEAT (national)Regional tax authoritiesAEAT (national)
ProtocolSOAP 1.1XML POST / LROESOAP 1.1
AuthenticationMutual TLS (qualified certificate)Client certificateMutual TLS
Submission window4 calendar daysReal-timeReal-time
Invoice chainingNoYes (XAdES-EPES)Yes (SHA-256)

Book types (Libros Registro)

SII organizes invoice data into four books:

BookSpanish nameDescription
Issued invoicesLibro de Facturas ExpedidasInvoices you issue to customers
Received invoicesLibro de Facturas RecibidasInvoices you receive from suppliers
Investment goodsLibro de Bienes de InversiónCapital asset acquisitions
Intra-community operationsLibro de Operaciones IntracomunitariasCross-border EU transactions

FiscalAPI currently supports the issued invoices and received invoices books, which cover the vast majority of SII submissions.

Configuration

Country config fields

FieldTypeRequiredDescription
systemstringYesMust be "sii"
nifstringYesSpanish tax ID (NIF/CIF) of the obligated party
legal_namestringYesFull legal name (razón social)
certificate_idstringYesReference to an uploaded certificate for mutual TLS

Configuration example

curl -X POST https://api.fiscalapi.com/v1/locations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer fsk_test_abc123def456..." \
-d '{
"name": "Madrid HQ",
"country": "ES",
"address": "Calle de Alcalá 50, 28014 Madrid",
"tax_id": "A12345674",
"country_config": {
"system": "sii",
"nif": "A12345674",
"legal_name": "Gran Empresa SL",
"certificate_id": "spain-sii-prod-2026"
}
}'

Submission flow

Issued invoices (Facturas Expedidas)

  1. Transaction is created via POST /v1/transactions
  2. FiscalAPI builds a SOAP envelope with the invoice record (RegistroLRFacturasEmitidas)
  3. Envelope is submitted to AEAT via mutual TLS
  4. AEAT responds with an EstadoEnvio (Correcto, Incorrecto, ParcialmenteCorrecto)
  5. On success, fiscal_id is set to the CSV (Código Seguro de Verificación)
  6. Transaction status transitions to success

Cancellations (Baja)

Voiding a transaction submits a cancellation record (TipoComunicacion = A4) to the same issued invoices endpoint.

Received invoices (Facturas Recibidas)

To submit a received invoice, set "book_type": "received" in the transaction metadata along with the counterparty details.

Transaction metadata

SII transactions accept optional metadata fields to control invoice details. All fields are optional -- FiscalAPI applies sensible defaults when omitted.

Metadata fields

FieldTypeDefaultDescription
invoice_numberstringTransaction IDInvoice number (NumSerieFacturaEmisor)
seriesstring--Optional series prefix prepended to invoice number
issue_datestringCurrent dateInvoice date in DD-MM-YYYY format
descriptionstringAuto-generatedOperation description (DescripcionOperacion)
regime_keystring"01" (general)Special regime key (ClaveRegimenEspecialOTrascendencia)
exercisestringCurrent yearFiscal year (Ejercicio)
periodstringCurrent monthTax period: "01"--"12" or "0A" for annual
simplifiedbooleanfalseIf true, generates an F2 simplified invoice
book_typestring"issued""issued" or "received"

Counterparty fields

Required for standard (F1) invoices. Omit for simplified (F2) invoices.

FieldTypeDescription
counterparty_nifstringCounterparty NIF (domestic)
counterparty_namestringCounterparty legal name
counterparty_id_typestringForeign ID document type ("02" = VAT number, "04" = passport)
counterparty_countrystringISO 3166-1 alpha-2 country code
counterparty_idstringForeign identifier value

Credit note fields

FieldTypeDescription
original_invoice_numberstringNumber of the invoice being corrected
original_issue_datestringDD-MM-YYYY of the original invoice

Example: standard issued invoice

curl -X POST https://api.fiscalapi.com/v1/transactions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer fsk_test_abc123def456..." \
-d '{
"location_id": "loc_madrid_hq",
"type": "sale",
"amount": 121000,
"currency": "EUR",
"items": [
{
"description": "Consulting services",
"quantity": 1,
"unit_price": 100000,
"total_amount": 121000,
"tax_rate": 2100,
"tax_amount": 21000
}
],
"metadata": {
"invoice_number": "FA-2026/001",
"series": "A-",
"issue_date": "13-03-2026",
"description": "Consulting services Q1 2026",
"regime_key": "01",
"counterparty_nif": "B99999999",
"counterparty_name": "Acme Consulting SL"
}
}'

Example: credit note (refund)

curl -X POST https://api.fiscalapi.com/v1/transactions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer fsk_test_abc123def456..." \
-d '{
"location_id": "loc_madrid_hq",
"type": "refund",
"amount": -121000,
"currency": "EUR",
"items": [
{
"description": "Consulting services - correction",
"quantity": 1,
"unit_price": -100000,
"total_amount": -121000,
"tax_rate": 2100,
"tax_amount": -21000
}
],
"metadata": {
"invoice_number": "RA-2026/001",
"issue_date": "13-03-2026",
"description": "Rectificación FA-2026/001",
"counterparty_nif": "B99999999",
"counterparty_name": "Acme Consulting SL",
"original_invoice_number": "A-FA-2026/001",
"original_issue_date": "10-03-2026"
}
}'

Invoice types

CodeNameWhen to use
F1FacturaStandard invoice (default for sale transactions)
F2Factura simplificadaSimplified invoice (set "simplified": true)
R1Factura rectificativaCredit note (automatic for refund transactions)

Regime keys

The regime_key metadata field maps to AEAT's ClaveRegimenEspecialOTrascendencia. Common values:

KeyDescription
01General regime (default)
02Export
03Special regime for used goods
05Travel agencies
07Special cash accounting regime
09Intra-community acquisitions

AEAT endpoints

SII communicates with AEAT via SOAP 1.1 over mutual TLS.

Production

BookURL
Issued invoiceshttps://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV2SOAP
Received invoiceshttps://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fr/SiiFactFRV2SOAP

Sandbox

BookURL
Issued invoiceshttps://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV2SOAP
Received invoiceshttps://prewww1.aeat.es/wlpl/SSII-FACT/ws/fr/SiiFactFRV2SOAP

Sandbox endpoints accept test submissions without affecting real tax records. Set test_mode: true on transactions to use the sandbox.

Submission deadline

Invoices must be reported to SII within four calendar days of the invoice issue date (or the accounting date for received invoices). Sundays and national holidays do not count toward this deadline.

FiscalAPI submits invoices to AEAT in real-time when the transaction is created, so you meet the deadline as long as you create the transaction within the four-day window.

Error handling

AEAT responds with one of three statuses:

StatusMeaningFiscalAPI mapping
CorrectoAll records acceptedsuccess
ParcialmenteCorrectoSome records accepted, some rejectedpartial
IncorrectoAll records rejectedfailed

Per-record errors include an error code and description. These are surfaced as warnings in the transaction response. Common errors:

  • 1106: Invalid NIF
  • 2000: Duplicate invoice (already registered)
  • 3000: XML schema validation error

Certificate setup

SII requires a qualified electronic certificate for mutual TLS authentication with AEAT. Upload your certificate through the certificates API:

curl -X POST https://api.fiscalapi.com/v1/certificates \
-H "Authorization: Bearer fsk_test_abc123def456..." \
-F "name=spain-sii-prod-2026" \
-F "type=pkcs12" \
-F "file=@certificate.p12" \
-F "password=cert-password"

Then reference the certificate ID in your location's country_config.certificate_id.