Docs
5

Errori e catalogo

Il problem JSON e tutti i codici del catalogo.

  • Nella sandbox

In parole semplici

Quando una chiamata non va a buon fine, la risposta dice se è errata la richiesta o la fattura. Per una fattura, un codice indica il campo nell’export del cliente e dice chi lo corregge. Il partner corregge le richieste errate e i dati errati; noi correggiamo la nostra mappatura e ritentiamo gli invii non riusciti lato canale.

Suggerimento

400 riguarda il formato delle richieste alla nostra API. 422 riguarda la fattura, e il suo codice del catalogo indica il campo nell’export dell’ERP. Tenere distinti i due casi.

Problem JSON

Ogni risposta di errore è un problem JSON (RFC 9457): type, title e status, con detail quando c’è altro da dire. Un 422 aggiunge errors, un elenco di segnalazioni. Ognuna ha un code del catalogo, chi la corregge (who_fixes), un fix_hint e un message, e un field quando la segnalazione riguarda un solo campo (vedere la pagina 3.2). La riga evidenziata è il codice.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/invoices/xml?route=PEPPOL&invoice_ref=INV-2026-0051" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/xml" \
  -H "Idempotency-Key: order-2026-0051" \
  --data-binary @not-an-invoice.xml
Risposta422 Unprocessable Content
{
  "type": "https://eurinvoice.com/problems/validation-failed",
  "title": "The invoice did not pass the checks",
  "errors": [
    {
      "code": "EI-XML-TYPE",
      "fix_hint": "Send the invoice itself, in the format agreed for the route.",
      "who_fixes": "erp",
      "source": "XML-safety",
      "message": "The file is not an invoice in a format this route accepts. Please send the invoice in the agreed format."
    }
  ],
  "status": 422
}
Registrato il 7 ott. 2026. XML ben formato che non è una fattura. La chiamata completa è nella pagina 3.3.

Per un percorso che il servizio non ha, la risposta è 404 con {"detail": "Not Found"}, in JSON semplice.

Cosa significa ogni stato

StatoSignificatoCosa fare
400La richiesta non si può leggere: non è JSON, un campo è errato, oppure la Idempotency-Key manca o non è lunga da 8 a 100 caratteri.Correggere la richiesta.
401Nessuna chiave, o una chiave sconosciuta.Correggere la chiave.
403La chiave non ha lo scope richiesto dalla chiamata, oppure la chiamata riguarda i dati di un altro cliente (forbidden).Usare una chiave con lo scope, o il cliente giusto.
404Per questo cliente non esiste una fattura, un documento, una voce del catalogo o una voce dell’elenco degli scarti con questo id.Controllare l’id.
409La Idempotency-Key è stata usata con un corpo diverso, oppure la sua prima richiesta è ancora in corso. Un annullamento è arrivato troppo tardi. Una credenziale esiste già o è stata revocata.Correggere la chiamata.
413Il corpo supera 5 MB (payload-too-large).Inviare un file più piccolo.
415Il tipo di contenuto non è XML o PDF, oppure un corpo PDF non è un PDF.Correggere il tipo di contenuto.
422La fattura non ha superato un controllo. Non è stato messo in coda nulla.Correggere le segnalazioni contrassegnate erp. Quelle contrassegnate us spettano a noi.
429Troppe richieste per la chiave.Attendere i secondi indicati in Retry-After, poi riprovare.
500Non è stato possibile controllare la fattura. Qualcosa non ha funzionato da parte nostra.Ripetere la stessa chiamata con la stessa chiave.
503Il servizio è occupato (busy), oppure una chiamata sulle credenziali è arrivata a un processo senza chiave master impostata.Ripetere la stessa chiamata dopo Retry-After secondi.

Ogni 409 ha un proprio type nel problem JSON, sotto https://eurinvoice.com/problems/: idempotency-conflict, request-in-progress, already-submitted, send-in-progress, dead-letter, credential-exists e credential-revoked. Per distinguerli, leggere il type, non il title. Un 413 non viene associato alla Idempotency-Key, quindi la stessa chiave si può riutilizzare con un corpo più piccolo.

Un 429 arriva per cliente e per scope, con Retry-After (vedere limiti). Dopo un 202 non si reinvia mai. Gli errori lato infrastruttura che un nuovo tentativo può superare vengono ritentati secondo il nostro calendario, e uno scarto definitivo va nell’elenco degli scarti.

Chi interviene

Ogni codice del catalogo ha un solo responsabile.

ResponsabileChi è
erpIl partner: l’export dell’ERP o i suoi dati anagrafici.
useurinvoice: mappatura, serializzatore o configurazione.
businessL’azienda del venditore, con il suo acquirente o il suo commercialista.
clientIl cliente, cioè il venditore: registrazione, credenziali o autorizzazione.
buyerLa parte dell’acquirente.
routeL’operatore del canale, cioè un’autorità, un access point o una piattaforma: attendere e ritentare.

Il partner corregge 400, 401, 403, 409, 413 e 415. Un 422 contiene segnalazioni, e ognuna dice chi la corregge: erp è il partner, us è eurinvoice.

Il catalogo contiene un codice per ogni segnalazione. Questa pagina ne mostra un campione di dodici, uno o due per ogni famiglia di regole. Digitare un codice e premere Invio per raggiungerlo. Con una chiave, GET /catalogue/{code} spiega qualsiasi codice (vedere consultazione del catalogo). Il catalogo completo è riservato ai partner: richiederlo con l’accesso alla sandbox.

CodiceChi intervieneCosa non vaCosa fare
EI-ID-IBANI nostri controlli, controllo dell’identificativoPartnerL’IBAN non supera la verifica mod-97.Correggere il conto bancario nelle impostazioni dell’azienda.
EI-SCHEMAI nostri controlli, schemaeurinvoiceIl JSON della fattura non corrisponde al modello canonico: un campo mancante o sconosciuto, un tipo o un codice errato, oppure una regola del canale sulla struttura.Leggere il percorso JSON nell’errore e correggere la mappatura del cliente.
EI-TOTALS-MISMATCHI nostri controlli, controllo preliminarePartnerI totali inviati dall’ERP (erp_totals) differiscono dai totali calcolati dalle righe, quindi il documento non corrisponderebbe alla contabilità dell’ERP stesso.Individuare la differenza (di solito arrotondamento per riga anziché per documento, o una riga di sconto omessa dall’export) e correggere l’export o la mappatura.
BR-CO-16EN 16931 e sintassi, validatore del canaleeurinvoiceL’importo dovuto (BT-115) non è uguale al totale IVA inclusa (BT-112) meno l’importo pagato (BT-113) più l’arrotondamento (BT-114).Calcoliamo i totali dalle righe, quindi questo codice compare solo quando i totali provengono dall’esterno (un file pass-through) o sono stati modificati. Ricalcolare i totali dalle righe e reinviare.
EI-XML-DTDEN 16931 e sintassi, validatore del canalePartnerL’XML dichiara un DOCTYPE. UBL, CII e FA(3) non ne usano mai uno, e un DOCTYPE è il modo in cui entità esterne, download di DTD remote ed espansione delle entità entrano in un file (XXE). Il file viene rifiutato prima che un validatore o un canale lo legga.Esportare la fattura senza la riga DOCTYPE. Se l’ERP la aggiunge di proposito, segnalarlo al fornitore dell’ERP: nessun formato di fatturazione elettronica la usa.
EI-XML-SYNTAXEN 16931 e sintassi, validatore del canalePartnerIl file non è XML ben formato: per esempio è troncato, la sua codifica non corrisponde alla dichiarazione, oppure un carattere come & non è sottoposto a escape. Nessun validatore può leggerlo.Esportare di nuovo il file e aprirlo in un qualsiasi visualizzatore XML. Cercare un file troncato, una codifica diversa dalla dichiarazione o una & senza escape.
EI-XML-TYPEEN 16931 e sintassi, validatore del canalePartnerL’XML è ben formato ma non è una fattura che validiamo: non è una Invoice o CreditNote UBL, una fattura CII UN/CEFACT o una fattura FA(3) KSeF (per esempio un Order UBL, o un vecchio file FA(2)).Inviare la fattura stessa, nel formato concordato per il canale.
EI-PEPPOL-NO-ROUTEPeppol, risposta dell’infrastruttura, richiede un’infrastrutturaPartnerL’access point non ha trovato alcun destinatario per l’identificativo dell’acquirente: l’acquirente non è registrato su Peppol per questo tipo di documento. Definitivo per questo invio.Confrontare l’ID Peppol dell’acquirente nell’anagrafica cliente dell’ERP con la directory Peppol; se l’acquirente non è su Peppol, concordare con lui un altro canale.
PEPPOL-EN16931-R001Peppol, validatore del canaleeurinvoiceIl processo commerciale (BT-23) dovrebbe essere presente. Mustang lo ha segnalato come nota sul nostro file ZUGFeRD EN 16931, che non è un documento Peppol.Nessuna azione per ZUGFeRD; il nostro UBL Peppol scrive sempre il processo.
BR-DE-5Germania, validatore del canalePartnerManca il nome del contatto del venditore (BT-41).Aggiungere una persona o un reparto di contatto per la fatturazione alle impostazioni dell’azienda.
KSEF-440Polonia, risposta dell’infrastruttura, richiede un’infrastrutturaeurinvoiceKSeF ha già una fattura con lo stesso NIP del venditore, lo stesso tipo di fattura (RodzajFaktury) e lo stesso numero (P_2); conserva questa chiave per 10 anni. La chiave è il numero, non il file: in TEST anche un file diverso con un numero già accettato ha ricevuto 440. La risposta indica il numero KSeF e la sessione della copia accettata per prima. Un numero che KSeF ha scartato (430 o 450) non viene conservato e si può riutilizzare.Non reinviare. Registrare il numero KSeF originale dalla risposta e indicare la fattura come accettata con quel numero.
BR-RO-001Romania, validatore del canaleeurinvoiceL’identificativo della specifica (BT-24) non è il valore CIUS-RO.Impostare il profilo ro-cius, che scrive l’identificativo CIUS-RO 1.0.1.

In questa pagina