API-Dokumentation
Binden Sie EqualDoX in Ihre eigenen Systeme ein: PDF hochladen, Status abfragen, barrierefreies PDF und Diagnose herunterladen.
Überblick
Die REST API v1 automatisiert, was Sie aus der Weboberfläche kennen: Sie senden ein PDF, EqualDoX bereitet es asynchron barrierefrei auf, und Sie laden das Ergebnis mit einer strukturierten Diagnose herunter.
Die API steht Organisationskonten zur Verfügung. Jede Anfrage gehört zu einer Person und einer Gruppe Ihrer Organisation. Es gelten dieselben Regeln wie in der Weboberfläche: dieselbe Prüfung des Uploads, dieselben Seitenkontingente und Preise, dieselbe Aufbewahrung. API-Aufträge erscheinen im Dashboard bei der Person und Gruppe, die sie eingereicht hat.
- JSON über HTTPS, das PDF als Anfragekörper
- Asynchron: Status abfragen statt Webhooks
- Diagnose je Auftrag: Ergebnis, Seiten, Befunde
- Sichere Wiederholungen mit
Idempotency-Key - Seitenverbrauch von Weboberfläche und API zusammen
Authentifizierung
Erstellen Sie einen Schlüssel im Dashboard unter Konto › API-Schlüssel: einen je Gruppe, in der Sie PDFs einreichen dürfen. Der Schlüssel wird nur einmal angezeigt; bewahren Sie ihn sicher auf.
- Basis-URL
https://equaldox.de/api/v1- Header
Authorization: Bearer eqx_…
curl -sS --fail-with-body https://equaldox.de/api/v1/usage \
-H "Authorization: Bearer $EQUALDOX_API_KEY"
Regeln für Schlüssel
- Ein Schlüssel gehört zu Ihnen und einer Gruppe: Aufträge werden unter dieser Gruppe eingereicht, und der Schlüssel sieht nur Ihre Aufträge darin. Für eine andere Gruppe verwenden Sie deren Schlüssel.
- Neu erzeugen oder widerrufen wirkt sofort. Je Person sind höchstens fünf neue Schlüssel in 24 Stunden möglich.
- Ein Schlüssel verliert seine Gültigkeit, wenn Ihre Mitgliedschaft endet, Sie die Gruppe verlassen oder die Organisation nicht mehr aktiv ist.
- Verwenden Sie den Schlüssel nur auf Ihrem Server, nicht in Browser-Code, Apps oder Repositories. Aufrufe aus Webseiten anderer Domains werden nicht unterstützt.
- Neue AGB nehmen Sie zuerst im Dashboard an; bis dahin antwortet die API mit
403.
Schnellstart
Die Verarbeitung läuft asynchron: Das Hochladen legt einen Auftrag an, den Sie abfragen, bis job.status den Wert DONE oder FAILED hat. Warten Sie nicht auf diagnostics.outcome.final; es zeigt nur, ob sich die Diagnose noch ändern kann.
#!/usr/bin/env bash
# Voraussetzungen: curl 7.76+ und jq; vorher: export EQUALDOX_API_KEY="eqx_…"
set -euo pipefail
BASE="https://equaldox.de/api/v1"
AUTH="Authorization: Bearer $EQUALDOX_API_KEY"
FILE="jahresbericht-2026.pdf"
IDEM_KEY="jahresbericht-2026-$(date +%Y%m%d%H%M%S)" # Ihre eigene ID für diesen Upload
NAME=$(jq -rn --arg f "$(basename "$FILE")" '$f|@uri') # Dateiname URL-kodieren
# 1. Hochladen; nach einem Verbindungsabbruch dieselbe Anfrage mit demselben IDEM_KEY wiederholen
JOB=$(curl -sS --fail-with-body -X POST "$BASE/jobs" -H "$AUTH" \
-H "Content-Type: application/pdf" \
-H "X-Upload-Filename: $NAME" \
-H "Idempotency-Key: $IDEM_KEY" \
--data-binary "@$FILE") || { echo "$JOB" >&2; exit 1; }
JOB_ID=$(jq -r '.job.id' <<< "$JOB")
# 2. Status abfragen, bis job.status DONE oder FAILED ist
while :; do
JOB=$(curl -sS --fail-with-body "$BASE/jobs/$JOB_ID" -H "$AUTH") || { echo "$JOB" >&2; exit 1; }
STATUS=$(jq -r '.job.status' <<< "$JOB")
echo "Status: $STATUS"
case "$STATUS" in DONE|FAILED) break ;; esac
sleep 10
done
# 3. Ergebnis herunterladen (--fail schreibt keine Fehlerantwort in die Datei)
if [ "$(jq -r '.job.result_available' <<< "$JOB")" = true ]; then
curl -sS --fail -o "${FILE%.pdf}_barrierefrei.pdf" "$BASE/jobs/$JOB_ID/result" -H "$AUTH"
else
jq '.job.diagnostics.failure' <<< "$JOB" # FAILED: error_code und action
fi
# 4. Optional: Auftrag und Dokumente sofort löschen (sonst nach 7 Tagen)
curl -sS --fail-with-body -X DELETE "$BASE/jobs/$JOB_ID" -H "$AUTH"
- 1. Hochladen PDF als Anfragekörper, Dateiname URL-kodiert in
X-Upload-Filename(Endung.pdf). - 2. Abfragen Alle 10 Sekunden; erlaubt sind 60 Anfragen pro Minute und Person.
- 3. Herunterladen Nur bei
result_available: true;--failspeichert keine Fehlerantwort als PDF. - 4. Löschen Optional; sonst automatisch 7 Tage nach dem Upload.
API-Referenz
Alle Pfade beziehen sich auf https://equaldox.de. Antworten sind JSON mit "status": "ok", außer dem PDF-Download. Alle Felder und Schemas beschreibt die OpenAPI-3.1-Spezifikation (JSON).
| Endpunkt | Zweck | Wichtige Parameter | Antwort |
|---|---|---|---|
POST /api/v1/jobs |
PDF hochladen, Konvertierung starten | Body: PDF; Header Content-Type, X-Upload-Filename, optional Idempotency-Key |
201 job (Wiederholung 200) |
GET /api/v1/jobs |
Aufträge auflisten, neueste zuerst | limit 1–100 (Standard 50), offset |
jobs, total |
GET /api/v1/jobs/{id} |
Status, Seiten, Abrechnung, Kurzdiagnose | keine | job |
GET /api/v1/jobs/{id}/diagnostics |
Diagnose mit Befunden je Seite | keine | job_id, diagnostics |
GET /api/v1/jobs/{id}/result |
Barrierefreies PDF herunterladen | keine | application/pdf |
DELETE /api/v1/jobs/{id} |
Auftrag und Dokumente löschen | keine | job_id, deleted |
GET /api/v1/usage |
Berechnete Seiten je Zeitraum | from, to (YYYY-MM-DD, beide oder keiner; Standard: laufender Monat) |
usage |
Ein Schlüssel sieht nur Ihre eigenen Aufträge in seiner Gruppe, auch die dort über die Weboberfläche hochgeladenen; jeder andere Auftrag antwortet mit 404. Zeitangaben sind UTC im Format ISO 8601.
GET /api/v1/jobs/{id} (gekürzt){
"status": "ok",
"job": {
"id": "3f6c2a1e-8b0d-4c55-9a77-1d2e3f4a5b6c",
"status": "DONE",
"filename": "jahresbericht-2026.pdf",
"page_count": 24,
"expires_at": "2026-11-16T09:00:00Z",
"result_available": true,
"error_code": null,
"billing": {"pages_reserved": 24, "pages_charged": 24,
"settled": true, "failed_pages": []},
"links": {"result": "/api/v1/jobs/3f6c2a1e-…/result"},
"diagnostics": {
"outcome": {"state": "succeeded", "final": true},
"pages": {"total": 24, "converted": 24, "failed": []},
"failure": null
}
}
}
Wichtige Felder des Auftrags
statusUPLOADED,PROCESSING,DONEoderFAILEDresult_available,links.result- Das PDF kann heruntergeladen werden
expires_at- Zeitpunkt der automatischen Löschung
error_code- Grund bei
FAILED billing- Reservierte und berechnete Seiten
diagnostics- Kurzdiagnose, nur bei
GET /api/v1/jobs/{id}
Wichtige Details für die Integration
-
Dateiformat und Größe
Nur PDF, bis 50 MB (52.428.800 Byte), als Anfragekörper mit
Content-Type: application/pdf. Dateiname URL-kodiert inX-Upload-Filename, Endung.pdf, höchstens 255 Zeichen. Leere, beschädigte und passwortgeschützte PDFs:422. -
Anfragelimit
60 Anfragen pro Minute je Person, über alle Schlüssel. Darüber folgt
429mitRetry-After(Sekunden): so lange warten, dann wiederholen. Einzelne Aufträge höchstens alle 5 Sekunden abfragen, viele gemeinsam überGET /api/v1/jobs. -
Idempotenz und Wiederholung
Je Upload einen eigenen
Idempotency-Keysenden (1–255 sichtbare ASCII-Zeichen). Die identische Wiederholung liefert denselben Auftrag (200,Idempotency-Replayed: true), ohne zweite Abrechnung. Gültig 24 Stunden je Person; andere Datei oder anderer Name:409. NachFAILEDeinen neuen Schlüssel verwenden. -
Status und Ergebnis
UPLOADED,PROCESSING, dann endgültigDONEoderFAILED. Das PDF steht bereit, sobaldresult_availabletrueist. Die API liefert das aufbereitete PDF; eine später in der Prüfansicht korrigierte Fassung gibt es im Dashboard. -
Aufbewahrung und Löschung
Automatische Löschung 7 Tage nach dem Upload (
expires_at), danach404.DELETElöscht früher, auch während der Verarbeitung; dann werden keine Seiten berechnet. Verlängerung auf 30 Tage im Dashboard. -
Seitenkontingent und Abrechnung
Kontingent und Preise Ihrer Organisation wie in der Weboberfläche, ohne API-Aufpreis. Seiten werden beim Upload reserviert und nach Abschluss berechnet, fehlgeschlagene Seiten und
FAILED-Aufträge nicht. Zu wenige Seiten:409. Verbrauch je Tag:GET /api/v1/usage.
Diagnose
Jeder Auftrag enthält eine Kurzdiagnose in diagnostics: outcome (Gesamtergebnis), pages (gesamt, konvertiert, fehlgeschlagen) und bei FAILED failure mit action. GET …/diagnostics ergänzt die einzelnen Befunde: Fehler, Warnungen und Hinweise mit Seite und Code.
Die Befunde stammen aus der automatischen Prüfung des aufbereiteten PDFs, die auch die Prüfansicht im Dashboard zeigt. EqualDoX verwendet dafür einen eigenen Barrierefreiheits-Validator. Er ist darauf ausgelegt, alle Barrierefreiheitsverstöße zu erkennen, die veraPDF und PAC erkennen können. Die Diagnose ist ein technisches Prüfergebnis, keine Zertifizierung und keine rechtliche Bewertung.
Werte von outcome.state
pending- Der Auftrag wird noch verarbeitet
checking- Konvertiert, die Prüfung läuft noch
succeeded- Konvertiert, ohne gemeldete Fehler oder Warnungen
succeeded_with_warnings- Konvertiert, Warnungen ansehen
review_required- Mindestens ein Fehler, in der Prüfansicht prüfen
failed- Konvertierung fehlgeschlagen, siehe
failure.action
outcome.final zeigt nur, ob sich die Diagnose noch ändern kann. Ob ein Auftrag abgeschlossen ist, entscheidet job.status.
Fehlerbehandlung
Fehler sind JSON: {"status": "error", "error": "<code>"}, bei ungültigen Eingaben zusätzlich fields mit Feld und Grund. Unverändert wiederholen sollten Sie nur idempotency_request_in_progress, 429 und 5xx; alle anderen Fehler brauchen eine geänderte Anfrage oder eine Aktion im Dashboard.
| Status | Fehlercodes | Was tun |
|---|---|---|
| 401 | api_key_required, invalid_api_key |
Genau einen Header Authorization: Bearer … senden. Schlüssel ungültig, widerrufen oder neu erzeugt: im Dashboard einen neuen erstellen. |
| 403 | terms_acceptance_required, processing_restricted |
Neue AGB im Dashboard annehmen. Bei eingeschränkter Verarbeitung an uns wenden. |
| 404 | not_found, result_not_available |
Auftrag unbekannt, gelöscht, abgelaufen oder nicht sichtbar. Kein Ergebnis: auf DONE warten; FAILED hat keins. |
| 405, 413, 415, 422 | method_not_allowed, payload_too_large, unsupported_media_type, validation_failed |
Anfrage korrigieren. Bei 422 nennt fields den Grund, z. B. file: password_protected oder filename: not_pdf_extension. |
| 409 | page_quota_exceeded, member_page_limit_exceeded |
Zu wenige Seiten (pages_required, pages_remaining): Seiten kaufen oder die Verwaltung Ihrer Organisation fragen. |
| 409 | dpa_required, dpa_update_required, organization_not_active, upload_group_unavailable |
Konto nicht bereit für Uploads: Auftragsverarbeitungsvertrag (AVV) oder seine Aktualisierung im Dashboard annehmen, Organisation und Gruppe prüfen. |
| 409 | idempotency_key_reused, idempotency_request_in_progress |
Schlüssel anders verwendet: einen neuen nehmen. Erste Anfrage läuft noch: nach Retry-After wiederholen. |
| 429 | rate_limited |
Retry-After Sekunden warten, dann wiederholen. |
| 500, 503 | server_error, processing_unavailable, storage_unavailable, storage_locked, uploads_disabled |
Vorübergehend: später mit wachsenden Abständen wiederholen, Uploads mit demselben Idempotency-Key. |
Eine fehlgeschlagene Konvertierung ist kein HTTP-Fehler: Der Auftrag endet mit FAILED, und diagnostics.failure.action sagt, was zu tun ist: retry_later (später mit neuem Idempotency-Key erneut hochladen), fix_input (die Datei ist kein verwendbares PDF), contact_support (an uns wenden) oder resubmit (erneut einreichen). FAILED-Aufträge werden nicht berechnet.
Sie möchten EqualDoX in Ihre Abläufe einbinden?
Mit einem Organisationskonto erstellen Sie Ihren API-Schlüssel im Dashboard. Bei Fragen zur Integration helfen wir gern.