🚀 Jetzt neu: FlowAI! Ein revolutionärer Chat mit personalisierten AI-Agenten. 🌟

FlowTime API - für präzise Zeiterfassung

Eine vollständige REST API für Zeiterfassung mit Timer-Steuerung, Projektmanagement und detaillierten Statistiken. Perfekt für Time-Tracking-Apps, Abrechnungssysteme und Produktivitätsanalysen.

🚀 Schnellstart

Basis-URL: https://creativeskyline.de/api/flowtime/timer https://creativeskyline.de/api/flowtime/entries https://creativeskyline.de/api/flowtime/projects https://creativeskyline.de/api/flowtime/stats https://creativeskyline.de/api/flowtime/working-hours https://creativeskyline.de/api/flowtime/shifts
FlowTime-Berechtigung erforderlich
Der Benutzer benötigt eine aktive FlowTime-Berechtigung (tt), um die API nutzen zu können.

1. API-Zugangsdaten abrufen

Bevor Sie die FlowTime API nutzen können, benötigen Sie Ihre persönlichen Zugangsdaten: Melden Sie sich an, navigieren Sie zu Profil → API-Zugang und kopieren Sie Ihren persönlichen API-Key (pk_...).

2. Authentifizierung

Alle API-Anfragen benötigen diesen HTTP-Header:

Authorization: Bearer pk_dein_api_key
Accept: application/json

⏱️ Timer-Steuerung

Basis-URL: https://creativeskyline.de/api/flowtime/timer https://creativeskyline.de/api/flowtime/entries https://creativeskyline.de/api/flowtime/projects https://creativeskyline.de/api/flowtime/stats https://creativeskyline.de/api/flowtime/working-hours https://creativeskyline.de/api/flowtime/shifts

Timer-Status abrufen

GET /api/flowtime/timer/status

Ruft den aktuellen Timer-Status ab. Zeigt an, ob ein Timer läuft und wie lange. Läuft kein Timer, ist "is_tracking" false und "timer" null.

Timer starten

POST /api/flowtime/timer/start

Startet einen neuen Timer. Läuft bereits ein Timer, wird dieser NICHT ersetzt: Die API antwortet mit HTTP 409 und liefert im Feld "data.active_timer_uuid" die UUID des bereits laufenden Timers zurück. Stoppen oder Abbrechen Sie den aktiven Timer zuerst, bevor Sie einen neuen starten. Breaking Change: Das frühere numerische Feld "project_id" wird nicht mehr akzeptiert (Validierungsfehler); das Projekt wird ausschließlich über "project_uuid" angegeben.

Request Body:

description string Beschreibung der Tätigkeit (max. 500 Zeichen)
project_uuid string UUID des zugehörigen Projekts (teamgebunden)

Timer stoppen

POST /api/flowtime/timer/stop

Stoppt den aktuell laufenden Timer und speichert den Zeiteintrag.

Laufenden Timer aktualisieren

PUT /api/flowtime/timer

Aktualisiert den aktuell laufenden Timer (Beschreibung oder Projekt ändern). Breaking Change: Das frühere numerische Feld "project_id" wird nicht mehr akzeptiert; das Projekt wird ausschließlich über "project_uuid" angegeben.

Request Body:

description string Neue Beschreibung
project_uuid string UUID des neuen Projekts (teamgebunden)

Timer abbrechen

DELETE /api/flowtime/timer

Bricht den aktuell laufenden Timer ab, ohne die Zeit zu speichern.

📝 Zeiteinträge

Basis-URL: https://creativeskyline.de/api/flowtime/timer https://creativeskyline.de/api/flowtime/entries https://creativeskyline.de/api/flowtime/projects https://creativeskyline.de/api/flowtime/stats https://creativeskyline.de/api/flowtime/working-hours https://creativeskyline.de/api/flowtime/shifts

Zeiteinträge auflisten

GET /api/flowtime/entries

Ruft alle Zeiteinträge mit optionalen Filtern ab.

Query-Parameter:

start_date string Startdatum (YYYY-MM-DD)
end_date string Enddatum (YYYY-MM-DD)
project_uuid string Filter nach Projekt-UUID
user_uuid string Nur für Teaminhaber: Einträge eines bestimmten Nutzers (UUID) filtern. Mitglieder mit dem Sub-Recht "berichte" sehen team-weite Einträge, ohne dieses Recht nur die eigenen.
limit integer Maximale Anzahl der Einträge (1-500, Standard: 50)
offset integer Offset für Pagination

Zeiteintrag abrufen

GET /api/flowtime/entries/{uuid}

Ruft einen einzelnen Zeiteintrag mit allen Details ab.

Zeiteintrag erstellen

POST /api/flowtime/entries

Erstellt einen manuellen Zeiteintrag (ohne Timer). Start- und Endzeitpunkt sind Pflicht; die Dauer wird serverseitig aus der Differenz berechnet. Breaking Change: Das frühere numerische Feld "project_id" wird nicht mehr akzeptiert; das Projekt wird ausschließlich über "project_uuid" angegeben.

Request Body:

description string * Beschreibung der Tätigkeit (max. 500 Zeichen)
project_uuid string * Projekt-UUID (muss zum Team gehören)
starts_at string * Startzeitpunkt (ISO 8601)
ends_at string * Endzeitpunkt (ISO 8601), muss nach starts_at liegen

Zeiteintrag aktualisieren

PUT /api/flowtime/entries/{uuid}

Aktualisiert einen bestehenden Zeiteintrag. Breaking Change: Das frühere numerische Feld "project_id" wird nicht mehr akzeptiert; das Projekt wird ausschließlich über "project_uuid" angegeben.

Request Body:

description string Beschreibung
project_uuid string Projekt-UUID (teamgebunden)
starts_at string Startzeitpunkt (ISO 8601)
ends_at string Endzeitpunkt (ISO 8601)

Zeiteintrag löschen

DELETE /api/flowtime/entries/{uuid}

Löscht einen Zeiteintrag unwiderruflich.

📁 Projekte

Basis-URL: https://creativeskyline.de/api/flowtime/timer https://creativeskyline.de/api/flowtime/entries https://creativeskyline.de/api/flowtime/projects https://creativeskyline.de/api/flowtime/stats https://creativeskyline.de/api/flowtime/working-hours https://creativeskyline.de/api/flowtime/shifts
Projekt-Berechtigungen
Private Projekte können bestimmten Teammitgliedern zugewiesen werden. Anlegen und Bearbeiten von Projekten ist dem Teaminhaber vorbehalten.

Projekte auflisten

GET /api/flowtime/projects

Listet alle Projekte auf, zu denen der Benutzer Zugriff hat (inklusive Zeitstatistiken).

Projekt-Details abrufen

GET /api/flowtime/projects/{uuid}

Ruft Details eines einzelnen Projekts ab, inklusive Zeitstatistiken. Das Projekt wird über seine UUID adressiert; numerische IDs werden nicht mehr akzeptiert (HTTP 404).

Projekt anlegen

POST /api/flowtime/projects

Erstellt ein neues Projekt (nur Teaminhaber). Breaking Change: Der Kunde wird über client_uuid übergeben; das frühere numerische Feld client_id wird nicht mehr akzeptiert (Validierungsfehler).

Request Body:

name string * Projektname (max. 255 Zeichen)
client_uuid string * UUID des CRM-Kunden, der zum Team gehören muss
description string Projektbeschreibung
color_code string Hex-Farbe (z.B. #10B981, Standard: #3B82F6)
is_public boolean Für alle Teammitglieder sichtbar (Standard: true)
is_billable boolean Projekt ist abrechenbar (Standard: false)
billable_rate number Stundensatz für die Abrechnung
currency string Währungscode nach ISO 4217 (3 Zeichen, Standard: Team-Währung)

Projekt aktualisieren

PUT /api/flowtime/projects/{uuid}

Aktualisiert ein bestehendes Projekt (nur Teaminhaber). Das Projekt wird über seine UUID adressiert; numerische IDs werden nicht mehr akzeptiert (HTTP 404).

Request Body:

name string Projektname (max. 255 Zeichen)
description string Projektbeschreibung
status string Projektstatus: active oder archived
color_code string Hex-Farbe (z.B. #10B981)
is_public boolean Für alle Teammitglieder sichtbar
is_hidden boolean Projekt in Listen ausblenden
is_billable boolean Projekt ist abrechenbar
billable_rate number Stundensatz für die Abrechnung
currency string Währungscode nach ISO 4217 (3 Zeichen)

Projekt-Berechtigungen setzen

PUT /api/flowtime/projects/{uuid}/permissions

Legt fest, welche Teammitglieder Zugriff auf ein privates Projekt haben (nur Teaminhaber). Die übergebene Liste ersetzt die bestehenden Berechtigungen vollständig. Nur Nutzer, die zum Team gehören, werden übernommen.

Request Body:

user_uuids array * Liste der Nutzer-UUIDs, die Zugriff erhalten sollen
user_uuids.* string * Einzelne Nutzer-UUID (gültiges UUID-Format)

📊 Statistiken

Basis-URL: https://creativeskyline.de/api/flowtime/timer https://creativeskyline.de/api/flowtime/entries https://creativeskyline.de/api/flowtime/projects https://creativeskyline.de/api/flowtime/stats https://creativeskyline.de/api/flowtime/working-hours https://creativeskyline.de/api/flowtime/shifts

Statistik-Endpoints liefern aggregierte Auswertungen der erfassten Zeiten. GET /api/flowtime/stats/today gibt die Tagesauswertung zurück, GET /api/flowtime/stats/week die Wochenauswertung mit täglicher Aufschlüsselung und Projekt-Anteilen.

Breaking Change: Die Projekt-Aufschlüsselung unter data.by_project weist das Projekt über project_uuid aus. Das frühere numerische project_id entfällt ersatzlos.

🕐 Arbeitszeiten

Basis-URL: https://creativeskyline.de/api/flowtime/timer https://creativeskyline.de/api/flowtime/entries https://creativeskyline.de/api/flowtime/projects https://creativeskyline.de/api/flowtime/stats https://creativeskyline.de/api/flowtime/working-hours https://creativeskyline.de/api/flowtime/shifts
Schreibende Balance-Endpoints nur für Teaminhaber
Die eigene Arbeitszeit-Bilanz kann jedes Mitglied abrufen. Das Anpassen von Überstunden-Salden (POST /working-hours/overtime/adjust) sowie das Ändern der Arbeitszeit-Einstellungen fremder Mitglieder (PUT /working-hours/settings) sind ausschließlich dem Teaminhaber vorbehalten.

Arbeitszeit-Status abrufen

GET /api/flowtime/working-hours/status

Ruft die aktuelle Arbeitszeit-Bilanz des angemeldeten Nutzers ab (Tages-, Wochen- und Monatsbilanz sowie Überstunden-Saldo). Sind keine Arbeitszeiten konfiguriert, ist "configured" false.

Arbeitszeit-Einstellungen ändern

PUT /api/flowtime/working-hours/settings

Ändert die Arbeitszeit-Einstellungen eines Teammitglieds (nur Teaminhaber). Das Zielmitglied wird über "user_uuid" identifiziert. Nur übergebene Felder werden aktualisiert.

Request Body:

user_uuid string * UUID des Zielmitglieds
weekly_hours number Wochenstunden (0-168)
working_days array Arbeitstage als Zahlen 1-7 (Mo-So)
daily_hours array Sollstunden pro Tag (0-24)
track_overtime boolean Überstunden erfassen
work_time_model string Arbeitszeitmodell: standard, flexible oder shift

Überstunden-Saldo anpassen

POST /api/flowtime/working-hours/overtime/adjust

Passt den Überstunden-Saldo eines Teammitglieds an (nur Teaminhaber). Mit "mode" wird der Wert entweder addiert (add, Standard) oder absolut gesetzt (set). Der resultierende Saldo wird serverseitig auf die zulässigen Grenzen begrenzt.

Request Body:

user_uuid string * UUID des Zielmitglieds
minutes integer * Anzahl Minuten (bei mode=add Delta, bei mode=set Zielwert)
mode string add (addieren, Standard) oder set (absolut setzen)
reason string Begründung für den Audit-Trail (max. 500 Zeichen)

Arbeitszeit-Verlauf abrufen

GET /api/flowtime/working-hours/history

Ruft den tagesweisen Arbeitszeit-Verlauf ab. Standardmäßig die aktuelle Woche des angemeldeten Nutzers. Teaminhaber können über "user_uuid" den Verlauf eines anderen Mitglieds abrufen. Der Zeitraum ist auf maximal 31 Tage begrenzt.

Query-Parameter:

start_date string Startdatum (YYYY-MM-DD, Standard: Wochenanfang)
end_date string Enddatum (YYYY-MM-DD, muss >= start_date sein)
user_uuid string Nur für Teaminhaber: Verlauf eines bestimmten Nutzers

📅 Schichtplanung

Basis-URL: https://creativeskyline.de/api/flowtime/timer https://creativeskyline.de/api/flowtime/entries https://creativeskyline.de/api/flowtime/projects https://creativeskyline.de/api/flowtime/stats https://creativeskyline.de/api/flowtime/working-hours https://creativeskyline.de/api/flowtime/shifts
Schichtsystem muss aktiviert sein
Alle Schicht-Endpoints setzen voraus, dass das Schichtsystem für das Team aktiviert ist (Team-Einstellung "shifts_enabled"). Ist es deaktiviert, antwortet die API mit HTTP 403.
Berechtigungen: Verwaltung vs. eigene Schichten
Lesende Endpoints (Schichttypen/-vorlagen/-pläne auflisten, eigene Schichten, aktuelle Übersicht, Präferenzen) sowie das Bestätigen/Ablehnen eigener Zuweisungen stehen jedem Mitglied mit FlowTime-Zugriff offen. Verwaltende Aktionen (Anlegen, Ändern, Löschen von Typen/Vorlagen/Plänen/Schichten, Zuweisen und Entfernen von Nutzern, Verfügbarkeitsliste) erfordern das FlowTime-Sub-Recht "schichtplanung"; der Teaminhaber ist dabei implizit berechtigt. Web-UI und API autorisieren identisch.

Schichttypen auflisten

GET /api/flowtime/shifts/types

Listet alle Schichttypen des Teams auf.

Schichttyp anlegen

POST /api/flowtime/shifts/types

Erstellt einen neuen Schichttyp (erfordert Sub-Recht "schichtplanung" oder Teaminhaber).

Request Body:

name string * Name des Schichttyps (max. 255 Zeichen)
description string Beschreibung
color string Hex-Farbe (max. 7 Zeichen)
icon string Icon-Kennung (max. 50 Zeichen)
is_active boolean Schichttyp aktiv

Schichttyp aktualisieren

PUT /api/flowtime/shifts/types/{uuid}

Aktualisiert einen Schichttyp (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Adressierung ausschließlich per UUID.

Request Body:

name string Name des Schichttyps (max. 255 Zeichen)
description string Beschreibung
color string Hex-Farbe im Format #RRGGBB
icon string Icon-Kennung (max. 50 Zeichen)
is_active boolean Schichttyp aktiv

Schichttyp löschen

DELETE /api/flowtime/shifts/types/{uuid}

Löscht einen Schichttyp (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Adressierung ausschließlich per UUID.

Schichtvorlagen auflisten

GET /api/flowtime/shifts/templates

Listet alle Schichtvorlagen des Teams auf.

Schichtvorlage anlegen

POST /api/flowtime/shifts/templates

Erstellt eine neue Schichtvorlage (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Breaking Change: Das frühere numerische Feld "shift_type_id" wird nicht mehr akzeptiert; der Schichttyp wird ausschließlich über "shift_type_uuid" angegeben.

Request Body:

name string * Name der Schichtvorlage (max. 255 Zeichen)
shift_type_uuid string * UUID des Schichttyps (teamgebunden)
start_time string * Startzeit (HH:MM)
end_time string * Endzeit (HH:MM)
min_staff integer Minimale Besetzung
max_staff integer Maximale Besetzung (>= min_staff)
default_days array Standard-Wochentage (1-7)
is_active boolean Schichtvorlage aktiv

Schichtvorlage aktualisieren

PUT /api/flowtime/shifts/templates/{uuid}

Aktualisiert eine Schichtvorlage (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Adressierung ausschließlich per UUID. Breaking Change: Das frühere numerische Feld "shift_type_id" wird nicht mehr akzeptiert; der Schichttyp wird ausschließlich über "shift_type_uuid" angegeben.

Request Body:

name string Name der Schichtvorlage (max. 255 Zeichen)
shift_type_uuid string UUID des Schichttyps (teamgebunden)
start_time string Startzeit (HH:MM)
end_time string Endzeit (HH:MM)
min_staff integer Minimale Besetzung
max_staff integer Maximale Besetzung (>= min_staff)
default_days array Standard-Wochentage (1-7)
is_active boolean Schichtvorlage aktiv

Schichtvorlage löschen

DELETE /api/flowtime/shifts/templates/{uuid}

Löscht eine Schichtvorlage (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Adressierung ausschließlich per UUID.

Schichtpläne auflisten

GET /api/flowtime/shifts/plans

Listet die Schichtpläne des Teams auf.

Query-Parameter:

status string Filtert nach Status (draft, published oder archived)
start_date string Filtert Pläne ab diesem Datum
end_date string Filtert Pläne bis zu diesem Datum (muss >= start_date sein)

Schichtplan anlegen

POST /api/flowtime/shifts/plans

Erstellt einen neuen Schichtplan für eine Woche (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Breaking Change: Das frühere numerische Feld "shift_type_ids" wird nicht mehr akzeptiert; die Schichttypen werden ausschließlich über "shift_type_uuids" angegeben.

Request Body:

week_start string * Wochenanfang (Datum)
name string Name des Plans (max. 255 Zeichen)
create_from_templates boolean Plan aus Vorlagen erzeugen
shift_type_uuids array UUIDs der zu berücksichtigenden Schichttypen (teamgebunden)
shift_type_uuids.* string Einzelne Schichttyp-UUID

Schichtplan-Details abrufen

GET /api/flowtime/shifts/plans/{uuid}

Ruft einen einzelnen Schichtplan mit seinen Schichten ab. Adressierung ausschließlich per UUID.

Schichtplan veröffentlichen

POST /api/flowtime/shifts/plans/{uuid}/publish

Veröffentlicht einen Schichtplan (erfordert Sub-Recht "schichtplanung" oder Teaminhaber).

Schichtplan archivieren

POST /api/flowtime/shifts/plans/{uuid}/archive

Archiviert einen Schichtplan (erfordert Sub-Recht "schichtplanung" oder Teaminhaber).

Schichtplan kopieren

POST /api/flowtime/shifts/plans/{uuid}/copy

Kopiert einen Schichtplan in eine andere Woche (erfordert Sub-Recht "schichtplanung" oder Teaminhaber).

Request Body:

target_week_start string * Ziel-Wochenstartdatum

Schicht anlegen

POST /api/flowtime/shifts

Erstellt eine einzelne Schicht innerhalb eines Plans (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Breaking Change: Die früheren numerischen Felder "shift_plan_id" und "shift_type_id" werden nicht mehr akzeptiert; Plan und Typ werden ausschließlich über "shift_plan_uuid" und "shift_type_uuid" angegeben.

Request Body:

shift_plan_uuid string * UUID des Schichtplans (teamgebunden)
shift_type_uuid string * UUID des Schichttyps (teamgebunden)
date string * Datum der Schicht
start_time string * Startzeit (HH:MM)
end_time string * Endzeit (HH:MM)
min_staff integer Minimale Besetzung
max_staff integer Maximale Besetzung (>= min_staff)
notes string Notizen zur Schicht

Schicht löschen

DELETE /api/flowtime/shifts/{uuid}

Löscht eine Schicht (erfordert Sub-Recht "schichtplanung" oder Teaminhaber). Adressierung ausschließlich per UUID.

Nutzer einer Schicht zuweisen

POST /api/flowtime/shifts/{uuid}/assign

Weist einer Schicht einen Nutzer zu (erfordert Sub-Recht "schichtplanung" oder Teaminhaber).

Request Body:

user_uuid string * UUID des zuzuweisenden Nutzers
check_conflicts boolean Zeitliche Konflikte prüfen

Zuweisung entfernen

DELETE /api/flowtime/shifts/{uuid}/assign/{userUuid}

Entfernt die Zuweisung eines Nutzers von einer Schicht (erfordert Sub-Recht "schichtplanung" oder Teaminhaber).

Verfügbare Nutzer für Schicht

GET /api/flowtime/shifts/{uuid}/available-users

Listet Nutzer, die für eine Schicht zugewiesen werden können (erfordert Sub-Recht "schichtplanung" oder Teaminhaber).

Zuweisung bestätigen

POST /api/flowtime/shifts/assignments/{uuid}/confirm

Bestätigt eine eigene Schicht-Zuweisung. Steht jedem Mitglied für die eigenen Zuweisungen offen.

Zuweisung ablehnen

POST /api/flowtime/shifts/assignments/{uuid}/decline

Lehnt eine eigene Schicht-Zuweisung ab. Steht jedem Mitglied für die eigenen Zuweisungen offen.

Request Body:

reason string Begründung für die Ablehnung

Eigene Schichten abrufen

GET /api/flowtime/shifts/my-shifts

Ruft die eigenen Schichten des angemeldeten Nutzers ab.

Query-Parameter:

start_date string Filtert Schichten ab diesem Datum
end_date string Filtert Schichten bis zu diesem Datum (muss >= start_date sein)

Aktuelle Schicht-Übersicht

GET /api/flowtime/shifts/current

Ruft die aktuelle Schicht-Übersicht ab.

Eigene Verfügbarkeits-Präferenzen

GET /api/flowtime/shifts/preferences

Ruft die eigenen Verfügbarkeits-Präferenzen des angemeldeten Nutzers ab.

Verfügbarkeits-Präferenz setzen

PUT /api/flowtime/shifts/preferences/{dayOfWeek}

Setzt die eigene Verfügbarkeits-Präferenz für einen Wochentag (1-7). Steht jedem Mitglied für die eigenen Präferenzen offen.

Request Body:

availability string * Verfügbarkeit: available, preferred, unavailable oder if_needed
available_from string Verfügbar ab (HH:MM)
available_until string Verfügbar bis (HH:MM)
preferred_shift_types array Bevorzugte Schichttypen als UUIDs (teamgebunden)
notes string Notizen (max. 500 Zeichen)