Zeiterfassung
Zeit mit Timern und manuellen Einträgen auf Tickets erfassen.
Die Zeiterfassung ermöglicht es deinem Team, die Arbeitszeit auf Tickets zu dokumentieren. Du kannst Live-Timer verwenden, die in Echtzeit laufen, oder manuelle Einträge für vergangene Arbeit erstellen. Die Zeiterfassung muss für deine Organisation aktiviert sein.
Timer
Aktive Timer auflisten
GET /api/v1/time-tracking/timersBerechtigung erforderlich: time-tracking:view
Gibt alle aktuell laufenden Timer des authentifizierten Nutzers zurück.
Beispiel-Response
[
{
"id": "tmr_abc123",
"ticketId": "tkt_def456",
"startedAt": "2025-03-20T09:00:00Z",
"ticket": {
"displayId": "WEB-42",
"title": "Login-Seite Styling fixen"
}
}
]Timer starten
POST /api/v1/time-tracking/timersBerechtigung erforderlich: time-tracking:manage
Startet einen neuen Timer. Pro Ticket kann nur ein Timer gleichzeitig laufen.
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| ticketId | string | Ja* | Ticket-ID für die Zeiterfassung |
*Entweder ticketId oder bookingItemId ist erforderlich.
Beispiel-Request
{
"ticketId": "tkt_def456"
}Timer stoppen
POST /api/v1/time-tracking/timers/{timerId}/stopBerechtigung erforderlich: time-tracking:manage
Stoppt einen laufenden Timer und erstellt einen Zeiteintrag.
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| description | string | Nein | Beschreibung der geleisteten Arbeit |
Beispiel-Response
{
"id": "te_abc123",
"ticketId": "tkt_def456",
"durationMinutes": 45,
"description": "CSS-Ausrichtungsproblem behoben",
"date": "2025-03-20",
"createdAt": "2025-03-20T09:45:00Z"
}Alle Timer stoppen
POST /api/v1/time-tracking/timers/stop-allBerechtigung erforderlich: time-tracking:manage
Stoppt alle laufenden Timer des authentifizierten Nutzers.
Zeiteinträge
Meine Einträge auflisten
GET /api/v1/time-tracking/entriesBerechtigung erforderlich: time-tracking:view
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| page | number | Nein | Seitennummer (Standard: 1) |
| limit | number | Nein | Einträge pro Seite (Standard: 50) |
| year | number | Nein | Nach Jahr filtern |
| month | number | Nein | Nach Monat filtern (1-12) |
| boardId | string | Nein | Nach Board filtern |
| search | string | Nein | In Beschreibungen suchen |
Manuellen Eintrag erstellen
POST /api/v1/time-tracking/entriesBerechtigung erforderlich: time-tracking:manage
Erstellt einen Zeiteintrag ohne Timer.
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| ticketId | string | Ja* | Ticket-ID |
| durationMinutes | number | Ja | Dauer in Minuten (min. 1) |
| description | string | Nein | Beschreibung der Arbeit (max. 500 Zeichen) |
| date | string | Nein | Datum der Arbeit im ISO 8601-Format (Standard: heute) |
*Entweder ticketId oder bookingItemId ist erforderlich.
Beispiel-Request
{
"ticketId": "tkt_def456",
"durationMinutes": 120,
"description": "Code-Review und Tests",
"date": "2025-03-19"
}Eintrag aktualisieren
PATCH /api/v1/time-tracking/entries/{entryId}Berechtigung erforderlich: time-tracking:manage
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| durationMinutes | number | Nein | Dauer in Minuten |
| description | string | Nein | Beschreibung |
| date | string | Nein | Datum der Arbeit |
Eintrag löschen
DELETE /api/v1/time-tracking/entries/{entryId}Berechtigung erforderlich: time-tracking:manage
Gibt 204 No Content zurück.
Letzte Einträge abrufen
GET /api/v1/time-tracking/entries/recentBerechtigung erforderlich: time-tracking:view
Gibt die letzten Zeiteinträge des aktuellen Nutzers zurück, gruppiert nach verschiedenen Tickets, nützlich für die Schnell-Wiederaufnahme-Funktionalität.
Heutige Einträge nach Ticket abrufen
GET /api/v1/time-tracking/entries/today-by-ticketBerechtigung erforderlich: time-tracking:view
Gibt die heutigen Zeiteinträge gruppiert nach Ticket mit Summen zurück.
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| tzOffset | number | Nein | Zeitzonen-Offset des Clients in Minuten (von Date.getTimezoneOffset()). Standard: 0 |
Eintrag mit MOCO re-synchronisieren
POST /api/v1/time-tracking/entries/{entryId}/resyncBerechtigung erforderlich: time-tracking:manage
Re-synchronisiert einen Zeiteintrag mit MOCO. Nur für eigene Einträge verfügbar (oder für beliebige Einträge als Admin). Abgerechnete Einträge können nicht re-synchronisiert werden.
Buchungspositionen
Aktive Buchungspositionen auflisten
GET /api/v1/time-tracking/booking-itemsBerechtigung erforderlich: time-tracking:view
Gibt aktive Buchungspositionen für den Timer-/Eintrags-Picker zurück.
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| boardId | string | Nein | Board-Kontext -- nur Positionen, die für dieses Board aktiviert sind |
| q | string | Nein | Nach Buchungspositionsname suchen (Groß-/Kleinschreibung egal) |
Board- und Ticket-Zeiteinträge
Board-Zeiteinträge auflisten
GET /api/v1/boards/{boardId}/time-entriesBerechtigung erforderlich: time-tracking:view
Gibt alle Zeiteinträge für ein bestimmtes Board zurück.
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| page | number | Nein | Seitennummer (Standard: 1) |
| limit | number | Nein | Einträge pro Seite (Standard: 50) |
| year | number | Nein | Nach Jahr filtern |
| month | number | Nein | Nach Monat filtern (1-12) |
Ticket-Zeitübersicht abrufen
GET /api/v1/boards/{boardId}/tickets/{ticketId}/time-entries/summaryGibt die gesamt erfasste Zeit eines Tickets zurück.
Ticket-Zeiteinträge auflisten
GET /api/v1/boards/{boardId}/tickets/{ticketId}/time-entriesBerechtigung erforderlich: time-tracking:view
Gibt alle Zeiteinträge für ein bestimmtes Ticket zurück.
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| page | number | Nein | Seitennummer (Standard: 1) |
| limit | number | Nein | Einträge pro Seite (Standard: 50) |
Ticket-Zeitübersicht mit Budget abrufen
GET /api/v1/boards/{boardId}/tickets/{ticketId}/time-entries/summary-with-budgetGibt die Zeitübersicht eines Tickets einschließlich Budget-Informationen zurück.