Flows & Regeln — Plattform-API

REST-Endpunkte für Flows und Regeln — Authentifizierung, Anfrage- und Antwortbeispiele für externe Integrationen.

Zuletzt aktualisiert: 2026-04-28

Flows & Regeln — Plattform-API

Die Plattform-API ermöglicht die vollständige Verwaltung von Automatisierungsflows und Regeln über HTTP — für CI-Pipelines, externe Skripte oder eigene Integrationen.

Authentifizierung

Alle Endpunkte erfordern einen Bearer-API-Token im Authorization-Header:

Authorization: Bearer IHR_API_SCHLUESSEL

API-Schlüssel erstellen Sie unter Admin > Einstellungen > API-Schlüssel. Schreibende Operationen (POST, PATCH, DELETE) erfordern einen Schlüssel mit read_write-Berechtigung.

Weitere Informationen → API-Schlüssel.


Flow-Endpunkte

GET /api2/v1/flows — Flows auflisten

Gibt eine paginierte Liste aller Flows zurück.

Query-Parameter:

ParameterTypBeschreibung
triggerTextNur Flows mit diesem Trigger-Ereignistyp (z. B. order.placed)
enabledtrue / falseNur aktive oder inaktive Flows
pageZahlSeite (Standard: 1)
per_pageZahlErgebnisse pro Seite (1–100, Standard: 20)

Beispielanfrage:

curl -H "Authorization: Bearer $API_KEY" \
  "https://ihreshop.de/api2/v1/flows?enabled=true&trigger=order.placed"

Beispielantwort:

{
  "items": [
    {
      "id": "abc-123",
      "name": "VIP-Bestellung",
      "trigger": "order.placed",
      "enabled": true,
      "priority": 10,
      "ruleId": null,
      "actionCount": 2,
      "lastExecutionAt": 1714302000,
      "lastExecutionStatus": "succeeded"
    }
  ],
  "total": 1,
  "page": 1,
  "perPage": 20,
  "totalPages": 1
}

POST /api2/v1/flows — Flow erstellen

Erstellt einen neuen Flow mit Trigger, optionaler Regel und Aktionen-Array. Gibt den erstellten Flow mit Status 201 zurück.

Request-Body:

{
  "name": "Ausverkauft-Alarm",
  "trigger": "product.out_of_stock",
  "description": "Benachrichtigt das Team, wenn ein Produkt ausverkauft ist.",
  "enabled": true,
  "priority": 0,
  "ruleId": null,
  "actions": [
    {
      "type": "create_notification",
      "position": 0,
      "config": {
        "title": "Produkt ausverkauft: {{trigger.name}}",
        "message": "SKU {{trigger.sku}} hat keinen Bestand mehr."
      },
      "onError": "stop"
    }
  ]
}

Pflichtfelder: name, trigger

Aktions-Objekt:

FeldTypPflichtBeschreibung
typeTextJaAktionstyp (z. B. send_email, webhook, conditional, llm_call)
positionZahlJaPosition innerhalb des Eltern-Scopes
configObjektNeinAktionskonfiguration (typspezifisch)
parentIdUUIDNeinEltern-Aktions-ID für Bedingungsverzweigungen
branchTextNeinVerzweigungsname (then, else, else-if-0)
outputVariableTextNeinVariablenname für das Aktionsergebnis
onErrorTextNeinstop (Standard), continue oder retry

GET /api2/v1/flows/:id — Einzelnen Flow abrufen

Gibt den vollständigen Flow mit Aktionen-Array zurück.

curl -H "Authorization: Bearer $API_KEY" \
  "https://ihreshop.de/api2/v1/flows/abc-123"

PATCH /api2/v1/flows/:id — Flow aktualisieren

Aktualisiert ausgewählte Felder eines Flows. Nicht übermittelte Felder bleiben unverändert. Wird actions übergeben, ersetzt es alle bestehenden Aktionen.

curl -X PATCH \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled": false, "priority": 5}' \
  "https://ihreshop.de/api2/v1/flows/abc-123"

DELETE /api2/v1/flows/:id — Flow löschen

Löscht einen Flow dauerhaft. Gibt 204 No Content zurück. Die Ausführungshistorie bleibt zu Prüfzwecken erhalten.

curl -X DELETE \
  -H "Authorization: Bearer $API_KEY" \
  "https://ihreshop.de/api2/v1/flows/abc-123"

POST /api2/v1/flows/:id/toggle — Flow aktivieren/deaktivieren

Wechselt den enabled-Status des Flows.

Antwort:

{ "enabled": false }

POST /api2/v1/flows/:id/duplicate — Flow duplizieren

Erstellt eine Kopie des Flows mit allen Aktionen ("(Copy)" wird an den Namen angehängt). Die Kopie startet deaktiviert. Gibt den neuen Flow mit Status 201 zurück.


POST /api2/v1/flows/:id/test — Testausführung starten

Stellt eine Testausführung mit Beispiel-Triggerdaten in die Warteschlange. Gibt die neue Ausführungs-UUID zurück (Status 201).

Antwort:

{ "executionId": "exec-xyz-789" }

GET /api2/v1/flows/:id/executions — Ausführungshistorie abrufen

Gibt die paginierte Ausführungshistorie eines Flows zurück.

Query-Parameter:

ParameterBeschreibung
statusqueued, running, succeeded, failed, cancelled, delayed
pageSeite (Standard: 1)
per_pageErgebnisse pro Seite (Standard: 20)

Beispielantwort:

{
  "items": [
    {
      "id": "exec-xyz-789",
      "flowId": "abc-123",
      "status": "succeeded",
      "trigger": "product.out_of_stock",
      "startedAt": 1714302000,
      "finishedAt": 1714302003
    }
  ],
  "total": 12,
  "page": 1,
  "perPage": 20,
  "totalPages": 1
}

Regel-Endpunkte

GET /api2/v1/rules — Regeln auflisten

Gibt eine paginierte Liste aller Regeln zurück.

Query-Parameter: page, per_page


POST /api2/v1/rules — Regel erstellen

{
  "name": "Großkunde DE",
  "enabled": true,
  "priority": 10,
  "conditionGroups": [
    {
      "operator": "AND",
      "conditions": [
        { "type": "cart_subtotal", "op": "gte", "value": 500 },
        { "type": "shipping_country", "op": "eq", "value": "DE" }
      ]
    }
  ]
}

Pflichtfelder: name, conditionGroups


GET /api2/v1/rules/:id — Einzelne Regel abrufen

Gibt die vollständige Regeldefinition inkl. Bedingungsgruppen zurück.


PATCH /api2/v1/rules/:id — Regel aktualisieren

Aktualisiert ausgewählte Felder. Geschützte Regeln lehnen Änderungen an conditionGroups ab (409).


DELETE /api2/v1/rules/:id — Regel löschen

Schlägt mit 409 fehl, wenn die Regel noch von Rabatten oder Versandregeln verwendet wird.


POST /api2/v1/rules/:id/test — Regel testen

Wertet eine Regel gegen ein bereitgestelltes Kontext-Objekt aus und gibt das Ergebnis mit einer Aufschlüsselung pro Bedingung zurück.

Request-Body:

{
  "context": {
    "cartSubtotal": 750,
    "shippingCountry": "DE",
    "customerLoggedIn": true
  }
}

Antwort:

{
  "matched": true,
  "breakdown": [
    {
      "groupIndex": 0,
      "groupOperator": "AND",
      "conditionIndex": 0,
      "conditionType": "cart_subtotal",
      "conditionOp": "gte",
      "result": true
    },
    {
      "groupIndex": 0,
      "groupOperator": "AND",
      "conditionIndex": 1,
      "conditionType": "shipping_country",
      "conditionOp": "eq",
      "result": true
    }
  ]
}

Fehler-Codes

HTTP-StatusBedeutung
400Ungültiger JSON-Body oder fehlende Pflichtfelder
401Fehlender oder ungültiger API-Schlüssel
403Schlüssel hat nicht die erforderliche read_write-Berechtigung
404Flow oder Regel nicht gefunden
409Konflikt (z. B. Löschen einer verwendeten Regel; geschützte Regel)
422Validierungsfehler (z. B. unbekannter Aktionstyp)