Vai al contenuto principale

Integrazione

Esporta Markdown

Documentazione API esterna V1

Converti le fatture in e-fatture validate direttamente dai tuoi sistemi: carica un documento PDF, DOCX o TXT – oppure dati ERP strutturati – e scarica l’output XRechnung, ZUGFeRD, EN 16931, UBL o CII una volta superata la validazione. Questa pagina è il contratto di integrazione completo: modello di accesso, endpoint, catalogo errori e limiti.

Cinque endpoint REST trasformano fatture PDF, DOCX o TXT – o dati ERP strutturati – in e-fatture validate XRechnung, ZUGFeRD, EN 16931, UBL e CII. Gli abbonati Enterprise attivi creano le chiavi direttamente; ogni mese sono incluse 100 conversioni condivise Email/API, poi ogni conversione usa 0,40–0,50 € di crediti prepagati.

Panoramica

L’API accetta upload multipart, restituisce risposte JSON e usa codici di stato HTTP standard con autenticazione Bearer. Ogni conversione è asincrona: invia il documento, interroga il task, scarica il risultato. Un file viene consegnato solo dopo che la validazione è stata superata: non esistono output non validati.

Invia un documento fattura PDF, DOCX o TXT oppure dati fattura strutturati a un endpoint di conversione. Invoice-Converter avvia un task asincrono per estrazione, validazione e generazione degli artefatti. L’endpoint del risultato restituisce un file solo quando l’artefatto richiesto è validato, controllato e pronto; durante l’elaborazione restituisce 202 TASK_NOT_READY, mentre i problemi di validazione bloccanti restituiscono 422 VALIDATION_FAILED.

Stato: accesso Enterprise

Percorso base: /api/v1. Ultimo allineamento 2026-09-08.

Funzionalità principali

  • Endpoint di upload per fatture PDF e dati fattura strutturati
  • Estrazione dei dati fattura con revisione dei campi rispetto alla fonte
  • Validazione automatica EN 16931 e KoSIT
  • Formati di output XRechnung, ZUGFeRD, EN16931, UBL e CII
  • Elaborazione asincrona con polling, fatture piccole in circa 30 secondi e fatture più grandi fino a 1-2 minuti
  • Scritture idempotenti per retry sicuri

Avvia l’accesso API Enterprise

Ogni abbonato Enterprise attivo può creare chiavi API di produzione direttamente nel profilo.

  1. Crea un account e avvia Enterprise dalla pagina dei prezzi: 35 €/mese con fatturazione annuale (420 €/anno); con fatturazione mensile: 50 €/mese.
  2. Usa le 100 conversioni condivise Email/API incluse ogni mese; le conversioni aggiuntive usano crediti prepagati a 0,40–0,50 € ciascuna.
  3. Crea una chiave API live dalla sezione accesso API del profilo.
  4. Esegui la prima richiesta con credenziali server-side, poi monitora l’uso e ruota le chiavi dal profilo.

Avvio rapido

Tre chiamate API completano una conversione. L’endpoint di conversione è servito su /api/v1 e richiede autenticazione.

POST /api/v1/invoices:convert

Live

Converti documento fattura

POST /api/v1/invoices:convert-structured

Live

Converti dati strutturati

GET /api/v1/tasks/{task_id}

Live

Esegui polling dello stato task

Avvio rapido con curl

Sostituisci $API_KEY con la tua chiave live e $TASK_ID con il task_id della prima risposta. Le stesse tre chiamate valgono per ogni formato di output.

1. Avvia la conversione
curl -X POST "https://www.invoice-converter.com/api/v1/invoices:convert" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Idempotency-Key: inv-2026-0001" \
  -F "file=@invoice.pdf" \
  -F "format=XRECHNUNG"
2. Interroga il task fino a completed
curl "https://www.invoice-converter.com/api/v1/tasks/$TASK_ID" \
  -H "Authorization: Bearer $API_KEY"
3. Scarica il file validato
curl -o invoice.xml \
  "https://www.invoice-converter.com/api/v1/tasks/$TASK_ID/result?download=xml" \
  -H "Authorization: Bearer $API_KEY"

URL base e chiavi API

  • URL di base di produzione: https://www.invoice-converter.com/api/v1.
  • Le chiavi live usano l’host di produzione e il prefisso icp_....
  • Esegui richieste di onboarding e validazione con la tua chiave live prima di inviare volumi di produzione.
  • Tratta le chiavi come secret server-side. Non inserirle in client browser o mobile.

Prima richiesta riuscita

Usa questa sequenza come percorso minimo dopo aver creato una chiave API.

  • Caricamento: POST /api/v1/invoices:convert con Authorization, Idempotency-Key, file=@invoice.pdf (o .docx/.txt) e format=XRECHNUNG.
  • Esegui polling con backoff: attendi circa 20 secondi dopo il 202, poi chiama GET /api/v1/tasks/{task_id} a intervalli di 20s, 30s, 45s, 60s e 60s finché lo stato è completed o failed. Resta entro la quota di stato di 10/min e 120/hour e interrompi dopo circa 16 minuti.
  • Scaricamento: GET /api/v1/tasks/{task_id}/result?download=xml e salva X-Correlation-ID per il tracciamento del supporto.
  • Per output PDF ZUGFeRD, richiedi format=ZUGFERD nel convert e download=pdf nel result; l’output PDF ibrido richiede una sorgente PDF.
  • Per input strutturato, chiama POST /api/v1/invoices:convert-structured con pdf_file=@invoice.pdf, data_file=@invoice-data.json e il format di destinazione.
  • Invia opzionalmente client_reference o external_invoice_id e source_system per la riconciliazione ERP.
  • Per export ERP divisi di una fattura, ripeti data_file; per più fatture, avvia un task per fattura con una propria idempotency key.
  • Salva result_artifacts dalla risposta di stato per vedere se gli artefatti XML/PDF sono validati, in cache o ancora non disponibili per dipendenze.

Esempi comuni di payload

  • XRECHNUNG: invia format=XRECHNUNG.
  • ZUGFERD: invia format=ZUGFERD; usa download=pdf nel result per l’output ibrido PDF/A-3.
  • Input strutturato: invia pdf_file più una o più parti data_file; i formati dati accettati sono CSV, JSON, XML, XLSX e TXT, con qualsiasi formato di destinazione supportato. Le parti data_file devono contenere tutti i dati obbligatori; il PDF non completa i campi mancanti.
  • Più fatture: invia richieste convert separate e traccia ogni task_id restituito; le parti data_file ripetute servono solo per export divisi della stessa fattura.
  • UBL: invia format=UBL; i profili accettati sono XRECHNUNG, PEPPOL e EN16931, con default EN16931.
  • CII: invia format=CII; i profili accettati sono XRECHNUNG, EN16931, ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED e ZUGFERD_XRECHNUNG, con default EN16931.
  • format x profile è una tabella chiusa: XRECHNUNG accetta [XRECHNUNG] (default XRECHNUNG), EN16931 accetta [EN16931] (default EN16931), UBL accetta [XRECHNUNG, PEPPOL, EN16931] (default EN16931), CII accetta [XRECHNUNG, EN16931, ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (default EN16931) e ZUGFERD accetta [ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (default ZUGFERD_EN16931). I profili sono confrontati senza distinzione tra maiuscole e minuscole; ZUGFERD, FACTURX, FACTUR-X e FACTUR_X sono alias di ZUGFERD_EN16931, e ZUGFERD-XRECHNUNG è alias di ZUGFERD_XRECHNUNG.

Header richiesti

  • Authorization: Bearer <api_key>

Regole di autenticazione

Ogni abbonato Enterprise attivo può creare chiavi API dal profilo e usarle come Bearer token. La quota condivisa Email/API comprende 100 conversioni al mese; le conversioni aggiuntive usano crediti prepagati a 0,40–0,50 € ciascuna.

  • Le chiavi sono credenziali live scoped per tenant per abbonamenti Enterprise attivi. Il prefisso di produzione corrente è icp_....
  • Crea, ruota e revoca le chiavi API dal profilo mentre Enterprise è attivo. Copia subito le nuove chiavi perché il valore in chiaro viene mostrato una sola volta.
  • Chiave mancante o non valida restituisce 401.
  • Le chiamate a /api/v1 ricevono automaticamente X-Correlation-ID se omesso.
  • Le chiamate di scrittura richiedono Idempotency-Key; mantieni stabile questo valore nei retry.
  • Usa integrazione server-to-server dal tuo backend. L’accesso da browser-origin è limitato in produzione.

Contratto di idempotenza

  • Invia un Idempotency-Key a ogni chiamata di scrittura.
  • Le chiavi di idempotenza devono corrispondere a [A-Za-z0-9._:-]+ ed essere lunghe al massimo 200 caratteri.
  • Se fornisci una tua chiave, stessa chiave + payload identico restituisce la risposta in cache.
  • Stessa chiave + payload diverso restituisce 409 IDEMPOTENCY_CONFLICT, che non è ripetibile; usa una nuova chiave per un nuovo payload.
  • Una seconda richiesta con la stessa chiave mentre la prima è ancora in elaborazione restituisce 409 IDEMPOTENCY_IN_PROGRESS; riprova con la stessa chiave dopo una breve attesa. Una prenotazione bloccata viene rilasciata dopo 15 minuti.
  • Se il task originale ha superato la ritenzione di 24 ore, un replay restituisce 409 IDEMPOTENCY_REPLAY_EXPIRED; avvia una nuova conversione con una nuova chiave.
  • I record di idempotenza vivono 24 ore, in linea con la ritenzione dei task.

Riferimento endpoint

Tutti gli endpoint sono disponibili su /api/v1. I timeout emergono come 504 e altri errori temporanei di connettività come 502; gli ID di correlazione aiutano il supporto a seguire le richieste end-to-end.

POST /api/v1/invoices:convert

Live

Carica un documento fattura PDF, DOCX o TXT e avvia la conversione asincrona. Restituisce un task_id per il polling. I download PDF ibridi ZUGFeRD/Factur-X richiedono una sorgente PDF; per sorgenti DOCX/TXT richiedere risultati XML. L’XML fattura incorporato viene ignorato per impostazione predefinita; imposta use_embedded_xml=true solo se l’integrazione lo accetta come fonte primaria di estrazione. Richiesta: multipart/form-data; file (binary, obbligatorio) — documento sorgente fattura PDF, DOCX o TXT; i vecchi DOC/RTF, immagini e altri file sono rifiutati; format (string, obbligatorio) — formato di output target; vedere la matrice dei formati sotto; profile (string, opzionale, consigliato per integrazioni deterministiche) — profilo di conformità esplicito, confrontato senza distinzione tra maiuscole e minuscole. Ogni formato ha un insieme chiuso di valori accettati e un solo default: XRECHNUNG → [XRECHNUNG] (default XRECHNUNG); EN16931 → [EN16931] (default EN16931); UBL → [XRECHNUNG, PEPPOL, EN16931] (default EN16931); CII → [XRECHNUNG, EN16931, ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (default EN16931); ZUGFERD → [ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (default ZUGFERD_EN16931). ZUGFERD, FACTURX, FACTUR-X e FACTUR_X sono alias di ZUGFERD_EN16931; ZUGFERD-XRECHNUNG è alias di ZUGFERD_XRECHNUNG. Un valore fuori dall’insieme accettato restituisce 422 OUTPUT_PROFILE_CONFLICT; un nome di profilo non riconosciuto restituisce 422 INVALID_PROFILE con details.allowed_profiles; jurisdiction (string, opzionale) — contesto di giurisdizione ISO 3166-1 alpha-2 esplicito usato per controlli di validazione/avviso; non sovrascrive il profilo; transaction_scope (string, opzionale) — contesto esplicito dell’ambito transazionale, ad esempio B2G; applicato al task in coda; delivery_channel (string, opzionale) — uno tra PEPPOL, DIRECT_XML, PORTAL, EMAIL_PDF, UNKNOWN; applicato al task in coda; client_reference o external_invoice_id (string, opzionale) — riferimento fattura/job lato cliente restituito negli upload accettati e nelle risposte di stato task; source_system (string, opzionale) — etichetta dell’ERP o sistema di fatturazione upstream restituita negli upload accettati e nelle risposte di stato task; email_input (testo libero, opzionale, solo sorgenti PDF) — istruzioni del cliente in qualsiasi lingua, fino a 10.000 caratteri, inviate senza marcatori di blocco e-mail; tutti i passaggi di estrazione e correzione AI le ricevono separatamente dal testo sorgente della fattura; non combinabile con use_embedded_xml=true, fa parte dell’identità della richiesta usata per l’idempotenza e non è supportata da invoices:convert-structured; la validazione standard della fattura resta valida; use_seller_master_data (boolean, opzionale) — se omesso vale il default del profilo tenant; false ignora i dati anagrafici venditore salvati per questa richiesta, true fornisce/usa i dati anagrafici venditore; seller_master_data (stringa oggetto JSON, opzionale) — dati venditore usati solo quando use_seller_master_data=true; supporta campi aziendali, indirizzo, fiscali, contatto e pagamento (payment_means_code 30/42/58, payment_iban, payment_bic, payment_account_name, payment_terms_note); ogni valore del profilo sostituisce il corrispondente valore estratto, i campi assenti dal profilo restano invariati e le differenze generano avvisi non bloccanti; electronic_address e electronic_address_scheme devono essere forniti insieme oppure entrambi omessi; use_embedded_xml (boolean, opzionale, default false) — l’XML Factur-X, ZUGFeRD o XRechnung incorporato viene ignorato salvo valore esplicito true; usare solo se l’integrazione accetta l’XML incorporato come fonte primaria di estrazione. Risposta: 202 Accepted.

POST /api/v1/invoices:convert-structured

Live

Carica un PDF contenitore con dati fattura CSV, JSON, XML, XLSX o TXT e avvia la conversione asincrona da dati strutturati. Le parti data_file sono l’unica fonte semantica; il PDF non completa i campi fattura mancanti. Per ZUGFeRD/Factur-X viene usato come PDF contenitore, mentre per output orientati a XML viene conservato come artefatto PDF inviato. Usa una richiesta di conversione per fattura; ripeti data_file solo per export ERP divisi che descrivono la stessa fattura. Richiesta: multipart/form-data; pdf_file (binary, obbligatorio) — PDF contenitore usato per l’incorporamento ZUGFeRD/Factur-X e conservato per output orientati a XML; data_file (binary, obbligatorio, ripetibile) — dati fattura CSV, JSON, XML, XLSX o TXT usati come unica fonte semantica; .xls, PDF e file immagine sono rifiutati come data_file; ripeti per export header/righe divisi della stessa fattura; gli alias data_files e data_files[] sono accettati; dimensione totale dati strutturati — massimo 2 MB su tutte le parti data_file; format (string, obbligatorio) — formato output di destinazione; supporta XRECHNUNG, ZUGFERD, EN16931, UBL e CII; profile (string, opzionale, consigliato per integrazioni deterministiche) — profilo di conformità esplicito, confrontato senza distinzione tra maiuscole e minuscole. Ogni formato ha un insieme chiuso di valori accettati e un solo default: XRECHNUNG → [XRECHNUNG] (default XRECHNUNG); EN16931 → [EN16931] (default EN16931); UBL → [XRECHNUNG, PEPPOL, EN16931] (default EN16931); CII → [XRECHNUNG, EN16931, ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (default EN16931); ZUGFERD → [ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (default ZUGFERD_EN16931). Un valore fuori dall’insieme accettato restituisce 422 OUTPUT_PROFILE_CONFLICT; un nome di profilo non riconosciuto restituisce 422 INVALID_PROFILE con details.allowed_profiles; jurisdiction (string, opzionale) — contesto di giurisdizione ISO 3166-1 alpha-2 esplicito usato per controlli di validazione/avviso; non sovrascrive il profilo; transaction_scope (string, opzionale) — contesto esplicito dell’ambito transazionale, ad esempio B2G; applicato al task in coda; delivery_channel (string, opzionale) — uno tra PEPPOL, DIRECT_XML, PORTAL, EMAIL_PDF, UNKNOWN; applicato al task in coda; client_reference o external_invoice_id (string, opzionale) — riferimento fattura/job lato cliente restituito negli upload accettati e nelle risposte di stato task; source_system (string, opzionale) — etichetta dell’ERP o sistema di fatturazione upstream restituita negli upload accettati e nelle risposte di stato task; use_seller_master_data (boolean, opzionale) — se omesso vale il default del profilo tenant; false ignora i dati anagrafici venditore salvati per questa richiesta, true fornisce/usa i dati anagrafici venditore; seller_master_data (stringa oggetto JSON, opzionale) — dati venditore usati solo quando use_seller_master_data=true; supporta campi aziendali, indirizzo, fiscali, contatto e pagamento (payment_means_code 30/42/58, payment_iban, payment_bic, payment_account_name, payment_terms_note); ogni valore del profilo sostituisce il corrispondente valore estratto, i campi assenti dal profilo restano invariati e le differenze generano avvisi non bloccanti; electronic_address e electronic_address_scheme devono essere forniti insieme oppure entrambi omessi. Risposta: 202 Accepted.

GET /api/v1/tasks/{task_id}

Live

Esegui il polling dello stato corrente di un task di conversione. Restituisce pending (accettato e in coda, non ancora avviato), processing, completed o failed. Rate limit 10/min e 120/hour: è il vincolo determinante per il polling: attendi circa 20 secondi dopo il 202 accettato prima della prima chiamata, poi distanzia le chiamate (20s, 30s, 45s, 60s e da lì 60s) e fermati su completed o failed. I task completati includono diagnostica result_artifacts, così i client possono vedere quali artefatti XML/PDF sono disponibili, in cache e provati dalla validazione. I payload dei task completati possono includere voci aggiuntive _processing_warnings e _validation_warnings con ID delle regole SOURCE_CONTEXT_* quando le evidenze della fonte erano indisponibili, sospette o troncate; trattale come segnali di revisione, non come errori. Quando è failed, la risposta include un campo error con il motivo dell’errore. Richiesta: nessuno (GET); task_id (path, obbligatorio) — UUID restituito dall’endpoint di conversione; include_validation_report_html (query, opzionale) — true o false (default false); con true la risposta di stato include il report di validazione HTML sanificato dell’artefatto rigoroso corrente quando disponibile. Risposta: 200 OK.

GET /api/v1/tasks/{task_id}/result

Live

Scarica il file generato (XML o PDF). La sintassi del risultato corrisponde al formato originale del task: XRECHNUNG/EN16931/UBL restituiscono UBL XML, CII/ZUGFERD restituiscono CII XML, e ZUGFERD + download=pdf restituisce un PDF/A-3 ibrido. Per altri formati, download=pdf può restituire un PDF renderizzato; su un task completato download=xml è l’artefatto atteso come disponibile, non garantito. Download ripetuti possono essere serviti da artefatti generati in cache quando la prova di validazione è ancora attuale. Durante l’elaborazione questo endpoint restituisce un 202 con l’envelope di errore standard ({"code":"TASK_NOT_READY","message":"Strict conversion is still processing. No validated artifact is available yet.","correlation_id":"<uuid>"}); i problemi di validazione bloccanti restituiscono 422 VALIDATION_FAILED, le dipendenze non disponibili ma ripetibili restituiscono 503, i fallimenti di conversione definitivi restituiscono 500 TASK_FAILED con il motivo in details.code e i fallimenti degli invarianti degli artefatti restituiscono 500 INTERNAL_ARTIFACT_INVARIANT_FAILED, sempre senza corpo file. I download riusciti riportano X-Correlation-ID, Content-Disposition, Cache-Control: no-store, X-Artifact-Sha256, X-Validation-Proof-Id, X-Artifact-Proof-Id, X-Artifact-State, X-Validation-State, X-Proof-Status e X-Validator-Bundle-Id; X-Task-Id non è impostato su questo endpoint. Rate limit 10/min e circa 134/hour. Richiesta: nessuno (GET); task_id (path, obbligatorio) — UUID restituito dall’endpoint di conversione; download (query, obbligatorio) — xml o pdf. Risposta: 200 OK.

GET /api/v1/tasks/{task_id}/validation-report

Live

Scarica il report dell’artefatto risultato validato corrente. Il report è disponibile solo dopo che la conversione rigorosa ha salvato un artefatto con prova aggiornata; in caso contrario l’endpoint restituisce 202 o 404. Gli header della risposta identificano l’artefatto e la prova del report. X-Artifact-Sha256 indica l’artefatto risultato, non il file del report. Rate limit: 10/min e 120/ora. Richiesta: nessuno (GET); task_id (percorso, obbligatorio) — UUID restituito da un endpoint di conversione; download (query, opzionale) — html o xml. Risposta: 200 OK.

Matrice dei formati di output

FormatoSintassiVersione / ProfiloContent-TypeEstensione
XRECHNUNGUBL 2.1 XMLXRechnung 3.0.2application/xml.xml
ZUGFERDCII XML (download=xml) / PDF/A-3 ibrido (download=pdf)ZUGFeRD 2.5 / Factur-X 1.09application/xml o application/pdf.xml / .pdf
EN16931UBL 2.1 XMLEN 16931application/xml.xml
UBLUBL 2.1 XMLOASIS UBL 2.1application/xml.xml
CIIUN/CEFACT CII XMLD16Bapplication/xml.xml

Contratto errori

CodiceHTTPRipetibileNote
AUTHENTICATION_REQUIRED401NoBearer token mancante/vuoto
INVALID_API_KEY401NoChiave API non trovata, revocata o scaduta
API_NOT_ENABLED_FOR_TENANT403NoLa chiave è valida, ma l’accesso External API è disattivato per questo account; contatta il supporto
INSUFFICIENT_API_CREDITS402NoLa quota mensile inclusa più i crediti API prepagati non coprivano la richiesta. Due forme di details: prepagato (remaining, minimum_purchase 100) e quota inclusa (included_remaining, credit_remaining, shortfall, minimum_purchase 100). Analizza il code e leggi le chiavi effettivamente presenti
IDEMPOTENCY_KEY_REQUIRED400NoEndpoint di scrittura chiamato senza Idempotency-Key
INVALID_IDEMPOTENCY_KEY400NoLa chiave di idempotenza deve corrispondere a [A-Za-z0-9._:-]+ ed essere lunga al massimo 200 caratteri
IDEMPOTENCY_CONFLICT409NoLa chiave è già stata usata con un payload diverso, oppure la prenotazione idempotente non è stata avviata; usa una nuova chiave per un nuovo payload
IDEMPOTENCY_IN_PROGRESS409La prima richiesta con questa chiave è ancora in elaborazione; riprova con la STESSA chiave dopo una breve attesa. Una prenotazione bloccata viene rilasciata dopo 15 minuti
IDEMPOTENCY_REPLAY_EXPIRED409NoIl task originale supera la conservazione di 24 ore; avvia una nuova conversione con una nuova chiave
FORMAT_REQUIRED400NoRichiesta di conversione senza il format obbligatorio
INVALID_FORMAT422NoFormato di conversione non supportato
CLIENT_REFERENCE_CONFLICT400Noclient_reference ed external_invoice_id sono diversi
INVALID_CLIENT_METADATA400Noclient_reference, external_invoice_id o source_system supera il limite di lunghezza o contiene caratteri di controllo
INVALID_EMAIL_INPUT400Noemail_input è inviato più di una volta, supera i 10.000 caratteri, è combinato con una sorgente non PDF o con use_embedded_xml=true, oppure è inviato a invoices:convert-structured
INVALID_EMBEDDED_XML_POLICY400Nouse_embedded_xml deve essere true o false
INVALID_SELLER_MASTER_DATA400Nouse_seller_master_data o seller_master_data non è analizzabile o non supera la validazione dei campi; electronic_address e electronic_address_scheme devono essere forniti insieme oppure entrambi omessi
METHOD_NOT_ALLOWED405NoI percorsi di conversione accettano solo POST e i percorsi task solo GET; la risposta include Allow: POST, OPTIONS (conversione) oppure Allow: GET, OPTIONS (task)
DOWNLOAD_FORMAT_REQUIRED400NoRichiesta task-result senza la query download obbligatoria
INVALID_DOWNLOAD_FORMAT400NoLa query download del task-result deve essere xml o pdf
AUTH_SERVICE_UNAVAILABLE503Backend auth non disponibile
RATE_LIMIT_SERVICE_UNAVAILABLE503Non è stato possibile raggiungere il servizio di rate-limit; riprova con backoff
PLAN_TIER_CHECK_FAILED503Non è stato possibile verificare il piano o l’accesso API; riprova con backoff
API_CREDIT_SERVICE_UNAVAILABLE503La verifica dei crediti API prepagati o della quota canale è temporaneamente non disponibile sugli upload di conversione
RATE_LIMITED429Rispettare Retry-After. Retry-After, X-RateLimit-Limit-Minute e X-RateLimit-Limit-Hour vengono restituiti solo sulle risposte 429; il body riporta details.minute_count, details.hour_count, details.limit_minute e details.limit_hour
BAD_REQUEST400NoJSON non valido o parametro path UUID non valido
INVALID_QUERY_PARAMETER400Noinclude_validation_report_html deve essere true o false
PAYLOAD_TOO_LARGE413NoOltre il limite dimensione upload
INVALID_UPLOAD400NoLettura/parsing upload non riusciti
UPLOAD_FAILED422NoUn campo di contesto opzionale (jurisdiction, transaction_scope, delivery_channel) conteneva un valore non riconosciuto; i valori consentiti sono indicati nel message
INVALID_PROFILE422NoNome profilo sconosciuto; details.allowed_profiles elenca i valori accettati
TASK_NOT_READY202Eseguire di nuovo polling per completamento async
TASK_NOT_FOUND404NoIl task è sconosciuto, non appartiene al tenant oppure ha superato la ritenzione di 24 ore dopo aver raggiunto uno stato terminale
VALIDATION_FAILED422NoRestano problemi di validazione bloccanti, inclusi i fallimenti dei prerequisiti rigorosi ZUGFeRD e le voci blocking_source_conflict non risolte; correggi i dati fattura prima di riprovare
AUTHORITATIVE_VALIDATION_UNAVAILABLE503Validazione autorevole, persistenza della prova o dipendenza di generazione ibrida non disponibile; riprova più tardi
TASK_STATUS_FAILED4xx/5xxCondizionaleRetry se la condizione del servizio è transitoria
TASK_RESULT_FAILED4xx/5xxCondizionaleRetry se la condizione del servizio è transitoria
TASK_FAILED500CondizionaleFallimento di conversione segnalato sull’endpoint di risultato. Leggi details.code e details.retryable: MULTIPLE_INVOICES_IN_DOCUMENT, NO_INVOICE_DETECTED, INSUFFICIENT_INVOICE_SIGNAL, SCHEMA_PARSE_FAILED e ARTIFACT_PARITY_FAILED sono definitivi; PROVIDER_ERROR e qualunque details.code non riconosciuto seguono details.retryable, e details.retryable=true significa avviare una NUOVA conversione con una nuova Idempotency-Key invece di ripetere il polling dello stesso task. La conversione fallita non consuma un’unità di fatturazione
MULTIPLE_INVOICES_IN_DOCUMENT500 (details code)NoDefinitivo: la sorgente contiene più fatture. Dividila in un file per fattura e avvia conversioni separate
NO_INVOICE_DETECTED500 (details code)NoDefinitivo: il documento non sembra una fattura; invialo alla gestione manuale
INSUFFICIENT_INVOICE_SIGNAL500 (details code)NoDefinitivo: la sorgente non contiene dati fattura sufficienti; fornisci una sorgente migliore o usa la conversione strutturata
SCHEMA_PARSE_FAILED500 (details code)NoDefinitivo per questo input: i dati estratti non sono stati analizzati secondo lo schema. Avvia una nuova conversione; esegui escalation se lo stesso documento fallisce ancora
PROVIDER_ERROR500 (details code)CondizionaleIl provider di estrazione non ha risposto correttamente. Segui details.retryable; per provider_context_too_large usa un documento sorgente più piccolo
XML_GENERATION_FAILED500Errore transitorio di generazione XML o timeout
PDF_GENERATION_FAILED500Errore transitorio di generazione PDF o timeout
ARTIFACT_GENERATION_RERUN_REQUIRED503NoGenerazione artifact rigorosa non riuscita dopo i retry server-side; avvia una nuova conversione dopo il ripristino della dipendenza
EXTRACTION_INCOMPLETE_GROUP_FAILURE503NoUno o più gruppi di estrazione non sono riusciti. Il task non può riprendersi; avvia una nuova conversione e controlla details.failed_groups
ARTIFACT_GENERATION_FAILED503 (details code)NoRegistrato sui task falliti per errori di emissione rigorosa ritentabili; i download del risultato restituiscono 503 ARTIFACT_GENERATION_RERUN_REQUIRED con questo codice in details
ARTIFACT_PARITY_FAILED500 (details code)NoSegnalato nei details di 500 TASK_FAILED quando l’artefatto rigoroso non corrisponde ai dati fattura finali revisionati; effettua l’escalation con l’ID di correlazione
INTERNAL_ARTIFACT_INVARIANT_FAILED500NoIl task rigoroso completato non ha un artefatto memorizzato sicuro per il download richiesto; effettua l’escalation con l’ID di correlazione
PROFILE_MISMATCH422NoIl profilo richiesto non corrisponde al CustomizationID del risultato memorizzato durante il download del risultato
ZUGFERD_SOURCE_PDF_INCOMPATIBLE422NoLa generazione PDF ibrida rigorosa non può incorporare l’XML nel PDF sorgente caricato
ZUGFERD_SOURCE_PDF_REQUIRED422Nodownload=pdf per ZUGFERD richiede una sorgente PDF (le sorgenti DOCX/TXT non possono trasportare il PDF ibrido); richiedi invece download=xml
VALIDATION_REPORT_NOT_FOUND404NoNessun report di validazione è legato alla prova dell’artefatto attualmente consegnato
VALIDATION_REPORT_FAILED4xx/5xxCondizionaleRecupero del report di validazione non riuscito; retry solo per casi 5xx transitori
OUTPUT_PROFILE_REQUIRED422NoUn endpoint o contesto di richiesta correlato richiede un profilo esplicito per un contratto di output generico
OUTPUT_PROFILE_CONFLICT422NoIl profilo contraddice il formato di output selezionato o la variante esplicita
PROXY_ERROR502/504Errore di trasporto e non esito di conversione: fallimento proxy/upstream (504 per timeout). Riprova con backoff e la stessa idempotency key

Errori comuni e cosa fare

  • Riprova con backoff: 429, 502, 504, 503 con un codice ripetibile e i 500 transitori che non siano TASK_FAILED o INTERNAL_ARTIFACT_INVARIANT_FAILED. 500 TASK_FAILED è ripetibile solo quando details.retryable è true, e solo come nuova conversione.
  • Non riprovare: 400, 401, 402, 403, 404, 405, 413, 422, 409 IDEMPOTENCY_CONFLICT, 409 IDEMPOTENCY_REPLAY_EXPIRED, 500 TASK_FAILED quando details.retryable non è true, e 500 INTERNAL_ARTIFACT_INVARIANT_FAILED.
  • Correggi request o dati sorgente: 400, 413, 422.
  • Correggi accesso o credenziali: 401 INVALID_API_KEY. 403 API_NOT_ENABLED_FOR_TENANT significa che la chiave è valida ma l’accesso External API non è abilitato per l’account — contatta il supporto.
  • Verifica la quota mensile inclusa o acquista un pacchetto di crediti API prepagati: 402 INSUFFICIENT_API_CREDITS. Leggi le chiavi details effettivamente presenti (remaining per gli account prepagati, oppure included_remaining/credit_remaining/shortfall quando si applica una quota inclusa).
  • Continua il polling più tardi: 202 TASK_NOT_READY.
  • Per 500 TASK_FAILED, leggi details.code e details.retryable. MULTIPLE_INVOICES_IN_DOCUMENT, NO_INVOICE_DETECTED, INSUFFICIENT_INVOICE_SIGNAL, SCHEMA_PARSE_FAILED e ARTIFACT_PARITY_FAILED sono definitivi; PROVIDER_ERROR e qualunque codice non riconosciuto seguono details.retryable, e true significa avviare una NUOVA conversione invece di ripetere il polling dello stesso task. Una conversione fallita non consuma un’unità di fatturazione.
  • Per 422 VALIDATION_FAILED, mostra il campo, l’ID della regola e la correzione proposta a una persona incaricata della revisione prima di riprovare con dati fattura corretti.
  • Per 503 AUTHORITATIVE_VALIDATION_UNAVAILABLE, recupera più tardi lo stesso risultato task; non è stato consegnato alcun artefatto non verificato. Per 503 ARTIFACT_GENERATION_RERUN_REQUIRED e 503 EXTRACTION_INCOMPLETE_GROUP_FAILURE, avvia invece una nuova conversione.
  • 502 e 504 PROXY_ERROR sono errori di trasporto e non esiti di conversione; riprova con backoff e la stessa idempotency key.

Limiti di frequenza e payload

Rate limit per chiave e vincoli di dimensione payload si applicano a tutte le chiamate API. Le conversioni rifiutate non consumano crediti API prepagati; i rate limit sono calcolati separatamente per endpoint.

  • I limiti per endpoint sono ponderati per costo e ogni endpoint ha il proprio bucket, così il polling non può esaurire la capacità di conversione. Default per chiave API: POST /invoices:convert e POST /invoices:convert-structured 30/min e 500/hour; GET /tasks/{task_id} 10/min e 120/hour; GET /tasks/{task_id}/result 10/min e circa 134/hour; GET /tasks/{task_id}/validation-report 10/min e 120/hour.
  • Gli header di quota sono restituiti solo sulle risposte 429 RATE_LIMITED. Le risposte riuscite non riportano header di quota: considera la tabella sopra come il contratto operativo e leggi i valori effettivi esatti da una risposta 429.
  • Il bucket di stato è il vincolo determinante per il polling: attendi circa 20 secondi dopo il 202 accettato prima della prima chiamata di stato, poi distanzia le chiamate (20s, 30s, 45s, 60s e da lì 60s) e fermati su completed o failed. Non fare polling ogni 10 secondi; un singolo task interrogato così consuma tutto il budget orario in 20 minuti.
  • Dimensione massima upload documento sorgente: 20 MB per file PDF, DOCX o TXT.
  • Dimensione massima upload dati strutturati: 2 MB totali su tutte le parti data_file.
  • Dimensione massima payload JSON: 1 MB
  • Le risposte 429 includono Retry-After, X-RateLimit-Limit-Minute e X-RateLimit-Limit-Hour, oltre a details.minute_count, details.hour_count, details.limit_minute e details.limit_hour.

Guida ai tentativi

  • Usa backoff esponenziale con jitter e riusa la stessa Idempotency-Key a ogni retry di una richiesta di scrittura.
  • Decidi in base al code leggibile da macchina — e a details.code più details.retryable per 500 TASK_FAILED — mai in base al solo stato HTTP. In questa API un 500 non è automaticamente ripetibile.
  • Ripetibili: 429, 502, 504, 503 con un codice ripetibile, i 500 transitori che NON siano TASK_FAILED o INTERNAL_ARTIFACT_INVARIANT_FAILED, e 500 TASK_FAILED quando details.retryable è true (fallimenti provider transitori: rate limit, timeout, errore di trasporto) — ripeti quel caso come NUOVA conversione con una nuova Idempotency-Key, non ripetendo il polling dello stesso task.
  • Mai ripetere: 400, 401, 402, 403, 404, 405, 413, 422, 409 IDEMPOTENCY_CONFLICT, 409 IDEMPOTENCY_REPLAY_EXPIRED, 500 TASK_FAILED quando details.retryable non è true, e 500 INTERNAL_ARTIFACT_INVARIANT_FAILED. Una conversione fallita in modo definitivo non consuma un’unità di fatturazione.
  • 409 IDEMPOTENCY_IN_PROGRESS è ripetibile con la STESSA chiave dopo una breve attesa; una prenotazione bloccata viene rilasciata dopo 15 minuti.
  • 503 ARTIFACT_GENERATION_RERUN_REQUIRED e 503 EXTRACTION_INCOMPLETE_GROUP_FAILURE richiedono una NUOVA conversione invece di un retry dello stesso task.

Ciclo di vita del task e conservazione

  • Un task e i suoi artefatti memorizzati sono conservati per 24 ore dopo che il task raggiunge uno stato terminale (completed o failed), poi vengono eliminati. Dopo l’eliminazione, le richieste di stato, risultato e report di validazione restituiscono 404 TASK_NOT_FOUND.
  • Non esiste un timeout di conversione fisso. Un task fallisce dopo una finestra di stallo di 5 minuti senza aggiornamenti di fase o avanzamento, oppure quando l’elaborazione totale supera il tetto assoluto di 15 minuti.
  • Imposta il timeout lato client a circa 16 minuti dal 202 accettato. La maggior parte delle conversioni si completa ben sotto i due minuti.
  • I record di idempotenza vivono 24 ore, in linea con la ritenzione dei task. Una richiesta bloccata in elaborazione viene rilasciata dopo 15 minuti.
  • I contatori rate-limit si azzerano su una finestra mobile.

Modello di supporto

  • Supporto in orario lavorativo con sforzi commercialmente ragionevoli.
  • Nessuno SLA formale, credito di servizio o impegno sui tempi di risposta salvo accordo in un order form.

Registro modifiche

Modifiche API esterne più recenti.

2026-09-08

seller_master_data ora tratta electronic_address ed electronic_address_scheme come una coppia opzionale. Fornire entrambi i campi oppure ometterli entrambi; una coppia incompleta restituisce 400 INVALID_SELLER_MASTER_DATA.

2026-09-07

Correzione della documentazione prezzi: 1.000 crediti prepagati costano 400 EUR (0,40 EUR per credito). I pacchetti da 100, 200 e 500 crediti restano a 50, 100 e 250 EUR. I prezzi applicati e gli acquisti esistenti non cambiano.

2026-08-24

La conversione dei documenti ora ignora per impostazione predefinita l’XML fattura incorporato. Imposta use_embedded_xml=true solo se l’integrazione accetta esplicitamente l’XML incorporato come fonte primaria di estrazione. L’importazione e-mail ignora sempre l’XML fattura incorporato. La modifica di use_embedded_xml cambia l’hash di idempotenza della richiesta; usa un nuovo Idempotency-Key quando modifichi questa opzione.

2026-08-20

Quando i dati anagrafici del venditore compilano un campo, i flag di estrazione restanti restano visibili ma non bloccano più l’import e-mail rigoroso o l’External API. Acquirente, righe, imposta, consegna, scadenza, sconto, causale, campi profilo non compilati e valori non validi restano bloccanti.

2026-08-07

Enterprise è diventato disponibile con acquisto diretto a 50 EUR/mese o 420 EUR/anno. Enterprise include 100 conversioni Email/API condivise al mese; le conversioni aggiuntive usano crediti prepagati da 0,40–0,50 EUR. Le chiavi API non richiedono più approvazione manuale.

2026-07-29

Pubblicati il catalogo errori attuale e le regole di retry per codice. Uno stato 500 non è automaticamente ritentabile; controlla code, details.code e details.retryable. Documentate entrambe le forme di details per 402 INSUFFICIENT_API_CREDITS e i diversi percorsi di recupero per gli errori 409 di idempotenza. Pubblicati gli header di prova del report, la conservazione di 24 ore, i timeout dei task e i rate limit per endpoint. Pubblicata la tabella chiusa formato/profilo e corrette le indicazioni per download, METHOD_NOT_ALLOWED e PROFILE_MISMATCH.

2026-07-28

La conversione API ora rifiuta una sorgente confermata con più fatture tramite l’errore definitivo MULTIPLE_INVOICES_IN_DOCUMENT. Dividi i file multi-fattura confermati. Un segnale incerto restituisce invece 422 VALIDATION_FAILED per il controllo.

2026-07-26

I dati anagrafici venditore abilitati ora sostituiscono i valori estratti corrispondenti del venditore o del pagamento. I campi assenti dal profilo lasciano invariati i valori estratti; le differenze restano avvisi di controllo non bloccanti.

2026-07-25

Sostituito dal 2026-07-26: i dati anagrafici venditore ora sostituiscono i valori estratti corrispondenti invece di compilare solo quelli mancanti.

2026-07-10

Recupero di documentazione; nessuna modifica al comportamento a runtime. Il catalogo errori ora documenta codici di errore runtime prima non documentati, tra cui API_CREDIT_SERVICE_UNAVAILABLE, TASK_NOT_FOUND, INVALID_CLIENT_METADATA, INVALID_SELLER_MASTER_DATA, PROFILE_MISMATCH, ZUGFERD_SOURCE_PDF_REQUIRED, VALIDATION_REPORT_NOT_FOUND, VALIDATION_REPORT_FAILED, INVALID_QUERY_PARAMETER e METHOD_NOT_ALLOWED. I client che analizzano le risposte di errore tramite il campo code leggibile da macchina non richiedono modifiche; i client basati su un elenco fisso di codici devono aggiungere i valori appena documentati. Date del changelog corrette: il supporto per sorgenti DOCX/TXT è stato rilasciato il 2026-06-30, non il 2026-07-06.

2026-07-06

I payload dei task completati possono includere voci aggiuntive _processing_warnings e _validation_warnings con ID delle regole SOURCE_CONTEXT_* quando le evidenze della fonte erano indisponibili, sospette o troncate prima dell’estrazione. Tratta le voci SOURCE_CONTEXT_* come segnali di revisione per la gestione delle eccezioni lato cliente; i download di artefatti rigorosi restano governati dalla prova di validazione e dai controlli sugli artefatti.

2026-07-03

I fallimenti dei prerequisiti rigorosi ZUGFeRD (campi obbligatori mancanti per la generazione ibrida) ora falliscono come 422 VALIDATION_FAILED con gli ID delle regole bloccanti invece di un 503 ritentabile; indirizzali a un flusso di correzione dati, non a un ciclo di retry. Per i formati solo XML (XRECHNUNG, EN16931, UBL, CII) il rendering PDF è ora un artefatto di comodità best effort: download=xml resta autorevole e disponibile sui task completati, mentre download=pdf può risultare non disponibile se il rendering è fallito dopo l’emissione dell’XML. Le conversioni con conflitti di fonte bloccanti non risolti ora falliscono come 422 VALIDATION_FAILED con voci blocking_source_conflict invece di emettere un artefatto.

2026-06-30

POST /api/v1/invoices:convert ora accetta documenti sorgente fattura PDF, DOCX e TXT nel campo file. I vecchi file DOC, RTF, immagini e altre sorgenti non supportate sono rifiutati prima dell’avvio della conversione. I download PDF ibridi ZUGFeRD/Factur-X richiedono ancora una sorgente PDF; usa download XML per conversioni da sorgenti DOCX/TXT. Aggiunta l’opzione include_validation_report_html=true su GET /api/v1/tasks/{task_id} per includere inline il report di validazione HTML sanificato quando disponibile. Gli upload di conversione ora accettano su entrambi gli endpoint i campi opzionali use_seller_master_data e seller_master_data, così i tenant approvati possono attivare dati anagrafici venditore salvati o limitati alla richiesta.

2026-06-29

Aggiunto GET /api/v1/tasks/{task_id}/validation-report?download=html|xml per recuperare il report di validazione legato alla prova dell’artefatto risultato rigoroso corrente. Le risposte del report di validazione espongono gli header ID task, SHA-256 dell’artefatto, ID prova di validazione, ID prova del report, tipo di contenuto del report e ID di correlazione.

2026-06-10

I dati fattura inviati sono ora la fonte dati per l’output ibrido ZUGFeRD; la pulizia deterministica e la normalizzazione fiscale restano attive. I task falliscono quando il progresso si arresta o al limite di 15 minuti, non dopo un timeout fisso di cinque minuti.

2026-06-09

Gli errori di salvataggio del tracciamento uso non bloccano una risposta validata pronta né addebitano un credito extra; gli eventi falliti vanno in coda per la riconciliazione.

2026-06-02

L’accesso External API è ora documentato come accesso approvato invece di creazione non controllata delle chiavi. Chiarito che nessuno SLA formale, credito di servizio o penale contrattuale si applica salvo accordo in un order form. format è ora obbligatorio su entrambi gli endpoint di conversione; valori mancanti restituiscono 400 FORMAT_REQUIRED e valori non supportati 422 INVALID_FORMAT. download è ora obbligatorio sulle richieste task-result; valori mancanti restituiscono 400 DOWNLOAD_FORMAT_REQUIRED e valori non supportati 400 INVALID_DOWNLOAD_FORMAT. Gli upload di conversione ora accettano client_reference/external_invoice_id e source_system per la riconciliazione lato cliente. Le risposte di conversione accettata e stato task ora includono status_url, primary_result_format, primary_result_url e i campi di riconciliazione inviati.

2026-06-01

La conversione strutturata ora accetta tutti i formati di output pubblici: XRECHNUNG, ZUGFeRD, EN16931, UBL e CII. La conversione strutturata ora accetta parti data_file ripetibili e gli alias data_files e data_files[] per export ERP suddivisi. I bundle strutturati multi-file devono descrivere esattamente una fattura e falliscono subito se gli ID fattura del bundle sono mancanti o in conflitto. Chiarito che più documenti fattura devono essere inviati come task di conversione separati, ciascuno con la propria idempotency key.

2026-05-27

Aggiunto POST /api/v1/invoices:convert-structured per conversione da dati strutturati con PDF contenitore e CSV/JSON/XML/XLSX/TXT sui formati output supportati. Documentato che i dati strutturati sono l’unica fonte semantica su questo endpoint; il PDF viene usato per l’incorporamento ibrido. Artefatti OpenAPI e Postman aggiornati per la conversione strutturata.

2026-05-26

Gli artefatti XML rigorosi e PDF ibridi hanno ricevuto dati interni di parità; usa result_artifacts per disponibilità e stato di validazione. La base URL di produzione documentata è diventata https://www.invoice-converter.com/api/v1.

2026-05-19

GET /api/v1/tasks/{task_id}/result esegue solo il recupero; non genera, ripara o valida file. I task rigorosi terminano solo dopo il salvataggio di un artefatto validato; una prova attuale mancante produce un errore chiuso. La conversione External API è fissa sull’emissione rigorosa, senza bozze o esclusione degli avvisi. Lo stato del task ha ricevuto la diagnostica result_artifacts e i valori delivery_channel documentati.

2026-05-08

Aggiunti crediti External API prepagati per tenant non Enterprise. Documentato 402 INSUFFICIENT_API_CREDITS per tenant approvati senza fatturazione Enterprise tramite order form o crediti prepagati. Confermato che i replay idempotenti non consumano crediti API aggiuntivi. Chiarito che il routing del modello External API V1 è gestito lato server, mentre profilo e contesto di consegna restano controllati dal chiamante.

2026-03-28

Lo stato del task ha ricevuto la diagnostica di disponibilità degli artefatti XML/PDF. I download rigorosi restituiscono file solo dopo i controlli server dell’artefatto.

2026-03-26

I download riusciti hanno ricevuto una prova di validazione server per l’artefatto restituito. Dipendenze di validazione o prova mancanti restituiscono 503 AUTHORITATIVE_VALIDATION_UNAVAILABLE. I download in cache sono riutilizzati solo finché la prova di validazione salvata resta aggiornata.

2026-03-06

Download task-result resi fedeli al formato per output CII e ZUGFERD. Aggiunto riuso di artefatti risultato in cache per download XML/PDF ripetuti dello stesso task. Quote di polling allineate a bucket rate-limit ponderati e scoped per endpoint.

2026-02-23

Aggiunte risposte di errore API più chiare e coerenti su tutti gli endpoint. Opzioni convert ampliate e comportamento download XML/PDF documentato per i risultati task. Sicurezza retry migliorata con requisiti di idempotenza e validazione più rigidi. Artefatti OpenAPI/Postman aggiornati al comportamento API corrente.

Artefatti di consegna

Scarica gli artefatti di integrazione leggibili da macchina per la Developer API.

Usare Postman e OpenAPI

  • Importa la collezione Postman e imposta le variabili di collezione base_url, api_key e idempotency_key.
  • Esegui la collezione in ordine: convert, polling stato, poi fetch result.
  • Usa OpenAPI JSON per generare client tipizzati, ma copri upload file, polling e gestione del risultato binario con test di integrazione.
  • Registra X-Correlation-ID nei log così il supporto può tracciare le richieste end-to-end.

Invia feedback tecnico

Condividi con il nostro team domande di implementazione, rischi e richieste di modifica del contratto.