Introduction
Electronic invoicing is mandatory for all businesses in Italy. The Sistema di Interscambio (SDI) serves as the Italian government’s central hub for transmitting, validating, and delivering all electronic invoices throughout the country. The SDI system operates using a standardized XML format called FatturaPA, which ensures all invoices contain the required information and comply with the strict validation rules established by the Italian tax authority (Agenzia delle Entrate). To ensure proper routing of invoices to the correct recipient, the SDI system uses a unique identifier called a Recipient Code, which is assigned to each registered SDI provider. Invopop simplifies SDI integration by allowing you to work with GOBL format instead of XML, providing synchronous validation before submission, and offering a simple API integration with automatic handling of SDI notifications and status updates. For receiving invoices through SDI, see our companion guide: Italy - SDI: Receiving Invoices.Setup
Connect the SDI Italy app
- Navigate to Configuration → Apps
- Locate SDI Italy in the app discovery list
- Tap Connect to activate

Configure sending workflow
sandbox mode is selected, Invopop’s third-party submission service, A-Cube, simulates a response from SDI.SDI send invoice workflow
- Workflow
- Code
Sending invoices
Invopop uses the GOBL FatturaPA library to process conversions. When creating invoices for SDI, you need to:- Set the
regimefield toITin your GOBL invoice - Add the
it-sdi-v1addon to enable Italian-specific validations and extensions
How the Send step works
This step generates the FatturaPA XML and sends it to SDI through our integration partner. Upon successful completion, the XML file is attached to the invoice entry. The SDI service usually responds within seconds but may take up to 24 hours. While waiting, this step remains in aQUEUED state.
When the Send step completes, it returns one of three results:
OKif successfulKOfor unrecoverable errorsSKIPif the invoice was already sent
Archiving (conservazione a norma)
Italian law requires issued electronic invoices to be preserved long-term through a certified archiving process known as conservazione a norma. Keeping a copy of the XML on your own systems is not enough — preservation must follow the rules set by the Italian authorities, which Invopop handles through its integration partner A-Cube. Archiving is built into the standard Italy templates, so no extra setup is needed:- The party registration workflow includes a step that enables archiving for the supplier. It requires the party to have a valid Italian tax ID. Re-running it on an already-enabled supplier reports
SKIP. - The send invoice workflow includes an archive step after the Send step. It preserves the exact FatturaPA file transmitted to SDI and attaches the preservation receipt to the invoice entry as
archive-receipt.pdfandarchive-receipt.xml, along with an indexedarchive-uuidmetadata field identifying the archived document. - The SDI import invoices workflow from the receiving guide includes the same archive step after the Import step, so the invoices you receive are preserved too, recorded as received.
QUEUED until the receipt is ready, then completes with OK. The receipt normally arrives within minutes but can take hours; the step keeps checking, less often as time goes on, and gives up only after several hours. If the preservation service fails partway through, the step retries from where it stopped without uploading the document again. Re-running it on an already-archived invoice reports SKIP, with nothing fetched or attached again.
Example invoices
B2B Invoice
B2B Invoice
- both supplier and customer have their Partita IVA (VAT number) and Codice Fiscale properly specified,
- the minimal version contains only essential fields;
gobl buildhandles all calculations, - when running
gobl build, the system automatically calculates totals, applies IVA rates, and normalizes the document according to SDI requirements, - the built version shows all calculated fields including tax breakdowns, line totals, payment terms, and final amounts,
- the
it-sdi-v1addon validates the document structure for B2B transactions, and, - the invoice will be transmitted through the SDI system and delivered to the customer’s designated channel.
B2G Invoice
B2G Invoice
- both supplier and customer have their Partita IVA (VAT number) and Codice Fiscale properly specified,
- the minimal version contains only essential fields;
gobl buildhandles all calculations, - when running
gobl build, the system automatically calculates totals, applies IVA rates, and normalizes the document according to SDI requirements, - the built version shows all calculated fields including tax breakdowns, line totals, payment terms, and final amounts,
- the
it-sdi-v1addon validates the document structure for B2G transactions, and, - the invoice will be transmitted through the SDI system and delivered to the customer’s designated channel.
Simplified Invoice (Fattura Semplificata)
Simplified Invoice (Fattura Semplificata)
$tagsincludessimplified, sogobl buildsets the format toFSM10and the document type toTD07,- the customer has no name or address: an Italian
tax_idwithout a code, plus their codice fiscale as anit-fiscal-codeidentity, - prices include VAT, and the total with VAT must stay within €400, which the
it-sdi-v1addon checks before the invoice is sent, and, - see Simplified invoices for what else the format allows.
Stamp Duty Invoice (Marca da Bollo)
Stamp Duty Invoice (Marca da Bollo)
- the
chargesarray includes an entry with"key": "stamp-duty", amount"2.00", and reasonImposta di bollo, - the minimal version is otherwise the same as the B2B example;
gobl buildrecalculates totals including the charge, - the built version shows
totals.chargeand a higherpayable/total_with_taxthan the plain B2B invoice, - the
it-sdi-v1addon continues to validate the document for SDI transmission.
B2B Invoice with Additional Fields
B2B Invoice with Additional Fields
- this invoice demonstrates advanced SDI features like CIG/CUP codes, payment methods, and bank details,
- the minimal version includes ordering and payment details;
gobl buildcalculates all totals, - when running
gobl build, the system validates all additional fields according to SDI specifications and calculates totals, - the built version shows the complete document with all calculated fields, tax breakdowns, and properly formatted additional information,
- additional fields like
ordering,payment, and document references are important for public administration invoices (B2G), and, - the addon ensures all optional fields are properly validated and formatted for SDI transmission.
VAT Exempt Invoice
VAT Exempt Invoice
- the line item includes a tax with
"key": "exempt"indicating this is a VAT-exempt transaction, - the minimal version omits the exemption code extension (
it-sdi-exempt), which will be automatically added duringgobl build, - when running
gobl build, the system calculates totals with zero VAT and validates the exemption structure, - the built version shows the complete document with the exemption code extension (e.g.,
"it-sdi-exempt": "N4") applied to the tax rate, - exemption codes must comply with SDI requirements—consult the complete list of exemption reasons in the GOBL documentation,
- common exemption codes include N4 (exempt), N3.1 (exports), N3.2 (intra-community supplies), and N6.x (reverse charge scenarios), and,
- the SDI validates that exempt invoices include proper exemption codes before transmission.
Credit Note
Credit Note
- the
typefield is set tocredit-noteto indicate this is a corrective document, - the
precedingfield references the original invoice being corrected, - the minimal version contains only essential correction details;
gobl buildcalculates negative amounts, - when running
gobl build, the system automatically calculates negative totals, IVA refunds, validates the credit note structure, and applies SDI rules, - the built version shows all calculated fields including negative amounts for the refund and proper tax adjustments,
- credit notes must be properly linked to the original invoice and transmitted through SDI, and,
- the SDI system validates the credit note format before accepting and forwarding it to the recipient.
Invoice after a documento commerciale
Invoice after a documento commerciale
- the line item carries an
attributesentry withtypeN.DOC.COMM, the receipt’s AdE document number intext, its progressive number inamount, and the receipt date indate, - the
it-sdi-v1addon converts each item attribute into anAltriDatiGestionaliblock:typebecomesTipoDato,textbecomesRiferimentoTesto,amountbecomesRiferimentoNumero, anddatebecomesRiferimentoData, which is the layout the AdE describes for invoices preceded by a receipt, typeis limited to 10 ASCII characters andtextto 60 characters, andamountis rendered with at least two decimals, so7816arrives at SDI as7816.00,- the receipt’s document number is the
ade-refstamp the Smart Receipts app adds to the receipt’s header after the AdE accepts it, issue_dateis the day of the sale, because FatturaPA’sDatacomes fromissue_date(op_dateis not written to the XML), and without further tagsgobl buildsets the document type toTD01,- the Smart Receipt itself is not changed by this invoice, and your own VAT records must remove the invoiced amount from that day’s corrispettivi. See Invoice requested after a receipt for the full sequence.
Technical details
SDI Response Codes and Statuses
SDI Response Codes and Statuses
- OK Result:
delivered,not-delivered,not-received,accepted-pa,deadline-terms - KO Result:
rejected,rejected-pa,invoice-error - QUEUED Result:
sent,delivered-pa
QUEUED, the workflow will check again later for updates from SDI.FAQ
How do I configure my workspace for Italian invoicing?
How do I configure my workspace for Italian invoicing?
How do I issue a documento commerciale (scontrino)?
How do I issue a documento commerciale (scontrino)?
Where do I find Italy-specific GOBL documentation?
Where do I find Italy-specific GOBL documentation?
it-sdi-v1 addon documents required FatturaPA fields.Why is my invoice processing taking so long?
Why is my invoice processing taking so long?
How do I know if my invoice was delivered successfully?
How do I know if my invoice was delivered successfully?
RC (ricevuta di consegna) notification, recorded on the invoice as a status entry with the GOBL status acknowledged. A rejection arrives as NS with status error. Every notification and what it means is covered in the status guide.How do I test different SDI outcomes in the sandbox?
How do I test different SDI outcomes in the sandbox?
SIMNS00 to simulate a rejection. The sandbox simulates SDI end to end and feeds back the notifications a real exchange would produce; any ordinary code resolves to a successful delivery. The full list of reserved codes is in the issuing guide.How do I add codice fiscale and Partita IVA?
How do I add codice fiscale and Partita IVA?
tax_id, and the codice fiscale goes in identities under the key it-fiscal-code. A party may carry both.An Italian supplier always needs a partita IVA. An Italian customer needs at least one of the two — which one depends on who they are, covered in the issuing guide.Here’s an example showing both identifiers on a supplier:How do I invoice a customer outside Italy?
How do I invoice a customer outside Italy?
What if the customer has no tax ID at all?
What if the customer has no tax ID at all?
How do I reference a receipt (documento commerciale) in an SDI invoice?
How do I reference a receipt (documento commerciale) in an SDI invoice?
type N.DOC.COMM and the receipt’s identifier in text, its progressive number in amount and its date in date. The it-sdi-v1 addon writes each item attribute as an AltriDatiGestionali block (TipoDato, RiferimentoTesto, RiferimentoNumero, RiferimentoData). The type is limited to 10 ASCII characters. See the “Invoice after a documento commerciale” example in the issuing guide.🇮🇹 Invopop resources for Italy
🇮🇹 Invopop resources for Italy