Salta ai contenuti

E-INVOICE IT per clienti SIGN IT

Stai visualizzando la documentazione per la versione API 2026-06-01.

Questa guida è rivolta ai clienti che dispongono già di un’integrazione SIGN IT funzionante e desiderano aggiungere la fatturazione elettronica italiana (E-INVOICE IT) — B2B e B2C. Entrambi i prodotti si basano sulla stessa API Unificata e condividono la stessa struttura di Taxpayer e Location — sono necessarie solo poche aggiunte.

Vieni da SIGN IT 2024-10-31 o 2025-08-12? Espandi e leggi prima questo.

Dopo la versione 2025-08-12, alcune risorse sono state rinominate e ne sono state introdotte di nuove per la fatturazione elettronica. I nuovi endpoint possono essere richiamati con gli stessi {id} già in uso.

Fino alla versione 2025-08-12Dopo la versione 2025-08-12Note
ASSET/assetsORGANIZATION/organizationsSolo una rinomina — stesso ID di prima.
ENTITY (COMPANY/INDIVIDUAL) — /entitiesTAXPAYER (COMPANY/INDIVIDUAL) — /taxpayersSolo una rinomina — stesso ID di prima.
ENTITY (LOCATION) — /entitiesLOCATION/locationsQuesta risorsa è ora divisa in due tipi:
  • HEAD_OFFICE location: creata automaticamente alla creazione del Taxpayer — stesso ID del tuo vecchio ENTITY (COMPANY/INDIVIDUAL)
  • BRANCH location: qualsiasi location aggiuntiva. Creata tramite l’endpoint createLocation — stesso ID del tuo vecchio ENTITY (LOCATION)
SYSTEM con riferimento a entity: {id}SYSTEM con riferimento a location: {id}Solo una rinomina — stesso ID di prima.

Prima di continuare:

  • Aggiorna l’header X-Api-Version alla versione indicata nel banner qui sopra.
  • Assicurati di puntare agli URL di base corretti: test.api.fiskaly.com (TEST) e live.api.fiskaly.com (LIVE).
  • Aggiungi fiscalization.credentials.tax_id_number alle tue credenziali FISCONLINE, se non è già presente. Questo campo non era richiesto in 2024-10-31, era opzionale in 2025-08-12, ma ora è obbligatorio.
  • Rivedi i principali aggiornamenti alla struttura dei record nella documentazione API — questa FAQ può esserti utile. Per qualsiasi domanda, contatta dev-support@fiskaly.com.

Prima di iniziare, si presuppone che la tua integrazione disponga di:

  • Un Taxpayer creato con dati di fiscalizzazione italiani (fiscalization.type=IT, tax_id_number, vat_id_number, credentials)
  • Il Taxpayer messo in servizio (state=COMMISSIONED, mode=OPERATIVE)
  • Un System FISCAL_DEVICE messo in servizio sulla Location del Taxpayer
  • Un flusso INTENTION::TRANSACTIONTRANSACTION::RECEIPT / TRANSACTION::CORRECTION / TRANSACTION::CANCELLATION per i documenti commerciali

Nulla di tutto ciò deve essere modificato. I passaggi seguenti aggiungono E-INVOICE IT alla configurazione esistente.

Step 1 — Estendere i dati di onboarding del Taxpayer

Sezione intitolata “Step 1 — Estendere i dati di onboarding del Taxpayer”

Sono necessarie due aggiunte al Taxpayer che SIGN IT da solo non richiede:

  • address.region — il codice della Provincia italiana (es. MI, RM) è obbligatorio per l’invio all’SDI. Se non è già impostato sul Taxpayer, aggiungilo tramite updateTaxpayer.

  • fiscalization.registration — un nuovo blocco contenente i dati del Registro delle Imprese / REA.

    Campi obbligatori: company_id, office, entry, legal_form, capital, shareholder_status, liquidation_status. Il campo tax_regime usa ORDINARY per impostazione predefinita se non lo indichi.

    L’SDI richiede questo blocco per le entità registrate, quindi fornitelo al momento dell’onboarding del Taxpayer.

Esempio: PATCH /taxpayers/{taxpayer_id}
{
"content": {
"address": {
"region": "MI"
},
"fiscalization": {
"type": "IT",
"registration": {
"company_id": "MI12345678901234567",
"office": "MI",
"entry": "1234567",
"legal_form": "LIMITED_LIABILITY_COMPANY",
"capital": "10000.00",
"shareholder_status": "MULTIPLE_SHAREHOLDERS",
"liquidation_status": "NOT_IN_LIQUIDATION"
}
}
}
}

Step 2 — Mettere in servizio un System aggiuntivo

Sezione intitolata “Step 2 — Mettere in servizio un System aggiuntivo”

Il System E_INVOICE_SERVICE è l’unico System che crea e trasmette fatture elettroniche (e riceve quelle in entrata). Non sostituisce i tuoi System FISCAL_DEVICE: continui a creare il record della fattura (TRANSACTION::INVOICE) su un System FISCAL_DEVICE (uno qualsiasi sullo stesso Taxpayer), e il System E_INVOICE_SERVICE trasforma quei dati nella fattura elettronica.

Utilizza createSystem per creare un System E_INVOICE_SERVICE sulla Location HEAD_OFFICE del Taxpayer, quindi mettilo in servizio tramite updateSystem impostando il suo state su COMMISSIONED.

Per il flusso di ricezione completo, consulta Ricezione di fatture elettroniche sulla pagina Italia.

Step 3 — Aggiungere il flusso di transazione della fattura

Sezione intitolata “Step 3 — Aggiungere il flusso di transazione della fattura”

SIGN IT utilizza TRANSACTION::RECEIPT / TRANSACTION::CORRECTION / TRANSACTION::CANCELLATION.

E-INVOICE IT utilizza tipi di transazione diversi nello stesso contenitore INTENTION::TRANSACTION:

  • Fattura (B2B o B2C) → crea una TRANSACTION::INVOICE su un System FISCAL_DEVICE (come nello Step 2)
  • Nota di credito → crea una TRANSACTION::CORRECTION con data.type=INVOICE, che fa riferimento alla fattura originale tramite record.id

Sono supportati sia i destinatari di tipo BUSINESS sia quelli di tipo CONSUMER. Per un destinatario business, la voce nell’array recipients della fattura necessita di un blocco invoicing di tipo SDI, oltre alla Provincia del destinatario:

  • recipients[].type = BUSINESS
  • recipients[].invoicing.type = SDI
  • recipients[].invoicing.destination_code — il codice di 7 caratteri della casella SDI del destinatario
  • recipients[].invoicing.pec(dove richiesto) l’indirizzo PEC del destinatario
  • recipients[].address.region — la Provincia del destinatario (es. MI, RM)
Scenariodestination_codepec
Il destinatario ha una casella SDI registratail suo codice di 7 caratteri, solo lettere maiuscole e cifre (es. ABC1234)facoltativo
Il destinatario non è registrato all’SDI"0000000"obbligatorio
Il destinatario è fuori dall’Italia"XXXXXXX"non utilizzato

Per un destinatario consumatore (B2C) i campi sono diversi: nessun destination_code a scelta del destinatario e nessuna partita IVA, ma il codice fiscale è obbligatorio:

  • recipients[].type = CONSUMER
  • recipients[].identification.type = TAX, con number impostato sul codice fiscale del consumatore
  • recipients[].namegender, forename e surname
  • recipients[].address — l’indirizzo di residenza del consumatore, inclusa la region (Provincia)
  • recipients[].invoicing.destination_code = "0000000", con pec facoltativa

Per i requisiti completi del destinatario, consulta Invio di fatture elettroniche sulla pagina Italia.

Quando il cliente ha bisogno della fattura invece del documento commerciale

Sezione intitolata “Quando il cliente ha bisogno della fattura invece del documento commerciale”

I tuoi due flussi trasmettono a destinazioni diverse — il documento commerciale all’AdE, la fattura all’SDI — e nulla li collega automaticamente.

Raccogli la richiesta prima che la vendita venga chiusa. Quando il cliente ti comunica che ha bisogno di una fattura, emetti una TRANSACTION::INVOICE sul System E_INVOICE_SERVICE al posto del documento commerciale. È il flusso che fiskaly supporta oggi da un capo all’altro, sia che il cliente lo chieda prima sia durante la vendita.

A differenza dei flussi dei documenti commerciali, l’esito dell’SDI è asincrono. Dopo aver creato la TRANSACTION::INVOICE, interroga o resta in ascolto degli aggiornamenti sul Record E_INVOICE::TRANSMISSION.

Tutti e tre i Record raggiungono il loro stato finale insieme:

RecordStato finale
E_INVOICE::TRANSMISSIONCOMPLETED o FAILED, mode=FINISHED
TRANSACTION::INVOICECOMPLETED o FAILED, mode=FINISHED
INTENTION::TRANSACTIONCOMPLETED o FAILED, mode=FINISHED

In caso di errore, il motivo del rifiuto dell’SDI è disponibile in logs[].message su tutti e tre i Record.

Per maggiori dettagli, consulta How to check the status of an e-invoice sulla nostra pagina di supporto.

Le fatture elettroniche inviate e ricevute vengono conservate automaticamente a lungo termine (conservazione a norma, almeno 10 anni), con una ricevuta di conservazione disponibile dall’archive-artifact del Record. Non è richiesta alcuna configurazione. Per i dettagli, consulta Archiviazione sulla pagina Italia.

Gli errori possono verificarsi in tre fasi distinte, ciascuna con un comportamento diverso:

FaseQuandoComportamento
Validazione UAPI (sincrona)Payload non validoViene restituito immediatamente 4xx — nessun Record viene creato. Correggi il payload e riprova sullo stesso INTENTION::TRANSACTION.
Validazione pre-SDI (asincrona)La fattura viene rifiutata prima di raggiungere l’SDIL’intera catena raggiunge state=FAILED — è necessaria una nuova catena per riprovare.
Rifiuto dell’SDI (asincrono)L’SDI restituisce NSL’intera catena raggiunge state=FAILED — è necessaria una nuova catena per riprovare.

Se l’SDI restituisce NS (Notifica di Scarto), la fattura è giuridicamente inesistente:

  1. Leggi logs[].message su uno qualsiasi dei tre Record per ottenere il motivo del rifiuto dell’SDI
  2. Crea una nuova INTENTION::TRANSACTION e una nuova TRANSACTION::INVOICE con i dati corretti
  3. Lo stesso document.number può essere riutilizzato entro 5 giorni dal rifiuto NS
  4. La catena fallita rimane FAILED in modo permanente — viene conservata a fini di audit

Quanto segue rimane completamente invariato:

  • Il flusso di messa in servizio del Taxpayer e le credenziali Fisconline
  • Tutti i System FISCAL_DEVICE e le Location BRANCH
  • Il tuo flusso esistente di documenti commerciali INTENTION::TRANSACTIONTRANSACTION::RECEIPT / TRANSACTION::CORRECTION / TRANSACTION::CANCELLATION