Skip to content

REST API

Flowguard hat eine RESTful API zum programmgesteuerten Verwalten und Ausführen von Flows.

Basis-URL

Alle API-Endpunkte haben das Präfix:

/wp-json/flowguard/v1/

Beispiel:

https://ihreseite.de/wp-json/flowguard/v1/flows

Authentifizierung

API-Endpunkte erfordern WordPress-Authentifizierung:

Für Anfragen aus dem WordPress-Admin:

  • Automatisch authentifiziert, wenn eingeloggt
  • Nonce-Verifizierung für Schreiboperationen erforderlich

Anwendungspasswörter

Für externe Anfragen:

  1. Erstellen Sie ein Anwendungspasswort im WordPress-Benutzerprofil
  2. Verwenden Sie HTTP-Basic-Authentifizierung
  3. Benutzername: WordPress-Benutzername
  4. Passwort: Anwendungspasswort

Beispiel mit cURL:

bash
curl -u 'benutzername:xxxx xxxx xxxx xxxx xxxx xxxx' \
  https://ihreseite.de/wp-json/flowguard/v1/flows

Berechtigungen

Flow-Endpunkte

Leseoperationen - Erfordert edit_posts-Berechtigung Schreiboperationen - Erfordert edit_posts-Berechtigung Ausführungsoperationen - Erfordert manage_options-Berechtigung

Einstellungs-Endpunkte

Leseoperationen - Erfordert manage_options-Berechtigung Schreiboperationen - Erfordert manage_options-Berechtigung

Flow-Endpunkte

Flows auflisten

Gibt eine Liste aller Flows zurück (verwendet den WordPress-Posts-Endpunkt).

Endpunkt:

GET /wp-json/wp/v2/flowguard-flows

Parameter:

ParameterTypBeschreibung
per_pageintegerAnzahl Flows pro Seite (Standard: 10)
pageintegerSeitennummer (Standard: 1)
searchstringFlows nach Titel suchen
statusstringNach Status filtern (publish, draft, etc.)

Antwort:

json
[
  {
    "id": 123,
    "title": {
      "rendered": "Login-Test-Flow"
    },
    "status": "publish",
    "date": "2024-12-06T10:00:00",
    "modified": "2024-12-06T15:30:00",
    "meta": {
      "_flowguard_status": "active",
      "_flowguard_steps": [...],
      "_flowguard_settings": {...},
      "_flowguard_last_run": {...}
    }
  }
]

Beispiel:

bash
curl https://ihreseite.de/wp-json/wp/v2/flowguard-flows?per_page=20

Einzelnen Flow abrufen

Gibt einen bestimmten Flow nach ID zurück.

Endpunkt:

GET /wp-json/wp/v2/flowguard-flows/{id}

Parameter:

ParameterTypBeschreibung
idintegerDie Flow-Post-ID

Antwort:

json
{
  "id": 123,
  "title": {
    "rendered": "Login-Test-Flow"
  },
  "status": "publish",
  "meta": {
    "_flowguard_status": "active",
    "_flowguard_steps": [
      {
        "id": "step_1",
        "type": "navigate",
        "config": {
          "url": "https://ihreseite.de/login"
        }
      }
    ],
    "_flowguard_settings": {
      "timeout": 30000,
      "retries": 0,
      "screenshot": true
    },
    "_flowguard_last_run": {
      "timestamp": "2024-12-06T15:30:00",
      "status": "passed",
      "duration": 3450,
      "error": "",
      "results": [...]
    }
  }
}

Beispiel:

bash
curl https://ihreseite.de/wp-json/wp/v2/flowguard-flows/123

Flow erstellen

Erstellt einen neuen Flow.

Endpunkt:

POST /wp-json/wp/v2/flowguard-flows

Anfragekörper:

json
{
  "title": "Neuer Test-Flow",
  "status": "publish",
  "meta": {
    "_flowguard_status": "active",
    "_flowguard_steps": [
      {
        "id": "step_1",
        "type": "navigate",
        "config": {
          "url": "https://ihreseite.de"
        }
      }
    ],
    "_flowguard_settings": {
      "timeout": 30000,
      "retries": 0,
      "screenshot": true
    }
  }
}

Antwort: Gibt das erstellte Flow-Objekt zurück (gleiches Format wie Einzelnen Flow abrufen).

Beispiel:

bash
curl -X POST https://ihreseite.de/wp-json/wp/v2/flowguard-flows \
  -H "Content-Type: application/json" \
  -d '{"title":"Neuer Flow","status":"publish"}'

Flow aktualisieren

Aktualisiert einen bestehenden Flow.

Endpunkt:

PUT /wp-json/wp/v2/flowguard-flows/{id}

Parameter:

ParameterTypBeschreibung
idintegerDie Flow-Post-ID

Anfragekörper: Gleiches Format wie Flow erstellen (nur zu aktualisierende Felder einschließen).

Antwort: Gibt das aktualisierte Flow-Objekt zurück.

Beispiel:

bash
curl -X PUT https://ihreseite.de/wp-json/wp/v2/flowguard-flows/123 \
  -H "Content-Type: application/json" \
  -d '{"title":"Aktualisierter Flow-Titel"}'

Flow löschen

Löscht einen Flow.

Endpunkt:

DELETE /wp-json/wp/v2/flowguard-flows/{id}

Parameter:

ParameterTypBeschreibung
idintegerDie Flow-Post-ID
forcebooleanPapierkorb umgehen und dauerhaft löschen (Standard: false)

Antwort:

json
{
  "deleted": true,
  "previous": {
    // Vorheriges Flow-Objekt
  }
}

Beispiel:

bash
curl -X DELETE https://ihreseite.de/wp-json/wp/v2/flowguard-flows/123?force=true

Flow-Ausführungs-Endpunkte

Einzelnen Flow ausführen

Führt einen bestimmten Flow aus.

Endpunkt:

POST /wp-json/flowguard/v1/flows/{id}/run

Parameter:

ParameterTypBeschreibung
idintegerDie Flow-Post-ID

Antwort:

json
{
  "success": true,
  "message": "Flow-Ausführung gestartet.",
  "flow": {
    "id": 123,
    "title": "Login-Test-Flow",
    "steps": [...],
    "settings": {...},
    "siteUrl": "https://ihreseite.de"
  }
}

Beispiel:

bash
curl -X POST https://ihreseite.de/wp-json/flowguard/v1/flows/123/run

Hinweise:

  • Gibt sofort mit Flow-Daten zurück
  • Die eigentliche Ausführung erfolgt auf dem externen Runner (Node.js-Server)
  • Aktualisiert Flow-Meta mit "running"-Status

Flow-Ergebnisse abrufen

Gibt Ausführungsergebnisse für einen Flow zurück.

Endpunkt:

GET /wp-json/flowguard/v1/flows/{id}/results

Parameter:

ParameterTypBeschreibung
idintegerDie Flow-Post-ID

Antwort:

json
{
  "id": 123,
  "title": "Login-Test-Flow",
  "last_run": {
    "timestamp": "2024-12-06T15:30:00",
    "status": "passed",
    "duration": 3450,
    "error": "",
    "results": [
      {
        "step": 1,
        "type": "navigate",
        "status": "passed",
        "duration": 1200,
        "error": ""
      },
      {
        "step": 2,
        "type": "click",
        "status": "passed",
        "duration": 350,
        "error": ""
      }
    ]
  }
}

Beispiel:

bash
curl https://ihreseite.de/wp-json/flowguard/v1/flows/123/results

Alle aktiven Flows ausführen

Führt alle Flows mit "active"-Status aus.

Endpunkt:

POST /wp-json/flowguard/v1/flows/run-all

Antwort:

json
{
  "success": true,
  "message": "Ausführung von 5 Flows gestartet.",
  "flows": [
    {
      "id": 123,
      "title": "Login-Test",
      "steps": [...],
      "settings": {...}
    },
    {
      "id": 124,
      "title": "Kontaktformular-Test",
      "steps": [...],
      "settings": {...}
    }
  ],
  "siteUrl": "https://ihreseite.de"
}

Beispiel:

bash
curl -X POST https://ihreseite.de/wp-json/flowguard/v1/flows/run-all

Flow-Statistiken abrufen

Gibt aggregierte Statistiken für alle Flows zurück.

Endpunkt:

GET /wp-json/flowguard/v1/flows/stats

Antwort:

json
{
  "success": true,
  "stats": {
    "total": 10,
    "active": 7,
    "inactive": 3,
    "passed": 5,
    "failed": 2,
    "pending": 3,
    "running": 0
  }
}

Beispiel:

bash
curl https://ihreseite.de/wp-json/flowguard/v1/flows/stats

Flow abbrechen

Bricht einen aktuell laufenden Flow ab.

Endpunkt:

POST /wp-json/flowguard/v1/flows/{id}/cancel

Parameter:

ParameterTypBeschreibung
idintegerDie Flow-Post-ID

Antwort:

json
{
  "success": true,
  "message": "Flow abgebrochen."
}

Berechtigungen: Erfordert manage_options-Berechtigung

Flow als Zeitüberschreitung markieren

Markiert einen laufenden Flow als Zeitüberschreitung (wird verwendet, wenn die Ausführung das konfigurierte Timeout überschreitet).

Endpunkt:

POST /wp-json/flowguard/v1/flows/{id}/timeout

Parameter:

ParameterTypBeschreibung
idintegerDie Flow-Post-ID

Antwort:

json
{
  "success": true,
  "message": "Flow als Zeitüberschreitung markiert."
}

Berechtigungen: Erfordert manage_options-Berechtigung

Einstellungs-Endpunkte

Einstellungen abrufen

Gibt alle Plugin-Einstellungen zurück.

Endpunkt:

GET /wp-json/flowguard/v1/settings

Antwort:

json
{
  "general": {
    "default_focus_mode": true
  },
  "test_mode": {
    "enabled": true,
    "email_strategy": "block",
    "test_email": "test@beispiel.de",
    "capture_error_screenshots": true
  },
  "execution": {
    "mode": "remote",
    "local_api_path": "",
    "local_port": 3000,
    "local_host": "localhost",
    "remote_url": ""
  }
}

Beispiel:

bash
curl https://ihreseite.de/wp-json/flowguard/v1/settings

Berechtigungen: Erfordert manage_options-Berechtigung

Einstellungen aktualisieren

Aktualisiert Plugin-Einstellungen.

Endpunkt:

PUT /wp-json/flowguard/v1/settings

Anfragekörper:

json
{
  "general": {
    "default_focus_mode": false
  },
  "execution": {
    "mode": "local",
    "local_api_path": "/var/www/flowguard-api",
    "local_port": 3000
  }
}

Antwort: Gibt das aktualisierte Einstellungs-Objekt zurück.

Beispiel:

bash
curl -X PUT https://ihreseite.de/wp-json/flowguard/v1/settings \
  -H "Content-Type: application/json" \
  -d '{"general":{"default_focus_mode":true}}'

Berechtigungen: Erfordert manage_options-Berechtigung

Systemanforderungen prüfen

Prüft Systemanforderungen für den lokalen Ausführungsmodus.

Endpunkt:

GET /wp-json/flowguard/v1/system/requirements

Antwort:

json
{
  "requirements": [
    {
      "id": "nodejs",
      "name": "Node.js",
      "status": "installed",
      "version": "v20.10.0",
      "required": ">=18.0.0",
      "message": "Node.js v20.10.0 ist installiert"
    },
    {
      "id": "npm",
      "name": "npm",
      "status": "installed",
      "version": "10.2.3",
      "required": ">=8.0.0",
      "message": "npm 10.2.3 ist installiert"
    }
  ],
  "allMet": true,
  "canEnableLocal": true
}

Statuswerte:

  • installed - Anforderung erfüllt
  • not_installed - Anforderung nicht erfüllt
  • error - Fehler bei Anforderungsprüfung

Beispiel:

bash
curl https://ihreseite.de/wp-json/flowguard/v1/system/requirements

Berechtigungen: Erfordert manage_options-Berechtigung

Fehlerantworten

Standard-Fehlerformat

json
{
  "code": "rest_forbidden",
  "message": "Sie haben keine Berechtigung, Flows auszuführen.",
  "data": {
    "status": 403
  }
}

Häufige Fehlercodes

CodeStatusBeschreibung
rest_forbidden403Unzureichende Berechtigungen
rest_no_route404Endpunkt nicht gefunden
rest_flow_not_found404Flow-ID existiert nicht
rest_flow_empty400Flow hat keine Steps
rest_invalid_param400Ungültiger Parameterwert
rest_cannot_update500Aktualisierungsoperation fehlgeschlagen

Ratenbegrenzung

Die API begrenzt Anfragen zum Schutz vor Missbrauch:

  • Allgemeine API: 100 Anfragen pro 15 Minuten pro IP
  • Flow-Ausfuehrung: Begrenzt durch Queue-Concurrency (max 8 gleichzeitige Flows pro Worker)
  • Lizenz-Validierung: Brute-Force-Schutz mit automatischer IP-Sperre nach wiederholten Fehlversuchen
  • Monitoring-Checks: Konfigurierbare Intervalle (1-60 Minuten)

Bei Ueberschreitung des Limits wird eine 429 Too Many Requests Antwort zurueckgegeben.

Webhooks

Flowguard unterstützt Webhook-Benachrichtigungen für Monitoring-Alarme. Konfigurieren Sie diese unter Einstellungen > Benachrichtigungen:

  • Webhook-URL — Der Endpunkt, an den Alarme gesendet werden (z.B. Slack, Microsoft Teams oder eine benutzerdefinierte URL)
  • HTTP-Methode — POST oder GET
  • Ereignisse — Seite nicht erreichbar, Seite wiederhergestellt, Flow fehlgeschlagen

Webhook-Anfragen enthalten eine JSON-Payload mit Ereignisdetails (Seiten-URL, Zeitstempel, Fehlerinformationen, Ausfallzeit).

Code-Beispiele

JavaScript (Fetch API)

javascript
// Alle Flows abrufen
fetch('/wp-json/wp/v2/flowguard-flows')
  .then(response => response.json())
  .then(flows => console.log(flows));

// Flow ausführen
fetch('/wp-json/flowguard/v1/flows/123/run', {
  method: 'POST',
  headers: {
    'X-WP-Nonce': wpApiSettings.nonce
  }
})
  .then(response => response.json())
  .then(result => console.log(result));

PHP

php
// Flow-Ergebnisse abrufen
$response = wp_remote_get(
  home_url('/wp-json/flowguard/v1/flows/123/results')
);
$results = json_decode(wp_remote_retrieve_body($response));

// Alle aktiven Flows ausführen
$response = wp_remote_post(
  home_url('/wp-json/flowguard/v1/flows/run-all')
);

Python

python
import requests
from requests.auth import HTTPBasicAuth

# Konfiguration
site_url = 'https://ihreseite.de'
username = 'admin'
app_password = 'xxxx xxxx xxxx xxxx xxxx xxxx'

# Flow-Statistiken abrufen
response = requests.get(
    f'{site_url}/wp-json/flowguard/v1/flows/stats',
    auth=HTTPBasicAuth(username, app_password)
)
stats = response.json()
print(stats)

# Flow ausführen
response = requests.post(
    f'{site_url}/wp-json/flowguard/v1/flows/123/run',
    auth=HTTPBasicAuth(username, app_password)
)
result = response.json()
print(result)

cURL

bash
# Alle Flows abrufen
curl https://ihreseite.de/wp-json/wp/v2/flowguard-flows

# Flow mit Authentifizierung ausführen
curl -X POST \
  -u 'benutzername:xxxx xxxx xxxx xxxx xxxx xxxx' \
  https://ihreseite.de/wp-json/flowguard/v1/flows/123/run

# Statistiken abrufen
curl https://ihreseite.de/wp-json/flowguard/v1/flows/stats

Best Practices

Geeignete HTTP-Methoden verwenden

  • GET zum Lesen von Daten
  • POST zum Erstellen und Ausführen
  • PUT oder PATCH zum Aktualisieren
  • DELETE zum Entfernen

Fehler behandeln

Prüfen Sie immer den Antwortstatus und behandeln Sie Fehler:

javascript
fetch('/wp-json/flowguard/v1/flows/123/run', {
  method: 'POST'
})
  .then(response => {
    if (!response.ok) {
      throw new Error(`HTTP ${response.status}`);
    }
    return response.json();
  })
  .then(data => console.log(data))
  .catch(error => console.error('Fehler:', error));

Berechtigungen respektieren

Stellen Sie sicher, dass Ihr Benutzerkonto die nötigen Berechtigungen hat, bevor Sie Anfragen stellen.

HTTPS verwenden

Verwenden Sie immer HTTPS in der Produktion, um Authentifizierungsdaten zu schützen.

Verwandte Dokumentation

Geplante Erweiterungen

  • Batch-Operationen
  • Echtzeit-Ausführungs-Streaming
  • Flow-Versionierungs-Endpunkte
  • Import/Export-Endpunkte

Support

Bei API-Problemen:

  1. Prüfen Sie, ob die WordPress REST API aktiviert ist
  2. Überprüfen Sie, ob die Authentifizierung funktioniert
  3. Prüfen Sie Fehlerantworten auf Details
  4. Überprüfen Sie WordPress- und Flowguard-Protokolle
  5. Testen Sie mit einem REST-Client (Postman, Insomnia)