1. Na čo je API
Kľúč vytvorí vlastník firmy v aplikácii: Firma, časť API a integrácie.
API vráti to, čo už dnes vidíte v aplikácii alebo v exporte pre mzdy. Rozdiel je v tom, že si o údaje povie program sám, keď ich potrebuje:
- mzdový alebo účtovný program si na konci mesiaca vezme odpracované hodiny a dovolenky,
- tabuľka alebo prehľad v Power BI či Looker Studiu ukáže plán a dochádzku viacerých prevádzok,
- pokladnica alebo vlastný systém zistí, kto je dnes na zmene.
API vydáva len vaše vlastné údaje, cudzí kód sa v Taktovke nespúšťa. Za údaje, ktoré si váš program cez API stiahne, zodpovedáte ako prevádzkovateľ vy, rovnako ako za stiahnutý export. API je v každom tarife vrátane Free a skúšobného obdobia.
2. Ako získať kľúč
- Prihláste sa ako vlastník firmy. Kľúče vytvára a vidí len vlastník, vedúci zmien nie.
- Otvorte stránku Firma a v časti API a integrácie kliknite na Nový kľúč.
- Pomenujte ho podľa toho, kto ho dostane, napríklad „Mzdy, účtovníčka“. Vyberte, čo smie čítať, a ako dlho platí: 30 dní (predvolené), 90 dní, rok alebo bez konca. Kľúč s koncom platnosti prestane fungovať sám, keď naň zabudnete.
- Kľúč uvidíte len raz. Skopírujte ho a uložte tam, kde držíte heslá, alebo ho odovzdajte príjemcovi bezpečnou cestou. Taktovka si z neho ukladá len odtlačok, takže ho neskôr neukáže nikomu, ani nám.
Kľúč začína tk_ a má 46 znakov. V zozname kľúčov vidíte jeho začiatok, kedy bol naposledy použitý a koľko požiadaviek poslal. Kľúč, ktorý už nikto nepotrebuje alebo sa mohol dostať do nesprávnych rúk, zrušíte tlačidlom Zrušiť a prestane platiť hneď. Firma môže mať naraz najviac 10 platných kľúčov.
3. Prvá požiadavka
Adresa API je https://api.taktovka.com/v1. Kľúč posielajte v hlavičke Authorization, nikdy v adrese:
curl https://api.taktovka.com/v1/me \
-H "Authorization: Bearer tk_…" Odpoveď povie, ktorú firmu kľúč číta a aké má oprávnenia. Všetky odpovede sú JSON s názvami polí v tvare snake_case:
- zoznam príde ako
{ "data": [ … ], "next_cursor": null }, jeden záznam ako{ "data": { … } }, - dátum je
YYYY-MM-DDpodľa kalendára prevádzky, začiatok a koniec zmenyHH:MMmiestneho času, okamih (napríklad príchod) ISO 8601 s posunom voči UTC a časové pásmo napríkladEurope/Bratislava, - dĺžky sú v celých minútach.
Celý opis API vo formáte OpenAPI 3.1 je na api.taktovka.com/openapi.json. Po importe do Postmanu alebo Insomnie máte všetky požiadavky pripravené.
Kľúč patrí na server. Nevkladajte ho do webovej stránky ani do aplikácie v telefóne, odkiaľ by si ho mohol ktokoľvek prečítať. Preto API neodpovedá na požiadavky z prehliadača iného webu (CORS je vypnutý).
4. Tri bežné postupy
Príklady sú za september 2026. V každom je poradie volaní, ktoré stačí zopakovať, a oprávnenia, ktoré kľúč potrebuje. Predvolený výber pri novom kľúči pokrýva všetky tri.
Hodiny za mesiac pre účtovníčku
Kľúč potrebuje people:read, schedules:read, attendance:read, absences:read a leave:read.
GET /v1/employees?active=allvráti mená kemployee_id, aj ľuďom, ktorí počas mesiaca odišli.GET /v1/hours?month=2026-09vráti po ľuďoch plánované a započítané minúty, fond pracovného času a to, či človek mesiac potvrdil.counted_minutesjenull, keď človek nemá dochádzku zapnutú na žiadnej prevádzke.GET /v1/absences?from=2026-09-01&to=2026-09-30&status=approvedvráti schválené dovolenky a neprítomnosti v mesiaci.GET /v1/leave-balances?year=2026vráti nárok, čerpanie a zostatok dovolenky.
curl "https://api.taktovka.com/v1/hours?month=2026-09" \
-H "Authorization: Bearer tk_…"Zverejnený rozpis do vlastného systému
Kľúč potrebuje company:read a schedules:read.
GET /v1/locationsvrátiidprevádzok.GET /v1/schedules?location=<id>&from=2026-09-28&to=2026-10-25vráti zverejnené týždne prevádzky, pri každom poslednú verziu (version) a odtlačok (sha256).GET /v1/schedules/{schedule_id}vráti zmeny jedného týždňa. Zmeny viacerých týždňov naraz vrátiGET /v1/shifts?from=2026-09-28&to=2026-10-25&location=<id>.
Keď sa pri týždni zmení version, vedúca ho zverejnila znova a treba si ho stiahnuť ešte raz. Čo má rozpracované a nezverejnené, API neukáže.
curl "https://api.taktovka.com/v1/shifts?from=2026-09-28&to=2026-10-25" \
-H "Authorization: Bearer tk_…"Dochádzka za obdobie
Kľúč potrebuje attendance:read, na hodiny aj schedules:read a na mená people:read.
GET /v1/time-entries?from=2026-09-01&to=2026-09-30vráti každý príchod a odchod s označením, či ho vedúci opravil a či bol naskenovaný bez signálu.GET /v1/hours?month=2026-09vráti započítaný čas po ľuďoch, teda po odpočítaní prestávok a zaokrúhlení podľa nastavení prevádzky.
Obdobie môže mať najviac 93 dní, dlhšie treba rozdeliť po mesiacoch.
curl "https://api.taktovka.com/v1/time-entries?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer tk_…"5. Python a Excel
Python
Hodiny za september s knižnicou requests:
import requests
KEY = "tk_…" # lepšie z premennej prostredia než priamo v kóde
API = "https://api.taktovka.com/v1"
headers = {"Authorization": f"Bearer {KEY}"}
r = requests.get(f"{API}/hours", params={"month": "2026-09"}, headers=headers, timeout=30)
r.raise_for_status()
for row in r.json()["data"]:
print(row["employee_id"], row["planned_minutes"], row["counted_minutes"])Excel (Power Query)
- Na karte Údaje zvoľte Získať údaje, Z iných zdrojov, Prázdny dotaz. V anglickom Exceli je to Data, Get Data, From Other Sources, Blank Query.
- V editore Power Query otvorte Rozšírený editor (Advanced Editor) a vložte:
let
Kluc = "tk_…",
Odpoved = Json.Document(Web.Contents(
"https://api.taktovka.com/v1/hours?month=2026-09",
[Headers = [Authorization = "Bearer " & Kluc]])),
Tabulka = Table.FromRecords(Odpoved[data])
in
Tabulka- Keď sa Excel spýta, ako sa k adrese pripojiť, vyberte Anonymne. Kľúč už ide v hlavičke.
- Stĺpce
fundaconfirmedsú vnorené. Rozbalíte ich šípkou v hlavičke stĺpca. Potom zvoľte Zavrieť a načítať (Close & Load). - Na ďalší mesiac stačí prepísať
monthv adrese a dať Obnoviť.
Kľúč zostane uložený v zošite. Na Excel si preto vytvorte samostatný kľúč len s tým, čo zošit potrebuje, a s platnosťou 90 dní, aby preposlaný súbor veľa neprezradil. Taký súbor aj tak neposielajte ďalej. Ak ho predsa niekto dostal, kľúč na stránke Firma zrušte a vytvorte nový.
6. Oprávnenia
Kľúč dostane len to, čo príjemca potrebuje. Požiadavka mimo oprávnení skončí chybou 403 a odpoveď povie, ktoré oprávnenie chýba.
| Oprávnenie | V aplikácii | Čo kľúč smie čítať |
|---|---|---|
| company:read | Firma a prevádzky | Firma, prevádzky a pozície. |
| people:read | Ľudia | Meno, typ zmluvy, pozície, domovská prevádzka. Bez kontaktov. |
| people:contact | Kontakty ľudí | E-mail a telefón ľudí. Len spolu s people:read. |
| schedules:read | Zverejnené rozpisy | Zverejnené rozpisy, zmeny a plánované hodiny. |
| attendance:read | Dochádzka | Príchody a odchody z dochádzky, započítaný čas. |
| absences:read | Neprítomnosti | Dovolenky a neprítomnosti. PN a OČR vráti len ako absence, bez poznámky. |
| absences:kinds | Druh neprítomnosti | Skutočný druh neprítomnosti (PN, OČR) a poznámka. Len spolu s absences:read. |
| leave:read | Zostatok dovolenky | Nárok, čerpanie a zostatok dovolenky. |
Mesačné hodiny (/v1/hours) potrebujú schedules:read aj attendance:read.
Druh neprítomnosti prezradí, že bol človek chorý alebo ošetroval blízkeho. To sú údaje o zdraví. Oprávnenie absences:kinds dajte len tomu, kto ich potrebuje podľa zákona, zvyčajne na výpočet miezd, a people:contact len tomu, kto ľuďom naozaj píše. Každé čítanie druhov neprítomnosti si Taktovka zaznamená.
7. Limity a chyby
- Jeden kľúč smie poslať 10 požiadaviek za sekundu, krátko až 30 naraz. Všetky kľúče firmy spolu 20 za sekundu.
/v1/hourspočíta celý mesiac, preto sa jedno volanie ráta ako 5 požiadaviek a pre jednu firmu beží naraz len jedno. Druhé volanie počas neho dostane 429.- Odpoveď nesie hlavičky
RateLimit-Limit,RateLimit-RemainingaRateLimit-Reset. Nad limit príde 429 s hlavičkouRetry-After: počkajte toľko sekúnd a skúste znova. - Obdobie
fromažtomôže mať najviac 93 dní, pri/v1/schedules366 dní. Dlhšie skončí chybourange_too_long, stačí ho rozdeliť po mesiacoch. - Ľudia, prevádzky a pozície prídu po 200 položkách, s parametrom
limitaž po 500. Keď je ich viac,next_cursornie jenull: pošlite ho v parametricursora dostanete ďalšiu stranu. Zoznamy za obdobie prídu celé naraz.
Chyba má vždy rovnaký tvar:
{
"error": {
"code": "insufficient_scope",
"message": "The key does not carry the scope this endpoint needs.",
"status": 403,
"request_id": "…",
"required_scope": "attendance:read"
}
}| Stav | code | Kedy |
|---|---|---|
| 401 | unauthenticated | Chýba hlavička Authorization alebo nezačína Bearer. |
| 401 | invalid_key | Taký kľúč nepoznáme. |
| 401 | key_revoked, key_expired | Kľúč bol zrušený alebo mu skončila platnosť. |
| 403 | insufficient_scope | Kľúču chýba oprávnenie, ktoré uvádza pole required_scope. |
| 403 | https_required | Požiadavka prišla cez http. Používajte https, a ak niesla kľúč, vymeňte ho. |
| 403 | module_off | Firma alebo prevádzka nemá zapnutú časť aplikácie, napríklad dochádzku. |
| 400 | validation_failed | Zlý parameter. Pole issues povie ktorý. |
| 400 | range_too_long | Obdobie je dlhšie, ako dovoľuje max_days. |
| 400 | key_in_query | Kľúč prišiel v adrese. Posielajte ho len v hlavičke a taký kľúč radšej vymeňte. |
| 404 | not_found | Taký záznam vo vašej firme nie je. |
| 405 | method_not_allowed | API prijíma len GET. |
| 429 | rate_limited | Priveľa požiadaviek. Počkajte toľko sekúnd, koľko hovorí retry_after. |
| 500 | server_error | Chyba na našej strane. Pošlite nám request_id. |
Keď nám píšete o chybe, pošlite request_id z odpovede alebo z hlavičky X-Request-Id, podľa neho požiadavku nájdeme. Kľúč nám neposielajte.
8. Čo API nerobí
- Nezapisuje. Zmeny, dochádzku ani neprítomnosti cez API nevytvoríte ani neupravíte.
- Neukazuje rozpracované týždne. Zmeny a plánované hodiny berie zo zverejnených verzií rozpisu, rovnako ako export pre mzdy.
- Nevracia polohu, fotografie ani biometrické údaje. Taktovka ich nezbiera, dochádzka je sken QR kódu pri dverách.
- Nevracia hodinové sadzby, dátumy narodenia ani e-maily prihlasovacích účtov. Čo nie je v exporte, nie je ani v API.
- Nepočíta mzdy ani sumy. Vráti minúty, dni a druhy neprítomností, mzdu z nich vypočíta váš mzdový program.
- Sám neohlási zmenu. Údaje si treba vypýtať, napríklad raz za noc.
9. Verzie a zmeny
Čo funguje na /v1, bude fungovať ďalej: pole neodstránime, nepremenujeme ani mu nezmeníme význam. V rámci /v1 môžu len pribudnúť nové polia, parametre a endpointy, preto polia, ktoré váš program nepozná, preskočte. Zmena, ktorá by existujúcu integráciu rozbila, príde ako /v2 a /v1 pobeží ešte popri nej. O jeho konci dáme vedieť vopred.
v1, 24. 9. 2026
Prvá verzia: firma a kľúč, prevádzky, pozície, ľudia, zverejnené rozpisy a zmeny, hodiny za mesiac, dochádzka, neprítomnosti a zostatok dovolenky. Len na čítanie.
10. Zoznam endpointov
Všetky sú GET a cesty sa píšu za https://api.taktovka.com. Kliknutím sa otvorí popis parametrov a polí odpovede. Opisy parametrov a polí sú po anglicky, rovnako ako v súbore openapi.json.
GET/v1Kde je dokumentácia a opis API. Odpovedá aj bez kľúča.
Oprávnenie
Netreba kľúč.
Odpoveď
data je jeden objekt s týmito poľami:
- api"taktovka"
- version"v1"
- docsstring · uri
- openapistring · uri
Príklad
curl https://api.taktovka.com/v1 \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": {
"api": "taktovka",
"version": "v1",
"docs": "https://taktovka.com/integracie",
"openapi": "https://api.taktovka.com/openapi.json"
}
}GET/v1/meKtorú firmu kľúč číta, aké má oprávnenia a limit.
Oprávnenie
Stačí platný kľúč, oprávnenie netreba.
Odpoveď
data je jeden objekt s týmito poľami:
- companyobject
- idstring · uuid
- namestring
- countrystring
SKCZ
- currencystring
EURCZK
- localestring
- tzstring
IANA time zone of the company
- planstring
freekaviarenrestauraciasietenterprise
- keyobject
- idstring · uuid
- namestring
- scopesarray of string
company:readpeople:readpeople:contactschedules:readattendance:readabsences:readabsences:kindsleave:read
- created_atstring · date-time
ISO 8601 instant
- expires_atstring · date-time | null
ISO 8601 instant
- rate_limitobject
- per_secondinteger
- burstinteger
Príklad
curl https://api.taktovka.com/v1/me \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": {
"company": {
"id": "5b0f2c1e-8d4a-4c7e-9a1b-2f3d4e5a6b7c",
"name": "Kaviareň pri fontáne",
"country": "SK",
"currency": "EUR",
"locale": "sk",
"tz": "Europe/Bratislava",
"plan": "kaviaren"
},
"key": {
"id": "6e5d4c3b-2a19-4807-9f6e-5d4c3b2a1908",
"name": "Účtovníčka",
"scopes": [
"company:read",
"people:read",
"schedules:read",
"attendance:read"
],
"created_at": "2026-09-24T09:30:00.000Z",
"expires_at": null
},
"rate_limit": {
"per_second": 10,
"burst": 30
}
}
}GET/v1/locationsPrevádzky s časovým pásmom, adresou a nastavením pracovného času.
Oprávnenie
company:read
Parametre
- limitv dotaze · integer
Rows per page, 1–500
Predvolená hodnota 200.
- cursorv dotaze · string
The `next_cursor` of the previous page
Odpoveď
data je zoznam, každá položka má tieto polia:
- idstring · uuid
- namestring
- tzstring
IANA time zone the location plans and counts in
- addressstring | null
- activeboolean
- attendance_enabledboolean
The QR door scan is on here
- work_timeobject | null
Uneven distribution of working time with an averaging period; null when the week is even
- distributionstring
evenuneven
- weekly_norm_minutesinteger
The standard week the average is held to, e.g. 2400 = 40 h
- averaging_startstring · date | null
First day of the first averaging period
- averaging_lengthinteger | null
Length of one averaging period: months in SK, weeks in CZ
Príklad
curl https://api.taktovka.com/v1/locations \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"name": "Kaviareň Hlavná",
"tz": "Europe/Bratislava",
"address": "Hlavná 12, Košice",
"active": true,
"attendance_enabled": true,
"work_time": null
}
],
"next_cursor": null
}GET/v1/positionsPozície (barista, kuchár…) s farbou a poradím.
Oprávnenie
company:read
Parametre
- limitv dotaze · integer
Rows per page, 1–500
Predvolená hodnota 200.
- cursorv dotaze · string
The `next_cursor` of the previous page
Odpoveď
data je zoznam, každá položka má tieto polia:
- idstring · uuid
- namestring
- colorstring | null
- sort_orderinteger
- activeboolean
Príklad
curl https://api.taktovka.com/v1/positions \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"id": "9e1d2c3b-4a5f-4e6d-8c7b-1a2b3c4d5e6f",
"name": "Barista",
"color": "#b45309",
"sort_order": 0,
"active": true
}
],
"next_cursor": null
}GET/v1/employeesĽudia firmy bez kontaktov. S oprávnením Kontakty ľudí aj e-mail a telefón.
Oprávnenie
people:read
S people:contact pribudnú polia email a phone.
Parametre
- limitv dotaze · integer
Rows per page, 1–500
Predvolená hodnota 200.
- cursorv dotaze · string
The `next_cursor` of the previous page
- activev dotaze · string
Active cards (default), former ones, or all
Hodnoty: true, false, all , predvolená true
Odpoveď
data je zoznam, každá položka má tieto polia:
- idstring · uuid
- first_namestring
- last_namestring
- activeboolean
- contract_typestring
SK: TPP, DoPC, DoBPS, DoVP, DoPCS; CZ: HPP, DPP, DPC
TPPDoPCDoBPSDoVPHPPDPPDPCDoPCS
- max_hours_weekinteger | null
Agreed weekly hours
- home_location_idstring · uuid | null
- position_idsarray of string · uuid
- emailstring | nullmôže chýbať
Only with the people:contact scope
- phonestring | nullmôže chýbať
Only with the people:contact scope
- created_atstring · date-time
ISO 8601 instant
- updated_atstring · date-time
ISO 8601 instant
Príklad
curl https://api.taktovka.com/v1/employees \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"first_name": "Eva",
"last_name": "Nováková",
"active": true,
"contract_type": "TPP",
"max_hours_week": 40,
"home_location_id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"position_ids": [
"9e1d2c3b-4a5f-4e6d-8c7b-1a2b3c4d5e6f"
],
"created_at": "2026-03-02T08:15:00.000Z",
"updated_at": "2026-09-01T10:00:00.000Z"
}
],
"next_cursor": null
}GET/v1/employees/{id}Jeden človek, rovnaké polia ako v zozname.
Oprávnenie
people:read
S people:contact pribudnú polia email a phone.
Parametre
- idv ceste · string · uuidpovinný
Odpoveď
data je jeden objekt s týmito poľami:
- idstring · uuid
- first_namestring
- last_namestring
- activeboolean
- contract_typestring
SK: TPP, DoPC, DoBPS, DoVP, DoPCS; CZ: HPP, DPP, DPC
TPPDoPCDoBPSDoVPHPPDPPDPCDoPCS
- max_hours_weekinteger | null
Agreed weekly hours
- home_location_idstring · uuid | null
- position_idsarray of string · uuid
- emailstring | nullmôže chýbať
Only with the people:contact scope
- phonestring | nullmôže chýbať
Only with the people:contact scope
- created_atstring · date-time
ISO 8601 instant
- updated_atstring · date-time
ISO 8601 instant
Príklad
curl https://api.taktovka.com/v1/employees/{id} \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": {
"id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"first_name": "Eva",
"last_name": "Nováková",
"active": true,
"contract_type": "TPP",
"max_hours_week": 40,
"home_location_id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"position_ids": [
"9e1d2c3b-4a5f-4e6d-8c7b-1a2b3c4d5e6f"
],
"email": "eva.novakova@example.com",
"phone": "+421 900 123 456",
"created_at": "2026-03-02T08:15:00.000Z",
"updated_at": "2026-09-01T10:00:00.000Z"
}
}GET/v1/schedulesZverejnené týždne prevádzky, vždy posledná verzia každého.
Oprávnenie
schedules:read
Parametre
- fromv dotaze · string · datepovinný
First day, YYYY-MM-DD, included; years 2000–2100
- tov dotaze · string · datepovinný
Last day, YYYY-MM-DD, included; years 2000–2100
- locationv dotaze · string · uuid
Only this location
Odpoveď
data je zoznam, každá položka má tieto polia:
- schedule_idstring · uuid
- location_idstring · uuid
- period_startstring · date
Local date of the location, YYYY-MM-DD
- period_endstring · date
Local date of the location, YYYY-MM-DD
- versioninteger
- published_atstring · date-time
ISO 8601 instant
- sha256string | null
SHA-256 of the canonical snapshot; null for versions published before it was kept
Príklad
curl "https://api.taktovka.com/v1/schedules?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"schedule_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"location_id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"period_start": "2026-10-19",
"period_end": "2026-10-25",
"version": 2,
"published_at": "2026-10-09T14:12:05.000Z",
"sha256": "4f1a0c7e9b2d3a6f8e5c1b0d9a7f6e4c3b2a1908f7e6d5c4b3a291807f6e5d4c"
}
],
"next_cursor": null
}GET/v1/schedules/{schedule_id}Jeden zverejnený týždeň so zmenami. Parametrom version aj ktorákoľvek staršia verzia.
Oprávnenie
schedules:read
Parametre
- schedule_idv ceste · string · uuidpovinný
- versionv dotaze · integer
A past version; the latest published one when left out
Odpoveď
data je jeden objekt s týmito poľami:
- schedule_idstring · uuid
- location_idstring · uuid
- period_startstring · date
Local date of the location, YYYY-MM-DD
- period_endstring · date
Local date of the location, YYYY-MM-DD
- versioninteger
- published_atstring · date-time
ISO 8601 instant
- sha256string | null
SHA-256 of the canonical snapshot; null for versions published before it was kept
- shiftsarray of object
- idstring · uuid
- schedule_idstring · uuid
- versioninteger
The published version the shift is read from
- location_idstring · uuid
- position_idstring · uuid | null
- datestring · date
Local date the shift starts on
- start_localstring
Wall-clock time at the location, HH:MM
- end_localstring
Wall-clock end; not after start_local means the next day
- tzstring
IANA time zone of the location when the version was published
- starts_atstring · date-time
ISO 8601 instant with the location's offset at that moment
- ends_atstring · date-time
ISO 8601 instant with the location's offset at that moment
- break_mininteger
Unpaid break, minutes
- minutesinteger
Elapsed minutes from start to end
- paid_minutesinteger
Elapsed minutes less the break
- headcountinteger
People the shift needs
- assignmentsarray of object
- employee_idstring · uuid
- statestring
declined: the person gave the seat back and does not work it
assignedconfirmedswap_requesteddeclined
Príklad
curl https://api.taktovka.com/v1/schedules/{schedule_id} \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": {
"schedule_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"location_id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"period_start": "2026-10-19",
"period_end": "2026-10-25",
"version": 2,
"published_at": "2026-10-09T14:12:05.000Z",
"sha256": "4f1a0c7e9b2d3a6f8e5c1b0d9a7f6e4c3b2a1908f7e6d5c4b3a291807f6e5d4c",
"shifts": [
{
"id": "7d6c5b4a-3f2e-4d1c-8b0a-9f8e7d6c5b4a",
"schedule_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"version": 2,
"location_id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"position_id": "9e1d2c3b-4a5f-4e6d-8c7b-1a2b3c4d5e6f",
"date": "2026-10-24",
"start_local": "22:00",
"end_local": "06:00",
"tz": "Europe/Bratislava",
"starts_at": "2026-10-24T22:00:00+02:00",
"ends_at": "2026-10-25T06:00:00+01:00",
"break_min": 30,
"minutes": 540,
"paid_minutes": 510,
"headcount": 1,
"assignments": [
{
"employee_id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"state": "confirmed"
}
]
}
]
}
}GET/v1/shiftsZmeny zo zverejnených verzií v zvolenom období, aj pre jedného človeka.
Oprávnenie
schedules:read
Parametre
- fromv dotaze · string · datepovinný
First day, YYYY-MM-DD, included; years 2000–2100
- tov dotaze · string · datepovinný
Last day, YYYY-MM-DD, included; years 2000–2100
- locationv dotaze · string · uuid
Only this location
- employeev dotaze · string · uuid
Only this person
Odpoveď
data je zoznam, každá položka má tieto polia:
- idstring · uuid
- schedule_idstring · uuid
- versioninteger
The published version the shift is read from
- location_idstring · uuid
- position_idstring · uuid | null
- datestring · date
Local date the shift starts on
- start_localstring
Wall-clock time at the location, HH:MM
- end_localstring
Wall-clock end; not after start_local means the next day
- tzstring
IANA time zone of the location when the version was published
- starts_atstring · date-time
ISO 8601 instant with the location's offset at that moment
- ends_atstring · date-time
ISO 8601 instant with the location's offset at that moment
- break_mininteger
Unpaid break, minutes
- minutesinteger
Elapsed minutes from start to end
- paid_minutesinteger
Elapsed minutes less the break
- headcountinteger
People the shift needs
- assignmentsarray of object
- employee_idstring · uuid
- statestring
declined: the person gave the seat back and does not work it
assignedconfirmedswap_requesteddeclined
Príklad
curl "https://api.taktovka.com/v1/shifts?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"id": "7d6c5b4a-3f2e-4d1c-8b0a-9f8e7d6c5b4a",
"schedule_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"version": 2,
"location_id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"position_id": "9e1d2c3b-4a5f-4e6d-8c7b-1a2b3c4d5e6f",
"date": "2026-10-24",
"start_local": "22:00",
"end_local": "06:00",
"tz": "Europe/Bratislava",
"starts_at": "2026-10-24T22:00:00+02:00",
"ends_at": "2026-10-25T06:00:00+01:00",
"break_min": 30,
"minutes": 540,
"paid_minutes": 510,
"headcount": 1,
"assignments": [
{
"employee_id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"state": "confirmed"
}
]
}
],
"next_cursor": null
}GET/v1/hoursPlánované a započítané minúty za mesiac po ľuďoch, s fondom a potvrdením mesiaca.
Oprávnenie
schedules:readattendance:read (všetky)
S absences:read fond pracovného času započíta aj schválené neprítomnosti (fund.absence_minutes a fund.target_minutes).
Limit
Jedno volanie sa ráta ako 5 požiadaviek. Pre jednu firmu beží naraz len jedno. Druhé volanie počas neho dostane 429 s retry_after.
Parametre
- monthv dotaze · stringpovinný
Calendar month, YYYY-MM, years 2000–2100
- employeev dotaze · string · uuid
Only this person
- locationv dotaze · string · uuid
Only the plan and the counted time of this location; the fund and the signature stay the person's whole month
Odpoveď
data je zoznam, každá položka má tieto polia:
- employee_idstring · uuid
- monthstring
Calendar month, YYYY-MM, years 2000–2100
- planned_minutesinteger
Elapsed minutes of the published shifts starting in the month
- paid_planned_minutesinteger
The same less the breaks
- counted_minutesinteger | null
Counted time from the door scan and manual entries, matched to the roster the way the app counts it (rounding, the plan, the break the law requires, a minor's break); null when attendance is off at every place of the person and nothing was clocked
- fundobject | null
Only for an employment contract (SK TPP, CZ HPP) with agreed weekly hours
- weekly_hoursnumber
- fund_minutesinteger
Weekdays of the month that are not a day-off holiday, times a fifth of the weekly hours
- holiday_minutesinteger
Day-off holidays on weekdays of the month
- absence_minutesinteger | null
Weekdays covered by an approved absence; only with absences:read, null without it
- target_minutesinteger | null
The fund less approved absences: what the plan should reach; only with absences:read, null without it
- confirmedobject | null
The person confirmed the month in the app
- confirmed_atstring · date-time
ISO 8601 instant
- counted_minutesinteger
Counted minutes at the moment of the signature
- staleboolean
The month was corrected or counts differently since the signature
- mealsobject | null
Meals of the month for the payroll accountant, who applies the amounts; null when the company has set no meal policy in the app or the person's contract is outside it
- countinteger
Shifts that give a meal under the company's policy: more than 4 h of work in Slovakia, at least 3 h in Czechia, the break not counted
- secondinteger
Second meals, on shifts longer than 11 h including the break, when the policy gives them
- absence_daysinteger | null
Working days of approved absences that give a meal when the policy includes absences; only with absences:read and without `location`, null otherwise
- sourcestring | null
Where the shifts were read: counted time where the person clocked in that day at that place, the published plan elsewhere; null without a meal from work
attendanceplanboth
- formstring
How the company gives meals at the end of the month
kitchenvoucherallowancechoice
- choicestring | null
With form `choice` (Slovakia): what the person picked, null until they pick
voucherallowance
Príklad
curl "https://api.taktovka.com/v1/hours?month=2026-09" \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"employee_id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"month": "2026-10",
"planned_minutes": 10620,
"paid_planned_minutes": 9990,
"counted_minutes": 9870,
"fund": {
"weekly_hours": 40,
"fund_minutes": 10560,
"holiday_minutes": 0,
"absence_minutes": 960,
"target_minutes": 9600
},
"confirmed": {
"confirmed_at": "2026-11-02T07:41:10.000Z",
"counted_minutes": 9870,
"stale": false
},
"meals": {
"count": 20,
"second": 1,
"absence_days": 2,
"source": "both",
"form": "choice",
"choice": "allowance"
}
}
],
"next_cursor": null
}GET/v1/time-entriesPríchody a odchody z dochádzky vrátane opráv a skenov bez signálu.
Oprávnenie
attendance:read
Parametre
- fromv dotaze · string · datepovinný
First day, YYYY-MM-DD, included; years 2000–2100
- tov dotaze · string · datepovinný
Last day, YYYY-MM-DD, included; years 2000–2100
- employeev dotaze · string · uuid
Only this person
- locationv dotaze · string · uuid
Only this location
Odpoveď
data je zoznam, každá položka má tieto polia:
- idstring · uuid
- employee_idstring · uuid
- location_idstring · uuid
- shift_idstring · uuid | null
The planned shift the entry belongs to; null for unplanned work
- clock_instring · date-time
ISO 8601 instant with the location's offset at that moment
- clock_outstring · date-time | null
null while the person is still in
- sourcestring
qrmanualpos
- offline_inboolean
The clock-in was read on a phone without signal and delivered later
- offline_outboolean
- correctedboolean
A manager entered or corrected the row
- notestring | null
Reason of the manual entry or the last correction
Príklad
curl "https://api.taktovka.com/v1/time-entries?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
"employee_id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"location_id": "0c8e6a42-1f3b-4d5e-8a9b-7c6d5e4f3a2b",
"shift_id": "7d6c5b4a-3f2e-4d1c-8b0a-9f8e7d6c5b4a",
"clock_in": "2026-10-24T21:56:00+02:00",
"clock_out": "2026-10-25T06:04:00+01:00",
"source": "qr",
"offline_in": false,
"offline_out": false,
"corrected": false,
"note": null
}
],
"next_cursor": null
}GET/v1/absencesDovolenky a neprítomnosti. Druh (PN, OČR) a poznámka len s oprávnením Druh neprítomnosti.
Oprávnenie
absences:read
S absences:kinds pole kind ukáže skutočný druh (pn, ocr, other) namiesto absence a pribudne poznámka v note.
Parametre
- fromv dotaze · string · datepovinný
First day, YYYY-MM-DD, included; years 2000–2100
- tov dotaze · string · datepovinný
Last day, YYYY-MM-DD, included; years 2000–2100
- employeev dotaze · string · uuid
Only this person
- statusv dotaze · string
Only requests in this state
Hodnoty: requested, approved, rejected
Odpoveď
data je zoznam, každá položka má tieto polia:
- idstring · uuid
- employee_idstring · uuid
- kindstring
dovolenka | absence without absences:kinds; dovolenka | pn | ocr | other with it
dovolenkapnocrotherabsence
- date_fromstring · date
Local date of the location, YYYY-MM-DD
- date_tostring · date
Local date of the location, YYYY-MM-DD
- statusstring
requestedapprovedrejected
- notestring | null
Only with absences:kinds
- created_atstring · date-time
ISO 8601 instant
- approved_atstring · date-time | null
When the request was approved; null unless status is approved
Príklad
curl "https://api.taktovka.com/v1/absences?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"id": "8a9b0c1d-2e3f-4a5b-8c6d-7e8f9a0b1c2d",
"employee_id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"kind": "dovolenka",
"date_from": "2026-10-28",
"date_to": "2026-10-29",
"status": "approved",
"note": null,
"created_at": "2026-10-01T12:00:00.000Z",
"approved_at": "2026-10-01T16:20:00.000Z"
}
],
"next_cursor": null
}GET/v1/leave-balancesNárok, čerpanie a zostatok dovolenky za rok.
Oprávnenie
leave:read
Parametre
- yearv dotaze · integer
Calendar year; the company's current year when left out
- employeev dotaze · string · uuid
Only this person
Odpoveď
data je zoznam, každá položka má tieto polia:
- employee_idstring · uuid
- yearinteger
- unitstring
dayhour
- entitlednumber
- carried_overnumber
- usednumber
Approved leave of the year, past and planned
- pendingnumber
Requests of the year still waiting for a decision
- remainingnumber
Entitled plus carried over less used; may be below zero
Príklad
curl https://api.taktovka.com/v1/leave-balances \
-H "Authorization: Bearer $TAKTOVKA_API_KEY"{
"data": [
{
"employee_id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"year": 2026,
"unit": "day",
"entitled": 25,
"carried_over": 3,
"used": 12,
"pending": 2,
"remaining": 16
}
],
"next_cursor": null
}11. Pripojte Claude alebo ChatGPT
Svojho AI asistenta môžete pripojiť k Taktovke a pýtať sa ho vlastnými slovami: „kto je v sobotu na bare“, „koľko hodín má Petra oproti fondu“, „naplánuj budúci týždeň podľa minulého a skontroluj ho“. Asistent pracuje vo vašom mene a vidí len to, čo vidíte vy. Kľúč nepotrebujete: prihlásite sa ako do aplikácie a potvrdíte, čo asistent smie.
Adresa servera je https://mcp.taktovka.com/mcp. Funguje s každým klientom protokolu MCP (Model Context Protocol), ktorý vie prihlásenie cez OAuth.
Claude (web a aplikácia Claude Desktop)
- Otvorte Nastavenia, časť Konektory (Connectors), a kliknite na Pridať vlastný konektor (Add custom connector).
- Názov napíšte Taktovka, adresu
https://mcp.taktovka.com/mcpa potvrďte. - Otvorí sa stránka Taktovky. Prihláste sa, vyberte firmu, ak ste vo viacerých, a skontrolujte, čo asistent smie. Kliknite na Povoliť.
Na firemných tarifoch Claude môže konektor pridávať len správca vášho účtu v Claude.
Claude Code
claude mcp add --transport http taktovka https://mcp.taktovka.com/mcpPotom v Claude Code napíšte /mcp, vyberte taktovka a prihlásenie dokončite v prehliadači.
ChatGPT
ChatGPT pripája vlastné servery MCP v režime pre vývojárov (Nastavenia, Aplikácie, Rozšírené). Vytvorte aplikáciu s adresou https://mcp.taktovka.com/mcp a prihlásením OAuth, ďalej rovnako ako pri Claude. Či ho máte k dispozícii, závisí od vášho tarifu v ChatGPT.
Čo asistent smie
| Oprávnenie | Na stránke súhlasu | Čo asistent smie |
|---|---|---|
| mcp:read | Čítať rozpis a tím | Všetko, čo vidíte v aplikácii vy: rozpis, hodiny oproti fondu, neprítomnosti, dovolenku, dostupnosť. |
| mcp:draft | Pripravovať návrh rozpisu | Len vlastník a vedúci: pridať, presunúť, zmeniť alebo zmazať zmenu v týždni, ktorý ešte nebol zverejnený. |
| mcp:requests | Podávať vaše žiadosti | Požiadať o voľno, prihlásiť sa na voľnú zmenu, zadať svoju dostupnosť. Schvaľuje ich vedúci ako vždy. |
Každý návrh asistenta Taktovka hneď skontroluje podľa Zákonníka práce a vráti mu zoznam porušení. Zverejní ho však vždy človek v aplikácii, lebo so zverejnením dostanú ľudia oznámenie.
Čo asistent nesmie
- Zverejniť rozpis, schváliť dovolenku alebo žiadosť o zmenu.
- Meniť týždeň, ktorý už bol zverejnený, aj keď sa potom upravoval.
- Meniť nastavenia firmy, ľudí, kľúče API, predplatné ani sťahovať exporty.
- Vidieť kontakty, hodinové sadzby a dátumy narodenia. Pri neprítomnosti vidí len to, že človek chýba; PN a OČR ukáže ako neprítomnosť a poznámky k nej nevidí vôbec.
Na čo dať pozor
- Čo si asistent prečíta, spracúva aj jeho poskytovateľ (Anthropic, OpenAI a iní) podľa svojich podmienok. Pripájajte len asistenta, ktorého smiete používať na pracovné údaje.
- Mená a poznámky píšu ľudia. Asistentovi hovoríme, že sú to len údaje, nie pokyny, ale jazykový model sa dá oklamať. Návrhy od asistenta si pred zverejnením pozrite. Každá jeho zmena sa zapisuje do auditného záznamu s menom asistenta.
- Na stránke súhlasu vždy skontrolujte názov asistenta a adresu, kam sa po povolení vrátite. Ak ste pripojenie nezačali vy, kliknite na Zamietnuť.
Ako asistenta odpojiť
V aplikácii otvorte Profil, časť Pripojené aplikácie, a pri asistentovi kliknite na Odpojiť. Asistent stratí prístup hneď, aj uprostred rozhovoru. Pripojenie platí pre jednu firmu; ak ste vo viacerých, povoľujete každú zvlášť. Pripojenie, ktoré asistent 30 dní nepoužije, skončí samo.