Dokumentacja API
Kompletna dokumentacja REST API TimeHunter — 111 endpointów
https://api.timehunter.plWprowadzenie
Autentykacja
API wspiera dwie metody autentykacji: tokeny JWT i klucze API.
Token JWT (HttpOnly Cookie)
Zaloguj się przez POST /api/auth/login aby otrzymać JWT. Token ustawiany jest automatycznie jako HttpOnly cookie lub można go wysłać w nagłówku Authorization.
Authorization: Bearer eyJhbG...Klucz API
Wygeneruj klucz API w Ustawienia → Klucze API. Wyślij go w nagłówku X-Api-Key. Klucze mają uprawnienia do odczytu/zapisu.
X-Api-Key: th_live_abc123...Limity zapytań
Endpointy mają limity zapytań w celu ochrony przed nadużyciami. Po przekroczeniu limitu API zwraca HTTP 429.
| Limiter | Okno | Maks. zapytań |
|---|---|---|
| auth | 15 min | 20 |
| register | 1 h | 5 |
| qr | 1 min | 30 |
| api | 1 min | 100 |
| ai | 1 min | 10 |
| schema | 5 min | 10 |
| adminOp | 1 h | 5 |
| locationTrail | 30 s | 1 |
Autentykacja(5)
/api/auth/register-companyPubliczny5/1 hRejestracja nowej firmy z kontem administratora i wyborem planu
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/auth/register-company" \
-H "Content-Type: application/json" \
-d '{"companyName":"Moja Firma Sp. z o.o.","nip":"1234567890","email":"admin@mojafirma.pl","password":"SecurePass123!","adminName":"Jan Kowalski","plan":"start","countryCode":"PL"}'{
"companyName": "Moja Firma Sp. z o.o.",
"nip": "1234567890",
"email": "admin@mojafirma.pl",
"password": "SecurePass123!",
"adminName": "Jan Kowalski",
"plan": "start",
"countryCode": "PL"
}{
"success": true,
"message": "Firma zarejestrowana pomyślnie",
"user": {
"id": "uuid",
"email": "admin@mojafirma.pl",
"role": "admin"
}
}/api/auth/loginPubliczny20/15 minLogowanie za pomocą e-maila i hasła, otrzymanie tokenu JWT
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"admin@mojafirma.pl","password":"SecurePass123!"}'{
"email": "admin@mojafirma.pl",
"password": "SecurePass123!"
}{
"success": true,
"user": {
"userId": "uuid",
"email": "admin@mojafirma.pl",
"role": "admin",
"companyId": "uuid"
}
}/api/auth/meJWTPobranie profilu bieżącego użytkownika i informacji o subskrypcji
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/auth/me" \ -H "Authorization: Bearer <token>"
{
"user": {
"id": "uuid",
"email": "admin@mojafirma.pl",
"full_name": "Jan Kowalski",
"role": "admin"
},
"subscription": {
"status": "trial",
"trialEnd": "2026-03-01"
}
}/api/auth/logoutPublicznyWylogowanie (wyczyszczenie HttpOnly cookie)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/auth/logout"
{
"success": true
}/api/auth/change-passwordJWTZmiana hasła zalogowanego użytkownika
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/auth/change-password" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"currentPassword":"OldPass123!","newPassword":"NewPass456!"}'{
"currentPassword": "OldPass123!",
"newPassword": "NewPass456!"
}{
"success": true,
"message": "Hasło zmienione"
}Sesje pracy(8)
/api/work/sessionJWTPobranie aktywnej sesji pracy użytkownika
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/work/session" \ -H "Authorization: Bearer <token>"
{
"session": {
"id": "uuid",
"start_time": "2026-02-15T08:00:00+01:00",
"break_start": null,
"end_time": null
},
"breakLimit": 30
}/api/work/startJWTRozpoczęcie nowej sesji pracy z opcjonalną lokalizacją GPS
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/start" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"latitude":50.2649,"longitude":19.0238,"workMode":"office"}'{
"latitude": 50.2649,
"longitude": 19.0238,
"workMode": "office"
}{
"success": true,
"session": {
"id": "uuid",
"start_time": "2026-02-15T08:00:00+01:00"
}
}/api/work/stopJWTZakończenie bieżącej sesji pracy
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/stop" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"latitude":50.2649,"longitude":19.0238}'{
"latitude": 50.2649,
"longitude": 19.0238
}{
"success": true,
"session": {
"id": "uuid",
"end_time": "2026-02-15T16:00:00+01:00",
"total_hours": 8
}
}/api/work/break-startOpcjonalnyRozpoczęcie przerwy (obsługuje autoryzację tokenem QR)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/break-start" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"qrToken":"optional-qr-token"}'{
"qrToken": "optional-qr-token"
}{
"success": true,
"breakStart": "2026-02-15T12:00:00+01:00"
}/api/work/break-endOpcjonalnyZakończenie bieżącej przerwy (obsługuje autoryzację tokenem QR)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/break-end" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"qrToken":"optional-qr-token"}'{
"qrToken": "optional-qr-token"
}{
"success": true,
"breakEnd": "2026-02-15T12:30:00+01:00"
}/api/work/break-todayJWTPobranie łącznego czasu przerwy na dziś
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/work/break-today" \ -H "Authorization: Bearer <token>"
{
"totalBreakSeconds": 1800
}/api/work/todayAPI Key / JWTPobranie podsumowania czasu pracy na dziś
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/work/today" \ -H "Authorization: Bearer <token>"
{
"totalSeconds": 28800,
"totalHours": "8.00"
}/api/work/location-updateJWTWysłanie aktualizacji lokalizacji GPS podczas aktywnej sesji
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/location-update" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"latitude":50.2649,"longitude":19.0238}'{
"latitude": 50.2649,
"longitude": 19.0238
}{
"success": true
}QR kod i skanowanie(4)
/api/qr/:userIdJWTPobranie kodu QR użytkownika (własnego lub jako admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/qr/:userId" \ -H "Authorization: Bearer <token>"
{
"qrToken": "uuid-token",
"qrCodeUrl": "data:image/png;base64,..."
}/api/work/qr-scanQR Token30/1 minSkanowanie kodu QR w celu przełączenia sesji (start/stop/przerwa)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/qr-scan" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"qrToken":"uuid-token","latitude":50.2649,"longitude":19.0238}'{
"qrToken": "uuid-token",
"latitude": 50.2649,
"longitude": 19.0238
}{
"success": true,
"action": "start",
"session": {
"id": "uuid"
}
}/api/work/qr-scan-statusQR Token30/1 minPobranie statusu pracy za pomocą tokenu QR
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/qr-scan-status" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"qrToken":"uuid-token"}'{
"qrToken": "uuid-token"
}{
"isWorking": true,
"onBreak": false,
"sessionStart": "2026-02-15T08:00:00+01:00"
}/api/work/photo-uploadQR Token30/1 minPrzesłanie zdjęcia weryfikacyjnego podczas rejestracji QR
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work/photo-upload" \ -H "Authorization: Bearer <token>"
(multipart/form-data: qrToken, eventId, photo)
{
"success": true,
"photoUrl": "https://..."
}Obecność(3)
/api/attendanceJWT + AdminPobranie danych obecności wszystkich pracowników (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/attendance" \ -H "Authorization: Bearer <token>"
GET /api/attendance?date=2026-02-15&employeeId=uuid
{
"attendance": [
{
"userId": "uuid",
"fullName": "Jan Kowalski",
"startTime": "08:00",
"endTime": "16:00",
"totalHours": "7.50",
"breaks": 1800
}
]
}/api/employees/statusAPI Key / JWTPobranie bieżącego statusu pracy wszystkich pracowników
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/employees/status" \ -H "Authorization: Bearer <token>"
{
"employees": [
{
"id": "uuid",
"fullName": "Jan Kowalski",
"isWorking": true,
"onBreak": false,
"startTime": "08:00"
}
]
}/api/late/todayJWTSprawdzenie czy użytkownik spóźnił się dzisiaj
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/late/today" \ -H "Authorization: Bearer <token>"
{
"isLate": false,
"minutesLate": 0
}Zestawienia(6)
/api/report/dailyAPI Key / JWTPobranie dziennego raportu pracy
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/report/daily" \ -H "Authorization: Bearer <token>"
GET /api/report/daily?date=2026-02-15
{
"date": "2026-02-15",
"totalHours": "8.00",
"sessions": []
}/api/report/weeklyAPI Key / JWTPobranie tygodniowego raportu pracy
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/report/weekly" \ -H "Authorization: Bearer <token>"
{
"weekStart": "2026-02-10",
"weekEnd": "2026-02-16",
"totalHours": "40.00"
}/api/report/monthlyAPI Key / JWTPobranie miesięcznego raportu pracy
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/report/monthly" \ -H "Authorization: Bearer <token>"
GET /api/report/monthly?month=2026-02
{
"month": "2026-02",
"totalHours": "160.00",
"workDays": 20
}/api/reports/periodJWT + AdminPobranie raportu za wybrany zakres dat (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/reports/period" \ -H "Authorization: Bearer <token>"
GET /api/reports/period?from=2026-02-01&to=2026-02-28
{
"employees": [],
"summary": {
"totalHours": "320.00"
}
}/api/report/pdf-dataJWTPobranie danych raportu do generowania PDF
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/report/pdf-data" \ -H "Authorization: Bearer <token>"
{
"reportData": {}
}/api/reports/monthly-pdfJWT + AdminGenerowanie miesięcznego raportu PDF (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/reports/monthly-pdf" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"month":"2026-02","employeeIds":["uuid1","uuid2"]}'{
"month": "2026-02",
"employeeIds": [
"uuid1",
"uuid2"
]
}(PDF binary)
Wnioski urlopowe(5)
/api/leave/requestJWTZłożenie nowego wniosku urlopowego (urlop, zwolnienie lekarskie itp.)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/leave/request" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"leave_type":"vacation","start_date":"2026-03-01","end_date":"2026-03-05","comment":"Urlop wypoczynkowy","request_unit":"days"}'{
"leave_type": "vacation",
"start_date": "2026-03-01",
"end_date": "2026-03-05",
"comment": "Urlop wypoczynkowy",
"request_unit": "days"
}{
"success": true,
"request": {
"id": "uuid",
"status": "pending"
}
}/api/leave/balance/:userIdJWTPobranie salda urlopowego użytkownika
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/leave/balance/:userId" \ -H "Authorization: Bearer <token>"
{
"balance": {
"total_days": 26,
"used_days": 5,
"pending_days": 3,
"remaining_days": 18
}
}/api/leave/balance/:userIdJWT + AdminAktualizacja salda urlopowego (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/leave/balance/:userId" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"total_days":30}'{
"total_days": 30
}{
"success": true
}/api/admin/leave-requestsJWT + AdminLista wszystkich wniosków urlopowych (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/admin/leave-requests" \ -H "Authorization: Bearer <token>"
{
"requests": [
{
"id": "uuid",
"employee": "Jan Kowalski",
"leave_type": "vacation",
"status": "pending"
}
]
}/api/admin/leave/:actionJWT + AdminZatwierdzenie lub odrzucenie wniosku urlopowego (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/admin/leave/:action" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"requestId":"uuid","comment":"Zatwierdzono"}'{
"requestId": "uuid",
"comment": "Zatwierdzono"
}{
"success": true,
"status": "approved"
}Święta(4)
/api/holidaysJWTPobranie listy świąt firmowych
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/holidays" \ -H "Authorization: Bearer <token>"
{
"holidays": [
{
"id": 1,
"name": "Nowy Rok",
"date": "2026-01-01",
"country_code": "PL"
}
]
}/api/admin/holidaysJWT + AdminUtworzenie niestandardowego święta (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/admin/holidays" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Dzień Firmy","date":"2026-06-15"}'{
"name": "Dzień Firmy",
"date": "2026-06-15"
}{
"success": true,
"holiday": {
"id": 2,
"name": "Dzień Firmy"
}
}/api/admin/holidays/:idJWT + AdminAktualizacja święta (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/admin/holidays/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Dzień Firmy (zaktualizowany)","date":"2026-06-16"}'{
"name": "Dzień Firmy (zaktualizowany)",
"date": "2026-06-16"
}{
"success": true
}/api/admin/holidays/:idJWT + AdminUsunięcie święta (admin)
Pokaż przykład
curl -X DELETE "https://api.timehunter.pl/api/admin/holidays/:id" \ -H "Authorization: Bearer <token>"
{
"success": true
}Rejestr czasu(6)
/api/eventsJWTPobranie zdarzeń/zadań na dany dzień
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/events" \ -H "Authorization: Bearer <token>"
GET /api/events?date=2026-02-15
{
"events": [
{
"id": 1,
"title": "Spotkanie",
"start": "09:00",
"end": "10:00"
}
]
}/api/events/createJWTUtworzenie nowego zdarzenia lub zadania
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/events/create" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"Spotkanie","date":"2026-02-20","start_time":"09:00","end_time":"10:00"}'{
"title": "Spotkanie",
"date": "2026-02-20",
"start_time": "09:00",
"end_time": "10:00"
}{
"success": true,
"event": {
"id": 2
}
}/api/events/:idJWT + AdminAktualizacja zdarzenia (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/events/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"Spotkanie (zmienione)","end_time":"11:00"}'{
"title": "Spotkanie (zmienione)",
"end_time": "11:00"
}{
"success": true
}/api/events/:idJWT + AdminUsunięcie zdarzenia (admin)
Pokaż przykład
curl -X DELETE "https://api.timehunter.pl/api/events/:id" \ -H "Authorization: Bearer <token>"
{
"success": true
}/api/events/bulk-activateJWT + AdminMasowa aktywacja zdarzeń (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/events/bulk-activate" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"ids":[1,2,3]}'{
"ids": [
1,
2,
3
]
}{
"success": true,
"count": 3
}/api/events/bulk-deleteJWT + AdminMasowe usunięcie zdarzeń (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/events/bulk-delete" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"ids":[1,2,3]}'{
"ids": [
1,
2,
3
]
}{
"success": true,
"count": 3
}Wnioski i zatwierdzenia(7)
/api/requestsJWTPobranie wniosków użytkownika lub wszystkich wniosków (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/requests" \ -H "Authorization: Bearer <token>"
{
"requests": [
{
"id": "uuid",
"leave_type": "vacation",
"status": "pending"
}
]
}/api/requestsJWTUtworzenie nowego wniosku
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/requests" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"employee_id":"uuid","start_date":"2026-03-01","end_date":"2026-03-05","leave_type":"vacation","comment":"Urlop"}'{
"employee_id": "uuid",
"start_date": "2026-03-01",
"end_date": "2026-03-05",
"leave_type": "vacation",
"comment": "Urlop"
}{
"success": true,
"request": {
"id": "uuid"
}
}/api/requests/:idJWTAktualizacja szczegółów wniosku
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/requests/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"start_date":"2026-03-02","end_date":"2026-03-06"}'{
"start_date": "2026-03-02",
"end_date": "2026-03-06"
}{
"success": true
}/api/requests/:id/statusJWTAktualizacja statusu wniosku (zatwierdzenie/odrzucenie)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/requests/:id/status" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"status":"approved","comment":"Zatwierdzono"}'{
"status": "approved",
"comment": "Zatwierdzono"
}{
"success": true
}/api/requests/:idJWTUsunięcie wniosku
Pokaż przykład
curl -X DELETE "https://api.timehunter.pl/api/requests/:id" \ -H "Authorization: Bearer <token>"
{
"success": true
}/api/requests/bulk-approveJWTMasowe zatwierdzanie wniosków
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/requests/bulk-approve" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"ids":["uuid1","uuid2"]}'{
"ids": [
"uuid1",
"uuid2"
]
}{
"success": true,
"count": 2
}/api/requests/bulk-rejectJWTMasowe odrzucanie wniosków
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/requests/bulk-reject" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"ids":["uuid1","uuid2"],"comment":"Odrzucono"}'{
"ids": [
"uuid1",
"uuid2"
],
"comment": "Odrzucono"
}{
"success": true,
"count": 2
}Harmonogramy(5)
/api/schedulesAPI Key / JWTPobranie harmonogramów pracy
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/schedules" \ -H "Authorization: Bearer <token>"
GET /api/schedules?month=2026-02&userId=uuid
{
"schedules": [
{
"id": "uuid",
"date": "2026-02-15",
"start": "08:00",
"end": "16:00"
}
]
}/api/schedulesJWTUtworzenie wpisu harmonogramu pracy
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/schedules" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"userId":"uuid","date":"2026-02-20","start_time":"08:00","end_time":"16:00"}'{
"userId": "uuid",
"date": "2026-02-20",
"start_time": "08:00",
"end_time": "16:00"
}{
"success": true,
"schedule": {
"id": "uuid"
}
}/api/schedules/bulkJWTMasowe tworzenie wpisów harmonogramu
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/schedules/bulk" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"schedules":[{"userId":"uuid","date":"2026-02-20","start_time":"08:00","end_time":"16:00"}]}'{
"schedules": [
{
"userId": "uuid",
"date": "2026-02-20",
"start_time": "08:00",
"end_time": "16:00"
}
]
}{
"success": true,
"count": 5
}/api/schedules/:idJWTAktualizacja wpisu harmonogramu
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/schedules/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"start_time":"09:00","end_time":"17:00"}'{
"start_time": "09:00",
"end_time": "17:00"
}{
"success": true
}/api/schedules/:idJWTUsunięcie wpisu harmonogramu
Pokaż przykład
curl -X DELETE "https://api.timehunter.pl/api/schedules/:id" \ -H "Authorization: Bearer <token>"
{
"success": true
}Zarządzanie pracownikami(6)
/api/admin/usersJWT + AdminLista wszystkich pracowników w firmie (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/admin/users" \ -H "Authorization: Bearer <token>"
{
"users": [
{
"id": "uuid",
"full_name": "Jan Kowalski",
"email": "jan@firma.pl",
"role": "employee"
}
]
}/api/admin/add-employeeJWT + AdminDodanie nowego pracownika (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/admin/add-employee" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"fullName":"Anna Nowak","email":"anna@firma.pl","password":"TempPass123!","role":"employee","initialLeaveDays":26}'{
"fullName": "Anna Nowak",
"email": "anna@firma.pl",
"password": "TempPass123!",
"role": "employee",
"initialLeaveDays": 26
}{
"success": true,
"employee": {
"id": "uuid",
"email": "anna@firma.pl"
}
}/api/admin/edit-employee/:idJWT + AdminEdycja danych pracownika (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/admin/edit-employee/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"fullName":"Anna Nowak-Kowalska","role":"manager"}'{
"fullName": "Anna Nowak-Kowalska",
"role": "manager"
}{
"success": true
}/api/admin/update-permissions/:idJWT + AdminAktualizacja uprawnień pracownika (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/admin/update-permissions/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"permissions":{"dashboard":true,"reports":true,"events":false}}'{
"permissions": {
"dashboard": true,
"reports": true,
"events": false
}
}{
"success": true
}/api/admin/archive-employee/:idJWT + AdminArchiwizacja/dezaktywacja pracownika (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/admin/archive-employee/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"archived":true}'{
"archived": true
}{
"success": true
}/api/admin/user-timeJWT + AdminPobranie podsumowania czasu pracy użytkownika (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/admin/user-time" \ -H "Authorization: Bearer <token>"
GET /api/admin/user-time?date=2026-02-15
{
"users": [
{
"userId": "uuid",
"fullName": "Jan Kowalski",
"totalHours": "8.00",
"isWorking": true
}
]
}Nadgodziny(5)
/api/overtime/settingsJWTPobranie ustawień nadgodzin
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/overtime/settings" \ -H "Authorization: Bearer <token>"
{
"dailyThreshold": 8,
"weeklyThreshold": 40,
"multiplier": 1.5
}/api/overtime/settingsJWT + AdminAktualizacja ustawień nadgodzin (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/overtime/settings" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"dailyThreshold":8,"weeklyThreshold":40,"multiplier":1.5}'{
"dailyThreshold": 8,
"weeklyThreshold": 40,
"multiplier": 1.5
}{
"success": true
}/api/overtime/recordsJWTPobranie rekordów nadgodzin
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/overtime/records" \ -H "Authorization: Bearer <token>"
GET /api/overtime/records?month=2026-02
{
"records": [
{
"id": "uuid",
"date": "2026-02-10",
"hours": 2.5,
"status": "pending"
}
]
}/api/overtime/summaryJWTPobranie podsumowania nadgodzin
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/overtime/summary" \ -H "Authorization: Bearer <token>"
{
"totalOvertimeHours": 15.5,
"pendingHours": 5,
"approvedHours": 10.5
}/api/overtime/bulk-approveJWT + AdminMasowe zatwierdzanie rekordów nadgodzin (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/overtime/bulk-approve" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"ids":["uuid1","uuid2"]}'{
"ids": [
"uuid1",
"uuid2"
]
}{
"success": true,
"count": 2
}Grupy robocze(4)
/api/admin/work-groupsJWT + AdminLista wszystkich grup roboczych (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/admin/work-groups" \ -H "Authorization: Bearer <token>"
{
"groups": [
{
"id": "uuid",
"name": "Produkcja",
"membersCount": 12
}
]
}/api/admin/work-groupsJWT + AdminUtworzenie grupy roboczej (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/admin/work-groups" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Logistyka"}'{
"name": "Logistyka"
}{
"success": true,
"group": {
"id": "uuid",
"name": "Logistyka"
}
}/api/admin/work-groups/:idJWT + AdminAktualizacja grupy roboczej (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/admin/work-groups/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Logistyka & Transport"}'{
"name": "Logistyka & Transport"
}{
"success": true
}/api/admin/work-groups/:idJWT + AdminUsunięcie grupy roboczej (admin)
Pokaż przykład
curl -X DELETE "https://api.timehunter.pl/api/admin/work-groups/:id" \ -H "Authorization: Bearer <token>"
{
"success": true
}Ogłoszenia(4)
/api/announcementsJWTPobranie ogłoszeń
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/announcements" \ -H "Authorization: Bearer <token>"
{
"announcements": [
{
"id": "uuid",
"title": "Nowy regulamin",
"content": "...",
"createdAt": "2026-02-15"
}
]
}/api/announcementsJWT + AdminUtworzenie ogłoszenia (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/announcements" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"Zmiana godzin pracy","content":"Od marca biuro czynne 7-15"}'{
"title": "Zmiana godzin pracy",
"content": "Od marca biuro czynne 7-15"
}{
"success": true,
"announcement": {
"id": "uuid"
}
}/api/announcements/:id/readJWTOznaczenie ogłoszenia jako przeczytanego
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/announcements/:id/read" \ -H "Authorization: Bearer <token>"
{
"success": true
}/api/announcements/unread-countJWTPobranie liczby nieprzeczytanych ogłoszeń
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/announcements/unread-count" \ -H "Authorization: Bearer <token>"
{
"count": 3
}Zarządzanie firmą(7)
/api/company/updateJWT + AdminAktualizacja ustawień firmy (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/company/update" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Nowa Nazwa Sp. z o.o."}'{
"name": "Nowa Nazwa Sp. z o.o."
}{
"success": true
}/api/company/detailsJWT + AdminPobranie szczegółów firmy (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/company/details" \ -H "Authorization: Bearer <token>"
{
"company": {
"id": "uuid",
"name": "Moja Firma",
"plan": "start"
}
}/api/company/brandingJWTPobranie ustawień brandingu firmy
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/company/branding" \ -H "Authorization: Bearer <token>"
{
"logoUrl": "https://...",
"primaryColor": "#2563eb"
}/api/company/brandingJWT + AdminAktualizacja brandingu firmy (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/company/branding" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"primaryColor":"#059669"}'{
"primaryColor": "#059669"
}{
"success": true
}/api/company/logoJWT + AdminPrzesłanie logo firmy (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/company/logo" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"logo_url":"https://example.com/logo.png"}'{
"logo_url": "https://example.com/logo.png"
}{
"success": true
}/api/company/locationJWT + AdminPobranie głównej lokalizacji firmy (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/company/location" \ -H "Authorization: Bearer <token>"
{
"location": {
"latitude": 50.2649,
"longitude": 19.0238,
"radius": 200
}
}/api/company/locationJWT + AdminUstawienie głównej lokalizacji firmy (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/company/location" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"latitude":50.2649,"longitude":19.0238,"radius":200}'{
"latitude": 50.2649,
"longitude": 19.0238,
"radius": 200
}{
"success": true
}Subskrypcje i plany(3)
/api/subscription/statusJWTPobranie statusu bieżącej subskrypcji
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/subscription/status" \ -H "Authorization: Bearer <token>"
{
"status": "trial",
"planId": "uuid",
"trialEnd": "2026-03-01",
"paymentReference": "TH-12345"
}/api/subscription/payment-infoJWTPobranie informacji o płatności za subskrypcję
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/subscription/payment-info" \ -H "Authorization: Bearer <token>"
{
"bankName": "mBank",
"iban": "PL...",
"reference": "TH-12345",
"amount": "32.50 PLN"
}/api/plans/publicPublicznyPobranie publicznych planów cenowych
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/plans/public"
{
"plans": [
{
"slug": "micro",
"name": "Micro",
"price_per_user": 3.99,
"max_employees": 5
},
{
"slug": "start",
"name": "Start",
"price_per_user": 6.5,
"max_employees": 15
},
{
"slug": "pro",
"name": "Pro",
"price_per_user": 9.5,
"max_employees": null
}
]
}Dodatki(4)
/api/addonsJWTPobranie dostępnych dodatków
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/addons" \ -H "Authorization: Bearer <token>"
{
"addons": [
{
"id": "uuid",
"slug": "photo_registration",
"name": "Rejestracja zdjęciem",
"price": 1
}
]
}/api/addons/:id/activateJWT + AdminAktywacja dodatku (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/addons/:id/activate" \ -H "Authorization: Bearer <token>"
{
"success": true
}/api/addons/:id/deactivateJWT + AdminDezaktywacja dodatku (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/addons/:id/deactivate" \ -H "Authorization: Bearer <token>"
{
"success": true
}/api/company/addonsJWTPobranie aktywnych dodatków firmy
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/company/addons" \ -H "Authorization: Bearer <token>"
{
"activeAddons": [
"photo_registration",
"location_basic"
]
}Klucze API(3)
/api/api-keysJWT + AdminLista kluczy API (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/api-keys" \ -H "Authorization: Bearer <token>"
{
"keys": [
{
"id": "uuid",
"name": "Integration Key",
"prefix": "th_live_ab12",
"created_at": "2026-02-01"
}
]
}/api/api-keysJWT + AdminUtworzenie nowego klucza API (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/api-keys" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"ERP Integration","permissions":{"read":true,"write":false}}'{
"name": "ERP Integration",
"permissions": {
"read": true,
"write": false
}
}{
"success": true,
"key": "th_live_abc123...",
"prefix": "th_live_ab12"
}/api/api-keys/:idJWT + AdminUsunięcie klucza API (admin)
Pokaż przykład
curl -X DELETE "https://api.timehunter.pl/api/api-keys/:id" \ -H "Authorization: Bearer <token>"
{
"success": true
}Raporty e-mail(4)
/api/email-reportsJWT + AdminLista zaplanowanych raportów e-mail (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/email-reports" \ -H "Authorization: Bearer <token>"
{
"reports": [
{
"id": "uuid",
"title": "Raport tygodniowy",
"schedule": "weekly",
"recipients": [
"admin@firma.pl"
]
}
]
}/api/email-reportsJWT + AdminUtworzenie zaplanowanego raportu e-mail (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/email-reports" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"Raport dzienny","schedule":"daily","recipients":["admin@firma.pl"]}'{
"title": "Raport dzienny",
"schedule": "daily",
"recipients": [
"admin@firma.pl"
]
}{
"success": true,
"report": {
"id": "uuid"
}
}/api/email-reports/:idJWT + AdminAktualizacja raportu e-mail (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/email-reports/:id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"Raport dzienny (v2)","schedule":"daily"}'{
"title": "Raport dzienny (v2)",
"schedule": "daily"
}{
"success": true
}/api/email-reports/:idJWT + AdminUsunięcie raportu e-mail (admin)
Pokaż przykład
curl -X DELETE "https://api.timehunter.pl/api/email-reports/:id" \ -H "Authorization: Bearer <token>"
{
"success": true
}Asystent AI(2)
/api/ai/chat-claudeJWT10/1 minCzat z asystentem AI o danych pracy
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/ai/chat-claude" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"message":"Ile godzin przepracowałem w tym tygodniu?","context":"work_time"}'{
"message": "Ile godzin przepracowałem w tym tygodniu?",
"context": "work_time"
}{
"reply": "W tym tygodniu przepracowałeś 32.5 godziny..."
}/api/ai/analyze-dbJWT + Admin10/1 minAnaliza bazy danych za pomocą AI (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/ai/analyze-db" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"query":"Pokaż pracowników z nadgodzinami w lutym"}'{
"query": "Pokaż pracowników z nadgodzinami w lutym"
}{
"analysis": "...",
"data": []
}Webhooki(3)
/api/integrations/webhookJWT + AdminPobranie ustawień webhooka (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/integrations/webhook" \ -H "Authorization: Bearer <token>"
{
"webhookUrl": "https://...",
"events": [
"work.start",
"work.stop"
]
}/api/integrations/webhookJWT + AdminAktualizacja ustawień webhooka (admin)
Pokaż przykład
curl -X PUT "https://api.timehunter.pl/api/integrations/webhook" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"webhookUrl":"https://example.com/hook","events":["work.start","work.stop","leave.request"]}'{
"webhookUrl": "https://example.com/hook",
"events": [
"work.start",
"work.stop",
"leave.request"
]
}{
"success": true
}/api/integrations/webhook/testJWT + AdminWysłanie testowego webhooka (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/integrations/webhook/test" \ -H "Authorization: Bearer <token>"
{
"success": true,
"statusCode": 200
}Układy pulpitu(2)
/api/dashboard/layoutJWTPobranie niestandardowego układu pulpitu użytkownika
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/dashboard/layout" \ -H "Authorization: Bearer <token>"
{
"layout": {
"widgets": [
"workStatus",
"breakTimer",
"leaveBalance"
]
}
}/api/dashboard/layoutJWTZapisanie układu pulpitu
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/dashboard/layout" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"widgets":["workStatus","breakTimer","quickTile"]}'{
"widgets": [
"workStatus",
"breakTimer",
"quickTile"
]
}{
"success": true
}Lokalizacje(2)
/api/admin/locationsJWT + AdminPobranie wszystkich zarejestrowanych lokalizacji pracy (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/admin/locations" \ -H "Authorization: Bearer <token>"
{
"locations": [
{
"id": "uuid",
"name": "Biuro",
"latitude": 50.2649,
"longitude": 19.0238,
"radius": 200
}
]
}/api/admin/location-trailJWT + AdminPobranie śladu lokalizacji GPS pracownika (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/admin/location-trail" \ -H "Authorization: Bearer <token>"
GET /api/admin/location-trail?userId=uuid&date=2026-02-15
{
"trail": [
{
"lat": 50.2649,
"lng": 19.0238,
"timestamp": "08:05"
}
]
}Presety godzin(2)
/api/hour-presetsJWTPobranie presetów godzin do szybkiego wpisu czasu
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/hour-presets" \ -H "Authorization: Bearer <token>"
{
"presets": [
{
"id": "uuid",
"name": "8h standard",
"startTime": "08:00",
"endTime": "16:00"
}
]
}/api/hour-presetsJWT + AdminUtworzenie presetu godzin (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/hour-presets" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Nocna zmiana","startTime":"22:00","endTime":"06:00"}'{
"name": "Nocna zmiana",
"startTime": "22:00",
"endTime": "06:00"
}{
"success": true,
"preset": {
"id": "uuid"
}
}Przepływy zatwierdzania(2)
/api/approval-workflowsJWT + AdminLista przepływów zatwierdzania (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/approval-workflows" \ -H "Authorization: Bearer <token>"
{
"workflows": [
{
"id": "uuid",
"name": "Urlopy",
"steps": [
"manager",
"admin"
]
}
]
}/api/approval-workflowsJWT + AdminUtworzenie przepływu zatwierdzania (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/approval-workflows" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"Nadgodziny","steps":[{"role":"manager","action":"approve"}]}'{
"name": "Nadgodziny",
"steps": [
{
"role": "manager",
"action": "approve"
}
]
}{
"success": true,
"workflow": {
"id": "uuid"
}
}Logi audytu(1)
/api/audit-logsJWT + AdminPrzeglądanie logów audytu (admin)
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/audit-logs" \ -H "Authorization: Bearer <token>"
GET /api/audit-logs?page=1&limit=50
{
"logs": [
{
"id": "uuid",
"action": "employee.created",
"userId": "uuid",
"timestamp": "2026-02-15T10:30:00"
}
],
"total": 150
}Powiadomienia(1)
/api/notificationsJWTPobranie powiadomień użytkownika
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/notifications" \ -H "Authorization: Bearer <token>"
{
"notifications": [
{
"id": "uuid",
"type": "leave_approved",
"message": "Twój urlop został zatwierdzony",
"read": false
}
]
}Auto-uzupełnianie(1)
/api/work-sessions/auto-fillJWT + AdminAuto-uzupełnienie brakujących sesji pracy za miesiąc (admin)
Pokaż przykład
curl -X POST "https://api.timehunter.pl/api/work-sessions/auto-fill" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"userId":"uuid","month":"2026-02","startTime":"08:00","endTime":"16:00"}'{
"userId": "uuid",
"month": "2026-02",
"startTime": "08:00",
"endTime": "16:00"
}{
"success": true,
"sessionsCreated": 20
}Publiczne endpointy(2)
/PublicznyKontrola stanu — potwierdzenie działania API
Pokaż przykład
curl -X GET "https://api.timehunter.pl/"
{
"status": "ok",
"version": "1.0.0"
}/api/app/latest-versionPublicznyPobranie informacji o najnowszej wersji aplikacji mobilnej
Pokaż przykład
curl -X GET "https://api.timehunter.pl/api/app/latest-version"
{
"version": "1.0.0",
"downloadUrl": "https://...",
"releaseDate": "2026-02-12"
}