Zeiterfassung
Die TimeEntry-Entität repräsentiert Zeiteinträge in InLoox. Über die OData-API können Sie Zeiteinträge erstellen, aktualisieren, löschen sowie mit Dokumenten verknüpfen und aus Microsoft-Graph-Kalenderevents erzeugen.
Alle Endpunkte verwenden den Basispfad /odata/TimeEntry. Kommentare werden über /odata/TimeEntryComment verwaltet. Für die abgeflachte Listenansicht steht /odata/DynamicTimeEntry zur Verfügung, der alle Standardeigenschaften sowie benutzerdefinierte Felder zurückgibt.
Datenmodell
TimeEntry
| Property | Type | Description |
|---|---|---|
TimeEntryId | Guid (UUID) | Eindeutiger Bezeichner des Zeiteintrags (Primärschlüssel). |
DisplayName | string? | Anzeigename des Zeiteintrags. |
StartDateTime | DateTimeOffset? | Startdatum und -uhrzeit. |
EndDateTime | DateTimeOffset? | Enddatum und -uhrzeit. |
ProjectId | Guid? | Zugehöriges Projekt. |
DescriptionHTML | string? | Beschreibung als HTML. |
DescriptionText | string? | Beschreibung als Klartext. |
PhaseId | Guid? | Verknüpfte Planungsphase. |
IsBillable | boolean | Gibt an, ob der Zeiteintrag abrechenbar ist. |
PerformedByContactId | Guid | Kontakt-ID der Person, die die Arbeit ausgeführt hat. |
ColorFlag | int32? | Farbmarkierung (als Integer-Wert). |
GroupId | Guid | Gruppen-ID des Zeiteintrags. |
TaskItemId | Guid? | Verknüpfte Aufgabe. |
IsBilled | boolean | Gibt an, ob der Zeiteintrag bereits abgerechnet wurde. |
DurationMinutes | int32 | Dauer in Minuten. |
TimeEntryComment
| Property | Type | Description |
|---|---|---|
TimeEntryCommentId | Guid (UUID) | Eindeutiger Bezeichner des Kommentars. |
TimeEntryId | Guid | Zugehöriger Zeiteintrag. |
Comment | string? | Kommentartext (Klartext). |
CommentHtml | string? | Kommentartext (HTML). |
ShortDescription | string? | Kurzbeschreibung. |
CreateDateTime | DateTimeOffset | Erstellungszeitpunkt. |
CreatedByContactId | Guid | Ersteller des Kommentars. |
Endpunkte
CRUD-Operationen
/odata/TimeEntryAlle Zeiteinträge abrufen. Unterstützt OData-Abfrageparameter.
/odata/TimeEntryNeuen Zeiteintrag erstellen.
| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiTimeEntry> | ✅ | JSON-Objekt mit den Zeiteintragseigenschaften. |
/odata/TimeEntry({key})Einen einzelnen Zeiteintrag abrufen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
/odata/TimeEntry({key})Zeiteintrag teilweise aktualisieren.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
Body | Delta<ApiTimeEntry> | ✅ | JSON-Objekt mit den zu aktualisierenden Feldern. |
/odata/TimeEntry({key})Zeiteintrag löschen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
Das Löschen eines Zeiteintrags ist dauerhaft. Falls der Eintrag bereits abgerechnet wurde, stellen Sie sicher, dass Ihre Abrechnungsunterlagen entsprechend aktualisiert werden.
/odata/TimeEntry/$countGesamtanzahl aller Zeiteinträge abrufen.
Spezialfunktionen
/odata/TimeEntry/GetCalendarTimeEntriesForProject(projectId={projectId},take={take})Kalenderansicht der Zeiteinträge für ein Projekt abrufen.
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | Guid | ✅ | Die ProjectId. |
take | int32 | ✅ | Maximale Anzahl der zurückgegebenen Einträge. |
/odata/TimeEntry/CreateTimeEntryFromGraphEventEinen Zeiteintrag aus einem Microsoft-Graph-Kalenderevent erstellen.
| Parameter | Type | Required | Description |
|---|---|---|---|
Body | object | ✅ | JSON-Objekt mit den Graph-Event-Daten. |
/odata/TimeEntry({key})/CopyEinen Zeiteintrag kopieren.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId des zu kopierenden Eintrags. |
Body | object | ✅ | JSON-Objekt mit Kopieroptionen. |
/odata/TimeEntry({key})/CopyWithNewDatesEinen Zeiteintrag mit neuen Datumswerten kopieren.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId des zu kopierenden Eintrags. |
Body | object | ✅ | JSON-Objekt mit neuem Start- und Enddatum. |
Mit CreateTimeEntryFromGraphEvent können Sie Outlook-Kalendertermine direkt in Zeiteinträge umwandeln. Dies setzt eine aktive Microsoft-Graph-Integration voraus.
Dokumente
/odata/TimeEntry({key})/AddDocumentToTimeEntryEin Dokument mit dem Zeiteintrag verknüpfen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
Body | object | ✅ | JSON-Objekt mit der Dokument-ID. |
/odata/TimeEntry({key})/RemoveDocumentFromTimeEntryEin Dokument vom Zeiteintrag entfernen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
Body | object | ✅ | JSON-Objekt mit der Dokument-ID. |
Verknüpfungen
/odata/TimeEntry({key})/AddRelationEine Verknüpfung zum Zeiteintrag hinzufügen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
Body | object | ✅ | JSON-Objekt mit den Verknüpfungsdetails. |
/odata/TimeEntry({key})/RemoveRelationEine Verknüpfung vom Zeiteintrag entfernen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
Body | object | ✅ | JSON-Objekt mit der Verknüpfungs-ID. |
Notizen
/odata/TimeEntry({key})/AddNoteEine Notiz zum Zeiteintrag hinzufügen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryId. |
Body | object | ✅ | JSON-Objekt mit dem Notizinhalt. |
/odata/TimeEntry/DeleteNote(noteRelationId={noteRelationId})Eine Notiz vom Zeiteintrag löschen.
| Parameter | Type | Required | Description |
|---|---|---|---|
noteRelationId | Guid | ✅ | Die ID der Notizverknüpfung. |
TimeEntryComment-Endpunkte
/odata/TimeEntryCommentAlle Zeiteintragskommentare abrufen.
/odata/TimeEntryCommentNeuen Kommentar erstellen.
| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiTimeEntryComment> | ✅ | JSON-Objekt mit den Kommentardaten. |
/odata/TimeEntryComment({key})Einen einzelnen Kommentar abrufen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryCommentId. |
/odata/TimeEntryComment({key})Kommentar aktualisieren.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryCommentId. |
Body | Delta<ApiTimeEntryComment> | ✅ | JSON-Objekt mit den zu aktualisierenden Feldern. |
/odata/TimeEntryComment({key})Kommentar löschen.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | Die TimeEntryCommentId. |
/odata/TimeEntryComment/$countGesamtanzahl der Kommentare abrufen.
DynamicTimeEntry
Der Endpunkt /odata/DynamicTimeEntry bietet eine schreibgeschützte, abgeflachte Ansicht, die Daten aus Zeiteintrag, Projekt, Planung, Aufgabe und Berechtigungen zusammenführt. Alle Eigenschaften sind mit einem Präfix versehen (z. B. TimeEntry_DisplayName, Project_Name, TaskItem_Name).
/odata/DynamicTimeEntryAbgeflachte Zeiteintragsansicht mit Projekt-, Planungs- und Aufgabendaten abrufen.
/odata/DynamicTimeEntry/$countGesamtanzahl der DynamicTimeEntry-Einträge abrufen.
DynamicTimeEntry unterstützt ausschließlich GET-Anfragen. Zum Erstellen oder Bearbeiten verwenden Sie die regulären /odata/TimeEntry-Endpunkte.
OData-Abfragebeispiele
Zeiteinträge eines Projekts abrufen
GET /odata/TimeEntry?$filter=ProjectId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Abrechenbare, aber noch nicht abgerechnete Einträge
GET /odata/TimeEntry?$filter=IsBillable eq true and IsBilled eq false
Zeiteinträge eines bestimmten Zeitraums
GET /odata/TimeEntry?$filter=StartDateTime ge 2025-01-01T00:00:00Z and EndDateTime le 2025-01-31T23:59:59Z
Zeiteintrag erstellen
POST /odata/TimeEntry
Content-Type: application/json
{
"DisplayName": "Entwicklung API-Modul",
"ProjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"StartDateTime": "2025-01-15T09:00:00Z",
"EndDateTime": "2025-01-15T12:30:00Z",
"IsBillable": true,
"PerformedByContactId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"DurationMinutes": 210
}
Zeiteintrag als abgerechnet markieren
PATCH /odata/TimeEntry('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')
Content-Type: application/json
{
"IsBilled": true
}
Das Feld DurationMinutes wird serverseitig aus StartDateTime und EndDateTime berechnet. Sie können es auch manuell setzen, wenn Sie keine Start-/Endzeit angeben.