DueBuddy
← DueBuddy

API DueBuddyAPI DueBuddy

Analizza le fatture ricevute tramite API: carica una fattura e ottieni i campi e un file per la contabilità. Modello a saldo, senza abbonamento.Analizza le fatture ricevute tramite REST: carica un documento e ottieni campi strutturati e un'esportazione pronta per la contabilità. Saldo prepagato, nessun abbonamento.

Cosa fa l'APICosa fa l'API

Accetta una fattura ricevuta da un fornitore e restituisce dati strutturati oltre a un file pronto per la contabilità. Non emettiamo fatture e non accettiamo pagamenti — ci occupiamo solo dell'analisi.Accetta una fattura ricevuta da un fornitore e restituisce campi strutturati oltre a un file pronto per la contabilità. Non emettiamo fatture e non accettiamo pagamenti — solo analisi.

Le fatture elettroniche vengono lette tramite codice — con precisione e senza addebiti. Paghi solo per scansioni e foto.Le fatture elettroniche vengono analizzate tramite codice — in modo preciso e senza addebiti. Paghi solo per scansioni e foto.

Per iniziare rapidamentePer iniziare rapidamente

  1. Ricarica il saldo nel pannello di controllo (a partire da 8 € / 790 ₽).Ricarica il saldo nel pannello di controllo (a partire da 8 € / 790 ₽).
  2. Crea una chiave API. La chiave viene mostrata una sola volta — conservala.Crea una chiave API. La chiave viene mostrata una sola volta — conservala in modo sicuro.
  3. Invia la chiave nell'intestazione X-Api-Key.Invia la chiave nell'intestazione X-Api-Key.

AutenticazioneAutenticazione

X-Api-Key: your_api_key_here

EndpointEndpoint

MetodoMetodoPathFunzioneFunzione
POST/v1/parseCarica una fattura (multipart: file, country)Carica una fattura (multipart: file, country)
GET/v1/parse/{job_id}Stato dell'attività e campi analizzatiStato dell'attività e campi analizzati
GET/v1/usageUtilizzo e saldo residuoUtilizzo e saldo residuo
GET/v1/pricePrezzo (pubblico, senza chiave)Prezzo (pubblico, senza chiave)
GET/v1/countriesPaesi e formati (pubblico)Paesi e formati (pubblico)

Documentazione interattiva: /docs · /redoc · openapi.jsonDocumentazione interattiva: /docs · /redoc · openapi.json

EsempiEsempi

curl

curl -X POST https://duebuddy.work/v1/parse \
  -H "X-Api-Key: your_api_key_here" \
  -F "country=de" \
  -F "[email protected]"

# {"ok":true,"job_id":41,"status":"queued","charged":true}

curl https://duebuddy.work/v1/parse/41 \
  -H "X-Api-Key: your_api_key_here"

Python

import requests, time

BASE = "https://duebuddy.work/v1"
HEAD = {"X-Api-Key": "your_api_key_here"}

def parse(path, country="de"):
    with open(path, "rb") as f:
        r = requests.post(f"{BASE}/parse", headers=HEAD,
                          files={"file": f}, data={"country": country}, timeout=60)
    r.raise_for_status()
    job = r.json()
    for _ in range(30):                      # ждём результат
        time.sleep(2)
        out = requests.get(f"{BASE}/parse/{job['job_id']}", headers=HEAD, timeout=30).json()
        if out.get("status") in ("done", "failed"):
            return out
    raise TimeoutError("parse timeout")

res = parse("invoice.pdf", "de")
print(res["fields"])                          # поля счёта

JavaScript / Node

const fd = new FormData();
fd.append("country", "us");
fd.append("file", fileInput.files[0]);

const r = await fetch("https://duebuddy.work/v1/parse", {
  method: "POST",
  headers: { "X-Api-Key": API_KEY },
  body: fd
});
const { job_id } = await r.json();
const out = await fetch(`https://duebuddy.work/v1/parse/${job_id}`,
  { headers: { "X-Api-Key": API_KEY } }).then(r => r.json());
console.log(out.fields);

Interfaccia desktopInterfaccia desktop (trascina e rilascia)

Salva come parse.html e apri nel browser — trascina il file e ottieni il risultato. La chiave viene conservata solo nel tuo browser.Salva come parse.html, aprilo nel browser e trascina un file al suo interno. La chiave rimane solo nel tuo browser.

<!doctype html>
<meta charset="utf-8">
<title>DueBuddy parse</title>
<style>body{font:15px system-ui;margin:40px;max-width:640px}
#d{border:2px dashed #999;border-radius:12px;padding:40px;text-align:center}
pre{background:#f4f4f5;padding:14px;border-radius:8px;overflow:auto}</style>

<input id="k" placeholder="API key" style="width:100%;padding:8px">
<div id="d">Drop an invoice here (PDF / JPG / PNG / XML)</div>
<pre id="o">—</pre>

<script>
const d = document.getElementById("d"), o = document.getElementById("o");
d.ondragover = e => e.preventDefault();
d.ondrop = async e => {
  e.preventDefault();
  const f = e.dataTransfer.files[0];
  const fd = new FormData();
  fd.append("country", "de");
  fd.append("file", f);
  const head = { "X-Api-Key": document.getElementById("k").value };
  const j = await fetch("https://duebuddy.work/v1/parse",
              { method: "POST", headers: head, body: fd }).then(r => r.json());
  o.textContent = JSON.stringify(j, null, 2);
  for (let i = 0; i < 30; i++) {
    await new Promise(r => setTimeout(r, 2000));
    const out = await fetch("https://duebuddy.work/v1/parse/" + j.job_id,
                  { headers: head }).then(r => r.json());
    o.textContent = JSON.stringify(out, null, 2);
    if (out.status === "done" || out.status === "failed") break;
  }
};
</script>

Cosa leggiamoCosa leggiamo

Cosa restituiamoCosa restituiamo

{
  "ok": true,
  "job_id": 41,
  "status": "done",
  "fields": {
    "invoice_number": "RE-2026-04871",
    "invoice_date": "2026-09-14",
    "due_date": "2026-10-14",
    "vendor_name": "Hartmann GmbH",
    "net_amount": "1048.74",
    "vat_amount": "199.26",
    "gross_amount": "1248.00",
    "currency": "EUR"
  },
  "fields_detailed": [{"key": "gross_amount", "value": "1248.00", "edited": false}]
}

L'insieme dei campi dipende dal paese (country). Sono inoltre disponibili esportazioni specifiche per il paese: XRechnung, ZUGFeRD, DATEV, 1C, UBL, FatturaPA e altro.L'insieme dei campi dipende da country. Sono inoltre disponibili esportazioni specifiche per il paese: XRechnung, ZUGFeRD, DATEV, 1C, UBL, FatturaPA e altro.

ErroriErrori

CodiceCodicedetailMotivoMotivo
400unsupported_countryPaese non supportatoPaese non supportato
400unsupported_file_typeNon è un PDF/JPG/PNG/XMLNon è un PDF/JPG/PNG/XML
400empty_fileFile vuotoFile vuoto
413file_too_largeIl file supera il limiteIl file supera il limite
429rate_limitedOltre 120 richieste al minutoOltre 120 richieste al minuto

Limiti e fatturazioneLimiti e fatturazione

Vedi ancheVedi anche

Elaboriamo le fatture ricevute. Non emettiamo fatture a tuo nome e non accettiamo pagamenti per te.Elaboriamo le fatture ricevute. Non emettiamo fatture per tuo conto e non accettiamo pagamenti per te.