API DOCS

Verbinden Sie Ihr ERP, TMS oder Warenwirtschaftssystem direkt mit Doclution: Aufträge anlegen, Mitarbeiter zuweisen, Status, Fotos und Berichte abrufen – und per Webhook sofort erfahren, wenn sich etwas ändert.

Basis-URL https://doclution.de/api_jobs.php
🔑
API-Schlüssel
Pro Firma beliebig viele Schlüssel, wahlweise nur lesen oder lesen + schreiben, mit Ablaufdatum.
⚡
JSON über HTTPS
Jede Antwort enthält success; Fehler zusätzlich error und den passenden HTTP-Status.
📡
Webhooks
Signierte Ereignisse (HMAC-SHA256) bei neuen, geänderten und abgeschlossenen Aufträgen, Fotos und Berichten.
Der API-Zugang ist eine Funktion Ihres Tarifs. Schlüssel und Webhooks verwalten Manager im Portal unter Einstellungen → API. Ohne freigeschalteten Zugang antwortet die API mit HTTP 403.

SCHNELLSTART

In drei Schritten zum ersten Auftrag aus Ihrem System.

  1. Im Portal unter Einstellungen → API einen Schlüssel erstellen und sicher ablegen – er wird nur einmal angezeigt.
  2. Auftrag anlegen (Beispiel unten) – die Antwort enthält die job_id.
  3. Optional einen Webhook anlegen: Doclution meldet dann Abschluss, Fotos und Bericht von selbst.
cURL
curl -X POST "https://doclution.de/api_jobs.php?action=create" \
  -H "Authorization: Bearer dlk_DEIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reference":"LS-2026-10045","users":["maxmuster"],"requirements":[{"label":"Lieferschein","type":"dokument","count":1}]}'

AUTHENTIFIZIERUNG

Jeder Aufruf braucht einen gültigen, aktiven und nicht abgelaufenen API-Schlüssel. Schlüssel beginnen mit dlk_ und gehören fest zu einer Firma – Sie sehen und ändern ausschließlich Daten Ihrer eigenen Firma. Doclution speichert nur einen Fingerabdruck (SHA-256) des Schlüssels; ein verlorener Schlüssel kann nicht wiederhergestellt, nur ersetzt werden.

📨 Authorization-Header Empfohlen
Authorization: Bearer dlk_DEIN_API_KEY
🧩 X-Api-Key-Header
X-Api-Key: dlk_DEIN_API_KEY
Für Systeme, die den Authorization-Header selbst belegen.
Veraltet: ?api_key=… in der Adresse wird noch angenommen, landet aber in Server- und Proxy-Protokollen. Die Antwort trägt dann die Header Deprecation: true und Warning: 299; im Portal ist der Schlüssel als „nutzt URL-Parameter" markiert. Bitte auf einen der Header umstellen.

Rechte je Schlüssel

RechtErlaubt
Lesen + SchreibenAlle Aktionen. Standard für alle bestehenden Schlüssel.
Nur lesenlist, get, photo, report, users, docs; Verlade-XML list/get. create, update, complete, delete und das Quittieren von Verlade-XML werden mit HTTP 403 „Dieser API-Schlüssel darf nur lesen." abgelehnt.

LIMITS

Abfrage-Limit je API-Schlüssel und Kalenderstunde (z. B. 14:00–14:59). Jede Antwort nach erfolgreicher Anmeldung trägt den aktuellen Stand.

200
Anfragen pro Stunde und Schlüssel
Darüber: HTTP 429 mit Retry-After (Sekunden bis zur nächsten vollen Stunde).
HTTP-Header
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 187
HTTP 429 — Too Many Requests
{"success":false,"error":"Zu viele Anfragen: hoechstens 200 pro Stunde und API-Schluessel.","retry_after":1091}

Tipp: Statt regelmäßig abzufragen, lassen Sie sich per Webhook benachrichtigen und holen nur die geänderten Aufträge (updated_since).

ANTWORTEN & FEHLER

Anfragen gehen an https://doclution.de/api_jobs.php, die Aktion steht im Parameter action. Daten für POST dürfen als JSON (Content-Type: application/json) oder als Formular (application/x-www-form-urlencoded) kommen; beides wird zusammengeführt. id darf bei update, complete und delete auch in der Adresse stehen.

Erfolg
{ "success": true, … }
Fehler
{ "success": false, "error": "Auftrag nicht gefunden." }

Zeitangaben sind Ortszeit Deutschland (Europe/Berlin) im Format JJJJ-MM-TT hh:mm:ss. Zahlen aus Summen (z. B. total_required) kommen als Text. Die Ausgabe ist eingerückt (Pretty-Print) und UTF-8.


AUFTRÄGE AUFLISTEN

Paginierte Liste der Aufträge Ihrer Firma (ohne Papierkorb), neueste zuerst. Ohne action liefert ein GET ebenfalls die Liste.

GET?action=listgefiltert, paginiert▾
Parameter (Adresse)
NameTypPflichtBeschreibung
statusstringNeinopen, completed oder all (Standard). Andere Werte = alle. Aufträge „Zur Prüfung" (pending_review) und „Teilweise erledigt" (partial) erscheinen nur bei all.
limitintegerNeinAnzahl je Seite, Standard 50, höchstens 200.
offsetintegerNeinÜberspringen (Seitenweise blättern: offset = Seite × limit).
updated_sinceZeitpunktNeinNeu. Nur Aufträge, die seit diesem Zeitpunkt angelegt, geändert oder abgeschlossen wurden oder ein neues Foto bekamen. ISO 8601 (2026-10-26T08:00:00+01:00) oder 2026-10-26 08:00:00. Ungültig → HTTP 400.
referencestringNeinNeu. Nur der Auftrag mit genau dieser Auftragsnummer.
cURL
curl "https://doclution.de/api_jobs.php?action=list&status=open&limit=50&updated_since=2026-10-26T08:00:00%2B01:00" \
  -H "Authorization: Bearer dlk_DEIN_API_KEY"
✓ HTTP 200 — OK
{
    "success": true,
    "total": 84,
    "limit": 50,
    "offset": 0,
    "jobs": [
        {
            "id": 42,
            "job_reference": "LS-2026-10045",
            "status": "open",
            "job_comment": "Bitte Nummernschild fotografieren",
            "created_at": "2026-10-26 09:30:00",
            "updated_at": null,
            "deleted_at": null,
            "total_required": "6",
            "total_photos": 4,
            "assigned_users": "maxmuster, annaschmidt"
        }
    ]
}

total zählt alle Treffer mit denselben Filtern. assigned_users ist eine kommagetrennte Liste der Benutzernamen (oder null).

AUFTRAG ABRUFEN

Ein Auftrag mit allen Feldern, Anforderungen, zugewiesenen Mitarbeitern und Fotos.

GET?action=get&id={id}vollständige Details▾
Parameter
NameTypPflichtBeschreibung
idintegerJaInterne Auftrags-ID (aus list, create oder dem Webhook).
✓ HTTP 200 — OK (gekürzt)
{
    "success": true,
    "job": {
        "id": 42,
        "job_reference": "LS-2026-10045",
        "status": "completed",
        "job_comment": "Bitte Nummernschild fotografieren",
        "customer_name": "Muster GmbH",
        "due_date": "2026-10-27",
        "template_id": 7,
        "created_at": "2026-10-26 09:30:00",
        "updated_at": "2026-10-26 11:25:12",
        "completed_at": "2026-10-26 11:25:12",
        "deleted_at": null,
        "…": "weitere Auftragsfelder",
        "requirements": [
            { "label_name": "Lieferschein", "photo_type": "dokument", "req_count": 1 }
        ],
        "assigned_users": [
            { "id": 7, "username": "maxmuster" }
        ],
        "photos": [
            {
                "id": 301,
                "file_path": "uploads/company_12/…/foto.jpg",
                "label_name": "Lieferschein",
                "photo_type": "dokument",
                "captured_at": "2026-10-26 11:20:00",
                "lat": "51.48", "lng": "11.97",
                "download_url": "https://doclution.de/api_jobs.php?action=photo&id=301"
            }
        ]
    }
}

job enthält alle Spalten des Auftrags (die Liste kann mit neuen Funktionen wachsen – bitte unbekannte Felder ignorieren). Auch Aufträge im Papierkorb werden geliefert; erkennbar an deleted_at. file_path ist nur zur Information: Foto-Ordner sind nicht direkt abrufbar, Bilder gibt es über download_url.

HTTP 400 / 404
{ "success": false, "error": "id fehlt." }
{ "success": false, "error": "Auftrag nicht gefunden." }

FOTO HERUNTERLADEN

Liefert die Bilddatei selbst (kein JSON) – mit demselben API-Schlüssel im Header.

GET?action=photo&id={foto_id}Binärdatei▾
Parameter
NameTypPflichtBeschreibung
idintegerJaFoto-ID (aus get → photos[].id oder Webhook photo.uploaded).
cURL
curl -o foto_301.jpg "https://doclution.de/api_jobs.php?action=photo&id=301" \
  -H "Authorization: Bearer dlk_DEIN_API_KEY"

Antwort: Content-Type: image/jpeg (bzw. passender Bildtyp), Content-Disposition: inline; filename="foto_301.jpg". Fehler kommen als JSON: 404 „Foto nicht gefunden." / „Datei nicht gefunden.", 409 wenn das Foto auf Ihrem eigenen Speicher-Server liegt (dort abrufen).

BERICHT-PDF

Neu. Liefert einen signierten Download-Link auf den PDF-Bericht – derselbe Weg wie der Bericht-Link in den Abschluss-Mails. Der Link ist 15 Minuten gültig und braucht keinen Schlüssel; holen Sie ihn deshalb erst unmittelbar vor dem Download und geben Sie ihn nicht weiter.

GET?action=report&id={id}kurzlebiger PDF-Link▾
Parameter
NameTypPflichtBeschreibung
idintegerJaAuftrags-ID. Der Bericht wird beim Abruf aus dem aktuellen Stand erzeugt (sinnvoll nach Abschluss, siehe Webhook report.ready).
✓ HTTP 200 — OK
{
    "success": true,
    "job_id": 42,
    "reference": "LS-2026-10045",
    "status": "completed",
    "report_url": "https://doclution.de/report_download.php?t=…",
    "expires_in": 900,
    "expires_at": "2026-10-26T11:40:12+01:00"
}
cURL (Link holen und PDF laden)
URL=$(curl -s "https://doclution.de/api_jobs.php?action=report&id=42" -H "Authorization: Bearer dlk_DEIN_API_KEY" | jq -r .report_url)
curl -o bericht_42.pdf "$URL"

Der Download antwortet mit application/pdf; abgelaufene Links mit HTTP 410, ungültige mit 403.

AUFTRAG ANLEGEN

Legt einen offenen Auftrag an, weist optional Mitarbeiter zu und definiert Foto-Anforderungen und Datenfelder. Schreibrecht nötig.

POST?action=createJSON oder Formular▾
Felder
NameTypPflichtBeschreibung
referencestringJaAuftragsnummer, je Firma eindeutig unter den nicht gelöschten Aufträgen (sonst 409). Alias: job_reference. Darf fehlen, wenn template_id auf eine Vorlage mit automatischer Nummer zeigt.
template_idintegerNeinVorlage mit Nummernkreis: Doclution vergibt die Nummer, wenn reference fehlt oder nicht ins Schema passt (Antwort dann mit "auto_ref": true). Anforderungen kommen nicht aus der Vorlage, sondern nur aus requirements. Unbekannte Vorlagen werden ignoriert.
commentstringNeinHinweis für die Mitarbeiter in der App. Alias: job_comment.
usersarrayNeinBenutzernamen oder Benutzer-IDs aktiver Mitarbeiter Ihrer Firma (siehe users). Unbekannte Einträge werden still übergangen.
requirementsarrayNeinAnforderungen, je Eintrag: label (Pflicht), type (normal, dokument, ladung, schaden = Foto; feld, datum, auswahl, check = Datenfeld/Prüfpunkt), count (Anzahl Fotos, Standard 1). Optional: group (Position), repeatable, options (Auswahl, eine Option je Zeile), reason_options, skip (Kein-Befund-Schalter), in_email, unit_default.
JSON
{
  "reference": "LS-2026-10045",
  "comment": "Bitte Nummernschild fotografieren",
  "users": ["maxmuster", 12],
  "requirements": [
    { "label": "Lieferschein", "type": "dokument", "count": 1 },
    { "label": "Ladung",       "type": "ladung",   "count": 4 },
    { "label": "Kilometerstand", "type": "feld" }
  ]
}
✓ HTTP 201 — Erstellt
{
    "success": true,
    "message": "Auftrag erstellt.",
    "job_id": 42,
    "reference": "LS-2026-10045"
}
Fehler
400 { "success": false, "error": "reference fehlt." }
409 { "success": false, "error": "Referenz 'LS-2026-10045' existiert bereits." }
503 { "success": false, "retry": true, "error_code": "TRY_AGAIN", "error": "Datenbank gerade ausgelastet - bitte erneut senden." }
500 { "success": false, "error": "Fehler beim Erstellen: …" }
Doppelte Übermittlung vermeiden: Die Auftragsnummer wirkt als Idempotenz-Schlüssel. Wiederholen Sie nach einem Netzfehler einfach denselben Aufruf – bei 409 existiert der Auftrag bereits (mit list&reference=… holen Sie seine ID).

AUFTRAG BEARBEITEN

Ändert einzelne Felder; nicht übergebene Felder bleiben, wie sie sind. Schreibrecht nötig.

POST?action=update▾
Felder
NameTypPflichtBeschreibung
idintegerJaAuftrags-ID (Body oder Adresse). Aufträge im Papierkorb → 404.
referencestringNeinNeue Auftragsnummer (ohne Dubletten-Prüfung – bitte selbst eindeutig halten).
commentstringNeinNeuer Hinweis.
statusstringNeinopen oder completed; andere Werte werden ignoriert. Löst die passenden Webhooks aus (job.completed / job.reopened).
✓ HTTP 200 — OK
{ "success": true, "message": "Auftrag aktualisiert.", "job_id": 42 }

AUFTRAG ABSCHLIEẞEN

Setzt den Status auf completed und den Fertig-Zeitpunkt. Anders als der Abschluss in der App werden dabei keine Pflichtfotos geprüft und keine Bericht-Mail verschickt. Schreibrecht nötig.

POST?action=complete▾
Felder
NameTypPflichtBeschreibung
idintegerJaAuftrags-ID (Body oder Adresse).
✓ HTTP 200 — OK
{ "success": true, "message": "Auftrag abgeschlossen.", "job_id": 42 }

Hinweis: Die Antwort ist auch bei unbekannter oder fremder ID erfolgreich (es wird dann nichts geändert). Prüfen Sie im Zweifel mit get.

AUFTRAG LÖSCHEN

Verschiebt einen Auftrag in den Papierkorb (wiederherstellbar im Portal). Per POST ?action=delete oder HTTP DELETE. Schreibrecht nötig.

POST?action=delete▾
Felder
NameTypPflichtBeschreibung
idintegerJaAuftrags-ID (Body oder Adresse).
✓ HTTP 200 — OK
{ "success": true, "message": "Auftrag in Papierkorb verschoben.", "job_id": 42 }

NUTZER ABRUFEN

Alle aktiven App-Nutzer (Rolle Mitarbeiter) – zum Befüllen von users beim Anlegen. Bewusst nur ID und Benutzername, keine Mailadressen.

GET?action=users▾
✓ HTTP 200 — OK
{
    "success": true,
    "users": [
        { "id": 7,  "username": "maxmuster" },
        { "id": 12, "username": "annaschmidt" }
    ]
}

SELBSTAUSKUNFT

GET ?action=docs liefert eine kurze maschinenlesbare Übersicht der Aktionen (Name, Methode, Parameter). Vollständig und aktuell ist die OpenAPI-Datei.


VERLADE-XML ABHOLEN

Für das Modul Paletten-Scan: Ihre Warenwirtschaft holt die erzeugten XML-Dateien ab, statt auf die Mail zu warten. Adresse https://doclution.de/api_pallet_xml.php, gleiche Anmeldung und Limits. Benötigt zusätzlich das Modul Paletten-Scan im Tarif (sonst 403).

AufrufWirkung
GET ?action=listNoch nicht abgeholte Exporte (höchstens 200): {success, anzahl, exporte:[{id, job_reference, dateiname, paletten, mail_ok, abgeholt_am, abgeholt, created_at}]}. Mit &alle=1 auch die abgeholten.
GET ?action=get&id=123Die XML-Datei selbst (application/xml, als Anhang). Mit &ack=1 gleich als abgeholt markieren (Schreibrecht).
POST action=ack&id=123Als abgeholt markieren: {success, quittiert, message}. Schreibrecht nötig.

Warum getrennt? Wer beim Laden abstürzt, bekommt die Datei beim nächsten Lauf erneut – erst die Quittung nimmt sie aus der Liste.


WEBHOOKS

Doclution schickt bei jedem Ereignis einen HTTPS-POST mit JSON an Ihre Adresse – innerhalb etwa einer Minute. Anlegen im Portal unter Einstellungen → API → Webhooks: Adresse eintragen, Ereignisse wählen, das angezeigte Signatur-Geheimnis (whsec_…, nur einmal sichtbar) in Ihrem System hinterlegen. Mit „Test senden" kommt sofort ein test.ping.

Ereignisse

TypWann
job.createdAuftrag angelegt – im Portal, im Leitstand, in der App (auch automatisch beim ersten Foto, Folge- und Ergänzungsaufträge) oder über die API.
job.updatedAuftrag im Portal oder per API bearbeitet, Statuswechsel ohne Abschluss (z. B. Tagesabschluss → partial, Prüfung zurückgegeben).
job.completedAuftrag abgeschlossen (App, Portal, Leitstand-Freigabe, Tagesabschluss, API).
job.reopenedErledigter Auftrag wieder geöffnet.
photo.uploadedNeues Foto zu einem Auftrag eingegangen.
report.readyBericht abrufbar: direkt nach dem Abschluss, nach einem erneuten Abschluss und nachdem ein später eingegangenes Foto zu einem neuen Bericht geführt hat. Den PDF-Link holen Sie mit action=report.
test.pingNur über den Knopf „Test senden" im Portal.

Nutzlast

Bewusst schlank: IDs, Auftragsnummer, Status und Links zur API – keine Fotos, Namen oder Mailadressen. Details holen Sie bei Bedarf per API.

POST an Ihre Adresse
POST /doclution/webhook HTTP/1.1
Content-Type: application/json; charset=utf-8
User-Agent: Doclution-Webhooks/1.0
X-Doclution-Event: job.completed
X-Doclution-Delivery: 81723
X-Doclution-Attempt: 1
X-Doclution-Signature: t=1793015112,v1=5d41402abc4b2a76b9719d911017c592…

{
  "id": "evt_9f3c2a7d1e5b4c8a6f0e1d2c",
  "type": "job.completed",
  "created": "2026-10-26T10:25:12Z",
  "api_version": "2026-10-26",
  "data": {
    "job": {
      "id": 42,
      "reference": "LS-2026-10045",
      "status": "completed",
      "previous_status": "open",
      "template_id": 7,
      "due_date": "2026-10-27",
      "created_at": "2026-10-26 09:30:00",
      "updated_at": "2026-10-26 11:25:12",
      "completed_at": "2026-10-26 11:25:12"
    },
    "links": {
      "job": "https://doclution.de/api_jobs.php?action=get&id=42",
      "report": "https://doclution.de/api_jobs.php?action=report&id=42"
    }
  }
}
data bei photo.uploaded
{
  "photo": { "id": 301, "job_id": 42, "photo_type": "dokument", "label": "Lieferschein",
             "group": "", "unit_index": 0, "captured_at": "2026-10-26 11:20:00", "storage": "doclution" },
  "job":   { "id": 42, "reference": "LS-2026-10045", "status": "open" },
  "links": { "photo": "https://doclution.de/api_jobs.php?action=photo&id=301",
             "job":   "https://doclution.de/api_jobs.php?action=get&id=42" }
}

Bei job.created steht in job.source, woher der Auftrag kommt (portal, app, leitstand, nachtrag, api); Folge- und Ergänzungsaufträge tragen parent_job_id. Neue Felder können hinzukommen – bitte unbekannte Felder ignorieren.

Antwort, Wiederholungen, Abschalten

Anforderungen an die Adresse

SIGNATUR PRÜFEN

Jede Meldung trägt X-Doclution-Signature: t=<Unix-Zeit>,v1=<hex>. v1 ist HMAC-SHA256 mit Ihrem Geheimnis über <t>.<roher Body>. Prüfen Sie immer gegen den unveränderten Body (nicht neu serialisieren), vergleichen Sie zeitkonstant und lehnen Sie Zeitstempel ab, die mehr als 5 Minuten abweichen (Schutz gegen Wiederholung).

PHP
<?php
$geheim = getenv('DOCLUTION_WEBHOOK_SECRET');          // whsec_…
$body   = file_get_contents('php://input');           // roher Body!
$kopf   = $_SERVER['HTTP_X_DOCLUTION_SIGNATURE'] ?? '';

if (!preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $kopf, $m)
    || abs(time() - (int)$m[1]) > 300
    || !hash_equals(hash_hmac('sha256', $m[1] . '.' . $body, $geheim), $m[2])) {
    http_response_code(401);
    exit('Signatur ungueltig');
}

$ereignis = json_decode($body, true);
// Doppelte Zustellung erkennen: $ereignis['id'] merken
http_response_code(200);
echo 'ok';
// … danach verarbeiten, z. B. Auftrag per API nachladen
Geheimnis kompromittiert? Im Portal „Neues Geheimnis" erzeugen – das alte gilt sofort nicht mehr.

FEHLERCODES

Fehler haben immer "success": false und einen lesbaren Text in "error".

HTTPBedeutungTypische Ursache / Text
200OKAnfrage erfolgreich
201CreatedAuftrag angelegt
204No ContentAntwort auf OPTIONS (CORS-Vorabfrage)
400Bad Request„id fehlt.", „reference fehlt.", ungültiges updated_since, „Ungültige Aktion. …" (auch bei falscher HTTP-Methode)
401Unauthorized„API-Key fehlt. …", „Ungültiger oder abgelaufener API-Key."
403Forbidden„API-Zugang nicht im Abo enthalten.", „Dieser API-Schlüssel darf nur lesen.", Verlade-XML: Modul nicht im Tarif
404Not FoundAuftrag, Foto oder Datei nicht gefunden (auch: gehört einer anderen Firma)
409ConflictAuftragsnummer existiert bereits; Foto liegt auf eigenem Speicher-Server
429Too Many RequestsMehr als 200 Anfragen in dieser Stunde – Retry-After beachten
500Server Error„Datenbankfehler." oder unerwarteter Fehler – bitte später wiederholen
503UnavailableTRY_AGAIN: kurz ausgelastet, gleiche Anfrage erneut senden

CODE-BEISPIELE

Auftrag anlegen und geänderte Aufträge abholen.

PHP
$ch = curl_init('https://doclution.de/api_jobs.php?action=create');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer dlk_DEIN_API_KEY', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'reference'    => 'LS-2026-10045',
        'users'        => ['maxmuster'],
        'requirements' => [['label' => 'Lieferschein', 'type' => 'dokument', 'count' => 1]],
    ]),
]);
$antwort = json_decode(curl_exec($ch), true);
if (!empty($antwort['success'])) echo 'Auftrag-ID: ' . $antwort['job_id'];
JavaScript (fetch)
const res = await fetch('https://doclution.de/api_jobs.php?action=list&updated_since=' + encodeURIComponent(letzterAbgleich), {
  headers: { 'Authorization': 'Bearer dlk_DEIN_API_KEY' },
});
const daten = await res.json();
for (const auftrag of daten.jobs) console.log(auftrag.job_reference, auftrag.status);
Python
import requests

r = requests.post(
    "https://doclution.de/api_jobs.php",
    params={"action": "create"},
    headers={"Authorization": "Bearer dlk_DEIN_API_KEY"},
    json={"reference": "LS-2026-10045", "users": ["maxmuster"],
          "requirements": [{"label": "Lieferschein", "type": "dokument", "count": 1}]},
    timeout=30,
)
print(r.status_code, r.json())
C#
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new("Bearer", "dlk_DEIN_API_KEY");
var antwort = await http.PostAsJsonAsync("https://doclution.de/api_jobs.php?action=create", new {
    reference = "LS-2026-10045",
    users = new[] { "maxmuster" },
    requirements = new[] { new { label = "Lieferschein", type = "dokument", count = 1 } }
});
Console.WriteLine(await antwort.Content.ReadAsStringAsync());

OPENAPI

Die vollständige Beschreibung als OpenAPI 3.1 – zum Import in Postman, Insomnia, Swagger UI oder zur Code-Erzeugung.

⇩ openapi.json herunterladen

CHANGELOG

Doclution API · OpenAPI · Schlüssel & Webhooks verwalten · Impressum · Datenschutz