SyyPro Rechnungen
EN 16931 · XRechnung 3.0 · Hybrid-PDF

Documentation API v1

API JSON pour ERP, gestion des stocks ou automatisations personnalisées. Authentification via X-API-Key · conforme EN 16931 · sortie PDF hybride optionnelle.

Authentification

Chaque requête (sauf /health) nécessite l'en-tête X-API-Key: <votre-clé>. Retrouvez vos clés API dans votre Tableau de bord.

X-API-Key: xr_abc123...
Content-Type: application/json
⚡ Limite de débit : 60 req/min par clé TLS recommandé (nginx / Caddy)

Points de terminaison

GET /api/v1/health Ping – aucune authentification requise

Vérification de disponibilité simple. Retourne le statut de la base de données. Idéal pour la surveillance.

Réponse :

{ "status": "ok", "db": true }
GET /api/v1/profiles Profils de facture disponibles

Retourne tous les profils pris en charge avec les métadonnées (champs obligatoires, type d'export).

{ "profiles": ["XRECHNUNG", "B2B_UBL", "ZUGFERD"] }
POST /api/v1/invoices JSON → XRechnung XML (+ PDF hybride optionnel)

Soumettre une facture en JSON → générer un XML valide (et générer optionnellement un PDF hybride).

Corps de la requête :

{
  "profile":          "XRECHNUNG",
  "invoice_number":   "RE-2026-0042",
  "issue_date":       "2026-04-20",
  "due_date":         "2026-05-04",
  "currency":         "EUR",
  "buyer_reference":  "04011000-1234567-89",
  "seller": {
    "name":   "Mustermann IT GmbH",
    "vat_id": "DE123456789",
    "address": { "street":"Musterstraße 12","postal_code":"70173",
                 "city":"Stuttgart","country_code":"DE" }
  },
  "buyer": {
    "name": "Landratsamt Musterhausen",
    "address": { "street":"Rathausplatz 1","postal_code":"70173",
                 "city":"Musterhausen","country_code":"DE" }
  },
  "lines": [{
    "name": "Webentwicklung", "quantity": "12",
    "unit": "HUR", "unit_price": "120.00", "tax_percent": "19"
  }],
  "bank_account": { "iban": "DE89370400440532013000" },
  "include_zugferd": false
}

Réponse réussie (200) :

{
  "invoice":      { ... },
  "validation":   { "ok": true, "errors": [] },
  "xml_base64":   "PD94bWwgdmVyc2lvbj0iMS4wIi4uLg==",
  "zugferd_base64": null
}

unit = UN/CEFACT-Code: HUR Stunde, C62 Stück, KGM kg. Bei XRechnung ist buyer_reference (Leitweg-ID) Pflicht.

POST /api/v1/validate Validation uniquement, pas de sortie

Même corps que /invoices, mais retourne uniquement le résultat de validation — pas de XML, pas de PDF.

{
  "ok":     false,
  "errors": [
    { "level": "error", "code": "BR-04",
      "message": "Seller VAT identifier is mandatory." }
  ]
}
POST /api/v1/extract Télécharger un PDF → extraire les champs + générer XML

Envoie une facture PDF en multipart/form-data. Le scanner extrait tous les champs reconnaissables et retourne directement un XML valide.

curl -X POST https://rechnung.syypro.com/api/v1/extract \
     -H "X-API-Key: $XR_KEY" \
     -F "file=@rechnung.pdf" \
     -F "profile=ZUGFERD"

Champs de réponse :

  • confidence – Qualité de reconnaissance 0–100
  • warnings – Champs qui n'étaient pas clairs
  • checklist – Vérification de complétude avec codes BT
  • xml_base64 – XML XRechnung complet
  • zugferd_base64 – PDF hybride (si profil ZUGFERD)

⚠ Codes d'erreur

HTTPCodeSignification
400invalid_bodyJSON malformé ou champs obligatoires manquants
401unauthorizedClé API manquante ou invalide
413too_largeTéléchargement > 16 Mo
415wrong_typeSeul le PDF est autorisé pour l'extraction
422invalid_invoiceLa facture échoue à la validation EN-16931
429rate_limitedPlus de 60 requêtes/minute
503api_disabledAPI non activée ou aucune clé configurée
Référence API complète Tous les points de terminaison, paramètres, formats de réponse
Tester l'API Test étape par étape
Comment fonctionne le testeur :
Choisissez une fonction (étape 2), entrez votre clé API (étape 1) et cliquez sur Envoyer la requête. Le résultat apparaît directement en dessous.
→ Se connecter pour utiliser votre clé
1 Saisir la clé API

Retrouvez votre clé dans le tableau de bord sous "Clés API". Elle commence toujours par xr_.

2 Choisir une fonction – que souhaitez-vous faire ?
Vérifie si l'API est accessible. Aucune clé API requise. Idéal pour tester la connexion.
3 Envoyer la requête