🚀 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

1. API-Zugangsdaten abrufen

Bevor Sie die FlowTime API nutzen können, benötigen Sie Ihre persönlichen Zugangsdaten:

  1. Melden Sie sich in Ihrem Account an
  2. Navigieren Sie zu Profil → API-Zugang
  3. Kopieren Sie Ihre Team-UUID und Benutzer-UUID

🔑 Authentifizierung

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

X-Team-UUID: ihre-team-uuid-hier
X-User-UUID: ihre-benutzer-uuid-hier
Content-Type: application/json

Voraussetzung: Der Benutzer benötigt eine aktive FlowTime-Berechtigung (tt) um die API nutzen zu können.

3. Erste API-Anfrage

Testen Sie Ihre Verbindung mit diesem einfachen Beispiel:

curl -X GET "https://creativeskyline.de/api/flowtime/timer/status" \
  -H "X-Team-UUID: ihre-team-uuid" \
  -H "X-User-UUID: ihre-user-uuid" \
  -H "Accept: application/json"

📚 API-Referenz

Basis-URL: https://creativeskyline.de/api/flowtime

⏱️ Timer-Steuerung

GET /api/flowtime/timer/status

Ruft den aktuellen Timer-Status ab. Zeigt an, ob ein Timer läuft und wie lange.

Beispiel-Response (Timer läuft):

{
  "success": true,
  "data": {
    "is_running": true,
    "entry": {
      "id": 123,
      "description": "Feature-Entwicklung",
      "project": {
        "id": 456,
        "name": "Website Redesign"
      },
      "starts_at": "2024-01-15T09:00:00Z",
      "duration_seconds": 3600,
      "duration_formatted": "01:00:00"
    }
  }
}

Beispiel-Response (Timer gestoppt):

{
  "success": true,
  "data": {
    "is_running": false,
    "entry": null
  }
}
POST /api/flowtime/timer/start

Startet einen neuen Timer. Falls bereits ein Timer läuft, wird dieser gestoppt und ein neuer gestartet.

Request Body:

{
  "description": "Bug-Fixing für Login-Seite",
  "project_id": 456    // Optional: Projekt-ID
}

Parameter:

description - Beschreibung der Tätigkeit (optional)
project_id - ID des zugehörigen Projekts (optional)
POST /api/flowtime/timer/stop

Stoppt den aktuell laufenden Timer und speichert den Zeiteintrag.

Beispiel-Response:

{
  "success": true,
  "message": "Timer gestoppt",
  "data": {
    "id": 123,
    "description": "Bug-Fixing für Login-Seite",
    "project": {
      "id": 456,
      "name": "Website Redesign"
    },
    "starts_at": "2024-01-15T09:00:00Z",
    "ends_at": "2024-01-15T10:30:00Z",
    "duration_seconds": 5400,
    "duration_formatted": "01:30:00"
  }
}
PUT /api/flowtime/timer

Aktualisiert den aktuell laufenden Timer (Beschreibung oder Projekt ändern).

Request Body:

{
  "description": "Neue Beschreibung",
  "project_id": 789
}
DELETE /api/flowtime/timer

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

📝 Zeiteinträge

GET /api/flowtime/entries

Ruft alle Zeiteinträge mit optionalen Filtern ab.

Query-Parameter:

date_from - Startdatum (Format: YYYY-MM-DD)
date_to - Enddatum (Format: YYYY-MM-DD)
project_id - Filter nach Projekt-ID
limit - Maximale Anzahl der Einträge (Standard: 50)
offset - Offset für Pagination

Beispiel:

GET /api/flowtime/entries?date_from=2024-01-01&date_to=2024-01-31&project_id=456&limit=20
GET /api/flowtime/entries/{id}

Ruft einen einzelnen Zeiteintrag mit allen Details ab.

POST /api/flowtime/entries

Erstellt einen manuellen Zeiteintrag (ohne Timer).

Request Body:

{
  "description": "Meeting mit Kunde",
  "project_id": 456,
  "starts_at": "2024-01-15T14:00:00Z",
  "ends_at": "2024-01-15T15:30:00Z"
}

// Alternativ mit Dauer in Sekunden:
{
  "description": "Dokumentation schreiben",
  "project_id": 456,
  "starts_at": "2024-01-15T14:00:00Z",
  "seconds": 5400
}
PUT /api/flowtime/entries/{id}

Aktualisiert einen bestehenden Zeiteintrag.

Request Body:

{
  "description": "Aktualisierte Beschreibung",
  "project_id": 789,
  "starts_at": "2024-01-15T14:00:00Z",
  "ends_at": "2024-01-15T16:00:00Z"
}
DELETE /api/flowtime/entries/{id}

Löscht einen Zeiteintrag unwiderruflich.

📁 Projekte

GET /api/flowtime/projects

Listet alle Projekte auf, zu denen der Benutzer Zugriff hat.

Beispiel-Response:

{
  "success": true,
  "data": [
    {
      "id": 456,
      "name": "Website Redesign",
      "client": {
        "id": 1,
        "name": "Musterfirma GmbH"
      },
      "color": "#3B82F6",
      "is_public": true,
      "total_time_seconds": 36000,
      "total_time_formatted": "10:00:00"
    }
  ]
}
GET /api/flowtime/projects/{id}

Ruft Details eines einzelnen Projekts ab, inklusive Zeitstatistiken.

POST /api/flowtime/projects

Erstellt ein neues Projekt (nur Teaminhaber).

Request Body:

{
  "name": "Neues Projekt",
  "client_project_id": 123,  // Optional: CRM-Projekt-ID
  "color": "#10B981",        // Optional: Hex-Farbe
  "is_public": true          // Optional: Für alle Teammitglieder sichtbar
}
PUT /api/flowtime/projects/{id}

Aktualisiert ein bestehendes Projekt (nur Teaminhaber).

Projekt-Berechtigungen

Private Projekte können bestimmten Teammitgliedern zugewiesen werden:

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

Aktualisiert die Benutzer mit Zugriff auf das Projekt (ersetzt alle bestehenden Berechtigungen).

{
  "user_uuids": [
    "550e8400-e29b-41d4-a716-446655440000",
    "550e8400-e29b-41d4-a716-446655440001"
  ]
}

📊 Statistiken

GET /api/flowtime/stats/today

Ruft die Zeitstatistiken für den heutigen Tag ab.

Beispiel-Response:

{
  "success": true,
  "data": {
    "date": "2024-01-15",
    "total_seconds": 28800,
    "total_formatted": "08:00:00",
    "entries_count": 5,
    "projects": [
      {
        "id": 456,
        "name": "Website Redesign",
        "seconds": 14400,
        "formatted": "04:00:00",
        "percentage": 50
      },
      {
        "id": 789,
        "name": "App Development",
        "seconds": 14400,
        "formatted": "04:00:00",
        "percentage": 50
      }
    ]
  }
}
GET /api/flowtime/stats/week

Ruft die Zeitstatistiken für die aktuelle Woche ab.

Beispiel-Response:

{
  "success": true,
  "data": {
    "week_number": 3,
    "year": 2024,
    "start_date": "2024-01-15",
    "end_date": "2024-01-21",
    "total_seconds": 144000,
    "total_formatted": "40:00:00",
    "daily_breakdown": [
      { "date": "2024-01-15", "day": "Montag", "seconds": 28800, "formatted": "08:00:00" },
      { "date": "2024-01-16", "day": "Dienstag", "seconds": 32400, "formatted": "09:00:00" },
      { "date": "2024-01-17", "day": "Mittwoch", "seconds": 25200, "formatted": "07:00:00" },
      { "date": "2024-01-18", "day": "Donnerstag", "seconds": 28800, "formatted": "08:00:00" },
      { "date": "2024-01-19", "day": "Freitag", "seconds": 28800, "formatted": "08:00:00" },
      { "date": "2024-01-20", "day": "Samstag", "seconds": 0, "formatted": "00:00:00" },
      { "date": "2024-01-21", "day": "Sonntag", "seconds": 0, "formatted": "00:00:00" }
    ],
    "projects": [
      {
        "id": 456,
        "name": "Website Redesign",
        "seconds": 72000,
        "formatted": "20:00:00",
        "percentage": 50
      }
    ]
  }
}

💻 Code-Beispiele

Timer starten und stoppen (cURL)

# Timer starten
curl -X POST "https://creativeskyline.de/api/flowtime/timer/start" \
  -H "X-Team-UUID: ihre-team-uuid" \
  -H "X-User-UUID: ihre-user-uuid" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Feature implementieren",
    "project_id": 456
  }'

# Timer stoppen
curl -X POST "https://creativeskyline.de/api/flowtime/timer/stop" \
  -H "X-Team-UUID: ihre-team-uuid" \
  -H "X-User-UUID: ihre-user-uuid" \
  -H "Accept: application/json"

Zeiteinträge abrufen (JavaScript)

async function getTimeEntries(dateFrom, dateTo, projectId = null) {
    const params = new URLSearchParams({
        date_from: dateFrom,
        date_to: dateTo,
        limit: 100
    });

    if (projectId) {
        params.append('project_id', projectId);
    }

    const response = await fetch(
        `https://creativeskyline.de/api/flowtime/entries?${params}`,
        {
            headers: {
                'X-Team-UUID': process.env.TEAM_UUID,
                'X-User-UUID': process.env.USER_UUID,
                'Accept': 'application/json'
            }
        }
    );

    const data = await response.json();
    return data.data;
}

// Beispielaufruf: Einträge vom Januar 2024
const entries = await getTimeEntries('2024-01-01', '2024-01-31');
console.log(`${entries.length} Einträge gefunden`);

Manuellen Zeiteintrag erstellen (PHP)

$teamUuid = getenv('FLOWSUITE_TEAM_UUID');
$userUuid = getenv('FLOWSUITE_USER_UUID');

$data = [
    'description' => 'Kundentermin',
    'project_id' => 456,
    'starts_at' => '2024-01-15T14:00:00Z',
    'ends_at' => '2024-01-15T15:30:00Z'
];

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => 'https://creativeskyline.de/api/flowtime/entries',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_HTTPHEADER => [
        'X-Team-UUID: ' . $teamUuid,
        'X-User-UUID: ' . $userUuid,
        'Content-Type: application/json',
        'Accept: application/json',
    ],
]);

$response = curl_exec($ch);
$result = json_decode($response, true);
curl_close($ch);

if ($result['success']) {
    echo "Zeiteintrag erstellt: " . $result['data']['id'];
}

Wochenstatistiken abrufen (Python)

import os
import requests

team_uuid = os.environ.get('FLOWSUITE_TEAM_UUID')
user_uuid = os.environ.get('FLOWSUITE_USER_UUID')

headers = {
    'X-Team-UUID': team_uuid,
    'X-User-UUID': user_uuid,
    'Accept': 'application/json',
}

response = requests.get(
    'https://creativeskyline.de/api/flowtime/stats/week',
    headers=headers
)

data = response.json()

if data['success']:
    stats = data['data']
    print(f"Woche {stats['week_number']}/{stats['year']}")
    print(f"Gesamtzeit: {stats['total_formatted']}")

    print("\nTägliche Aufschlüsselung:")
    for day in stats['daily_breakdown']:
        print(f"  {day['day']}: {day['formatted']}")

🎯 Anwendungsfälle

📱 Mobile Time-Tracking

Erstellen Sie eine native iOS/Android-App für Zeiterfassung unterwegs. Starten und stoppen Sie Timer direkt vom Smartphone.

💰 Abrechnungssysteme

Integrieren Sie FlowTime mit Ihrer Buchhaltungssoftware für automatische Rechnungserstellung basierend auf erfassten Zeiten.

📊 Produktivitäts-Dashboards

Erstellen Sie benutzerdefinierte Dashboards zur Visualisierung von Arbeitszeiten, Projektfortschritt und Team-Produktivität.

🔗 Tool-Integration

Verbinden Sie FlowTime mit Projektmanagement-Tools wie Jira, Asana oder Trello für nahtlose Zeiterfassung bei Aufgaben.