API IDP per Sviluppatori: Estrazione Dati da Fatture, DDT e Ordini in JSON via REST e Webhook
Data Alchemy espone il suo motore di Intelligent Document Processing (IDP) tramite REST API, webhook e connettori SQL: una soluzione IDP con integrazione nativa a ERP e CRM, pensata per chi deve automatizzare il data entry documentale invece di ricostruirlo a mano. Con questa API di estrazione dati invii fatture, DDT, ordini o contratti e ricevi JSON strutturato e validato — 99,8% di accuratezza in circa 3 secondi a documento, pronto da scrivere nel tuo gestionale ERP come SAP, Zucchetti o TeamSystem. Questa pagina è la documentazione API per sviluppatori e system integrator: endpoint REST, webhook, schema dei dati e API Zucchetti.
Un'API IDP che trasforma i documenti in dati strutturati
L'API per sviluppatori è il lato programmatico della piattaforma di Intelligent Document Processing di Data Alchemy. Invece di usare l'app web, i tuoi sistemi inviano i documenti via HTTP e ricevono dati validati e strutturati in risposta: così puoi incorporare l'estrazione di fatture, DDT e ordini direttamente nel tuo software, automatizzare il ciclo passivo o alimentare qualsiasi ERP o CRM senza reinserimento manuale.
Base URL e autenticazione
Tutte le richieste usano HTTPS verso https://api.data-alchemy.ai/v1 e si autenticano con una API key Bearer trasmessa nell'header Authorization. Le chiavi si generano dalla console e vanno conservate lato server, mai esposte nel browser. Ogni risposta è in formato JSON UTF-8.
curl -X POST https://api.data-alchemy.ai/v1/documents \
-H "Authorization: Bearer $DATA_ALCHEMY_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F "file=@fattura.pdf" \
-F "document_type=invoice"Quickstart: dalla prima chiamata al JSON in 5 minuti
- Genera la API key. Dalla console Data Alchemy crea una chiave per l'ambiente di test o di produzione. La chiave va conservata lato server (variabile d'ambiente o secret manager), mai nel codice client o nel browser.
- Invia il primo documento. Una POST multipart su
/v1/documentscon il PDF e ildocument_typeavvia l'estrazione e restituisce subito unide lo statoprocessing. - Registra un webhook. Con una POST su
/v1/webhooksindichi l'URL che riceverà l'eventodocument.processed: eviti il polling e ricevi i dati nell'istante in cui l'elaborazione termina. - Verifica la firma HMAC. Ricalcola l'HMAC SHA-256 sul body grezzo e confrontalo con l'header
X-Data-Alchemy-Signatureprima di leggere il payload. - Mappa il JSON sul tuo ERP. Lo schema di output è identico per tutti i tipi di documento: scrivi il mapping una sola volta e riusalo per fatture, DDT, ordini, contratti e listini.
Una singola integrazione copre l'intero ciclo passivo: ricezione documento, classificazione automatica, estrazione, validazione sull'anagrafica del gestionale e scrittura in SAP, Zucchetti o TeamSystem.
Riferimento REST API: invia un documento e leggi i dati
Il flusso tipico è asincrono: invii un documento con una POST, ricevi un id e lo stato di elaborazione, poi recuperi il risultato con una GET — oppure, meglio, lasci che sia il webhook a notificarti al termine. Tutti gli endpoint sono versionati sotto /v1.
/v1/documentsInvia un documento (PDF, XML, immagine) e avvia l'estrazione. Restituisce un id e lo stato./v1/documents/{id}Recupera lo stato e i dati estratti e validati di un documento già inviato./v1/documentsElenca i documenti elaborati con filtri per stato, tipo e intervallo di date./v1/webhooksRegistra un endpoint che riceverà gli eventi document.processed in tempo reale.{
"id": "doc_8a7f2c91",
"status": "processing",
"document_type": "invoice",
"created_at": "2026-06-04T09:12:33Z",
"webhook_url": "https://yourapp.example.com/hooks/data-alchemy"
}curl https://api.data-alchemy.ai/v1/documents/doc_8a7f2c91 \
-H "Authorization: Bearer $DATA_ALCHEMY_API_KEY"Webhook: cos'è e come funziona
Un webhook è una richiesta HTTP che un servizio invia automaticamente a un URL indicato da te, non appena si verifica un evento. È il contrario di una normale chiamata API: non sei tu a chiedere «il documento è pronto?», è il servizio che ti avvisa da solo quando lo è. Per questo un webhook viene spesso descritto come una «API al contrario» o una callback HTTP: l'applicazione che riceve l'evento espone un endpoint pubblico e resta in ascolto, mentre è il servizio a fare da client.
In Data Alchemy funziona così: registri un URL e riceverai una POST al tuo endpoint appena un documento è stato elaborato, senza dover fare polling. Il payload contiene l'evento, l'id del documento, il livello di confidenza e i dati estratti secondo lo schema di output. Ogni richiesta è firmata con HMAC SHA-256 nell'header X-Data-Alchemy-Signature per verificarne l'autenticità.
POST /hooks/data-alchemy (X-Data-Alchemy-Signature: sha256=...)
{
"event": "document.processed",
"id": "doc_8a7f2c91",
"status": "completed",
"confidence": 0.998,
"data": { /* schema di output — vedi sotto / see below */ }
}Webhook o polling: qual è la differenza?
Con il polling è il tuo sistema a interrogare ripetutamente l'API («è pronto adesso?»), sprecando chiamate finché l'elaborazione non termina e introducendo un ritardo pari all'intervallo di attesa. Con un webhook la notifica parte nell'istante in cui il documento è pronto: nessuna chiamata a vuoto, nessun ritardo artificiale e un carico molto minore su entrambi i lati. Il polling resta comunque utile come rete di sicurezza — ad esempio per recuperare un documento se il tuo endpoint è stato irraggiungibile a lungo.
Come verificare la firma di un webhook
Poiché il tuo endpoint è pubblico, chiunque potrebbe inviargli una POST. Per questo ogni webhook di Data Alchemy viaggia con l'header X-Data-Alchemy-Signature, che contiene l'HMAC SHA-256 del corpo grezzo della richiesta calcolato con il tuo secret. Ricalcola la firma sul body ricevuto e confrontala con quella dell'header usando un confronto a tempo costante: se non coincidono, scarta la richiesta. Verifica sempre la firma prima di leggere il payload.
import crypto from "node:crypto";
// Il body va letto grezzo: un JSON già parsato e riserializzato
// produrrebbe una firma diversa. / Read the raw body: a parsed and
// re-serialised JSON would produce a different signature.
function isFromDataAlchemy(rawBody, header, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
const received = header.replace("sha256=", "");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(received)
);
}Schema dei dati di output (JSON)
Ogni documento restituisce JSON tipizzato e validato: testata (fornitore, numero, date), righe di dettaglio, totali, IVA e l'esito della validazione sull'anagrafica del gestionale. La struttura è coerente tra i tipi di documento, così il mapping verso il tuo ERP si scrive una sola volta.
{
"document_type": "invoice",
"header": {
"supplier": {
"name": "Rossi Forniture S.r.l.",
"vat_number": "IT01234567890"
},
"invoice_number": "2026/00417",
"issue_date": "2026-05-28",
"currency": "EUR"
},
"line_items": [
{
"sku": "ART-0042",
"description": "Cartone 30x20x15",
"quantity": 12,
"unit_price": 8.50,
"total": 102.00,
"vat_rate": 22
}
],
"totals": { "net": 102.00, "vat": 22.44, "gross": 124.44 },
"validation": { "status": "validated", "erp_match": true }
}- document_type
- Tipo di documento classificato dall'AI: invoice, delivery_note, order, contract, price_list.
- header
- Dati di testata: anagrafica fornitore/cliente, partita IVA, numero documento, date e valuta.
- line_items
- Array delle righe: codice articolo (SKU), descrizione, quantità, prezzo unitario, totale e aliquota IVA.
- totals
- Totali calcolati e ricontrollati: imponibile (net), imposta (vat) e totale documento (gross).
- validation
- Esito della validazione in tempo reale sull'anagrafica dell'ERP, con flag erp_match ed eventuali anomalie.
API OCR ed estrazione dati: cosa cambia rispetto a un OCR classico
Se stai cercando un'API OCR per leggere fatture e documenti, questa API fa quel lavoro e si ferma un passo più avanti. Un OCR restituisce il testo che ha riconosciuto sull'immagine: una stringa, che poi qualcuno deve interpretare per capire quale numero è l'imponibile e quale la partita IVA. Qui la chiamata è la stessa — una POST multipart con il tuo PDF — ma la risposta è già JSON tipizzato, con testata, righe, totali ed esito della validazione sull'anagrafica del gestionale.
In pratica: dove con un OCR scriveresti tu il parser e lo manterresti a ogni fornitore nuovo, qui il parsing è il servizio. Il documento passa per il riconoscimento del testo, la classificazione del tipo, l'estrazione dei campi con un LLM dedicato e la validazione — e quello che torna al tuo codice è la struttura descritta nello schema di output qui sopra, identica tra tipi di documento diversi.
Nessun template per fornitore
Un OCR a regole va riconfigurato quando cambia l'impaginazione di una fattura. L'estrazione qui è basata su LLM: legge layout mai visti senza che tu aggiunga righe di configurazione.
PDF nativi e scansioni
Accetta PDF testuali, PDF scansionati, immagini e XML FatturaPA sullo stesso endpoint: il riconoscimento ottico entra in gioco solo quando serve davvero.
Campi, non stringhe
La risposta espone header, line_items, totals e validation — non un blob di testo da cui estrarre i valori con espressioni regolari.
Validato prima di tornare
Il flag erp_match dice se fornitore e articoli esistono nell'anagrafica del gestionale. È il controllo che un OCR, per definizione, non può fare.
Se stai ancora decidendo quale delle due tecnologie ti serve, il confronto software OCR fatture vs IDP AI entra nel dettaglio. Se preferisci vederlo su un tuo documento, prova gratis l'estrazione OCR.
Rate limit, retry e gestione degli errori
Le risposte usano codici HTTP standard: 202 per un documento accettato e in elaborazione, 200 al recupero del risultato, 401 per API key mancante o non valida, 422 per un documento non leggibile e 429 al superamento del rate limit. Ogni errore restituisce un JSON con error.code e error.message.
In caso di 429 o di errori 5xx è consigliato un retry con backoff esponenziale, così da non aggravare un servizio già sotto carico. I webhook non consegnati vengono ritentati automaticamente con backoff crescente, così nessun evento document.processed va perso anche se il tuo endpoint resta irraggiungibile per qualche minuto.
202Documento accettato e in elaborazione.200Risultato pronto: dati estratti e validati.401API key mancante, scaduta o non valida.422Documento non leggibile o formato non supportato.429Rate limit superato: riprova con backoff esponenziale.HTTP/1.1 429 Too Many Requests
Retry-After: 30
{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests. Retry after 30s."
}
}Quattro modi per integrare l'estrazione documenti
REST API
Invia un documento e recupera i dati estratti e validati come JSON strutturato, pronto da mappare sul tuo ERP.
Webhook
Pipeline asincrone event-driven: Data Alchemy notifica il tuo endpoint a fine elaborazione, senza polling.
Connettori SQL
Preferisci l'integrazione a livello database? Scrivi i dati estratti direttamente nel tuo sistema via SQL.
Acquisizione da email
Collega una casella Google Workspace o Microsoft 365 e lascia che l'AI acquisisca i documenti — integrazione a zero codice.
Esplora la piattaforma dietro l'API
SAP, Zucchetti, TeamSystem
Come i dati estratti vengono scritti nel gestionale via API REST, webhook e SQL.
Scopri di più →TecnologiaUn LLM dedicato per documento
Il motore AISP che assegna a ogni modello documentale l'LLM migliore per leggerlo.
Scopri di più →Piattaforma IDPSoluzione IDP completa
Fatture, ordini, contratti e listini elaborati dalla stessa piattaforma AI.
Scopri di più →Domande frequenti sull'API per sviluppatori
Che cos'è l'API per sviluppatori di Data Alchemy?
È l'interfaccia programmatica del motore di Intelligent Document Processing (IDP) di Data Alchemy. Invece di usare l'app web, i tuoi sistemi inviano documenti — fatture, DDT, ordini, contratti, listini — e ricevono in risposta dati strutturati e validati, pronti da scrivere nel tuo ERP o CRM.
Quali metodi di integrazione sono disponibili?
Data Alchemy espone una REST API e webhook per i flussi event-driven, oltre a connettori SQL diretti per chi preferisce l'integrazione a livello database. I documenti possono anche essere acquisiti automaticamente da una casella Google Workspace o Microsoft 365, senza scrivere codice.
In che formato tornano i dati estratti?
I campi estratti vengono restituiti come JSON strutturato — dati di testata, righe di dettaglio, totali, imposte e riferimenti documento — già validati sull'anagrafica del tuo gestionale, così possono essere mappati direttamente sul sistema di riferimento.
Come funziona l'autenticazione e la sicurezza dei webhook?
Le richieste si autenticano con una API key Bearer nell'header Authorization, su HTTPS. I webhook in uscita sono firmati con HMAC SHA-256 nell'header X-Data-Alchemy-Signature, così puoi verificare che ogni notifica provenga davvero da Data Alchemy prima di processarla.
Quanto è accurata e veloce l'estrazione?
Data Alchemy assegna un LLM dedicato a ogni modello di documento (oggi Claude AI), raggiungendo il 99,8% di accuratezza in circa 3 secondi a documento, senza template e senza addestramento per layout.
In quali ERP posso scrivere i dati?
L'API è agnostica rispetto al sistema: esistono integrazioni native per SAP, Zucchetti e TeamSystem, mentre REST API, webhook e connettori SQL permettono di inviare i dati strutturati a qualsiasi altro ERP, CRM o applicazione interna.
Cos'è un webhook?
Un webhook è una richiesta HTTP che un servizio invia automaticamente a un URL indicato da te, non appena si verifica un evento — una sorta di «API al contrario». Invece di interrogare ripetutamente l'API per sapere se un documento è pronto (polling), registri un endpoint e Data Alchemy ti invia una POST con i dati estratti nell'istante in cui l'elaborazione termina. Ogni webhook è firmato con HMAC SHA-256 nell'header X-Data-Alchemy-Signature, così puoi verificare che provenga davvero da Data Alchemy prima di processarlo.
Costruisci con l'API per sviluppatori
Raccontaci il tuo caso d'uso: attiviamo l'accesso API e ti accompagniamo nell'integrazione sui tuoi documenti reali, senza impegno.
Richiedi l'accesso API