Clockodo
Universeller Clockodo Block für Zeiterfassung und Projektverwaltung. Verwalte Zeiteinträge, steuere die Stoppuhr, organisiere Kunden, Projekte und Leistungen, erfasse Abwesenheiten und generiere Berichte — alles in einem Block.
Kategorie: Integrationen & Business | Quelldatei: clockodoBlock.js | Auth: Ja (E-Mail + API Key)
Was kann dieser Block?
- Zeiteinträge auflisten, erstellen, bearbeiten und löschen
- Stoppuhr starten, stoppen und aktualisieren
- Kunden und Projekte verwalten (CRUD)
- Leistungsarten (Services) verwalten
- Abwesenheiten erfassen (Urlaub, Krankheit, Sonderurlaub)
- Benutzer auflisten und Details abrufen
- Benutzerberichte generieren (nach Jahr, Monat, Woche)
Was brauche ich dafür?
- Einen Clockodo-Account (kostenpflichtig, https://www.clockodo.com)
- API User: Die E-Mail-Adresse deines Clockodo-Benutzers
- API Key: Aus den Clockodo-Einstellungen unter "API" generieren
So findest du den API Key:
- Melde dich bei Clockodo an
- Gehe zu Einstellungen → Integrationen → API
- Klicke auf API-Schlüssel generieren
- Kopiere E-Mail und API Key in die Block-Config
So benutzt du den Block
Zeiteinträge von heute anzeigen
Prompt: {"operation": "entries_list"}
Ergebnis: Liste aller Zeiteinträge von heute mit Kunde, Projekt, Leistung, Dauer und Beschreibung.
Stoppuhr starten
Prompt: {"operation": "clock_start", "customers_id": 123, "services_id": 456, "text": "Meeting mit Kunde"}
Ergebnis: Stoppuhr läuft für den angegebenen Kunden und die Leistung.
Zeiteintrag buchen
Prompt: {"operation": "entries_create", "customers_id": 123, "services_id": 456, "time_since": "2026-03-23 09:00:00", "time_until": "2026-03-23 10:30:00", "text": "Projektbesprechung"}
Ergebnis: Neuer Zeiteintrag von 09:00 bis 10:30 erstellt.
Zeiteintrag aus natuerlicher Sprache (Resolver)
Prompt: Erstelle einen Zeiteintrag fuer heute von 8-9. Kunde ist Beispiel Metallbau, Dienst ist Administration, nicht rechnungsfaehig.
Ergebnis: Der Block loest zuerst Kunde und Dienst auf (statt direkte IDs zu raten), konvertiert die Zeit aus Europe/Zurich nach UTC-ISO-Format und erstellt danach den Eintrag mit billable: 0.
Wenig tippen (fuer Mitarbeitende)
Typischerweise reicht Kunde (Name oder Kurzform) + Zeitfenster. Ohne Datum gilt heute (Europe/Zurich). Ohne Dienst wird Engineering verwendet, sofern im Clockodo-Konto vorhanden.
Beispiele (als input zu entries_create):
digitag 8-98-9 beispiel metallbaugestern 14-16 kunde beispiel ag29.04.2026 10-11 beispiel metallbau, dienst administration
Strukturiert (gleicher Block): {"operation":"entries_create","text":"digitag 8-9"}
Alle Kunden auflisten
Prompt: {"operation": "customers_list"}
Ergebnis: Liste aller aktiven Kunden mit Name, Nummer und ID.
Kunden suchen (Name oder Teilname, z. B. „digitag“)
Die Clockodo-API liefert Kunden seitenweise ohne Textsuche. Für eine echte Suche nutze einen dieser Parameter:
Prompt: {"operation": "customers_list", "search": "digitag"}
Alternativ: query oder customerSearch. Kurze reine Suchbegriffe im Feld input/text (ohne Satz zu Zeiteinträgen) werden ebenfalls als Suche behandelt.
Ergebnis: Liste der bestpassenden Kunden (lokal über alle Seiten, mit Treffer-Scores), z. B. „DigiTAG AG“ bei Eingabe digitag.
Abwesenheit erfassen
Prompt: {"operation": "absences_create", "date_since": "2026-04-14", "date_until": "2026-04-18", "type": 1, "note": "Osterferien"}
Ergebnis: Urlaubseintrag für die angegebene Woche erstellt. Typen: 1=Urlaub, 2=Sonderurlaub, 3=Krank.
Benutzerbericht abrufen
Prompt: {"operation": "userreports", "year": 2026}
Ergebnis: Übersicht der geleisteten Stunden pro Benutzer für das Jahr 2026.
Alle Funktionen im Überblick
| Funktion | Was passiert | Beispiel-Prompt |
|---|---|---|
| entries_list | Zeiteinträge auflisten (Standard: heute) | {"operation": "entries_list", "time_since": "2026-03-01 00:00:00", "time_until": "2026-03-31 23:59:59"} |
| entries_get | Einzelnen Zeiteintrag abrufen | {"operation": "entries_get", "id": 12345} |
| entries_create | Neuen Zeiteintrag erstellen | {"operation": "entries_create", "customers_id": 1, "services_id": 2, "time_since": "...", "time_until": "..."} |
| entries_update | Zeiteintrag bearbeiten | {"operation": "entries_update", "id": 12345, "text": "Neuer Text"} |
| entries_delete | Zeiteintrag löschen | {"operation": "entries_delete", "id": 12345} |
| clock_get | Laufende Stoppuhr abrufen | {"operation": "clock_get"} |
| clock_start | Stoppuhr starten | {"operation": "clock_start", "customers_id": 1, "services_id": 2} |
| clock_stop | Stoppuhr stoppen | {"operation": "clock_stop", "id": 12345} |
| clock_update | Laufende Stoppuhr ändern | {"operation": "clock_update", "id": 12345, "text": "Update"} |
| clock_delete | Laufende Stoppuhr verwerfen | {"operation": "clock_delete", "id": 12345} |
| customers_list | Alle Kunden auflisten | {"operation": "customers_list"} |
| customers_get | Einzelnen Kunden abrufen | {"operation": "customers_get", "id": 1} |
| customers_create | Neuen Kunden erstellen | {"operation": "customers_create", "name": "Muster AG"} |
| customers_update | Kunden bearbeiten | {"operation": "customers_update", "id": 1, "name": "Neuer Name"} |
| customers_delete | Kunden deaktivieren | {"operation": "customers_delete", "id": 1} |
| projects_list | Alle Projekte auflisten | {"operation": "projects_list"} |
| projects_get | Einzelnes Projekt abrufen | {"operation": "projects_get", "id": 1} |
| projects_create | Neues Projekt erstellen | {"operation": "projects_create", "name": "Webseite", "customers_id": 1} |
| projects_update | Projekt bearbeiten | {"operation": "projects_update", "id": 1, "name": "Neuer Name"} |
| projects_delete | Projekt deaktivieren | {"operation": "projects_delete", "id": 1} |
| services_list | Alle Leistungen auflisten | {"operation": "services_list"} |
| services_get | Einzelne Leistung abrufen | {"operation": "services_get", "id": 1} |
| services_create | Neue Leistung erstellen | {"operation": "services_create", "name": "Entwicklung"} |
| services_update | Leistung bearbeiten | {"operation": "services_update", "id": 1, "name": "Neuer Name"} |
| services_delete | Leistung deaktivieren | {"operation": "services_delete", "id": 1} |
| absences_list | Abwesenheiten auflisten | {"operation": "absences_list", "year": 2026} |
| absences_get | Einzelne Abwesenheit abrufen | {"operation": "absences_get", "id": 1} |
| absences_create | Abwesenheit erfassen | {"operation": "absences_create", "date_since": "2026-04-14", "date_until": "2026-04-18", "type": 1} |
| absences_update | Abwesenheit bearbeiten | {"operation": "absences_update", "id": 1, "note": "Geändert"} |
| absences_delete | Abwesenheit löschen | {"operation": "absences_delete", "id": 1} |
| users_list | Alle Benutzer auflisten | {"operation": "users_list"} |
| users_get | Einzelnen Benutzer abrufen | {"operation": "users_get", "id": 1} |
| userreports | Benutzerberichte generieren | {"operation": "userreports", "year": 2026} |
Häufige Probleme und Lösungen
| Problem | Lösung |
|---|---|
| 401 Unauthorized | API User (E-Mail) und API Key prüfen — beides muss zusammenpassen |
| 403 Forbidden | Dein Clockodo-Benutzer hat nicht genügend Rechte für diese Operation |
| 429 Rate Limited | Zu viele Anfragen — kurz warten und erneut versuchen |
| "Pflichtfelder fehlen" | Prüfe ob customers_id, services_id, time_since, time_until und billable im Body ankommen (inkl. korrekter paramsJson-Nutzung) |
| Zeiteinträge leer | time_since und time_until prüfen — Format: "YYYY-MM-DD HH:MM:SS" |
| "customer does not exist or has been archived" | Kunde nicht als ID raten: erst Kundenliste laden und customer resolver verwenden (aktive Kunden bevorzugen) |
| "does not fit ISO 8601 format" | Zeiten als UTC mit Z senden (z. B. 2026-04-29T06:00:00Z) |
| Stoppuhr lässt sich nicht stoppen | Du brauchst die ID des laufenden Eintrags — zuerst clock_get ausführen |
| Abwesenheits-Typ unklar | 1=Urlaub, 2=Sonderurlaub, 3=Krank, 4=Gleitzeitausgleich, 5=Fortbildung |
Weiterführende Links
- Clockodo: https://www.clockodo.com
- API Dokumentation: https://www.clockodo.com/en/api/
- API Key generieren: Clockodo → Einstellungen → Integrationen → API
Technische Details
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| operation | select | Ja | Auszuführende Operation (32 verfügbar) |
| apiUser | text | Ja | E-Mail-Adresse des Clockodo-Benutzers |
| apiKey | password | Ja | API Key aus Clockodo Einstellungen |
| id | number | Bedingt | ID des Eintrags (für get/update/delete) |
| customers_id | number | Bedingt | Kunden-ID (für entries_create, clock_start, projects_create) |
| services_id | number | Bedingt | Leistungs-ID (für entries_create, clock_start) |
| projects_id | number | Nein | Projekt-ID (optional bei Zeiteinträgen) |
| time_since | text | Bedingt | Startzeit (Format: "YYYY-MM-DD HH:MM:SS") |
| time_until | text | Bedingt | Endzeit (Format: "YYYY-MM-DD HH:MM:SS") |
| text | text | Nein | Beschreibung/Notiz |
| name | text | Bedingt | Name (für Kunden/Projekte/Leistungen) |
| date_since | text | Bedingt | Startdatum Abwesenheit (Format: "YYYY-MM-DD") |
| date_until | text | Bedingt | Enddatum Abwesenheit (Format: "YYYY-MM-DD") |
| type | number | Bedingt | Abwesenheits-Typ (1=Urlaub, 2=Sonderurlaub, 3=Krank) |
| year | number | Nein | Jahr für Berichte/Abwesenheiten (Standard: aktuelles Jahr) |
| page | number | Nein | Seitennummer für Pagination (Standard: 1) |
| billable | number | Nein | Verrechenbar als Integer: 0 (nicht rechnungsfaehig) oder 1 (rechnungsfaehig) |
| note | text | Nein | Zusätzliche Notiz |