Rozpis zmienZákonník práceDochádzka QRCenník
CZPrihlásiť saVyskúšať zadarmoVyskúšať

Integrácie

API: údaje z Taktovky vo vašom programe

Mzdový program, účtovníčka alebo vlastná tabuľka si zmeny, odpracované hodiny a dovolenky vezmú z Taktovky samy, bez ručného exportu. API údaje len číta a vidí iba vašu firmu.

API v1, 24. 9. 2026

Obsah

  1. 01 Na čo je API
  2. 02 Ako získať kľúč
  3. 03 Prvá požiadavka
  4. 04 Tri bežné postupy
  5. 05 Python a Excel
  6. 06 Oprávnenia
  7. 07 Limity a chyby
  8. 08 Čo API nerobí
  9. 09 Verzie a zmeny
  10. 10 Zoznam endpointov
  11. 11 Pripojte Claude alebo ChatGPT

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ľúč

  1. Prihláste sa ako vlastník firmy. Kľúče vytvára a vidí len vlastník, vedúci zmien nie.
  2. Otvorte stránku Firma a v časti API a integrácie kliknite na Nový kľúč.
  3. 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.
  4. 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-DD podľa kalendára prevádzky, začiatok a koniec zmeny HH:MM miestneho času, okamih (napríklad príchod) ISO 8601 s posunom voči UTC a časové pásmo napríklad Europe/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.

  1. GET /v1/employees?active=all vráti mená k employee_id, aj ľuďom, ktorí počas mesiaca odišli.
  2. GET /v1/hours?month=2026-09 vráti po ľuďoch plánované a započítané minúty, fond pracovného času a to, či človek mesiac potvrdil. counted_minutes je null, keď človek nemá dochádzku zapnutú na žiadnej prevádzke.
  3. GET /v1/absences?from=2026-09-01&to=2026-09-30&status=approved vráti schválené dovolenky a neprítomnosti v mesiaci.
  4. GET /v1/leave-balances?year=2026 vrá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.

  1. GET /v1/locations vráti id prevádzok.
  2. GET /v1/schedules?location=<id>&from=2026-09-28&to=2026-10-25 vráti zverejnené týždne prevádzky, pri každom poslednú verziu (version) a odtlačok (sha256).
  3. GET /v1/schedules/{schedule_id} vráti zmeny jedného týždňa. Zmeny viacerých týždňov naraz vráti GET /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.

  1. GET /v1/time-entries?from=2026-09-01&to=2026-09-30 vráti každý príchod a odchod s označením, či ho vedúci opravil a či bol naskenovaný bez signálu.
  2. GET /v1/hours?month=2026-09 vrá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)

  1. 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.
  2. 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
  1. Keď sa Excel spýta, ako sa k adrese pripojiť, vyberte Anonymne. Kľúč už ide v hlavičke.
  2. Stĺpce fund a confirmed sú vnorené. Rozbalíte ich šípkou v hlavičke stĺpca. Potom zvoľte Zavrieť a načítať (Close & Load).
  3. Na ďalší mesiac stačí prepísať month v 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ávnenieV aplikáciiČo kľúč smie čítať
company:readFirma a prevádzkyFirma, prevádzky a pozície.
people:readĽudiaMeno, typ zmluvy, pozície, domovská prevádzka. Bez kontaktov.
people:contactKontakty ľudíE-mail a telefón ľudí. Len spolu s people:read.
schedules:readZverejnené rozpisyZverejnené rozpisy, zmeny a plánované hodiny.
attendance:readDochádzkaPríchody a odchody z dochádzky, započítaný čas.
absences:readNeprítomnostiDovolenky a neprítomnosti. PN a OČR vráti len ako absence, bez poznámky.
absences:kindsDruh neprítomnostiSkutočný druh neprítomnosti (PN, OČR) a poznámka. Len spolu s absences:read.
leave:readZostatok dovolenkyNá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/hours počí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-Remaining a RateLimit-Reset. Nad limit príde 429 s hlavičkou Retry-After: počkajte toľko sekúnd a skúste znova.
  • Obdobie from až to môže mať najviac 93 dní, pri /v1/schedules 366 dní. Dlhšie skončí chybou range_too_long, stačí ho rozdeliť po mesiacoch.
  • Ľudia, prevádzky a pozície prídu po 200 položkách, s parametrom limit až po 500. Keď je ich viac, next_cursor nie je null: pošlite ho v parametri cursor a 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"
  }
}
StavcodeKedy
401unauthenticatedChýba hlavička Authorization alebo nezačína Bearer.
401invalid_keyTaký kľúč nepoznáme.
401key_revoked, key_expiredKľúč bol zrušený alebo mu skončila platnosť.
403insufficient_scopeKľúču chýba oprávnenie, ktoré uvádza pole required_scope.
403https_requiredPožiadavka prišla cez http. Používajte https, a ak niesla kľúč, vymeňte ho.
403module_offFirma alebo prevádzka nemá zapnutú časť aplikácie, napríklad dochádzku.
400validation_failedZlý parameter. Pole issues povie ktorý.
400range_too_longObdobie je dlhšie, ako dovoľuje max_days.
400key_in_queryKľúč prišiel v adrese. Posielajte ho len v hlavičke a taký kľúč radšej vymeňte.
404not_foundTaký záznam vo vašej firme nie je.
405method_not_allowedAPI prijíma len GET.
429rate_limitedPriveľa požiadaviek. Počkajte toľko sekúnd, koľko hovorí retry_after.
500server_errorChyba 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)

  1. Otvorte Nastavenia, časť Konektory (Connectors), a kliknite na Pridať vlastný konektor (Add custom connector).
  2. Názov napíšte Taktovka, adresu https://mcp.taktovka.com/mcp a potvrďte.
  3. 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/mcp

Potom 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ávnenieNa stránke súhlasuČo asistent smie
mcp:readČítať rozpis a tímVšetko, čo vidíte v aplikácii vy: rozpis, hodiny oproti fondu, neprítomnosti, dovolenku, dostupnosť.
mcp:draftPripravovať návrh rozpisuLen vlastník a vedúci: pridať, presunúť, zmeniť alebo zmazať zmenu v týždni, ktorý ešte nebol zverejnený.
mcp:requestsPodávať vaše žiadostiPož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.

Rozpis zmien a dochádzka pre gastro prevádzky na Slovensku a v Česku.

  • hello@taktovka.comOtázky pred kúpou a ukážka
  • podpora@taktovka.comKeď niečo nefunguje

Opýtajte sa AI na Taktovku

ChatGPTClaudePerplexity

Produkt

Rozpis zmienKontrola paragrafovDochádzka QRPWA pre zamestnancovCenník

Riešenia

Program na rozpis zmienDochádzkový systémRozpis zmien zadarmoPre reštauráciePre kaviarnePre bary a klubyPre hotely a penziónyPre pekárnePre malé firmyPre voľný čas a športPre predajneKalkulačka nákladovKalkulačka počtu ľudí

Zákonník práce

Všetky témy§ 92 odpočinok§ 91 prestávka§ 90 rozvrh zmienMladistvíDohody a brigádyKalkulačka Čo mi patrí

Firma

Ochrana údajovObchodné podmienkySprostredkovateliaVzor pre zamestnancovStav služiebPrihlásiť sa
© 2026 TaktovkaInformácie o paragrafoch nie sú právna rada.Čeština