API-Dokumentation
Alle Werkzeuge lassen sich per HTTP aus eigenen Programmen aufrufen – dieselbe Verarbeitung wie auf der Webseite, ebenfalls auf unseren Servern in Deutschland.
Maschinenlesbar als OpenAPI-Datei: /api/v1/openapi.json
Schnellstart
In drei Schritten vom Start zum ersten Aufruf.
Test-Schlüssel anlegen
Melden Sie sich an (kostenlos, nur ein Code per E-Mail) und legen Sie im Konto unter „API-Schlüssel“ einen Schlüssel an. Wählen Sie einen Test-Schlüssel: Er ist kostenlos, auf 20 Aufrufe pro Tag und Dateien bis 5 MB begrenzt.
Schlüssel ablegen
Legen Sie den Schlüssel in einer Umgebungsvariable ab, statt ihn in den Code zu schreiben:
export OWT_KEY=owk_test_...Aufruf bauen und ausführen
Wählen Sie unten ein Werkzeug, kopieren Sie den Aufruf und führen Sie ihn aus. Das Ergebnis ist die bearbeitete Datei (bei Prüf-Werkzeugen ein JSON-Bericht).
Aufruf-Builder
Wählen Sie ein Werkzeug samt Optionen und kopieren Sie einen fertigen Aufruf als curl, JavaScript, Python oder PHP. Alles läuft in Ihrem Browser, es wird nichts gesendet.
curl -X POST 'https://wandlix.com/api/v1/tools/merge-pdf' \
-H "Authorization: Bearer $OWT_KEY" \
-F 'files=@file1.pdf' \
-F 'files=@file2.pdf' \
-OJDie Beispiele lesen Ihren Schlüssel aus der Umgebungsvariable OWT_KEY. Schreiben Sie nie einen Schlüssel in Code, den Sie veröffentlichen.
Zugang
Erstellen Sie in Ihrem Konto einen API-Schlüssel und senden Sie ihn bei jedem Aufruf im Kopf Authorization mit. Zum Konto
Authorization: Bearer owk_YOUR_KEYEin ungültiger oder gesperrter Schlüssel wird abgewiesen (HTTP 401) – nie als Gast behandelt. Schlüssel gehören nicht in öffentlichen Code, Browser-Programme oder Repositories.
Test-Schlüssel
Schlüssel, die mit owk_test_ beginnen, sind kostenlos und berühren Ihr Guthaben nicht. Sie eignen sich zum Ausprobieren der Anbindung und sind begrenzt auf 20 Aufrufe pro Tag und Dateien bis 5 MB. Danach kommt HTTP 402 (quota_exceeded).
Pro Schlüssel lässt sich im Konto ein eigenes Limit für Anfragen pro Minute festlegen; es ersetzt dann das Limit je IP-Adresse.
Aufruf
Eine Anfrage pro Durchgang, als multipart/form-data. Dateien liegen nur im Arbeitsspeicher und werden nach der Antwort verworfen.
POST https://wandlix.com/api/v1/tools/<tool>
Content-Type: multipart/form-datafiles– eine oder mehrere Dateien; die Reihenfolge ist die Verarbeitungsreihenfolgeoptions– optional, JSON-Text mit den Optionen des Werkzeugs (siehe Tabelle unten)
Werkzeuge ohne Dateien (zum Beispiel qr-code und create-einvoice) nehmen auch Content-Type: application/json mit dem Inhalt {"options": {…}} an. Das hilft bei Programmen, die keine Formular-Uploads senden können, etwa Online-Curl-Diensten.
curl
curl -X POST "https://wandlix.com/api/v1/tools/merge-pdf" \
-H "Authorization: Bearer $OWT_KEY" \
-F "files=@a.pdf" -F "files=@b.pdf" \
-o merged.pdfcurl -X POST "https://wandlix.com/api/v1/tools/compress-image" \
-H "Authorization: Bearer $OWT_KEY" \
-F "files=@photo.png" \
-F 'options={"quality":70,"maxWidth":1600}' \
-o photo-small.pngJavaScript (Node.js)
const form = new FormData();
form.append("files", new Blob([await fs.readFile("a.pdf")]), "a.pdf");
form.append("files", new Blob([await fs.readFile("b.pdf")]), "b.pdf");
const res = await fetch("https://wandlix.com/api/v1/tools/merge-pdf", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.OWT_KEY },
body: form,
});
if (!res.ok) throw new Error((await res.json()).error);
await fs.writeFile("merged.pdf", Buffer.from(await res.arrayBuffer()));Python
import os, requests
res = requests.post(
"https://wandlix.com/api/v1/tools/merge-pdf",
headers={"Authorization": "Bearer " + os.environ["OWT_KEY"]},
files=[("files", open("a.pdf", "rb")), ("files", open("b.pdf", "rb"))],
)
res.raise_for_status()
open("merged.pdf", "wb").write(res.content)PHP
$ch = curl_init("https://wandlix.com/api/v1/tools/merge-pdf");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("OWT_KEY")],
CURLOPT_POSTFIELDS => [
"files[0]" => new CURLFile("a.pdf"),
"files[1]" => new CURLFile("b.pdf"),
],
CURLOPT_RETURNTRANSFER => true,
]);
file_put_contents("merged.pdf", curl_exec($ch));Antwort
Bei Erfolg (HTTP 200) kommt die Ergebnisdatei zurück, bei mehreren Ergebnisdateien ein ZIP. Dateiname im Kopf Content-Disposition, Zusatzangaben im Kopf X-Result-Info (URL-kodiertes JSON).
Die E-Rechnung-Prüfung liefert stattdessen JSON mit dem Prüfbericht unter result.
Werkzeuge und Optionen
Die Kennung des Werkzeugs gehört in die Adresse. Optionen, die Sie weglassen, nehmen den Standardwert.
| Werkzeug | Dateien / Größe | Dateitypen | Optionen |
|---|---|---|---|
validate-einvoiceE-Rechnung prüfen | 1–20, ≤ 50 MB | pdf, xml | – |
create-einvoiceE-Rechnung erstellen (XRechnung) | 0, ≤ 1 MB | pdf, xml | JSON-Text (seller, buyer, invoice, payment, lines); keine Dateien. Liefert die XML und den Prüfbericht. |
merge-pdfPDF zusammenfügen | 2–20, ≤ 50 MB | – | |
split-pdfPDF teilen | 1, ≤ 50 MB |
| |
pdf-to-imagePDF in Bild | 1, ≤ 50 MB |
| |
compress-pdfPDF komprimieren | 1, ≤ 50 MB |
| |
ocr-pdfPDF durchsuchbar machen (OCR) | 1, ≤ 50 MB |
| |
protect-pdfPDF schützen | 1, ≤ 50 MB |
| |
unlock-pdfPDF entsperren | 1, ≤ 50 MB |
| |
delete-pdf-pagesPDF-Seiten löschen | 1, ≤ 50 MB |
| |
rotate-pdfPDF drehen | 1, ≤ 50 MB |
| |
watermark-pdfPDF-Wasserzeichen hinzufügen | 1, ≤ 50 MB |
| |
add-page-numbersSeitenzahlen in PDF einfügen | 1, ≤ 50 MB |
| |
reorder-pdfPDF-Seiten sortieren | 1, ≤ 50 MB |
| |
crop-pdfPDF zuschneiden | 1, ≤ 50 MB |
| |
pdf-to-pdfaPDF in PDF/A | 1–10, ≤ 50 MB | pdf, doc, docx, odt, rtf, xls, xlsx, ods, ppt, pptx, odp |
|
pdf-to-textPDF in Text / Markdown | 1, ≤ 50 MB |
| |
remove-metadataMetadaten entfernen | 1–20, ≤ 50 MB | pdf, jpg, jpeg, png, webp | – |
images-to-pdfBilder in PDF | 1–50, ≤ 50 MB | jpg, jpeg, png, webp, gif, tif, tiff, avif, svg |
|
ocr-imageBild in Text (OCR) | 1–10, ≤ 50 MB | jpg, jpeg, png, webp, gif, tif, tiff, avif, svg |
|
convert-imageBild umwandeln | 1–20, ≤ 50 MB | jpg, jpeg, png, webp, gif, tif, tiff, avif, svg |
|
compress-imageBild verkleinern | 1–20, ≤ 50 MB | jpg, jpeg, png, webp |
|
edit-imageBild bearbeiten | 1–20, ≤ 50 MB | jpg, jpeg, png, webp, gif, tif, tiff, avif, svg |
|
word-to-pdfWord in PDF | 1–5, ≤ 50 MB | docx, doc, odt, rtf, pages | – |
excel-to-pdfExcel in PDF | 1–5, ≤ 50 MB | xlsx, xls, ods, csv, numbers | – |
powerpoint-to-pdfPowerPoint in PDF | 1–5, ≤ 50 MB | pptx, ppt, odp, key | – |
numbers-to-excelNumbers in Excel | 1–5, ≤ 50 MB | numbers | – |
convert-officeDokumente umwandeln (DOCX, ODT, XLSX, ODS …) | 1–5, ≤ 50 MB | docx, doc, odt, rtf, xlsx, xls, ods, pptx, ppt, odp |
|
pdf-to-wordPDF in Word | 1–3, ≤ 50 MB |
| |
text-to-pdfText in PDF | 1–10, ≤ 50 MB | txt, md, log |
|
extract-einvoice-xmlXML aus ZUGFeRD-PDF extrahieren | 1–10, ≤ 50 MB | – | |
einvoice-to-pdfE-Rechnung als PDF | 1–10, ≤ 50 MB | pdf, xml |
|
csv-to-excelCSV in Excel | 1–10, ≤ 50 MB | csv, tsv, txt |
|
excel-to-csvExcel in CSV | 1–10, ≤ 50 MB | xlsx, xls, ods |
|
zip-filesZIP-Datei erstellen | 1–50, ≤ 50 MB | * | – |
unzip-filesZIP entpacken | 1, ≤ 50 MB | zip | – |
qr-codeQR-Code erstellen | 0, ≤ 1 MB | * | JSON-Text, keine Dateien: "type" (text, url, wifi, email, phone, sms, vcard, geo, event, sepa, whatsapp) mit den Feldern dieser Art, dazu format (png, svg, pdf), size, ecc, margin, fg, bg, transparent, style. Liefert das Bild. |
convert-dataJSON, CSV, XML, YAML umwandeln | 1–10, ≤ 20 MB | json, csv, tsv, xml, yaml, yml, txt |
|
convert-encodingZeichensatz umwandeln | 1–20, ≤ 20 MB | * |
|
base64Base64 kodieren und dekodieren | 1–10, ≤ 50 MB | * |
|
Verbrauch und Grenzen
Jeder Aufruf wird Ihrem Konto belastet – wie auf der Webseite.
- Zuerst gilt das tägliche Gratis-Kontingent Ihres Kontos.
- Danach werden Credits abgebucht (zuerst die Gratis-Credits des Monats, dann gekaufte). Die Kosten je Werkzeug stehen im Konto.
- Fehlgeschlagene Aufrufe kosten nichts.
- Höchstens 15 Anfragen pro Minute und IP-Adresse; bei Überschreitung kommt HTTP 429.
Fehler
Fehler kommen als JSON mit dem Feld error und dem passenden HTTP-Status.
HTTP 402
{"error":"quota_exceeded"}| HTTP | error | Bedeutung |
|---|---|---|
| 400 | too_few | Zu wenige Dateien für dieses Werkzeug. |
| 400 | too_many | Zu viele Dateien. |
| 415 | bad_type | Dateityp oder Anfrageformat nicht erlaubt. |
| 400 | bad_options | Ungültige Optionen. |
| 409 | conflict | Konflikt mit dem aktuellen Stand. |
| 413 | too_large | Die Dateien sind zu groß. |
| 422 | too_many_pages | Die PDF hat mehr Seiten als für dieses Werkzeug erlaubt. |
| 422 | encrypted | Die Datei ist passwortgeschützt. |
| 422 | wrong_password | Falsches Passwort für die PDF. |
| 422 | invalid | Die Datei ist beschädigt oder nicht lesbar. |
| 503 | busy | Der Server ist ausgelastet. Später erneut versuchen. |
| 422 | infected | Der Virenscan hat Schadsoftware gefunden. |
| 422 | no_einvoice | Keine E-Rechnung in der Datei gefunden. |
| 422 | no_text | Die PDF enthält keinen auslesbaren Text (zum Beispiel ein Scan). |
| 402 | quota_exceeded | Kontingent und Guthaben sind aufgebraucht. |
| 429 | rate_limited | Zu viele Anfragen. Kurz warten. |
| 401 | login_required | Anmeldung erforderlich. |
| 401 | invalid_key | Der API-Schlüssel ist ungültig oder gesperrt. |
| 400 | bad_url | Keine gültige Webadresse. |
| 422 | blocked_url | Die Adresse ist nicht erlaubt (Sperrliste). |
| 400 | bad_alias | Ungültiger Wunschname. |
| 409 | alias_taken | Wunschname schon vergeben. |
| 503 | unavailable | Das Werkzeug ist gerade nicht verfügbar. Später erneut versuchen. |
| 500 | server | Interner Fehler. |
Datenschutz
Die API arbeitet genau wie die Webseite: Verarbeitung in Deutschland, Dateien nur im Arbeitsspeicher, Löschung spätestens nach einer Stunde, keine Protokollierung von Dateinamen oder Inhalten.