DueBuddy
← DueBuddy

API DueBuddyAPI DueBuddy

Analyse des factures reçues via API : téléversez une facture et obtenez ses champs ainsi qu’un fichier pour la comptabilité. Modèle à solde prépayé, sans abonnement.Analysez les factures reçues via REST : téléversez un document et obtenez des champs structurés ainsi qu’un export prêt pour la comptabilité. Solde prépayé, sans abonnement.

Fonctionnement de l’APIFonctionnement de l’API

Elle accepte une facture reçue d’un fournisseur et renvoie des données structurées ainsi qu’un fichier prêt pour la comptabilité. Nous n’émettons pas de factures et n’acceptons pas de paiements — analyse uniquement.Elle accepte une facture reçue d’un fournisseur et renvoie des champs structurés ainsi qu’un fichier prêt pour la comptabilité. Nous n’émettons pas de factures et n’acceptons pas de paiements — analyse uniquement.

Les factures électroniques sont lues par code — avec précision et sans frais. Vous payez uniquement pour les scans et les photos.Les factures électroniques sont analysées par code — avec précision et sans frais. Vous payez uniquement pour les scans et les photos.

Démarrage rapideDémarrage rapide

  1. Rechargez votre solde dans le tableau de bord (à partir de 8 € / 790 ₽).Rechargez votre solde dans le tableau de bord (à partir de 8 € / 790 ₽).
  2. Créez une clé API. La clé n’est affichée qu’une seule fois — conservez-la en lieu sûr.Créez une clé API. La clé n’est affichée qu’une seule fois — conservez-la en lieu sûr.
  3. Transmettez la clé dans l’en-tête X-Api-Key.Envoyez la clé dans l’en-tête X-Api-Key.

AuthentificationAuthentification

X-Api-Key: your_api_key_here

Points de terminaisonPoints de terminaison

MéthodeMéthodeCheminFonctionFonction
POST/v1/parseTéléverser une facture (multipart : file, country)Téléverser une facture (multipart : file, country)
GET/v1/parse/{job_id}État du traitement et champs analysésÉtat du traitement et champs analysés
GET/v1/usageUtilisation et solde restantUtilisation et solde restant
GET/v1/pricePrix (public, sans clé)Prix (public, sans clé)
GET/v1/countriesPays et formats (public)Pays et formats (public)

Documentation interactive : /docs · /redoc · openapi.jsonRéférence interactive : /docs · /redoc · openapi.json

ExemplesExemples

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);

Interface de bureauInterface de bureau (glisser-déposer)

Enregistrez sous parse.html et ouvrez dans un navigateur — faites glisser un fichier pour obtenir le résultat. La clé reste uniquement dans votre navigateur.Enregistrez sous parse.html, ouvrez le fichier dans un navigateur et déposez-y un fichier. La clé reste uniquement dans votre navigateur.

<!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>

Ce que nous lisonsCe que nous lisons

Ce que nous renvoyonsCe que nous renvoyons

{
  "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’ensemble des champs dépend du country. Des exports propres à chaque pays sont également disponibles : XRechnung, ZUGFeRD, DATEV, 1C, UBL, FatturaPA et autres.L’ensemble des champs dépend du country. Des exports propres à chaque pays sont également disponibles : XRechnung, ZUGFeRD, DATEV, 1C, UBL, FatturaPA et autres.

ErreursErreurs

CodeCodedetailMotifMotif
400unsupported_countryPays non pris en chargePays non pris en charge
400unsupported_file_typeFormat différent de PDF/JPG/PNG/XMLFormat différent de PDF/JPG/PNG/XML
400empty_fileFichier videFichier vide
413file_too_largeFichier dépassant la limiteFichier dépassant la limite
429rate_limitedPlus de 120 requêtes par minutePlus de 120 requêtes par minute

Limites et facturationLimites et facturation

Voir aussiVoir aussi

Nous traitons les factures reçues. Nous n’émettons pas de factures en votre nom et n’acceptons pas de paiements pour vous.Nous traitons les factures reçues. Nous n’émettons pas de factures en votre nom et n’acceptons pas de paiements pour vous.