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.

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.

Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
templateUuid | string | ✅ | UUID der Vorlage, aus der der Flow erstellt werden soll |
userIdentifier | string | ✅ | Benutzer-UUID, E-Mail-Adresse oder numerische ID |
fields | array | ❌ | Initiale Feldwerte (aktuell in Vorbereitung) |
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"
}'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);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)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
| Status | Bedeutung |
|---|---|
201 Created | Flow wurde erfolgreich angelegt |
404 Not Found | Vorlage 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
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
templateUuid | string | ❌ | Filtert nach Vorlage |
status | string | ❌ | Filtert nach Flow-Status (siehe unten) |
cursor | string | ❌ | Cursor für die nächste Ergebnisseite |
limit | number | ❌ | Anzahl Datensätze pro Seite (max. 1000) |
Mögliche Statuswerte
| Wert | Bedeutung |
|---|---|
pending | Noch nicht gestartet |
started | Gestartet |
progress | In Bearbeitung |
approval | Wartet auf Genehmigung |
attention | Erfordert Aufmerksamkeit |
onhold | Pausiert |
| Wert | Bedeutung |
|---|---|
completed | Erfolgreich abgeschlossen |
rejected | Abgelehnt |
cancelled | Abgebrochen |
Ungültige Statuswerte werden mit 400 Bad Request und einer Liste der erlaubten Werte beantwortet.
curl -G https://meinefirma.flow360.io/api/v1/flows \
-H "X-API-Key: <mein-api-token>" \
--data-urlencode "status=progress" \
--data-urlencode "limit=50"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);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'])GET /api/v1/flows?status=progress&limit=50 HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>Beispiel-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).
curl https://meinefirma.flow360.io/api/v1/templates \
-H "X-API-Key: <mein-api-token>"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);import requests
response = requests.get(
'https://meinefirma.flow360.io/api/v1/templates',
headers={'X-API-Key': '<mein-api-token>'},
)
templates = response.json()
print(templates)GET /api/v1/templates HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>Antworten
| Status | Bedeutung |
|---|---|
200 OK | Liste der aktiven Vorlagen |
Gruppen einer Vorlage abrufen
Gibt alle Gruppen zurück, die einer bestimmten Vorlage zugeordnet sind.
Pfadparameter
| Parameter | Beschreibung |
|---|---|
uuid | UUID der Vorlage |
curl https://meinefirma.flow360.io/api/v1/templates/550e8400-e29b-41d4-a716-446655440000/groups \
-H "X-API-Key: <mein-api-token>"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);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)GET /api/v1/templates/550e8400-e29b-41d4-a716-446655440000/groups HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>Antworten
| Status | Bedeutung |
|---|---|
200 OK | Liste der zugeordneten Gruppen |
404 Not Found | Vorlage nicht gefunden |
Gruppen
Benutzer einer Gruppe abrufen
Gibt alle aktiven Benutzer zurück, die Mitglied der angegebenen Gruppe sind.
Pfadparameter
| Parameter | Beschreibung |
|---|---|
uuid | UUID der Gruppe |
curl https://meinefirma.flow360.io/api/v1/groups/550e8400-e29b-41d4-a716-446655440000/users \
-H "X-API-Key: <mein-api-token>"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);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)GET /api/v1/groups/550e8400-e29b-41d4-a716-446655440000/users HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>Antworten
| Status | Bedeutung |
|---|---|
200 OK | Liste der Benutzer |
404 Not Found | Gruppe 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).
curl https://meinefirma.flow360.io/api/v1/tables \
-H "X-API-Key: <mein-api-token>"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);import requests
response = requests.get(
'https://meinefirma.flow360.io/api/v1/tables',
headers={'X-API-Key': '<mein-api-token>'},
)
tables = response.json()
print(tables)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.
curl https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000 \
-H "X-API-Key: <mein-api-token>"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);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)GET /api/v1/tables/550e8400-e29b-41d4-a716-446655440000 HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>Antworten
| Status | Bedeutung |
|---|---|
200 OK | Tabellendefinition |
404 Not Found | Tabelle 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.
curl https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/columns \
-H "X-API-Key: <mein-api-token>"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);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)GET /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/columns HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>Antworten
| Status | Bedeutung |
|---|---|
200 OK | Liste der Spaltendefinitionen |
404 Not Found | Tabelle 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.
curl https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/example \
-H "X-API-Key: <mein-api-token>"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);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)GET /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/example HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>{
"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
| Parameter | Beschreibung |
|---|---|
cursor | Paginierungs-Cursor |
limit | Datensätze pro Seite (max. 1000) |
<spalte>_<operator> | Filterausdruck (siehe unten) |
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"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);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'])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.
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"
}
}'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);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)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
| Status | Bedeutung |
|---|---|
201 Created | Zeile erfolgreich eingefügt |
400 Bad Request | Ungültiges Datenformat |
404 Not Found | Tabelle nicht gefunden |
Zeile aktualisieren
Aktualisiert eine bestehende Zeile anhand ihrer numerischen ID. Es müssen nur die zu ändernden Felder übermittelt werden.
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"
}
}'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);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)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
| Status | Bedeutung |
|---|---|
200 OK | Zeile erfolgreich aktualisiert |
404 Not Found | Tabelle oder Zeile nicht gefunden |
Zeile löschen
Löscht eine Zeile dauerhaft aus der Tabelle.
curl -X DELETE https://meinefirma.flow360.io/api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows/42 \
-H "X-API-Key: <mein-api-token>"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); // 200import 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) # 200DELETE /api/v1/tables/550e8400-e29b-41d4-a716-446655440000/rows/42 HTTP/1.1
Host: meinefirma.flow360.io
X-API-Key: <mein-api-token>Antworten
| Status | Bedeutung |
|---|---|
200 OK | Zeile erfolgreich gelöscht |
404 Not Found | Tabelle oder Zeile nicht gefunden |