Introduction
Electronic invoicing is mandatory for essentially every VAT-registered business in Italy. The Sistema di Interscambio (SDI) is the tax authority’s central hub: it validates every invoice and delivers it to the buyer. The legal invoice is the cleared FatturaPA XML file. Invopop converts your GOBL invoice into FatturaPA and transmits it over its own accredited SDICoop channel, registered with the tax authority in Invopop’s name. Nothing sits between your workspace and SDI. Companion guides: Status for what SDI reports back about an invoice, Receiving invoices, and Archiving.Have your agent issue an invoice through SDI in your sandbox.
Setup
All of the following steps must be carried out from the Invopop Console.Connect the Italy app
- Navigate to Configuration → Apps
- Find Italy in the app discovery list
- Click Connect to activate
Configure the sending workflow
Italy send invoice workflow
- Workflow
- Code
Configure the status workflow
Italy import invoice status 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
Identifying the customer
Italy has two fiscal identifiers — the partita IVA (VAT number) and the codice fiscale — and which one you put on the customer depends on who they are.09876543217, not IT09876543217. A codice destinatario is 7 characters, and a codice fiscale is 16 for a person or 11 digits for a company. If you don’t have a code for a party, leave it out rather than inventing a placeholder.
Here is each case as a customer party:
Italian business
Italian business
tax_id carries the partita IVA, and the it-sdi-code inbox carries the codice destinatario SDI routes by. A customer who receives through certified email instead has an it-sdi-pec inbox holding the address. A customer who has both can carry both: the invoice routes by the codice destinatario, and the PEC is left out of the file.Italian private individual
Italian private individual
identities entry keyed it-fiscal-code. They have no VAT number, so the tax_id holds only the country, and there’s no inbox. SDI doesn’t deliver to private individuals — it files the invoice in their personal area on the tax authority portal — so you must give the customer a copy yourself, normally as a PDF.Customer outside Italy
Customer outside Italy
tax_id is all SDI needs, alongside a VAT number for a business inside the EU. No inbox: SDI cannot deliver outside Italy, so the file always carries the cross-border recipient code XXXXXXX, and an inbox on the party is ignored.How the send step works
The step generates the FatturaPA XML, submits it to SDI, and attaches the transmitted file to the invoice entry. It completes as soon as SDI accepts the file for processing — it does not wait for SDI to decide what happens next, so a verdict that takes days never holds your workflow open. The step returns:OKwhen SDI accepted the file. The result carries SDI’s identifier for the submission (sdi_id), which every later notification about this invoice shares.KOwhen the invoice couldn’t be converted or SDI refused the submission outright.
FPA12) need a qualified electronic signature. The send step signs them with Invopop’s qualified electronic seal, so the file attached to the entry is the signed .xml.p7m.Simplified invoices
Italian law lets you issue a simplified invoice (fattura semplificata) for a sale of up to €400 including VAT, and for credit and debit notes whatever their amount. It asks less about your customer: their partita IVA or codice fiscale is enough. You can keep issuing ordinary invoices for these sales; the simplified one is an option. To issue one, add thesimplified tag to your invoice:
it-sdi-v1 addon then sets the format to FSM10 and the document type to TD07 (TD08 for a credit note, TD09 for a debit note), and the send step delivers a simplified FatturaPA file to SDI. The invoice still needs a customer, identified in one of two ways:
name: without an address the simplified file doesn’t include the name, so the placeholder stays on your invoice and isn’t sent to SDI. Don’t add an address in that case, or the placeholder would be sent as the customer’s name.
The addon rejects a simplified invoice that the format or the law doesn’t allow, before it reaches SDI:
- A total over €400 including VAT, converted to euros with the invoice’s exchange rate. The limit doesn’t apply to credit and debit notes, or to suppliers in the flat-rate regime (
RF19) or the cross-border VAT franchise (RF20). - A customer that is a public administration.
- Intra-EU supplies of goods (
N3.2), services taxed on a business in another EU country (N2.1), reverse charge (N6) and VAT due in another EU country (N7). - A sale to a habitual exporter (
N3.5) or a stamp duty exemption (NB1,NB2,NB3). Only the ordinary format carries the declaration of intent and these exemptions. - Withholding taxes, fund contributions, a rounding amount, and charges or discounts without VAT.
simplified tag. It must refer to the invoice it corrects, with that invoice’s code and issue date and the reason for the correction. If you create the note from the original with previous_id and correct, set reason in the correct object. The Simplified Invoice example below shows a complete document.
Invoice statuses
SDI’s verdict on an invoice arrives after the send step has finished, as a notification recorded against the invoice: delivered, rejected, undeliverable, or — for public administrations — accepted or refused by the buyer. Each notification and what it means for the invoice is covered in the Status guide.Archiving (conservazione a norma)
Italian law requires issued electronic invoices to be preserved long-term through a certified process. Add the Archive document step after the send step to preserve each invoice as you issue it. See the Archiving guide for the full setup.Testing in the sandbox
There is no public SDI test environment you can point a workflow at. In sandbox, the app plays SDI’s part itself: it accepts the file, then feeds the status notifications a real exchange would produce back through the same intake the live channel uses. Your workflow cannot tell the difference, and nothing leaves the platform.Choosing the outcome
You choose which outcome to rehearse by setting a reserved codice destinatario on the customer. In GOBL that is an inbox with the keyit-sdi-code:
it-sdi-v1 addon validates invoices against the same rules SDI applies, so an invoice that builds cleanly should only rarely be rejected live — though edge cases can still slip through.Receiving your own invoices
Send a sandbox invoice to a company you have registered for reception and the app also loops it back to you as an inbound delivery, running your import workflow exactly as a live delivery would. This is the only way to receive an invoice in sandbox, and a convenient way to exercise sending and receiving in a single run.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.
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