Zum Inhalt springen
Entwickler

Auf der Worktivity-API aufbauen

Eine REST-API für Zeiterfassung, Aktivitätsdaten, Projekte und Auszahlung.

Jeder Bildschirm in Worktivity läuft über dieselbe öffentliche API, die auch Sie erhalten. Authentifizieren Sie sich mit einem einzigen Schlüssel, senden Sie JSON und lesen Sie eine einheitliche Response-Struktur. Die Endpoints unten werden aus dem Livesystem erzeugt, mit Request- und Response-Beispielen in cURL, JavaScript, Python und PHP.

In jedem Tarif enthalten. Kein separates API-Abo.

Auf einen Blick

Alles, was Sie vor der ersten Anfrage brauchen.

Base URL
open-api.useworktivity.com
Authentifizierung
x_api_key
Query-Parameter
Rate Limits
5/Sek. · 100/Min. · 1000/Std.
Dokumentierte Endpoints
34
JSON rein: JSON raus

Authentifizierung

Jede Anfrage trägt den API-Schlüssel Ihrer Organisation als Query-String-Parameter. Es gibt keinen OAuth-Flow und keinen Bearer-Header, allein der Schlüssel begrenzt die Anfrage auf Ihre Organisation.

So erhalten Sie Ihren API-Schlüssel

  1. Melden Sie sich im Worktivity-Dashboard an.
  2. Öffnen Sie Organization → Settings → API Access.
  3. Klicken Sie auf Generate API Key.
  4. Kopieren Sie den Schlüssel und legen Sie ihn in Ihrem serverseitigen Secret Manager ab.

Den Schlüssel serverseitig halten

Der Schlüssel gewährt vollen Lese- und Schreibzugriff auf die Daten Ihrer Organisation. Liefern Sie ihn niemals in Browser-JavaScript, einem Mobile-Bundle oder einem öffentlichen Repository aus. Sollte er nach außen gelangen, erneuern Sie ihn im selben Bildschirm.

Eine erste Anfrage

Diese Anfrage listet die Mitarbeitenden Ihrer Organisation. Alle anderen Endpoints folgen demselben Aufbau.

cURL
curl -X POST "https://open-api.useworktivity.com/Employee/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "SearchTerm": "",
  "Page": 1,
  "PageSize": 15,
  "IncludeUsers": true
}'

Response-Format

Jeder Endpoint liefert dieselbe Struktur zurück. Prüfen Sie HasError, bevor Sie Data lesen, auch bei behandelten Validierungsfehlern lautet der HTTP-Status 200.

Erfolgreiche Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}

Validierungsfehler

JSON
{
  "HasError": true,
  "Message": "Validation failed",
  "ValidationErrors": [
    {
      "Key": "Email",
      "Value": "Email is required"
    },
    {
      "Key": "FirstName",
      "Value": "First name is required"
    }
  ],
  "Data": null
}

ValidationErrors ist eine flache Liste aus Feld-Meldung-Paaren. Bei Erfolg ist sie leer, niemals null.

HTTP-Statuscodes

  • 200Anfrage verarbeitet. Lesen Sie HasError, um Erfolg von einem Validierungsfehler zu unterscheiden.
  • 400Fehlerhafte Anfrage, meist ungültiges JSON oder ein falscher Parametertyp.
  • 401Fehlender, abgelaufener oder widerrufener API-Schlüssel.
  • 403Der Schlüssel ist gültig, die Organisation hat aber keinen Zugriff auf diese Ressource.
  • 404Der Endpoint-Pfad existiert nicht.
  • 429Rate Limit überschritten. Warten Sie die angegebene Zeit ab und versuchen Sie es erneut.
  • 500Unerwarteter Serverfehler. Ein erneuter Versuch mit exponentiellem Backoff ist unbedenklich.

Rate Limits

Die Limits gelten je API-Schlüssel und in drei Zeitfenstern gleichzeitig. Wird eines davon überschritten, folgt ein 429 mit dem verbleibenden Kontingent für alle drei.

Header in jeder Response

Lesen Sie diese Werte, statt selbst mitzuzählen, sie berücksichtigen Wiederholungen und parallele Prozesse.

HTTP
X-RateLimit-Limit-Second: 5
X-RateLimit-Limit-Minute: 100
X-RateLimit-Limit-Hour: 1000

X-RateLimit-Remaining-Second: 4
X-RateLimit-Remaining-Minute: 87
X-RateLimit-Remaining-Hour: 943

X-RateLimit-Reset-Second: 1767182101
X-RateLimit-Reset-Minute: 1767182160
X-RateLimit-Reset-Hour: 1767184800

Wenn Sie das Limit erreichen

Rate Limit überschritten. Warten Sie die angegebene Zeit ab und versuchen Sie es erneut.

JSON
{
  "HasError": true,
  "Message": "Rate limit exceeded. Maximum 5 requests per second, 100 per minute, 1000 per hour.",
  "Data": {
    "RateLimits": {
      "PerSecond": {
        "Limit": 5,
        "Remaining": 0,
        "ResetAt": "2026-01-31T12:34:57+00:00"
      },
      "PerMinute": {
        "Limit": 100,
        "Remaining": 23,
        "ResetAt": "2026-01-31T12:35:00+00:00"
      },
      "PerHour": {
        "Limit": 1000,
        "Remaining": 456,
        "ResetAt": "2026-01-31T13:00:00+00:00"
      }
    },
    "RetryAfter": 1
  }
}

Unter dem Limit bleiben

  • Bei 429 anhand des RetryAfter-Werts erneut anfragen, danach mit exponentiellem Backoff.
  • Listen mit PageSize durchblättern, statt einzelne Datensätze nacheinander abzurufen.
  • Definition/ListEnums und Definition/ListTimezones zwischenspeichern, sie ändern sich selten.
  • Mit CreatedAfter planmäßig abfragen, statt ganze Zeiträume erneut zu lesen.

Endpoint-Referenz

Nach Ressource gruppiert. Die Pfade sind relativ zur Base URL, und jede Anfrage braucht den API-Schlüssel im Query-String.

Definitionen

Schlagen Sie Enum-Werte und Zeitzonen nach, bevor Sie etwas anderes senden. Beide Endpoints sind cachebar.

GET/Definition/ListEnums

Enums auflisten

Liefert jede von der API verwendete Enumeration mit numerischem Wert und Anzeigenamen, Datumsfilter, Rollen, Aufgabenstatus, Rechnungsstatus und mehr. Speichern Sie das Ergebnis zwischen; es ändert sich nur mit einem Release.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.

Request

cURL
curl -X GET "https://open-api.useworktivity.com/Definition/ListEnums?x_api_key=YOUR_API_KEY"

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "DateFilterTypes": [
      {
        "Value": 1,
        "DisplayName": "Today"
      },
      {
        "Value": 10,
        "DisplayName": "Custom date"
      }
    ],
    "EmployeeRoles": [
      {
        "Value": 2,
        "DisplayName": "Owner"
      },
      {
        "Value": 5,
        "DisplayName": "Employee"
      }
    ],
    "ProjectTaskStatuses": [
      {
        "Value": 0,
        "DisplayName": "Todo"
      },
      {
        "Value": 6,
        "DisplayName": "In progress"
      }
    ]
  }
}
GET/Definition/ListTimezones

Zeitzonen auflisten

Liefert die unterstützten Zeitzonen mit UTC-Abweichung und Angaben zur Sommerzeit. Alle API-Zeitstempel sind UTC. Nutzen Sie dies für die Anzeige lokaler Zeiten.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.

Request

cURL
curl -X GET "https://open-api.useworktivity.com/Definition/ListTimezones?x_api_key=YOUR_API_KEY"

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "Id": "Europe/Istanbul",
        "DisplayName": "Istanbul (GMT+03:00)",
        "BaseUtcOffset": "+03:00:00",
        "SupportsDaylightSavingTime": false
      }
    ]
  }
}

Mitarbeitende

Personen in Ihrer Organisation anlegen, aktualisieren, sperren und entfernen sowie offene Einladungen erneut versenden.

POST/Employee/List

Mitarbeitende auflisten

Liefert eine paginierte Liste der Mitarbeitenden. Setzen Sie IncludeUsers, um Namen und E-Mail-Adressen zu erhalten. Diese liegen im verknüpften Nutzerdatensatz, nicht im Mitarbeiterdatensatz.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdsoptionalstring[]BodyAuf eine bestimmte Menge von Mitarbeiter-IDs begrenzen.
IsBlockedoptionalbooleanBodyNach Sperrstatus filtern. Weglassen, um beide einzuschließen.
RegisteredoptionalbooleanBodyNur Mitarbeitende, die ihre Einladung angenommen haben.
IncludeUsersoptionalbooleanBodyDen verknüpften Nutzerdatensatz mit Name und E-Mail anhängen.
IncludeTeamsoptionalbooleanBodyJeder Person den vollständigen Teamdatensatz anhängen.
IncludeTodayClockInsoptionalbooleanBodyDas heutige Einstempel-Protokoll je Person anhängen.
CreatedAfteroptionaldatetimeBodyNur Datensätze, die nach diesem UTC-Zeitstempel erstellt wurden. Für inkrementelle Synchronisierung.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Employee/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "SearchTerm": "john",
  "Page": 1,
  "PageSize": 15,
  "TeamId": "",
  "IsBlocked": false,
  "IncludeUsers": true,
  "IncludeTeams": true
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1b2c",
        "UserId": "65f1c0a3b8d4e21f9c0a1b30",
        "TeamId": "65f1c0a3b8d4e21f9c0a1b40",
        "OrganizationId": "65f1c0a3b8d4e21f9c0a1b50",
        "Role": 5,
        "IsActive": true,
        "Blocked": false,
        "EmployeeCode": "EMP-014",
        "PayRate": 25,
        "BillRate": 45,
        "EnableScreenshots": true,
        "ScreenCaptureIntervalMins": 5,
        "CreateDate": "2026-01-15T10:30:00Z",
        "User": {
          "ID": "65f1c0a3b8d4e21f9c0a1b30",
          "FirstName": "John",
          "LastName": "Doe",
          "Email": "john.doe@example.com"
        }
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/Employee/Create

Mitarbeitende anlegen

Legt eine Person an und versendet eine Einladung per E-Mail. Der Platz zählt ab der Anlage, nicht erst ab Annahme der Einladung.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
FirstNameerforderlichstringBodyVorname.
LastNameerforderlichstringBodyNachname.
EmailerforderlichstringBodyDienstliche E-Mail-Adresse. Die Einladung geht hierhin und sie muss eindeutig sein.
TeamIderforderlichstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
RoleerforderlichenumTypeOfAuthorityBodyZugriffsebene innerhalb der Organisation.
EmployeeCodeoptionalstringBodyIhre eigene Referenz aus Auszahlung oder Personalwesen für diese Person.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Employee/Create?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "FirstName": "Jane",
  "LastName": "Smith",
  "Email": "jane.smith@example.com",
  "TeamId": "65f1c0a3b8d4e21f9c0a1b40",
  "Role": 5,
  "EmployeeCode": "EMP-015"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}
POST/Employee/Update

Mitarbeitende aktualisieren

Aktualisiert Stammdaten, Team und Rolle. Stunden- und Abrechnungssätze gehören nicht zu diesem Payload. Sie werden über den Endpoint für Kosteneinstellungen verwaltet.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
EmployeeIderforderlichstringBodyID der Person, auf die sich die Aktion bezieht.
FirstNameerforderlichstringBodyVorname.
LastNameerforderlichstringBodyNachname.
EmailerforderlichstringBodyDienstliche E-Mail-Adresse. Die Einladung geht hierhin und sie muss eindeutig sein.
TeamIderforderlichstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
RoleerforderlichenumTypeOfAuthorityBodyZugriffsebene innerhalb der Organisation.
EmployeeCodeoptionalstringBodyIhre eigene Referenz aus Auszahlung oder Personalwesen für diese Person.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Employee/Update?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
  "FirstName": "John",
  "LastName": "Doe",
  "Email": "john.doe@example.com",
  "TeamId": "65f1c0a3b8d4e21f9c0a1b40",
  "Role": 4,
  "EmployeeCode": "EMP-014"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}
POST/Employee/Block

Mitarbeitende sperren

Sperrt eine Person. Ihre Desktop-App erfasst nichts mehr und der Dashboard-Zugriff entfällt, historische Daten und Berichte bleiben jedoch erhalten.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IderforderlichstringBodyID der zu sperrenden Person.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Employee/Block?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "65f1c0a3b8d4e21f9c0a1b2c"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}
POST/Employee/ResendInvitation

Einladung erneut senden

Sendet die Einladungs-E-Mail erneut an eine Person, die sich noch nicht registriert hat.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
EmployeeIderforderlichstringBodyID der Person, auf die sich die Aktion bezieht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Employee/ResendInvitation?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}
POST/Employee/Delete

Mitarbeitende löschen

Entfernt eine Person dauerhaft. Als Bestätigungsschritt ist das Passwort des Kontoinhabers erforderlich, genau wie im Dashboard.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
EmployeeIderforderlichstringBodyID der Person, auf die sich die Aktion bezieht.
PassworderforderlichstringBodyDas Passwort des Kontoinhabers, erforderlich zur Bestätigung einer unwiderruflichen Aktion.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Employee/Delete?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
  "Password": "account-owner-password"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}

Teams

Teams gruppieren Mitarbeitende und dienen in nahezu jedem Bericht als Filterdimension.

POST/Team/List

Teams auflisten

Liefert Teams mit ihrer Farbe und auf Wunsch mit der Anzahl der Mitarbeitenden je Team.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
TeamIdsoptionalstring[]BodyDem Projekt zugewiesene Teams.
IncludeEmployeeCountoptionalbooleanBodyDie Anzahl der Mitarbeitenden je Team ergänzen.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Team/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "SearchTerm": "",
  "Page": 1,
  "PageSize": 15,
  "IncludeEmployeeCount": true
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1b40",
        "Title": "Engineering",
        "Color": "#8b4dff",
        "OrganizationId": "65f1c0a3b8d4e21f9c0a1b50",
        "EmployeeCount": 12,
        "CreateDate": "2026-01-02T09:00:00Z"
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/Team/AddOrUpdate

Team anlegen oder aktualisieren

Senden Sie eine leere Id, um ein Team anzulegen, oder eine bestehende Id, um es umzubenennen oder umzufärben.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IdoptionalstringBodyLeer lassen, um ein Team anzulegen, oder eine bestehende ID übergeben, um es zu aktualisieren.
TitleerforderlichstringBodyTeamname.
ColoroptionalstringBodySiebenstelliger Hex-Farbwert inklusive führendem Rautezeichen, zum Beispiel #8b4dff.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Team/AddOrUpdate?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "",
  "Title": "Design",
  "Color": "#54a8c7"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Item": {
      "ID": "65f1c0a3b8d4e21f9c0a1b41",
      "Title": "Design",
      "Color": "#54a8c7"
    }
  }
}
POST/Team/Delete

Team löschen

Löscht ein Team. Die Mitarbeitenden werden nicht gelöscht, weisen Sie sie vorher neu zu, sonst bleiben sie ohne Team.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IderforderlichstringBodyID des zu löschenden Teams.
PassworderforderlichstringBodyDas Passwort des Kontoinhabers, erforderlich zur Bestätigung einer unwiderruflichen Aktion.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Team/Delete?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "65f1c0a3b8d4e21f9c0a1b41",
  "Password": "account-owner-password"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}

Zeiterfassung

Stundenzettel, manuelle Zeiteinträge und der rohe Aktivitätsstrom, den die Desktop-App erfasst.

POST/Timesheet/List

Stundenzettel abrufen

Liefert eine Tag-für-Tag-Aufschlüsselung der Arbeits-, Pausen- und inaktiven Minuten für den gewählten Bereich. Anders als die übrigen Listen-Endpoints ist dieser nicht paginiert; grenzen Sie ihn stattdessen über den Zeitraum ein.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Timesheet/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "TeamId": "",
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
  "DateFilter": 5,
  "StartDate": null,
  "EndDate": null
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Timesheet": [
      {
        "StartDate": "2026-01-15T00:00:00Z",
        "GetWorkTimesInsightsQueryResult": {
          "Items": [
            {
              "ID": "65f1c0a3b8d4e21f9c0a1b2c",
              "TotalMins": 510,
              "Working": 468,
              "OnBreak": 30,
              "Idle": 12,
              "Productive": 402,
              "Natural": 44,
              "Unproductive": 22,
              "ActivityLevel": 71,
              "ClockIn": "2026-01-15T08:58:00Z",
              "ClockOut": "2026-01-15T17:32:00Z"
            }
          ]
        }
      }
    ]
  }
}
POST/Timesheet/Export

Stundenzettel exportieren

Erzeugt dieselben Daten als Tabelle und liefert eine Download-URL in Data. Der Link ist temporär.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Timesheet/Export?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "TeamId": "",
  "EmployeeId": "",
  "DateFilter": 5
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": "https://worktivity.b-cdn.net/exports/timesheet-2026-01.xlsx"
}
POST/TimeEntry/List

Zeiteinträge auflisten

Liefert manuell eingereichte Zeiteinträge mit Genehmigungsstatus, angegebenem Grund und einer etwaigen Ablehnungsnotiz.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
StatusoptionalenumTimeEntryStatusBodyNach Genehmigungsstatus filtern. Weglassen, um alle Status zurückzugeben.
IncludeEmployeesoptionalbooleanBodyJeder zurückgegebenen Zeile den Mitarbeiterdatensatz anhängen.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/TimeEntry/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Page": 1,
  "PageSize": 15,
  "EmployeeId": "",
  "TeamId": "",
  "DateFilter": 4,
  "Status": 0,
  "IncludeEmployees": true
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1c10",
        "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
        "Status": 0,
        "StartDate": "2026-01-15T09:00:00Z",
        "EndDate": "2026-01-15T17:00:00Z",
        "TotalMinutes": 480,
        "LogStatus": 1,
        "ProductivityStatus": 1,
        "Reason": "Forgot to clock in",
        "ProjectId": "65f1c0a3b8d4e21f9c0a1d00",
        "ProjectTaskId": "65f1c0a3b8d4e21f9c0a1d10"
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/TimeEntry/Create

Zeiteintrag anlegen

Fügt einen manuellen Eintrag im Namen einer Person hinzu, nützlich bei Offline-Arbeit oder vergessenem Einstempeln. Der Eintrag startet als Pending, sofern die automatische Genehmigung nicht aktiv ist.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
EmployeeIderforderlichstringBodyID der Person, auf die sich die Aktion bezieht.
StartDateerforderlichdatetimeBodyBeginn der Arbeit, in UTC.
EndDateerforderlichdatetimeBodyEnde der Arbeit, in UTC.
ProjectIdoptionalstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
ProjectTaskIdoptionalstringBodyAuf eine Aufgabe begrenzen. Ein leerer String bedeutet alle Aufgaben.
ReasonerforderlichstringBodyWarum der Eintrag hinzugefügt wird. Wird der genehmigenden Person angezeigt.
LogStatuserforderlichenumEmployeeActivityLogStatusBodyWie die Zeit eingestuft werden soll, Arbeit, Pause oder inaktiv.
ProductivityStatuserforderlichenumProductivityStatusBodyProduktivitätseinstufung für den Eintrag.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/TimeEntry/Create?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
  "StartDate": "2026-01-15T09:00:00Z",
  "EndDate": "2026-01-15T17:00:00Z",
  "ProjectId": "65f1c0a3b8d4e21f9c0a1d00",
  "ProjectTaskId": "",
  "Reason": "Offline work on the migration script",
  "LogStatus": 1,
  "ProductivityStatus": 1
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}
POST/TimeEntry/Approve

Zeiteintrag genehmigen

Genehmigt einen offenen Eintrag, sodass seine Minuten in Stundenzettel und Auszahlung einfließen.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IderforderlichstringBodyID des Zeiteintrags, auf den sich die Aktion bezieht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/TimeEntry/Approve?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "65f1c0a3b8d4e21f9c0a1c10"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}
POST/TimeEntry/Reject

Zeiteintrag ablehnen

Lehnt einen offenen Eintrag ab. Der Grund wird der Person in ihrem Dashboard angezeigt.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IderforderlichstringBodyID des Zeiteintrags, auf den sich die Aktion bezieht.
RejectionReasonerforderlichstringBodyErläuterung, die der Person bei Ablehnung eines Antrags angezeigt wird.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/TimeEntry/Reject?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "65f1c0a3b8d4e21f9c0a1c10",
  "RejectionReason": "Overlaps an approved entry"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}
POST/ActivityLogs/List

Aktivitätsprotokolle auflisten

Der rohe Strom je Intervall, erfasst von der Desktop-App: aktive Anwendung, Produktivitätseinstufung, Aktivitätslevel und Screenshot-Referenz. Dies ist der Endpoint mit dem höchsten Volumen, blättern Sie ihn mit CreatedAfter durch.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
ProjectIdoptionalstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
ProjectTaskIdoptionalstringBodyAuf eine Aufgabe begrenzen. Ein leerer String bedeutet alle Aufgaben.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
ActivityLogStatusoptionalenumEmployeeActivityLogStatusBodyDen Strom nach einem einzelnen Aktivitätsstatus filtern.
HasScreenshotoptionalbooleanBodyNur Intervalle mit oder ohne Screenshot.
ShowOnlyIdleoptionalbooleanBodyNur inaktive Intervalle zurückgeben.
IncludeEmployeesoptionalbooleanBodyJeder zurückgegebenen Zeile den Mitarbeiterdatensatz anhängen.
IncludeOrganizationAppsoptionalbooleanBodyAnwendungsdetails inklusive Name und Symbol anhängen.
CreatedAfteroptionaldatetimeBodyNur Datensätze, die nach diesem UTC-Zeitstempel erstellt wurden. Für inkrementelle Synchronisierung.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/ActivityLogs/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Page": 1,
  "PageSize": 50,
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
  "DateFilter": 1,
  "HasScreenshot": true,
  "IncludeOrganizationApps": true
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1e00",
        "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
        "Title": "Visual Studio Code",
        "Status": 1,
        "Productivity": 1,
        "ActivityLevel": 78,
        "CreateDate": "2026-01-15T14:30:00Z",
        "Screenshot": "https://worktivity.b-cdn.net/...?X-Amz-Expires=172800",
        "LinkExpireDate": "2026-01-17T14:30:00Z",
        "OrganizationApp": {
          "ID": "65f1c0a3b8d4e21f9c0a1e10",
          "ActivityApp": {
            "Title": "Visual Studio Code"
          }
        }
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}

Projekte und Aufgaben

Projekte, deren Aufgaben und die Kunden, denen sie in Rechnung gestellt werden.

POST/Project/List

Projekte auflisten

Liefert Projekte mit den zugewiesenen Teams und Mitarbeitenden, dem Budget und den Notizen.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
CustomerIdoptionalstringBodyAuf einen Kunden begrenzen. Ein leerer String bedeutet alle Kunden.
CreatedAfteroptionaldatetimeBodyNur Datensätze, die nach diesem UTC-Zeitstempel erstellt wurden. Für inkrementelle Synchronisierung.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Project/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "SearchTerm": "",
  "Page": 1,
  "PageSize": 15,
  "TeamId": "",
  "CustomerId": ""
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1d00",
        "Title": "Website Redesign",
        "Color": "#8b4dff",
        "CustomerId": "65f1c0a3b8d4e21f9c0a1f00",
        "TeamIds": [
          "65f1c0a3b8d4e21f9c0a1b40"
        ],
        "EmployeeIds": [
          "65f1c0a3b8d4e21f9c0a1b2c"
        ],
        "TotalBudget": 25000,
        "Notes": "Phase two",
        "CreateDate": "2026-01-04T08:00:00Z"
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/Project/AddUpdateProject

Projekt anlegen oder aktualisieren

Senden Sie eine leere Id, um anzulegen. Die Farbe ist ein siebenstelliger Hex-Wert inklusive führendem Rautezeichen, und sowohl TeamIds als auch EmployeeIds müssen übergeben werden.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IdoptionalstringBodyLeer lassen, um ein Projekt anzulegen, oder eine bestehende ID übergeben, um es zu aktualisieren.
TitleerforderlichstringBodyProjektname, bis zu 100 Zeichen.
ColorerforderlichstringBodySiebenstelliger Hex-Farbwert inklusive führendem Rautezeichen, zum Beispiel #8b4dff.
CustomerIdoptionalstringBodyAuf einen Kunden begrenzen. Ein leerer String bedeutet alle Kunden.
TeamIdserforderlichstring[]BodyDem Projekt zugewiesene Teams.
EmployeeIdserforderlichstring[]BodyDem Projekt zugewiesene Mitarbeitende.
NotesoptionalstringBodyInterne Notiz zum Projekt, bis zu 500 Zeichen.
TotalBudgetoptionaldecimalBodyBudget des Projekts in der Währung Ihrer Organisation.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Project/AddUpdateProject?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "",
  "Title": "Mobile App v2",
  "Color": "#45c4a0",
  "CustomerId": "65f1c0a3b8d4e21f9c0a1f00",
  "TeamIds": [
    "65f1c0a3b8d4e21f9c0a1b40"
  ],
  "EmployeeIds": [
    "65f1c0a3b8d4e21f9c0a1b2c"
  ],
  "Notes": "Kickoff in February",
  "TotalBudget": 40000
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Item": {
      "ID": "65f1c0a3b8d4e21f9c0a1d01",
      "Title": "Mobile App v2"
    }
  }
}
POST/Project/ListTasks

Aufgaben auflisten

Liefert die Aufgaben eines Projekts mit Status, Priorität, zugewiesenen Personen und Fälligkeitsdatum.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
ProjectIdoptionalstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
ExcludeTimeTrackedoptionalbooleanBodyAufgaben auslassen, auf die bereits Zeit erfasst wurde.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Project/ListTasks?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "ProjectId": "65f1c0a3b8d4e21f9c0a1d00",
  "Page": 1,
  "PageSize": 50
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1d10",
        "ProjectId": "65f1c0a3b8d4e21f9c0a1d00",
        "Title": "Design the homepage",
        "Details": "Initial mockups for desktop and mobile",
        "Status": 6,
        "Priority": 2,
        "OrderNo": 1,
        "AssigneeIds": [
          "65f1c0a3b8d4e21f9c0a1b2c"
        ],
        "DueDate": "2026-01-25T00:00:00Z",
        "NonBillable": false
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/Project/AddUpdateTask

Aufgabe anlegen oder aktualisieren

Senden Sie eine leere Id, um anzulegen. Source hält fest, woher die Aufgabe stammt. Nutzen Sie ExternalTaskId, um sie mit einem Vorgang in Ihrem eigenen Tracker verknüpft zu halten.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IdoptionalstringBodyLeer lassen, um eine Aufgabe anzulegen, oder eine bestehende ID übergeben, um sie zu aktualisieren.
ProjectIderforderlichstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
TitleerforderlichstringBodyAufgabentitel, bis zu 500 Zeichen.
DetailsoptionalstringBodyAufgabenbeschreibung, bis zu 5000 Zeichen.
SourceerforderlichenumProjectTaskSourceBodyWoher die Aufgabe stammt, manuelle Eingabe oder eine Integration.
OrderNoerforderlichintegerBodyPosition innerhalb des Projekt-Boards.
AssigneeIdserforderlichstring[]BodyDer Aufgabe zugewiesene Mitarbeitende.
StatuserforderlichenumProjectTaskStatusBodyBoard-Spalte, in der die Aufgabe liegt.
PriorityoptionalenumProjectTaskPriorityBodyPriorität der Aufgabe.
DueDateoptionaldatetimeBodyFälligkeitsdatum in UTC, ISO 8601.
NonBillableoptionalbooleanBodyErfasste Zeit auf dieser Aufgabe von der Abrechnung ausnehmen.
ExternalTaskIdoptionalstringBodyIhre eigene Kennung, um die Aufgabe mit einem externen Tracker verknüpft zu halten.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Project/AddUpdateTask?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "",
  "ProjectId": "65f1c0a3b8d4e21f9c0a1d00",
  "Title": "Wire up the pricing page",
  "Details": "Use the new plan matrix",
  "Source": 0,
  "OrderNo": 4,
  "AssigneeIds": [
    "65f1c0a3b8d4e21f9c0a1b2c"
  ],
  "Status": 0,
  "Priority": 2,
  "DueDate": "2026-02-10T00:00:00Z",
  "NonBillable": false
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Item": {
      "ID": "65f1c0a3b8d4e21f9c0a1d11",
      "Title": "Wire up the pricing page"
    }
  }
}
POST/Project/ListCustomers

Kunden auflisten

Liefert die Kunden, denen Projekte in Rechnung gestellt werden. Erforderlich, wenn Sie ein Projekt mit einer CustomerId anlegen.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
IncludeTrackStatisticsoptionalbooleanBodySummen der erfassten Zeit je Kunde ergänzen.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Project/ListCustomers?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "SearchTerm": "",
  "Page": 1,
  "PageSize": 15
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1f00",
        "Title": "ABC Company",
        "CreateDate": "2025-11-20T12:00:00Z"
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}

Erkenntnisse

Aggregierte Kennzahlen zu Produktivität, Arbeitszeit und App-Nutzung für ein Team, eine Person oder ein Projekt.

POST/Insights/Productivity

Produktivitäts-Erkenntnisse

Summen je Person für Arbeits-, Pausen- und inaktive Minuten, aufgeteilt nach Produktivitätseinstufung, dazu die Abweichung von den erwarteten Arbeitsstunden. Angaben in Minuten, nicht in Sekunden.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
ProjectIdoptionalstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
ProjectTaskIdoptionalstringBodyAuf eine Aufgabe begrenzen. Ein leerer String bedeutet alle Aufgaben.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Insights/Productivity?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "TeamId": "",
  "EmployeeId": "",
  "DateFilter": 5
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1b2c",
        "TotalMins": 9600,
        "Working": 8820,
        "OnBreak": 540,
        "Idle": 240,
        "Productive": 7420,
        "Natural": 940,
        "Unproductive": 460,
        "ActivityLevel": 74,
        "ExpectedWorkHoursDiff": -180,
        "Status": 1,
        "Productivity": 1,
        "Employee": {
          "Id": "65f1c0a3b8d4e21f9c0a1b2c",
          "FirstName": "John"
        }
      }
    ]
  }
}
POST/Insights/WorkTimes

Erkenntnisse zur Arbeitszeit

Verhalten beim Ein- und Ausstempeln im gewählten Zeitraum, einschließlich verspäteten Einstempelns. Grenzen Sie es über Aktivitätsstatus oder Produktivitätsklasse ein.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
ProjectIdoptionalstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
ProjectTaskIdoptionalstringBodyAuf eine Aufgabe begrenzen. Ein leerer String bedeutet alle Aufgaben.
WorkNoteoptionalstringBodyNach der Notiz filtern, die eine Person an ihre Arbeit gehängt hat.
Statusesoptionalenum[]EmployeeActivityLogStatusBodyEinzuschließende Aktivitätsstatus. Eine leere Liste bedeutet alle.
ProductivityStatusesoptionalenum[]ProductivityStatusBodyEinzuschließende Produktivitätseinstufungen. Eine leere Liste bedeutet alle.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Insights/WorkTimes?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "TeamId": "",
  "EmployeeId": "",
  "Statuses": [
    1,
    3
  ],
  "ProductivityStatuses": [],
  "DateFilter": 4
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1b2c",
        "TotalMins": 2400,
        "Working": 2180,
        "Idle": 120,
        "OnBreak": 100,
        "ClockIn": "2026-01-15T08:58:00Z",
        "ClockOut": "2026-01-15T17:32:00Z",
        "LateClockInCount": 1
      }
    ]
  }
}
POST/Insights/AppsSummary

Zusammenfassung der App-Nutzung

Aufgewendete Zeit je Anwendung im gewählten Bereich, mit Produktivitätseinstufung und Symbol der jeweiligen Anwendung.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
ProjectIdoptionalstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
ProjectTaskIdoptionalstringBodyAuf eine Aufgabe begrenzen. Ein leerer String bedeutet alle Aufgaben.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Insights/AppsSummary?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "TeamId": "",
  "EmployeeId": "",
  "DateFilter": 5
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1e10",
        "TotalMins": 1200,
        "Productive": 980,
        "Natural": 160,
        "Unproductive": 60,
        "ActivityApp": {
          "Title": "Visual Studio Code",
          "Icon": "https://worktivity.b-cdn.net/worktivity-public/apps/vscode.png"
        }
      }
    ]
  }
}

Screenshots und Timelapse

Aufgenommene Screenshots und erzeugte Timelapse-Videos. Die Medien-URLs sind vorsigniert und laufen ab.

POST/Screenshots/List

Screenshots auflisten

Liefert die aufgenommenen Screenshots. Das Feld Screenshot enthält eine vorsignierte URL, die abläuft. Prüfen Sie LinkExpireDate und fragen Sie neu an, statt die URL zu speichern.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
HasScreenshotoptionalbooleanBodyNur Intervalle mit oder ohne Screenshot.
IncludeEmployeesoptionalbooleanBodyJeder zurückgegebenen Zeile den Mitarbeiterdatensatz anhängen.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Screenshots/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Page": 1,
  "PageSize": 50,
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
  "DateFilter": 1,
  "HasScreenshot": true
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1e00",
        "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
        "Screenshot": "https://worktivity.b-cdn.net/...?X-Amz-Expires=172800",
        "LinkExpireDate": "2026-01-17T14:30:00Z",
        "ObjectKey": "screenshots/2026/01/15/abc.jpg",
        "Status": 1,
        "CreateDate": "2026-01-15T14:30:00Z"
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/Screenshots/Delete

Screenshot löschen

Löscht einen einzelnen Screenshot und das gespeicherte Objekt dauerhaft. Der zugehörige Eintrag im Aktivitätsprotokoll bleibt erhalten.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IderforderlichstringBodyID des zu löschenden Screenshots.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/Screenshots/Delete?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "65f1c0a3b8d4e21f9c0a1e00"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": true
}
POST/TimelapseVideos/List

Timelapse-Videos auflisten

Liefert erzeugte Timelapse-Videos mit Vorschaubild, Video-URL und Dateigröße. Beide URLs sind vorsigniert und laufen ab.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
DateFilteroptionalenumDateFilterTypeBodyVordefinierter Zeitraum. Senden Sie 10 (Custom), um StartDate und EndDate zu nutzen.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
TimelapseVideoIdsoptionalstring[]BodyAuf eine bestimmte Menge von Video-IDs begrenzen.
IncludeEmployeesoptionalbooleanBodyJeder zurückgegebenen Zeile den Mitarbeiterdatensatz anhängen.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/TimelapseVideos/List?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Page": 1,
  "PageSize": 20,
  "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
  "DateFilter": 4,
  "IncludeEmployees": true
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1e50",
        "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
        "Url": "https://worktivity.b-cdn.net/...thumb.jpg",
        "VideoUrl": "https://worktivity.b-cdn.net/...timelapse.mp4",
        "Filename": "2026-01-15-john-doe.mp4",
        "FileSizeMb": 18.4,
        "LinkExpireDate": "2026-01-17T14:30:00Z",
        "CreateDate": "2026-01-15T18:00:00Z"
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}

Kostenmanagement

Summen für die Auszahlung aus erfasster Zeit und Stundensätzen, dazu Kundenrechnungen.

POST/CostManagement/Payroll

Auszahlung berechnen

Liefert erfasste Minuten, durchschnittlichen Stundensatz und den zahlbaren Betrag je Person für einen ausdrücklich angegebenen Zeitraum. Filtern Sie nach Aktivitätsstatus, um inaktive Zeit oder Pausen auszuschließen.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
ProjectIdoptionalstringBodyAuf ein Projekt begrenzen. Ein leerer String bedeutet alle Projekte.
ProjectTaskIdoptionalstringBodyAuf eine Aufgabe begrenzen. Ein leerer String bedeutet alle Aufgaben.
Statusesoptionalenum[]EmployeeActivityLogStatusBodyEinzuschließende Aktivitätsstatus. Eine leere Liste bedeutet alle.
ProductivityStatusesoptionalenum[]ProductivityStatusBodyEinzuschließende Produktivitätseinstufungen. Eine leere Liste bedeutet alle.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/CostManagement/Payroll?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "TeamId": "",
  "EmployeeId": "",
  "Statuses": [
    1
  ],
  "StartDate": "2026-01-01T00:00:00Z",
  "EndDate": "2026-01-31T23:59:59Z"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1b2c",
        "TotalMins": 9600,
        "TotalSpent": 4000,
        "AvgPayRate": 25,
        "TotalPayable": 4000,
        "Employee": {
          "Id": "65f1c0a3b8d4e21f9c0a1b2c",
          "FirstName": "John",
          "LastName": "Doe"
        }
      }
    ]
  }
}
POST/CostManagement/ListInvoices

Rechnungen auflisten

Liefert Kundenrechnungen mit Status, Gesamtbetrag und Fälligkeitsdatum.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
CustomerIdoptionalstringBodyAuf einen Kunden begrenzen. Ein leerer String bedeutet alle Kunden.
StatusoptionalenumOrganizationCustomerInvoiceStatusBodyNach Rechnungsstatus filtern. Weglassen, um alle Status zurückzugeben.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/CostManagement/ListInvoices?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Page": 1,
  "PageSize": 15,
  "CustomerId": "",
  "Status": 2
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a1f50",
        "Title": "INV-2026-001",
        "CustomerId": "65f1c0a3b8d4e21f9c0a1f00",
        "Status": 2,
        "Total": 5000,
        "DueDate": "2026-02-15T00:00:00Z",
        "CreateDate": "2026-01-15T00:00:00Z"
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}

Abwesenheitsverwaltung

Urlaubsansprüche, Abwesenheitsanträge und Genehmigungsaktionen.

POST/LeaveManagement/ListLeaveRights

Urlaubsansprüche auflisten

Liefert den Anspruch jeder Person nach Abwesenheitsart, mit genommenen und verbleibenden Tagen.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
TypeoptionalenumLeaveRightTypeBodyAbwesenheitsart, etwa Urlaub oder Krankheit.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/LeaveManagement/ListLeaveRights?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Page": 1,
  "PageSize": 15,
  "TeamId": "",
  "EmployeeId": ""
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a2a00",
        "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
        "Type": 1,
        "TotalDays": 20,
        "UsedDays": 6,
        "RemainingDays": 14
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/LeaveManagement/ListLeaveRequests

Abwesenheitsanträge auflisten

Liefert Abwesenheitsanträge mit Art, Zeitraum und Genehmigungsstatus.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
SearchTermoptionalstringBodyFreitextfilter. Ein leerer String liefert alles.
PageoptionalintegerBodySeitenzahl, beginnend bei 1. Standardwert 1.
PageSizeoptionalintegerBodyDatensätze pro Seite. Standardwert 15.
TeamIdoptionalstringBodyAuf ein Team begrenzen. Ein leerer String bedeutet alle Teams.
EmployeeIdoptionalstringBodyAuf eine Person begrenzen. Ein leerer String bedeutet alle Mitarbeitenden.
TypeoptionalenumLeaveRightTypeBodyAbwesenheitsart, etwa Urlaub oder Krankheit.
StatusoptionalenumLeaveRequestStatusBodyNach Genehmigungsstatus filtern. Weglassen, um alle Status zurückzugeben.
StartDateoptionaldatetimeBodyBeginn des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
EndDateoptionaldatetimeBodyEnde des Zeitraums in UTC, ISO 8601. Wird verwendet, wenn DateFilter auf Custom steht.
CreatedAfteroptionaldatetimeBodyNur Datensätze, die nach diesem UTC-Zeitstempel erstellt wurden. Für inkrementelle Synchronisierung.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/LeaveManagement/ListLeaveRequests?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Page": 1,
  "PageSize": 15,
  "EmployeeId": "",
  "Status": 0
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {
    "Items": [
      {
        "ID": "65f1c0a3b8d4e21f9c0a2b00",
        "EmployeeId": "65f1c0a3b8d4e21f9c0a1b2c",
        "Type": 1,
        "Status": 0,
        "StartDate": "2026-02-10T00:00:00Z",
        "EndDate": "2026-02-14T00:00:00Z",
        "TotalDays": 5
      }
    ],
    "TotalCount": 1,
    "PageCount": 1
  }
}
POST/LeaveManagement/ApproveLeaveRequest

Abwesenheitsantrag genehmigen

Genehmigt einen offenen Antrag und zieht die Tage vom passenden Anspruch ab.

Parameter

NameTypOrtBeschreibung
x_api_keyerforderlichstringQueryDer API-Schlüssel Ihrer Organisation. Bei jeder Anfrage erforderlich.
IderforderlichstringBodyID des zu genehmigenden Abwesenheitsantrags.

Request

cURL
curl -X POST "https://open-api.useworktivity.com/LeaveManagement/ApproveLeaveRequest?x_api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "Id": "65f1c0a3b8d4e21f9c0a2b00"
}'

Response

JSON
{
  "HasError": false,
  "Message": null,
  "ValidationErrors": [],
  "Data": {}
}

Enum-Referenz

Enum-Felder werden als Ganzzahlen gesendet und zurückgegeben. Die Werte unten sind stabil, maßgeblich ist jedoch Definition/ListEnums, dort finden Sie auch Anzeigenamen für hier nicht aufgeführte Enums.

DateFilterType

WertName
1Today
2Yesterday
3Last3Days
4Last7Days
5Last30Days
10Custom

TypeOfAuthority

WertName
0User
1Admin
2Owner
3Coowner
4Manager
5Employee

EmployeeActivityLogStatus

WertName
0ClockIn
1Working
2OnBreak
3Idle
4ClockOut
5YetToStart

ProductivityStatus

WertName
1Productive
2Natural
3Unproductive

TimeEntryStatus

WertName
0Pending
1Approved
2Rejected

ProjectTaskStatus

WertName
0Todo
1Completed
2Cancelled
3OnHold
4Postponed
5UnderReview
6InProgress

OrganizationCustomerInvoiceStatus

WertName
1Draft
2Sent
3PartiallyPaid
4Paid

Interaktiv ausprobieren

Die Swagger UI spiegelt diese Dokumentation und lässt Sie authentifizierte Anfragen direkt aus dem Browser senden, auch an Endpoints, die auf dieser Seite nicht behandelt werden.

Bereit, Worktivity in Ihren Stack einzubinden?

Starten Sie eine kostenlose Testphase, erzeugen Sie im Dashboard einen Schlüssel und senden Sie Ihren ersten Aufruf in wenigen Minuten. Jeder Tarif enthält den vollen API-Zugriff.

14-tägige kostenlose Testphase. Keine Kreditkarte erforderlich.