API-Dokumentation
Ein Endpunkt, um Belege direkt aus einem ERP- oder Buchhaltungssystem prüfen zu lassen, ohne die Web-Oberfläche zu nutzen. Ab dem Pro-Tarif verfügbar.
Authentifizierung
API-Keys werden im Profil erstellt und als
X-API-Key-Header mitgeschickt. Keys werden nur einmal im
Klartext angezeigt und ausschließlich als Hash gespeichert.
Endpunkt POST
Format wird automatisch erkannt (EDIFACT, XRechnung/Peppol-XML, ZUGFeRD/Factur-X). Body-Varianten:
Für vollständige PDF/A-3-Dateien (ZUGFeRD/Factur-X mit eingebettetem XML) content_base64: true setzen und den Base64-kodierten PDF-Inhalt übergeben. filename ist optional (nur für Historie/Webhook-Payload) - ohne Angabe wird ein generischer Dateiname verwendet.
Beispiel: cURL
Antwort (EDIFACT-Beispiel)
check_id identifiziert die Prüfung in der Historie und im Webhook-Payload (siehe unten).
Limits & Status-Codes
| Code | Bedeutung |
|---|---|
| 200 | Prüfung erfolgreich durchgeführt (kann trotzdem Fehler/Warnungen im Beleg enthalten) |
| 400 | Ungültige Anfrage (z.B. leerer Inhalt, ungültiges Base64) |
| 401 | Ungültiger oder fehlender API-Key |
| 413 | Inhalt überschreitet die maximale Größe |
| 422 | Beleg konnte nicht als unterstütztes Format erkannt/verarbeitet werden |
| 500 | Interner Verarbeitungsfehler |
Rate-Limit: 60 Anfragen/Minute je API-Key.
Webhooks Max-Tarif
Statt auf die Antwort von /api/v1/check zu warten oder die
Historie zu pollen, kann Edivera jedes
Prüfergebnis aktiv an ein von dir hinterlegtes System senden. Einrichtung unter
Webhooks verwalten.
Nur für Prüfungen über die REST-API (nicht für Uploads über die Weboberfläche).
Event-Typen
| Event | Auslöser |
|---|---|
| check.completed | Eine Prüfung über /api/v1/check wurde abgeschlossen (unabhängig davon, ob Fehler gefunden wurden) |
| ping | Nur beim manuellen "Test-Webhook senden" - kein echtes Prüfergebnis |
Beispiel-Payload
HTTP-Header
| Header | Bedeutung |
|---|---|
| X-Edivera-Event | Event-Typ (siehe oben) |
| X-Edivera-Delivery-Id | Eindeutige ID dieser Zustellung - zur Deduplizierung speichern, falls dieselbe ID erneut ankommt (z.B. nach einem Retry) |
| X-Edivera-Signature | Format t=<Unix-Zeitstempel>,v1=<HMAC-SHA256-Hex> - siehe Signaturprüfung unten |
Signaturprüfung (Pflicht für den produktiven Einsatz)
Die Signatur wird über "{timestamp}.{raw_body}" mit HMAC-SHA256 und
deinem Webhook-Secret berechnet (Secret einmalig beim Anlegen/Rotieren sichtbar, siehe
Webhooks verwalten). Immer den rohen,
unveränderten Request-Body verwenden (nicht erst parsen und neu serialisieren) und den
Zeitstempel gegen ein Toleranzfenster prüfen (empfohlen: 5 Minuten) - das verhindert, dass ein
aufgezeichneter, alter Request erneut abgespielt werden kann (Replay-Angriff).
Python
Node.js
Zustellung, Wiederholungsversuche & Sicherheit
| Aspekt | Verhalten |
|---|---|
| Zeitüberschreitung | 5 Sekunden |
| Retry-Verhalten | 4xx: kein Retry (Anfrage aktiv abgelehnt). 5xx/Timeout/Verbindungsfehler: bis zu 3 automatische Wiederholungen nach 5 / 30 / 120 Minuten |
| Weiterleitungen (3xx) | werden nicht automatisch verfolgt (Sicherheitsmaßnahme) - Ziel-URL muss direkt antworten |
| Ziel-URL-Anforderung | ausschließlich https://, keine privaten/internen Adressen (localhost, 10.x, 172.16-31.x, 192.168.x, Link-Local/Metadata-Adressen) |
| Manuelles Nachsenden | fehlgeschlagene Zustellungen können jederzeit einzeln erneut ausgelöst werden (siehe Zustellprotokoll unter Webhooks verwalten) |
| Rate-Limit | 20 neue Webhooks bzw. Secret-Rotationen pro Stunde, 30 Test-/Nachsende-Aktionen pro Stunde |
| Aufbewahrung | Zustellprotokolle (inkl. Kopie des gesendeten Payloads) werden nach 90 Tagen automatisch gelöscht |