Flow360.io Logo

Public API

REST-Schnittstelle für die programmatische Steuerung von Flow360 – Flows starten, Vorlagen und Gruppen abfragen sowie Tabellendaten verwalten.

Die Flow360 Public API ermöglicht es externen Systemen und Integrationen, Flows zu starten, Vorlagen und Benutzergruppen abzufragen sowie Daten in dynamischen Tabellen zu lesen und zu schreiben. Alle Endpunkte sind unter dem Basispfad /api/v1 erreichbar.

Authentifizierung

Die API verwendet API-Key-Authentifizierung. Der Schlüssel wird bei jedem Request im HTTP-Header übermittelt:

X-API-Key: <mein-api-token>

API-Key verwalten

API-Keys werden im Flow360-Administrationsbereich unter Einstellungen → Integrationen → API-Keys erstellt und verwaltet. Behandeln Sie Ihren API-Key wie ein Passwort – geben Sie ihn niemals in Client-seitigem Code weiter.

Jede Anfrage ohne gültigen Key wird mit HTTP 401 Unauthorized abgewiesen. Für Audit-Log-Einträge, die über die API ausgelöst werden, erscheint als Akteur automatisch API Key User.

API-Token erstellen

Systemeinstellungen öffnen

Klicken Sie in der linken Navigation auf Systemeinstellungen und wählen Sie den Bereich API-Tokens.

API Token erstellen

Neues Token anlegen

Vergeben Sie einen aussagekräftigen Namen, der den Verwendungszweck des Tokens beschreibt – zum Beispiel Zapier-Integration oder ERP-Anbindung. Anhand des Namens können Sie später nachvollziehen, welches System dieses Token verwendet. Klicken Sie auf das Plus-Symbol, um ein neues Token zu erstellen.

Token kopieren

Nach dem Speichern wird das Token einmalig im Klartext angezeigt. Kopieren Sie es sofort über die Schaltfläche In Zwischenablage kopieren.

Wichtig - Token nur einmal sichtbar!

Das Token wird nur direkt nach der Erstellung im Klartext angezeigt. Sobald Sie die Seite verlassen oder den Dialog schließen, ist der vollständige Tokenwert nicht mehr abrufbar. Speichern Sie das Token sofort an einem sicheren Ort, z. B. in einem Passwortmanager.

Token in der Zielanwendung hinterlegen

Fügen Sie das kopierte Token in Ihrer externen Anwendung oder Integration ein. Bei allen API-Anfragen an Flow360 wird es im HTTP-Header übermittelt:

X-API-Key: <mein-api-token>

Das Token gilt unbegrenzt und besitzt keine weiteren Berechtigungseinschränkungen – es hat vollständigen Zugriff auf die Public API Ihres Mandanten.


Flows

Flow starten

Mit diesem Endpunkt wird ein neuer Flow aus einer Vorlage erzeugt und einem Benutzer zugewiesen.

Beispiel-Werte für templateUuid

Der im folgenden angezeigte Wert für templateUuid ist nur ein Beispiel. Um templateUuid für die gewünschte Vorlage zu ermitteln, öffnen sie die Vorlage und entnehmen sie den Wert der URL-Zeile im Browser.

API Token erstellen

Request Body

FeldTypPflichtBeschreibung
templateUuidstringUUID der Vorlage, aus der der Flow erstellt werden soll
userIdentifierstringBenutzer-UUID, E-Mail-Adresse oder numerische ID
fieldsarrayInitiale Feldwerte (aktuell in Vorbereitung)
Flow starten
curl -X POST https://meinefirma.flow360.io/api/v1/flows \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <mein-api-token>" \
  -d '{
    "templateUuid": "550e8400-e29b-41d4-a716-446655440000",
    "userIdentifier": "max.mustermann@example.com"
  }'
Flow starten
const response = await fetch(
  'https://meinefirma.flow360.io/api/v1/flows',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': '<mein-api-token>',
    },
    body: JSON.stringify({
      templateUuid: '550e8400-e29b-41d4-a716-446655440000',
      userIdentifier: 'max.mustermann@example.com',
    }),
  }
);

const flow = await response.json();
console.log(flow);
Flow starten
import requests

response = requests.post(
    'https://meinefirma.flow360.io/api/v1/flows',
    headers={
        'Content-Type': 'application/json',
        'X-API-Key': '<mein-api-token>',
    },
    json={
        'templateUuid': '550e8400-e29b-41d4-a716-446655440000',
        'userIdentifier': 'max.mustermann@example.com',
    },
)

flow = response.json()
print(flow)
Flow starten
POST /api/v1/flows HTTP/1.1
Host: meinefirma.flow360.io
Content-Type: application/json
X-API-Key: <mein-api-token>

{
  "templateUuid": "550e8400-e29b-41d4-a716-446655440000",
  "userIdentifier": "max.mustermann@example.com"
}

Antworten

StatusBedeutung
201 CreatedFlow wurde erfolgreich angelegt
404 Not FoundVorlage oder Benutzer nicht gefunden

Benutzer identifizieren

Das Feld userIdentifier akzeptiert drei Formate: eine UUID (z. B. 550e8400-...), eine E-Mail-Adresse oder eine numerische Benutzer-ID. Flow360 ermittelt den Benutzer automatisch anhand des übergebenen Formats.


Flows abfragen

Gibt eine gefilterte, paginierte Liste aller Flows zurück.

Query-Parameter

ParameterTypPflichtBeschreibung
templateUuidstringFiltert nach Vorlage
statusstringFiltert nach Flow-Status (siehe unten)
cursorstringCursor für die nächste Ergebnisseite
limitnumberAnzahl Datensätze pro Seite (max. 1000)

Mögliche Statuswerte

WertBedeutung
pendingNoch nicht gestartet
startedGestartet
progressIn Bearbeitung
approvalWartet auf Genehmigung
attentionErfordert Aufmerksamkeit
onholdPausiert
WertBedeutung
completedErfolgreich abgeschlossen
rejectedAbgelehnt
cancelledAbgebrochen

Ungültige Statuswerte werden mit 400 Bad Request und einer Liste der erlaubten Werte beantwortet.

Flows abfragen
curl -G https://meinefirma.flow360.io/api/v1/flows \
  -H "X-API-Key: <mein-api-token>" \
  --data-urlencode "status=progress" \
  --data-urlencode "limit=50"
Flows abfragen
const params = new URLSearchParams({
  status: 'progress',
  limit: '50',
});

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/flows?${params}`,
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const { data, pagination } = await response.json();
console.log(data, pagination.nextCursor);
Flows abfragen
import requests

response = requests.get(
    'https://meinefirma.flow360.io/api/v1/flows',
    headers={'X-API-Key': '<mein-api-token>'},
    params={'status': 'progress', 'limit': 50},
)

result = response.json()
print(result['data'])
print(result['pagination']['nextCursor'])
Flows abfragen
GET /api/v1/flows?status=progress&limit=50 HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Beispiel-Antwort

Antwort
{
  "data": [
    {
      "id": 42,
      "uuid": "...",
      "status": 2,
      "template": { "uuid": "...", "name": "Urlaubsantrag" },
      "assignee": { "email": "anna.beispiel@firma.de" }
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6NDJ9",
    "hasMore": false,
    "limit": 50
  }
}

Cursor-basierte Paginierung

Übergeben Sie den Wert aus pagination.nextCursor als cursor-Parameter im nächsten Request, um die Folgeseite abzurufen. Ist hasMore gleich false, gibt es keine weiteren Datensätze.


Vorlagen

Alle aktiven Vorlagen abrufen

Gibt alle Vorlagen zurück, die für die programmatische Flow-Erstellung freigegeben sind (d. h. für die der Trigger aktiviert ist).

Vorlagen abrufen
curl https://meinefirma.flow360.io/api/v1/templates \
  -H "X-API-Key: <mein-api-token>"
Vorlagen abrufen
const response = await fetch(
  'https://meinefirma.flow360.io/api/v1/templates',
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const templates = await response.json();
console.log(templates);
Vorlagen abrufen
import requests

response = requests.get(
    'https://meinefirma.flow360.io/api/v1/templates',
    headers={'X-API-Key': '<mein-api-token>'},
)

templates = response.json()
print(templates)
Vorlagen abrufen
GET /api/v1/templates HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Antworten

StatusBedeutung
200 OKListe der aktiven Vorlagen

Gruppen einer Vorlage abrufen

Gibt alle Gruppen zurück, die einer bestimmten Vorlage zugeordnet sind.

Pfadparameter

ParameterBeschreibung
uuidUUID der Vorlage
Gruppen einer Vorlage abrufen
curl https://meinefirma.flow360.io/api/v1/templates/550e8400-e29b-41d4-a716-446655440000/groups \
  -H "X-API-Key: <mein-api-token>"
Gruppen einer Vorlage abrufen
const templateUuid = '550e8400-e29b-41d4-a716-446655440000';

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/templates/${templateUuid}/groups`,
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const groups = await response.json();
console.log(groups);
Gruppen einer Vorlage abrufen
import requests

template_uuid = '550e8400-e29b-41d4-a716-446655440000'

response = requests.get(
    f'https://meinefirma.flow360.io/api/v1/templates/{template_uuid}/groups',
    headers={'X-API-Key': '<mein-api-token>'},
)

groups = response.json()
print(groups)
Gruppen einer Vorlage abrufen
GET /api/v1/templates/550e8400-e29b-41d4-a716-446655440000/groups HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Antworten

StatusBedeutung
200 OKListe der zugeordneten Gruppen
404 Not FoundVorlage nicht gefunden

Gruppen

Benutzer einer Gruppe abrufen

Gibt alle aktiven Benutzer zurück, die Mitglied der angegebenen Gruppe sind.

Pfadparameter

ParameterBeschreibung
uuidUUID der Gruppe
Benutzer einer Gruppe abrufen
curl https://meinefirma.flow360.io/api/v1/groups/550e8400-e29b-41d4-a716-446655440000/users \
  -H "X-API-Key: <mein-api-token>"
Benutzer einer Gruppe abrufen
const groupUuid = '550e8400-e29b-41d4-a716-446655440000';

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/groups/${groupUuid}/users`,
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const users = await response.json();
console.log(users);
Benutzer einer Gruppe abrufen
import requests

group_uuid = '550e8400-e29b-41d4-a716-446655440000'

response = requests.get(
    f'https://meinefirma.flow360.io/api/v1/groups/{group_uuid}/users',
    headers={'X-API-Key': '<mein-api-token>'},
)

users = response.json()
print(users)
Benutzer einer Gruppe abrufen
GET /api/v1/groups/550e8400-e29b-41d4-a716-446655440000/users HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Antworten

StatusBedeutung
200 OKListe der Benutzer
404 Not FoundGruppe nicht gefunden

Tabellen

Flow360 stellt dynamische Datentabellen bereit, auf die über die API lesend und schreibend zugegriffen werden kann. Jede Tabelle wird über ihre UUID angesprochen.

Alle Tabellen auflisten

Gibt die Metadaten aller im Mandanten verfügbaren Tabellen zurück (Name, UUID, Spaltendefinitionen).

Alle Tabellen auflisten
curl https://meinefirma.flow360.io/api/v1/tables \
  -H "X-API-Key: <mein-api-token>"
Alle Tabellen auflisten
const response = await fetch(
  'https://meinefirma.flow360.io/api/v1/tables',
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const tables = await response.json();
console.log(tables);
Alle Tabellen auflisten
import requests

response = requests.get(
    'https://meinefirma.flow360.io/api/v1/tables',
    headers={'X-API-Key': '<mein-api-token>'},
)

tables = response.json()
print(tables)
Alle Tabellen auflisten
GET /api/v1/tables HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Tabelle nach UUID abrufen

Gibt die vollständige Tabellendefinition einschließlich aller Spalten zurück.

Tabelle nach UUID abrufen
curl https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000 \
  -H "X-API-Key: <mein-api-token>"
Tabelle nach UUID abrufen
const tableUuid = '550e8400-e29b-41d4-a716-446655440000';

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/tables/${tableUuid}`,
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const table = await response.json();
console.log(table);
Tabelle nach UUID abrufen
import requests

table_uuid = '550e8400-e29b-41d4-a716-446655440000'

response = requests.get(
    f'https://meinefirma.flow360.io/api/v1/tables/{table_uuid}',
    headers={'X-API-Key': '<mein-api-token>'},
)

table = response.json()
print(table)
Tabelle nach UUID abrufen
GET /api/v1/tables/550e8400-e29b-41d4-a716-446655440000 HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Antworten

StatusBedeutung
200 OKTabellendefinition
404 Not FoundTabelle nicht gefunden

Spalten einer Tabelle abrufen

Gibt ausschließlich die Spaltendefinitionen zurück – nützlich, um vor dem Einfügen von Zeilen das erwartete Datenformat zu ermitteln.

Spalten abrufen
curl https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/columns \
  -H "X-API-Key: <mein-api-token>"
Spalten abrufen
const tableUuid = '550e8400-e29b-41d4-a716-446655440000';

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/tables/${tableUuid}/columns`,
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const columns = await response.json();
console.log(columns);
Spalten abrufen
import requests

table_uuid = '550e8400-e29b-41d4-a716-446655440000'

response = requests.get(
    f'https://meinefirma.flow360.io/api/v1/tables/{table_uuid}/columns',
    headers={'X-API-Key': '<mein-api-token>'},
)

columns = response.json()
print(columns)
Spalten abrufen
GET /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/columns HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Antworten

StatusBedeutung
200 OKListe der Spaltendefinitionen
404 Not FoundTabelle nicht gefunden

Beispiel-Payload für eine neue Zeile

Gibt ein vollständiges Beispiel-JSON zurück, das als Vorlage für POST /tables/:uuid/rows verwendet werden kann. Die Beispielwerte orientieren sich an den Datentypen und Nullable-Constraints der jeweiligen Spalten.

Beispiel-Payload abrufen
curl https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/example \
  -H "X-API-Key: <mein-api-token>"
Beispiel-Payload abrufen
const tableUuid = '550e8400-e29b-41d4-a716-446655440000';

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/tables/${tableUuid}/example`,
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const example = await response.json();
console.log(example);
Beispiel-Payload abrufen
import requests

table_uuid = '550e8400-e29b-41d4-a716-446655440000'

response = requests.get(
    f'https://meinefirma.flow360.io/api/v1/tables/{table_uuid}/example',
    headers={'X-API-Key': '<mein-api-token>'},
)

example = response.json()
print(example)
Beispiel-Payload abrufen
GET /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/example HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>
Beispiel-Antwort
{
  "data": {
    "name": "Max Mustermann",
    "email": "max@example.com",
    "age": 30,
    "status": "active",
    "created_at": "2026-03-16T10:00:00Z"
  }
}

Zeilen abfragen

Gibt Tabellenzeilen mit Cursor-basierter Paginierung und optionaler Filterung zurück.

Query-Parameter

ParameterBeschreibung
cursorPaginierungs-Cursor
limitDatensätze pro Seite (max. 1000)
<spalte>_<operator>Filterausdruck (siehe unten)

Zeilen abfragen
curl -G https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows \
  -H "X-API-Key: <mein-api-token>" \
  --data-urlencode "status_eq=active" \
  --data-urlencode "age_gte=18" \
  --data-urlencode "limit=50"
Zeilen abfragen
const tableUuid = '550e8400-e29b-41d4-a716-446655440000';
const params = new URLSearchParams({
  status_eq: 'active',
  age_gte: '18',
  limit: '50',
});

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/tables/${tableUuid}/rows?${params}`,
  {
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

const { data, pagination } = await response.json();
console.log(data, pagination.nextCursor);
Zeilen abfragen
import requests

table_uuid = '550e8400-e29b-41d4-a716-446655440000'

response = requests.get(
    f'https://meinefirma.flow360.io/api/v1/tables/{table_uuid}/rows',
    headers={'X-API-Key': '<mein-api-token>'},
    params={'status_eq': 'active', 'age_gte': 18, 'limit': 50},
)

result = response.json()
print(result['data'])
Zeilen abfragen
GET /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows?status_eq=active&age_gte=18&limit=50 HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Zeile einfügen

Pflichtformat

Der Request Body muss zwingend ein data-Objekt enthalten. Eine direkte Übergabe der Felder auf oberster Ebene wird abgelehnt.

Zeile einfügen
curl -X POST https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <mein-api-token>" \
  -d '{
    "data": {
      "name": "Max Mustermann",
      "email": "max@example.com",
      "status": "active"
    }
  }'
Zeile einfügen
const tableUuid = '550e8400-e29b-41d4-a716-446655440000';

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/tables/${tableUuid}/rows`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': '<mein-api-token>',
    },
    body: JSON.stringify({
      data: {
        name: 'Max Mustermann',
        email: 'max@example.com',
        status: 'active',
      },
    }),
  }
);

const row = await response.json();
console.log(row);
Zeile einfügen
import requests

table_uuid = '550e8400-e29b-41d4-a716-446655440000'

response = requests.post(
    f'https://meinefirma.flow360.io/api/v1/tables/{table_uuid}/rows',
    headers={
        'Content-Type': 'application/json',
        'X-API-Key': '<mein-api-token>',
    },
    json={
        'data': {
            'name': 'Max Mustermann',
            'email': 'max@example.com',
            'status': 'active',
        }
    },
)

row = response.json()
print(row)
Zeile einfügen
POST /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows HTTP/1.1
Host: meinefirma.flow360.io
Content-Type: application/json
X-API-Key: <mein-api-token>

{
  "data": {
    "name": "Max Mustermann",
    "email": "max@example.com",
    "status": "active"
  }
}

Antworten

StatusBedeutung
201 CreatedZeile erfolgreich eingefügt
400 Bad RequestUngültiges Datenformat
404 Not FoundTabelle nicht gefunden

Zeile aktualisieren

Aktualisiert eine bestehende Zeile anhand ihrer numerischen ID. Es müssen nur die zu ändernden Felder übermittelt werden.

Zeile aktualisieren
curl -X PUT https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows/42 \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <mein-api-token>" \
  -d '{
    "data": {
      "status": "completed"
    }
  }'
Zeile aktualisieren
const tableUuid = '550e8400-e29b-41d4-a716-446655440000';
const rowId = 42;

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/tables/${tableUuid}/rows/${rowId}`,
  {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': '<mein-api-token>',
    },
    body: JSON.stringify({
      data: { status: 'completed' },
    }),
  }
);

const updated = await response.json();
console.log(updated);
Zeile aktualisieren
import requests

table_uuid = '550e8400-e29b-41d4-a716-446655440000'
row_id = 42

response = requests.put(
    f'https://meinefirma.flow360.io/api/v1/tables/{table_uuid}/rows/{row_id}',
    headers={
        'Content-Type': 'application/json',
        'X-API-Key': '<mein-api-token>',
    },
    json={'data': {'status': 'completed'}},
)

updated = response.json()
print(updated)
Zeile aktualisieren
PUT /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows/42 HTTP/1.1
Host: meinefirma.flow360.io
Content-Type: application/json
X-API-Key: <mein-api-token>

{
  "data": {
    "status": "completed"
  }
}

Antworten

StatusBedeutung
200 OKZeile erfolgreich aktualisiert
404 Not FoundTabelle oder Zeile nicht gefunden

Zeile löschen

Löscht eine Zeile dauerhaft aus der Tabelle.

Zeile löschen
curl -X DELETE https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows/42 \
  -H "X-API-Key: <mein-api-token>"
Zeile löschen
const tableUuid = '550e8400-e29b-41d4-a716-446655440000';
const rowId = 42;

const response = await fetch(
  `https://meinefirma.flow360.io/api/v1/tables/${tableUuid}/rows/${rowId}`,
  {
    method: 'DELETE',
    headers: { 'X-API-Key': '<mein-api-token>' },
  }
);

console.log(response.status); // 200
Zeile löschen
import requests

table_uuid = '550e8400-e29b-41d4-a716-446655440000'
row_id = 42

response = requests.delete(
    f'https://meinefirma.flow360.io/api/v1/tables/{table_uuid}/rows/{row_id}',
    headers={'X-API-Key': '<mein-api-token>'},
)

print(response.status_code)  # 200
Zeile löschen
DELETE /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows/42 HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>

Antworten

StatusBedeutung
200 OKZeile erfolgreich gelöscht
404 Not FoundTabelle oder Zeile nicht gefunden

Weiterführende Ressourcen