Reference API
Majetek, mzdy a cesty
Evidence dlouhodobého majetku a odpisů, zaměstnanci, výpočet a zaúčtování mezd, měsíční hlášení JMHZ a cestovní náhrady.
GET Seznam dlouhodobého majetku s odpisy za rok
/entities/{entity_id}/assets
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí všechny karty dlouhodobého majetku firmy včetně drobného a vyřazeného majetku, seřazené podle data uvedení do užívání a ID. Ke každé kartě připojí účet oprávek a odpisy za zvolený kalendářní rok: daňový odpis podle odpisové skupiny (celá částka, u osobního automobilu M1 před krácením na uznatelnou část), účetní odpis (součet měsíčních odpisů v roce) a zůstatek daňové vstupní ceny na konci roku.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
year | dotaz | celé číslo | ne | Kalendářní rok pro pole tax_this_year, accounting_this_year a remaining_tax. Bez parametru nebo při nečíselné hodnotě aktuální rok; hodnoty mimo rozsah se zarovnají na 2000 až 2100. Rozsah od 2000 do 2100. Příklad 2026. |
Odpověď
200 application/json Pole karet majetku.
| Pole | Význam |
|---|---|
id, name, inventory_number, note | Identifikace karty |
category | tangible (hmotný), intangible (nehmotný) nebo low_value (drobný – neodpisuje se) |
account_code, accumulated_account | Účet majetku a z něj odvozený účet oprávek |
acquired_on, in_use_from, disposed_on, disposal_kind | Pořízení, uvedení do užívání a vyřazení |
price, residual_value, useful_life_months | Pořizovací cena, zbytková hodnota a doba účetního odpisování v měsících |
tax_group, tax_method, vehicle_m1 | Parametry daňového odpisování |
document_id | Doklad o pořízení, nebo null |
tax_this_year | Daňový odpis v zadaném roce; 0, když se v roce daňově neodpisuje |
accounting_this_year | Účetní odpis v zadaném roce; 0, když se v roce neodpisuje |
remaining_tax | Zůstatek daňové vstupní ceny po odpisu roku; null, když rok v daňovém plánu není |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 500 | – | Některá odpisovaná karta má zbytkovou hodnotu mimo 0 až pořizovací cenu, nebo při zadané odpisové skupině rok vyřazení před rokem uvedení do užívání – výpočet plánu selže a seznam se nevrátí (známá chyba, viz createAsset) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/assets?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/assets?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 2,
"account_code": "022",
"acquired_on": "2026-02-23",
"category": "tangible",
"created_at": "2026-09-28T10:00:00.000Z",
"disposal_kind": null,
"disposed_on": null,
"document_id": 72,
"in_use_from": "2026-02-25",
"inventory_number": "DM-002",
"name": "Osobní automobil Škoda Octavia Combi",
"note": null,
"price": 689000.0,
"residual_value": 120000.0,
"tax_group": 2,
"tax_method": "accelerated",
"updated_at": "2026-09-28T10:00:00.000Z",
"useful_life_months": 60,
"vehicle_m1": false,
"accumulated_account": "082",
"tax_this_year": 137800.0,
"accounting_this_year": 94840.0,
"remaining_tax": 551200.0
},
{
"id": 1,
"account_code": "022",
"acquired_on": "2026-03-03",
"category": "tangible",
"created_at": "2026-09-28T10:00:00.000Z",
"disposal_kind": null,
"disposed_on": null,
"document_id": 71,
"in_use_from": "2026-03-05",
"inventory_number": "DM-001",
"name": "Notebook MacBook Pro 16\"",
"note": null,
"price": 84990.0,
"residual_value": 0.0,
"tax_group": 1,
"tax_method": "straight",
"updated_at": "2026-09-28T10:00:00.000Z",
"useful_life_months": 36,
"vehicle_m1": false,
"accumulated_account": "082",
"tax_this_year": 16998.0,
"accounting_this_year": 21249.0,
"remaining_tax": 67992.0
}
]
POST Zařazení majetku do evidence
/entities/{entity_id}/assets
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Založí kartu dlouhodobého majetku a vrátí ji s odpisovými plány. Účetní odpisy jsou rovnoměrné měsíční od měsíce následujícího po uvedení do užívání po dobu useful_life_months ze základu pořizovací cena minus zbytková hodnota, zaokrouhlené na celé koruny nahoru (u majetku uvedeného do užívání před 1. 1. 2026 matematicky); poslední měsíc dorovná zbytek. Daňový plán se počítá jen se zadanou odpisovou skupinou, z pořizovací ceny, od roku uvedení do užívání, rovnoměrně (§ 31 ZDP) nebo zrychleně (§ 32 ZDP). Drobný majetek (low_value) žádný plán nemá. API nepodporuje technické zhodnocení, přerušení odpisování, zvýšený odpis v prvním roce, daňové odpisy nehmotného majetku podle § 32a ZDP, fyzickou inventuru ani evidenci zásob.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
asset | objekt | ano | |
asset. | text | ano | Název majetku, nejvýše 200 znaků |
asset. | text | ne | Inventární číslo (jen evidence, jedinečnost se nekontroluje) |
asset. | text | ne | Druh majetku: tangible hmotný, intangible nehmotný, low_value drobný (bez odpisových plánů a bez zaúčtování odpisů). Hmotný a nehmotný se počítají stejně – se zadanou skupinou se i nehmotný majetek odpisuje daňově podle § 31 nebo § 32 ZDP. Hodnoty: tangible, intangible, low_value. Výchozí tangible. |
asset. | text | ne | Účet majetku: začíná nulou a má 3 až 9 číslic (např. 022). Z prvních tří číslic se odvodí účet oprávek: 013→073, 014→074, 015→075, 019→079, 021→081, 022→082, 025→085, 026→086, 029→089, jinak 082. Výchozí 022. |
asset. | datum | ne | Datum pořízení; jen evidence, odpisy se počítají od in_use_from |
asset. | datum | ano | Datum uvedení do užívání – účetní odpisy začínají následujícím měsícem, daňové rokem uvedení |
asset. | číslo | ano | Pořizovací (vstupní) cena v Kč, větší než 0; základ účetních i daňových odpisů |
asset. | celé číslo | ne | Odpisová skupina podle přílohy č. 1 ZDP; null = daňově se neodpisuje Hodnoty: 1, 2, 3, 4, 5, 6. |
asset. | text | ne | Daňové odpisování: straight rovnoměrné (§ 31 ZDP), accelerated zrychlené (§ 32 ZDP) Hodnoty: straight, accelerated. Výchozí straight. |
asset. | celé číslo | ne | Doba účetního odpisování v měsících Výchozí 36. Rozsah od 1 do 1200. |
asset. | číslo | ne | Zbytková hodnota vyloučená z účetních odpisů; musí ležet mezi 0 a pořizovací cenou. API to při uložení neověří – hodnotu mimo rozsah uloží a u hmotného a nehmotného majetku pak výpočet plánů skončí chybou 500 (viz chyby). Výchozí 0. |
asset. | datum | ne | Datum vyřazení: účetní odpisy běží včetně měsíce vyřazení, daňový odpis roku vyřazení je poloviční (v roce uvedení do užívání nulový). Vyřazení samo nic nezaúčtuje. Rok vyřazení nesmí předcházet roku uvedení do užívání; API to neověří a při zadané odpisové skupině výpočet daňového plánu skončí chybou 500 (viz chyby). |
asset. | text | ne | Důvod vyřazení, volný text bez vlivu na výpočet; aplikace používá sale, scrap, damage a gift |
asset. | celé číslo | ne | ID dokladu o pořízení v této firmě; neexistující ID se uloží jako null |
asset. | text | ne | Poznámka |
asset. | ano/ne | ne | Osobní automobil kategorie M1: je-li uveden do užívání od zdaňovacího období začínajícího 1. 1. 2024, do daňových výdajů jde jen poměrná část odpisu 2 000 000 Kč / vstupní cena (pole deductible v daňovém plánu). Výchozí false. |
Odpověď
201 application/json Založená karta majetku s odpisovými plány.
| Pole | Význam |
|---|---|
id, name, category, account_code, accumulated_account, in_use_from, price, … | Pole karty jako v seznamu majetku |
tax | Daňový plán po letech: year, rate_or_coefficient, kind (first_year, following_year, disposal), amount, deductible, accumulated, remaining |
accounting | Účetní plán po měsících: month (první den měsíce), year, amount, accumulated, remaining (pořizovací cena minus oprávky) |
accounting_yearly | Účetní plán sečtený po kalendářních letech: year, amount, accumulated, remaining |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 500 | – | Hmotný nebo nehmotný majetek se zbytkovou hodnotou mimo 0 až pořizovací cenu, nebo s odpisovou skupinou a rokem vyřazení před rokem uvedení do užívání. Karta i událost asset.created se přesto uloží a dokud se hodnoty neopraví (PATCH) nebo karta nesmaže, vrací chybu 500 i seznam, detail a plán majetku a zaúčtování odpisů (známá chyba: výpočet plánu vyhodí výjimku místo chyby 422). |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří kartu majetku a zapíše událost asset.created do historie firmy. Nic nezaúčtuje – ani pořízení, ani odpisy; odpisy se zaúčtují až voláním POST /entities/{entity_id}/assets/depreciate.
- Opakování
- Každé volání založí novou kartu; duplicity se nekontrolují.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"asset":{"name":"Server Dell PowerEdge T160","inventory_number":"DM-010","category":"tangible","account_code":"022","acquired_on":"2026-02-10","in_use_from":"2026-02-15","price":145000,"tax_group":1,"tax_method":"straight","useful_life_months":48,"residual_value":0}}' \
https://techtools.cz/ucetnictvi-api/entities/1/assetsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/assets', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"asset": {
"name": "Server Dell PowerEdge T160",
"inventory_number": "DM-010",
"category": "tangible",
"account_code": "022",
"acquired_on": "2026-02-10",
"in_use_from": "2026-02-15",
"price": 145000,
"tax_group": 1,
"tax_method": "straight",
"useful_life_months": 48,
"residual_value": 0
}
})
});
const data = await response.json();{
"id": 4,
"account_code": "022",
"acquired_on": "2026-02-10",
"category": "tangible",
"created_at": "2026-09-28T10:00:00.000Z",
"disposal_kind": null,
"disposed_on": null,
"document_id": null,
"in_use_from": "2026-02-15",
"inventory_number": "DM-010",
"name": "Server Dell PowerEdge T160",
"note": null,
"price": 145000.0,
"residual_value": 0.0,
"tax_group": 1,
"tax_method": "straight",
"updated_at": "2026-09-28T10:00:00.000Z",
"useful_life_months": 48,
"vehicle_m1": false,
"accumulated_account": "082",
"tax": [
{
"year": 2026,
"rate_or_coefficient": 20.0,
"kind": "first_year",
"amount": 29000.0,
"deductible": 29000.0,
"accumulated": 29000.0,
"remaining": 116000.0
},
{
"year": 2027,
"rate_or_coefficient": 40.0,
"kind": "following_year",
"amount": 58000.0,
"deductible": 58000.0,
"accumulated": 87000.0,
"remaining": 58000.0
}
],
"accounting": [
{
"month": "2026-03-01",
"year": 2026,
"amount": 3021.0,
"accumulated": 3021.0,
"remaining": 141979.0
},
{
"month": "2026-04-01",
"year": 2026,
"amount": 3021.0,
"accumulated": 6042.0,
"remaining": 138958.0
}
],
"accounting_yearly": [
{
"year": 2026,
"amount": 30210.0,
"accumulated": 30210.0,
"remaining": 114790.0
},
{
"year": 2027,
"amount": 36252.0,
"accumulated": 66462.0,
"remaining": 78538.0
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Detail majetku s odpisovými plány
/entities/{entity_id}/assets/{id}
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí kartu majetku s daňovým odpisovým plánem po letech, účetním plánem po měsících a jeho ročním souhrnem. Stejná data vrací GET /entities/{entity_id}/assets/{id}/schedule.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID karty majetku Příklad 5. |
Odpověď
200 application/json Karta majetku s plány tax, accounting a accounting_yearly (stejná struktura jako při založení).
| Pole | Význam |
|---|---|
tax | Daňový plán po letech; prázdný bez odpisové skupiny a u drobného majetku |
accounting | Účetní plán po měsících; prázdný u drobného majetku |
accounting_yearly | Účetní odpisy po kalendářních letech |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 500 | – | Karta má zbytkovou hodnotu mimo 0 až pořizovací cenu, nebo při zadané odpisové skupině rok vyřazení před rokem uvedení do užívání (známá chyba, viz createAsset) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/assets/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/assets/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"id": 1,
"account_code": "022",
"acquired_on": "2026-03-03",
"category": "tangible",
"created_at": "2026-09-28T10:00:00.000Z",
"disposal_kind": null,
"disposed_on": null,
"document_id": 71,
"in_use_from": "2026-03-05",
"inventory_number": "DM-001",
"name": "Notebook MacBook Pro 16\"",
"note": null,
"price": 84990.0,
"residual_value": 0.0,
"tax_group": 1,
"tax_method": "straight",
"updated_at": "2026-09-28T10:00:00.000Z",
"useful_life_months": 36,
"vehicle_m1": false,
"accumulated_account": "082",
"tax": [
{
"year": 2026,
"rate_or_coefficient": 20.0,
"kind": "first_year",
"amount": 16998.0,
"deductible": 16998.0,
"accumulated": 16998.0,
"remaining": 67992.0
},
{
"year": 2027,
"rate_or_coefficient": 40.0,
"kind": "following_year",
"amount": 33996.0,
"deductible": 33996.0,
"accumulated": 50994.0,
"remaining": 33996.0
}
],
"accounting": [
{
"month": "2026-04-01",
"year": 2026,
"amount": 2361.0,
"accumulated": 2361.0,
"remaining": 82629.0
},
{
"month": "2026-05-01",
"year": 2026,
"amount": 2361.0,
"accumulated": 4722.0,
"remaining": 80268.0
}
],
"accounting_yearly": [
{
"year": 2026,
"amount": 21249.0,
"accumulated": 21249.0,
"remaining": 63741.0
},
{
"year": 2027,
"amount": 28332.0,
"accumulated": 49581.0,
"remaining": 35409.0
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
PATCH Úprava nebo vyřazení karty majetku
/entities/{entity_id}/assets/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Změní zaslaná pole karty (neposlaná zůstanou beze změny) a vrátí kartu s přepočtenými plány. Vyřazení se zadává polem disposed_on (a disposal_kind). Už zaúčtované odpisy se nezmění – pro jejich přepočet zavolejte POST /entities/{entity_id}/assets/depreciate za dotčený rok.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID karty majetku Příklad 5. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
asset | objekt | ano | |
asset. | text | ne | Název majetku, nejvýše 200 znaků |
asset. | text | ne | Inventární číslo |
asset. | text | ne | Druh majetku (low_value = drobný bez odpisů) Hodnoty: tangible, intangible, low_value. |
asset. | text | ne | Účet majetku začínající nulou, 3 až 9 číslic |
asset. | datum | ne | Datum pořízení |
asset. | datum | ne | Datum uvedení do užívání |
asset. | číslo | ne | Pořizovací cena v Kč, větší než 0 |
asset. | celé číslo | ne | Odpisová skupina; null zruší daňové odpisy Hodnoty: 1, 2, 3, 4, 5, 6. |
asset. | text | ne | Rovnoměrné nebo zrychlené daňové odpisování Hodnoty: straight, accelerated. |
asset. | celé číslo | ne | Doba účetního odpisování v měsících Rozsah od 1 do 1200. |
asset. | číslo | ne | Zbytková hodnota, mezi 0 a pořizovací cenou; hodnotu mimo rozsah API uloží a výpočet plánů skončí chybou 500 (viz chyby) |
asset. | datum | ne | Datum vyřazení; null vyřazení zruší. Rok vyřazení před rokem uvedení do užívání API uloží a při zadané odpisové skupině výpočet skončí chybou 500 |
asset. | text | ne | Důvod vyřazení (volný text; aplikace používá sale, scrap, damage, gift) |
asset. | celé číslo | ne | Doklad o pořízení; neexistující ID se uloží jako null |
asset. | text | ne | Poznámka |
asset. | ano/ne | ne | Osobní automobil M1 s krácením daňově uznatelného odpisu |
Odpověď
200 application/json Upravená karta s přepočtenými plány tax, accounting a accounting_yearly.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 500 | – | Karta má po úpravě zbytkovou hodnotu mimo 0 až pořizovací cenu, nebo při zadané odpisové skupině rok vyřazení před rokem uvedení do užívání – změny i událost asset.updated se přesto uloží (známá chyba, viz createAsset) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží změny karty a zapíše událost asset.updated. Zaúčtované odpisy ani jiné účetní zápisy nemění; vyřazení se nezaúčtuje.
- Opakování
- Opakování se stejnými daty kartu nezmění, ale pokaždé zapíše událost asset.updated.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"asset":{"note":"Umístění – kancelář Brno","useful_life_months":48}}' \
https://techtools.cz/ucetnictvi-api/entities/1/assets/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/assets/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"asset": {
"note": "Umístění – kancelář Brno",
"useful_life_months": 48
}
})
});
const data = await response.json();{
"useful_life_months": 48,
"note": "Umístění – kancelář Brno",
"price": 84990.0,
"id": 1,
"account_code": "022",
"acquired_on": "2026-03-03",
"category": "tangible",
"created_at": "2026-09-28T10:00:00.000Z",
"disposal_kind": null,
"disposed_on": null,
"document_id": 71,
"in_use_from": "2026-03-05",
"inventory_number": "DM-001",
"name": "Notebook MacBook Pro 16\"",
"residual_value": 0.0,
"tax_group": 1,
"tax_method": "straight",
"updated_at": "2026-09-28T10:00:00.000Z",
"vehicle_m1": false,
"accumulated_account": "082",
"tax": [
{
"year": 2026,
"rate_or_coefficient": 20.0,
"kind": "first_year",
"amount": 16998.0,
"deductible": 16998.0,
"accumulated": 16998.0,
"remaining": 67992.0
},
{
"year": 2027,
"rate_or_coefficient": 40.0,
"kind": "following_year",
"amount": 33996.0,
"deductible": 33996.0,
"accumulated": 50994.0,
"remaining": 33996.0
}
],
"accounting": [
{
"month": "2026-04-01",
"year": 2026,
"amount": 1771.0,
"accumulated": 1771.0,
"remaining": 83219.0
},
{
"month": "2026-05-01",
"year": 2026,
"amount": 1771.0,
"accumulated": 3542.0,
"remaining": 81448.0
}
],
"accounting_yearly": [
{
"year": 2026,
"amount": 15939.0,
"accumulated": 15939.0,
"remaining": 69051.0
},
{
"year": 2027,
"amount": 21252.0,
"accumulated": 37191.0,
"remaining": 47799.0
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
DELETE Smazání majetku včetně jeho odpisových zápisů
/entities/{entity_id}/assets/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Smaže kartu majetku spolu se všemi účetními zápisy jejích odpisů ze všech let. Leží-li kterýkoli z těchto zápisů v uzamčeném období, nic nesmaže. Majetek, který má v účetnictví zůstat, místo mazání vyřaďte polem disposed_on.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID karty majetku Příklad 5. |
Odpověď
204 Prázdná odpověď.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Některý odpisový zápis majetku leží v uzamčeném období – „Období do D. M. RRRR je uzamčeno – zaúčtování nelze změnit“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Smaže kartu a všechny její odpisové zápisy (zdroj asset) bez ohledu na rok a zapíše událost asset.deleted. Doklad o pořízení a jeho zaúčtování zůstanou.
- Opakování
- Druhé smazání vrátí 404.
Příklad
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/assets/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/assets/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();soubor, 0 bajtů
POST Zaúčtování ročních účetních odpisů majetku
/entities/{entity_id}/assets/depreciate
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Zaúčtuje účetní odpisy všech karet majetku za kalendářní rok year. Každé kartě nejdřív smaže dosavadní odpisové zápisy s datem v tomto roce a pak vytvoří jeden zápis k 31. 12. roku: MD 551 / D účet oprávek (07x nebo 08x podle účtu majetku) ve výši součtu měsíčních účetních odpisů připadajících na kalendářní rok. Karty bez odpisu v roce (drobný majetek, doodepsaný nebo dosud nezařazený) se jen vynechají. Daňové odpisy se neúčtují – slouží jen výpočtu daně z příjmů. Funguje jen v podvojném účetnictví; hospodářský rok firmy se nezohledňuje.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
year | dotaz | celé číslo | ne | Kalendářní rok odpisů. Bez parametru nebo při nečíselné hodnotě aktuální rok; hodnoty mimo rozsah se zarovnají na 2000 až 2100. Budoucí rok se neodmítá. Rozsah od 2000 do 2100. Příklad 2026. |
Odpověď
200 application/json Souhrn zaúčtovaných odpisů.
| Pole | Význam |
|---|---|
year | Zaúčtovaný rok |
posted | Vytvořené zápisy: asset_id, name, amount |
total | Součet zaúčtovaných odpisů v Kč |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Firma nevede podvojné účetnictví – „Odpisy se účtují jen v podvojném účetnictví“ |
| 422 | – | 31. 12. zadaného roku leží v uzamčeném období – „Rok RRRR je uzamčený – odpisy už nelze měnit“ |
| 500 | – | Některá karta má zbytkovou hodnotu mimo 0 až pořizovací cenu, nebo při zadané odpisové skupině rok vyřazení před rokem uvedení do užívání – transakce se vrátí a nic se nezaúčtuje (známá chyba, viz createAsset) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- V jedné transakci smaže odpisové zápisy (zdroj asset) s datem v daném roce a vytvoří nové zápisy MD 551 / D 07x–08x k 31. 12.; zapíše událost asset.depreciated. Nic nevyplácí ani nepodává.
- Opakování
- Opakované volání za stejný rok smaže dřívější odpisové zápisy roku a vytvoří je znovu podle aktuálních karet (bez změny karet se stejnými částkami); každé volání zapíše novou událost do historie.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/assets/depreciate?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/assets/depreciate?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST'
});
const data = await response.json();{
"year": 2026,
"posted": [
{
"asset_id": 1,
"name": "Notebook MacBook Pro 16\"",
"amount": 21249.0
},
{
"asset_id": 2,
"name": "Osobní automobil Škoda Octavia Combi",
"amount": 94840.0
}
],
"total": 116089.0
}
GET Odpisové plány majetku
/entities/{entity_id}/assets/{id}/schedule
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí totéž co detail majetku (GET /entities/{entity_id}/assets/{id}): kartu s daňovým plánem po letech (tax), účetním plánem po měsících (accounting) a účetními odpisy po kalendářních letech (accounting_yearly).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID karty majetku Příklad 5. |
Odpověď
200 application/json Karta majetku s plány tax, accounting a accounting_yearly.
| Pole | Význam |
|---|---|
tax | year, rate_or_coefficient (sazba v % nebo koeficient), kind, amount, deductible (u M1 po krácení), accumulated, remaining |
accounting | month, year, amount, accumulated, remaining |
accounting_yearly | year, amount, accumulated, remaining |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 500 | – | Karta má zbytkovou hodnotu mimo 0 až pořizovací cenu, nebo při zadané odpisové skupině rok vyřazení před rokem uvedení do užívání (známá chyba, viz createAsset) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/assets/1/scheduleJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/assets/1/schedule', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"id": 1,
"account_code": "022",
"acquired_on": "2026-03-03",
"category": "tangible",
"created_at": "2026-09-28T10:00:00.000Z",
"disposal_kind": null,
"disposed_on": null,
"document_id": 71,
"in_use_from": "2026-03-05",
"inventory_number": "DM-001",
"name": "Notebook MacBook Pro 16\"",
"note": null,
"price": 84990.0,
"residual_value": 0.0,
"tax_group": 1,
"tax_method": "straight",
"updated_at": "2026-09-28T10:00:00.000Z",
"useful_life_months": 36,
"vehicle_m1": false,
"accumulated_account": "082",
"tax": [
{
"year": 2026,
"rate_or_coefficient": 20.0,
"kind": "first_year",
"amount": 16998.0,
"deductible": 16998.0,
"accumulated": 16998.0,
"remaining": 67992.0
},
{
"year": 2027,
"rate_or_coefficient": 40.0,
"kind": "following_year",
"amount": 33996.0,
"deductible": 33996.0,
"accumulated": 50994.0,
"remaining": 33996.0
}
],
"accounting": [
{
"month": "2026-04-01",
"year": 2026,
"amount": 2361.0,
"accumulated": 2361.0,
"remaining": 82629.0
},
{
"month": "2026-05-01",
"year": 2026,
"amount": 2361.0,
"accumulated": 4722.0,
"remaining": 80268.0
}
],
"accounting_yearly": [
{
"year": 2026,
"amount": 21249.0,
"accumulated": 21249.0,
"remaining": 63741.0
},
{
"year": 2027,
"amount": 28332.0,
"accumulated": 49581.0,
"remaining": 35409.0
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Seznam pracovníků
/entities/{entity_id}/employees
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí všechny pracovníky firmy včetně těch s ukončeným vztahem, seřazené podle příjmení a jména. Obsahuje i osobní údaje z karty (údaje pro JMHZ v details, číslo účtu), které vidí každý člen firmy včetně role viewer.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Odpověď
200 application/json Pole karet pracovníků.
| Pole | Význam |
|---|---|
id, first_name, last_name, full_name, personal_number | Identifikace pracovníka |
contract | hpp, dpc nebo dpp |
gross_wage | Sjednaná měsíční mzda nebo odměna v Kč |
started_on, ended_on | Trvání pracovněprávního vztahu |
declaration, disability, ztpp, student | Údaje pro slevy na dani a pojistné |
health_insurer, bank_account, email, note | Kontaktní a evidenční údaje |
children | Děti pro daňové zvýhodnění |
details | Údaje pro JMHZ a další příznaky (objekt); null, dokud nebyly zadány |
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/employeesJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/employees', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 3,
"bank_account": null,
"children": [],
"contract": "dpp",
"created_at": "2026-09-28T10:00:00.000Z",
"declaration": false,
"details": null,
"disability": null,
"email": null,
"ended_on": null,
"first_name": "Tereza",
"gross_wage": 6000.0,
"health_insurer": "111",
"last_name": "Nová",
"note": null,
"personal_number": null,
"started_on": "2026-10-01",
"student": false,
"updated_at": "2026-09-28T10:00:00.000Z",
"ztpp": false,
"full_name": "Tereza Nová"
},
{
"id": 1,
"bank_account": "7385178468/0800",
"children": [
{
"order": 1,
"first_name": "Eliška",
"last_name": "Ukázková",
"birth_number": "1855120003"
}
],
"contract": "hpp",
"created_at": "2026-09-28T10:00:00.000Z",
"declaration": true,
"details": {
"birth_date": "1990-04-12"
},
"disability": null,
"email": null,
"ended_on": null,
"first_name": "Anna",
"gross_wage": 52000.0,
"health_insurer": "111",
"last_name": "Ukázková",
"note": null,
"personal_number": null,
"started_on": "2025-04-01",
"student": false,
"updated_at": "2026-09-28T10:00:00.000Z",
"ztpp": false,
"full_name": "Anna Ukázková"
}
]
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Nový pracovník
/entities/{entity_id}/employees
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Založí kartu pracovníka s druhem pracovněprávního vztahu (HPP, DPČ nebo DPP), sjednanou mzdou a údaji pro výpočet mzdy a pro hlášení JMHZ. Karta sama nevytvoří výplatní pásku ani nepřihlásí pracovníka u ČSSZ či zdravotní pojišťovny – pásky vzniknou voláním POST /entities/{entity_id}/payslips/generate.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
employee | objekt | ano | |
employee. | text | ano | Jméno, nejvýše 80 znaků |
employee. | text | ano | Příjmení, nejvýše 80 znaků |
employee. | text | ne | Osobní číslo |
employee. | text | ne | hpp pracovní poměr, dpc dohoda o pracovní činnosti, dpp dohoda o provedení práce Hodnoty: hpp, dpc, dpp. Výchozí hpp. |
employee. | číslo | ne | Sjednaná měsíční hrubá mzda (HPP) nebo měsíční odměna (DPČ, DPP), nejméně 0. Z ní vychází generování pásek; u HPP a DPČ se při vztahu jen po část měsíce krátí podle pracovních dnů (pondělí až pátek), u DPP ne. Výchozí 0. |
employee. | datum | ne | Datum nástupu; neplatné datum se uloží jako prázdné |
employee. | datum | ne | Datum ukončení; pásky se generují jen za měsíce, kdy vztah trval |
employee. | ano/ne | ne | Podepsané prohlášení poplatníka. Bez něj se měsíčně neuplatní slevy ani daňové zvýhodnění a z příjmu pod zákonným limitem (DPP, malý rozsah) se sráží 15% srážková daň. Výchozí true. |
employee. | text | ne | Invalidita: first I. nebo II. stupně (základní sleva), third III. stupně (rozšířená sleva); prázdné = žádná Hodnoty: first, third. |
employee. | ano/ne | ne | Držitel průkazu ZTP/P (sleva na dani, bez minimálního vyměřovacího základu ZP) Výchozí false. |
employee. | ano/ne | ne | Student – projeví se jen ve zdravotním pojištění (bez minimálního vyměřovacího základu) Výchozí false. |
employee. | text | ne | Kód zdravotní pojišťovny (111 VZP, 201 VoZP, 205 ČPZP, 207 OZP, 209 ZPŠ, 211 ZPMV, 213 RBP) Hodnoty: 111, 201, 205, 207, 209, 211, 213. |
employee. | text | ne | Číslo účtu pracovníka (jen evidence, Saldo mzdy nevyplácí) |
employee. | text | ne | E-mail v platném tvaru |
employee. | text | ne | Poznámka |
employee. | pole (objekt) | ne | Děti pro daňové zvýhodnění; odeslaný seznam nahradí uložený celý |
employee. | celé číslo | ne | Pořadí dítěte (1, 2, 3); určuje výši zvýhodnění. Karta ho neověřuje – nečíselná hodnota se uloží a výpočet mzdy pak skončí chybou 500 |
employee. | ano/ne | ne | Dítě je držitelem průkazu ZTP/P |
employee. | pole (celé číslo) | ne | Měsíce 1–12, za které se zvýhodnění uplatní; bez pole každý měsíc |
employee. | text | ne | Jméno dítěte (pro JMHZ) |
employee. | text | ne | Příjmení dítěte (pro JMHZ) |
employee. | datum | ne | Datum narození dítěte (pro JMHZ) |
employee. | text | ne | Rodné číslo dítěte (pro JMHZ) |
employee. | objekt | ne | Údaje pro JMHZ a další příznaky. Při úpravě se slučují s uloženými: odeslaný klíč přepíše uložený, prázdná hodnota (null, "" nebo prázdný objekt) klíč odstraní, neposlané klíče zůstanou; neznámé klíče se zahodí. |
employee. | text | ne | OIČ (IK MPSV) z registrace zaměstnance – 10 číslic |
employee. | text | ne | ID pracovněprávního vztahu z registrace – až 22 číslic |
employee. | datum | ne | Datum narození |
employee. | text | ne | Rodné číslo; spojuje karty téže osoby pro roční maximální vyměřovací základ |
employee. | text | ne | Druh činnosti podle registrace (1–9 pracovní poměr, A–J DPČ, T–ZC DPP) |
employee. | text | ne | Kód ELDP |
employee. | ano/ne | ne | Primární pracovněprávní vztah u zaměstnavatele |
employee. | objekt | ne | Místo výkonu práce |
employee. | text | ne | Obec |
employee. | text | ne | Kód obce, 6 číslic (číselník ČSÚ) |
employee. | text | ne | Stát, dvoupísmenný kód (např. CZ) |
employee. | číslo | ne | Sjednaná týdenní pracovní doba (hodin) |
employee. | číslo | ne | Stanovená týdenní pracovní doba podle § 79 zákoníku práce |
employee. | číslo | ne | Sjednaný rozsah dohody za měsíc (hodin) |
employee. | číslo | ne | Hodinová odměna z dohody (Kč) |
employee. | číslo | ne | Průměrný hodinový výdělek (Kč) |
employee. | ano/ne | ne | Srážky ze mzdy (exekuce, insolvence, dohoda o srážkách) |
employee. | ano/ne | ne | Tytéž děti vyživuje i jiná osoba ve společné domácnosti |
employee. | objekt | ne | Jiná osoba vyživující tytéž děti |
employee. | text | ne | Jméno |
employee. | text | ne | Příjmení |
employee. | datum | ne | Datum narození |
employee. | text | ne | Rodné číslo |
employee. | ano/ne | ne | Funkční požitky podle § 6 odst. 10 ZDP |
employee. | ano/ne | ne | Poživatel starobního důchodu – sleva 6,5 % na sociálním pojistném zaměstnance (od 2025) |
employee. | ano/ne | ne | Po celý měsíc neplatí minimální vyměřovací základ zdravotního pojištění |
Odpověď
201 application/json Založená karta pracovníka (stejná pole jako v seznamu).
Chování
- Co změní
- Vytvoří kartu pracovníka a zapíše událost employee.created. Pásky ani účetní zápisy nevytváří.
- Opakování
- Každé volání založí nového pracovníka; duplicity se nekontrolují.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"employee":{"first_name":"Jana","last_name":"Nováková","contract":"hpp","gross_wage":42000,"started_on":"2026-03-01","declaration":true,"health_insurer":"111","children":[{"first_name":"Tomáš","last_name":"Novák","birth_date":"2018-05-12","order":1}],"details":{"weekly_hours":40,"workplace":{"municipality":"Brno","municipality_code":"582786","country":"CZ"}}}}' \
https://techtools.cz/ucetnictvi-api/entities/1/employeesJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/employees', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"employee": {
"first_name": "Jana",
"last_name": "Nováková",
"contract": "hpp",
"gross_wage": 42000,
"started_on": "2026-03-01",
"declaration": true,
"health_insurer": "111",
"children": [
{
"first_name": "Tomáš",
"last_name": "Novák",
"birth_date": "2018-05-12",
"order": 1
}
],
"details": {
"weekly_hours": 40,
"workplace": {
"municipality": "Brno",
"municipality_code": "582786",
"country": "CZ"
}
}
}
})
});
const data = await response.json();{
"id": 4,
"bank_account": null,
"children": [
{
"first_name": "Tomáš",
"last_name": "Novák",
"birth_date": "2018-05-12",
"order": 1
}
],
"contract": "hpp",
"created_at": "2026-09-28T10:00:00.000Z",
"declaration": true,
"details": {
"weekly_hours": 40,
"workplace": {
"municipality": "Brno",
"municipality_code": "582786",
"country": "CZ"
}
},
"disability": null,
"email": null,
"ended_on": null,
"first_name": "Jana",
"gross_wage": 42000.0,
"health_insurer": "111",
"last_name": "Nováková",
"note": null,
"personal_number": null,
"started_on": "2026-03-01",
"student": false,
"updated_at": "2026-09-28T10:00:00.000Z",
"ztpp": false,
"full_name": "Jana Nováková"
}
PATCH Úprava karty pracovníka
/entities/{entity_id}/employees/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Změní zaslaná pole karty. Pole children se nahradí celým odeslaným seznamem; details se slučují s uloženými (odeslané klíče přepíší, prázdné hodnoty odstraní, neposlané zůstanou; příznaky se převedou na true/false). Změna se do existujících pásek promítne až jejich přepočtem (POST /entities/{entity_id}/payslips/generate nebo PATCH pásky s gross či bonuses).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID pracovníka Příklad 3. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
employee | objekt | ano | |
employee. | text | ne | Jméno, nejvýše 80 znaků |
employee. | text | ne | Příjmení, nejvýše 80 znaků |
employee. | text | ne | Osobní číslo |
employee. | text | ne | hpp pracovní poměr, dpc dohoda o pracovní činnosti, dpp dohoda o provedení práce Hodnoty: hpp, dpc, dpp. |
employee. | číslo | ne | Sjednaná měsíční hrubá mzda (HPP) nebo měsíční odměna (DPČ, DPP), nejméně 0 |
employee. | datum | ne | Datum nástupu; neplatné datum se uloží jako prázdné |
employee. | datum | ne | Datum ukončení; pásky se generují jen za měsíce, kdy vztah trval |
employee. | ano/ne | ne | Podepsané prohlášení poplatníka |
employee. | text | ne | Invalidita: first I. nebo II. stupně, third III. stupně; prázdné = žádná Hodnoty: first, third. |
employee. | ano/ne | ne | Držitel průkazu ZTP/P |
employee. | ano/ne | ne | Student – projeví se jen ve zdravotním pojištění |
employee. | text | ne | Kód zdravotní pojišťovny Hodnoty: 111, 201, 205, 207, 209, 211, 213. |
employee. | text | ne | Číslo účtu pracovníka (jen evidence) |
employee. | text | ne | E-mail v platném tvaru |
employee. | text | ne | Poznámka |
employee. | pole (objekt) | ne | Děti pro daňové zvýhodnění; odeslaný seznam nahradí uložený celý |
employee. | celé číslo | ne | Pořadí dítěte (1, 2, 3); nečíselná hodnota se uloží a výpočet mzdy pak skončí chybou 500 |
employee. | ano/ne | ne | Dítě je držitelem průkazu ZTP/P |
employee. | pole (celé číslo) | ne | Měsíce 1–12, za které se zvýhodnění uplatní; bez pole každý měsíc |
employee. | text | ne | Jméno dítěte |
employee. | text | ne | Příjmení dítěte |
employee. | datum | ne | Datum narození dítěte |
employee. | text | ne | Rodné číslo dítěte |
employee. | objekt | ne | Údaje pro JMHZ a příznaky se stejnými klíči jako při založení (oic, employment_id, birth_date, birth_number, activity_code, eldp_code, primary, workplace, weekly_hours, standard_weekly_hours, monthly_hours, hourly_rate, average_hourly_earnings, garnishment, shared_children, other_parent, functional_emoluments, pensioner, health_minimum_exempt). Odeslané klíče přepíší uložené, prázdná hodnota (null, "" nebo prázdný objekt) klíč odstraní, neposlané klíče zůstanou, příznaky se převedou na true/false a neznámé klíče se zahodí. |
Odpověď
200 application/json Upravená karta pracovníka.
Chování
- Co změní
- Uloží kartu pracovníka. Událost do historie nezapisuje; výplatní pásky ani zaúčtování nemění.
- Opakování
- Opakování se stejnými daty vede ke stejnému stavu.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"employee":{"gross_wage":54000,"details":{"weekly_hours":40,"pensioner":false}}}' \
https://techtools.cz/ucetnictvi-api/entities/1/employees/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/employees/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"employee": {
"gross_wage": 54000,
"details": {
"weekly_hours": 40,
"pensioner": false
}
}
})
});
const data = await response.json();{
"gross_wage": 54000.0,
"details": {
"birth_date": "1990-04-12",
"weekly_hours": 40,
"pensioner": false
},
"id": 1,
"bank_account": "7385178468/0800",
"children": [
{
"order": 1,
"first_name": "Eliška",
"last_name": "Ukázková",
"birth_number": "1855120003"
}
],
"contract": "hpp",
"created_at": "2026-09-28T10:00:00.000Z",
"declaration": true,
"disability": null,
"email": null,
"ended_on": null,
"first_name": "Anna",
"health_insurer": "111",
"last_name": "Ukázková",
"note": null,
"personal_number": null,
"started_on": "2025-04-01",
"student": false,
"updated_at": "2026-09-28T10:00:00.000Z",
"ztpp": false,
"full_name": "Anna Ukázková"
}
DELETE Smazání pracovníka bez výplatních pásek
/entities/{entity_id}/employees/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Smaže kartu pracovníka, který nemá žádnou výplatní pásku. Pracovníka s páskami nelze smazat – ukončete vztah polem ended_on. Cestovní příkazy s tímto pracovníkem zůstanou (s uloženým jménem cestujícího, employee_name bude null).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID pracovníka Příklad 3. |
Odpověď
204 Prázdná odpověď.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pracovník má aspoň jednu výplatní pásku – „Pracovník má výplatní pásky – nastavte datum ukončení“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Smaže kartu pracovníka. Událost do historie nezapisuje.
- Opakování
- Druhé smazání vrátí 404.
Příklad
Maže pracovníka bez výplatních pásek; pracovníka s páskami API odmítne s chybou 422.
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/employees/3JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/employees/3', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();soubor, 0 bajtů
GET Výplatní pásky za rok nebo měsíc
/entities/{entity_id}/payslips
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí výplatní pásky firmy za kalendářní rok, volitelně jen za jeden měsíc, seřazené podle měsíce a ID pracovníka. Páska nese hrubou a čistou mzdu, náklady zaměstnavatele, stav (draft koncept, approved schváleno, posted zaúčtováno) a v data celý výpočet: pojistné, daň, účetní předpis, krácení, docházku a upozornění.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
year | dotaz | celé číslo | ne | Rok pásek; bez parametru nebo při nečíselné hodnotě aktuální rok, mimo rozsah se zarovná na 2000 až 2100. Rozsah od 2000 do 2100. Příklad 2026. |
month | dotaz | celé číslo | ne | Měsíc 1–12; bez něj vrátí pásky celého roku. Příklad 8. |
Odpověď
200 application/json Pole výplatních pásek.
| Pole | Význam |
|---|---|
id, employee_id, employee_name, year, month | Páska a pracovník |
gross, net, employer_cost | Hrubá mzda, čistá mzda a celkové náklady zaměstnavatele v Kč |
status | draft, approved nebo posted |
data | Výpočet: insured, assessment_base, employee, employer, health_min_base_topup, tax, net, payout, postings, warnings, base_gross, bonuses, případně proration a attendance |
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/payslips?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"data": {
"gross": 52000.0,
"insured": {
"social": true,
"health": true
},
"assessment_base": {
"social": 52000.0,
"health": 52000.0
},
"employee": {
"social": 3692.0,
"health": 2340.0,
"total": 6032.0
},
"employer": {
"social": 12896.0,
"health": 4680.0,
"total": 17576.0
},
"health_min_base_topup": 0.0,
"tax": {
"base": 52000.0,
"rounded_base": 52000.0,
"rate_split": [
{
"rate": 0.15,
"base": 52000.0,
"tax": 7800.0
}
],
"advance_before_credits": 7800.0,
"credits": [
{
"key": "taxpayer",
"label": "Základní sleva na poplatníka",
"amount": 2570.0,
"entitlement": 2570.0
}
],
"child_benefit": {
"total": 1267.0,
"as_credit": 1267.0,
"bonus": 0.0
},
"advance": 3963.0,
"withholding": 0.0,
"kind": "advance"
},
"net": 42005.0,
"payout": 42005.0,
"employer_cost": 69576.0,
"postings": [
{
"debit": "521",
"credit": "331",
"amount": 52000.0,
"text": "Hrubá mzda"
},
{
"debit": "524",
"credit": "336",
"amount": 12896.0,
"text": "Sociální pojištění hrazené zaměstnavatelem"
}
],
"warnings": [],
"base_gross": 52000.0,
"bonuses": 0.0
},
"employee_id": 1,
"employer_cost": 69576.0,
"gross": 52000.0,
"month": 1,
"net": 42005.0,
"status": "posted",
"updated_at": "2026-09-28T10:00:00.000Z",
"year": 2026,
"employee_name": "Anna Ukázková"
},
{
"id": 2,
"created_at": "2026-09-28T10:00:00.000Z",
"data": {
"gross": 52000.0,
"insured": {
"social": true,
"health": true
},
"assessment_base": {
"social": 52000.0,
"health": 52000.0
},
"employee": {
"social": 3692.0,
"health": 2340.0,
"total": 6032.0
},
"employer": {
"social": 12896.0,
"health": 4680.0,
"total": 17576.0
},
"health_min_base_topup": 0.0,
"tax": {
"base": 52000.0,
"rounded_base": 52000.0,
"rate_split": [
{
"rate": 0.15,
"base": 52000.0,
"tax": 7800.0
}
],
"advance_before_credits": 7800.0,
"credits": [
{
"key": "taxpayer",
"label": "Základní sleva na poplatníka",
"amount": 2570.0,
"entitlement": 2570.0
}
],
"child_benefit": {
"total": 1267.0,
"as_credit": 1267.0,
"bonus": 0.0
},
"advance": 3963.0,
"withholding": 0.0,
"kind": "advance"
},
"net": 42005.0,
"payout": 42005.0,
"employer_cost": 69576.0,
"postings": [
{
"debit": "521",
"credit": "331",
"amount": 52000.0,
"text": "Hrubá mzda"
},
{
"debit": "524",
"credit": "336",
"amount": 12896.0,
"text": "Sociální pojištění hrazené zaměstnavatelem"
}
],
"warnings": [],
"base_gross": 52000.0,
"bonuses": 0.0
},
"employee_id": 1,
"employer_cost": 69576.0,
"gross": 52000.0,
"month": 2,
"net": 42005.0,
"status": "posted",
"updated_at": "2026-09-28T10:00:00.000Z",
"year": 2026,
"employee_name": "Anna Ukázková"
}
]
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Orientační výpočet mzdy bez uložení
/entities/{entity_id}/payslips/calculate
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Spočítá výplatní pásku z anonymních vstupů bez vazby na pracovníka a nic neuloží: pojistné zaměstnance i zaměstnavatele, zálohu nebo srážkovou daň se slevami a daňovým zvýhodněním, čistou mzdu, částku k výplatě, náklady zaměstnavatele a účetní předpis. Na rozdíl od veřejné kalkulačky POST /calc/payroll nepřijímá agreed_wage, ytd_social_base, pensioner_discount ani health_minimum_exempt (ignorují se).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok sazeb; bez hodnoty aktuální rok |
month | celé číslo | ne | Měsíc 1–12; bez hodnoty aktuální měsíc. Výsledek tohoto výpočtu na měsíci nezávisí, jiná hodnota ale skončí chybou 500 |
contract | text | ne | Druh pracovněprávního vztahu; jiná hodnota skončí chybou 500 Hodnoty: hpp, dpc, dpp. Výchozí hpp. |
gross | číslo | ne | Hrubá mzda v Kč, nezáporná (záporná skončí chybou 500); bez hodnoty nebo nečíselná 0 |
declaration | ano/ne | ne | Podepsané prohlášení poplatníka Výchozí true. |
disability | text | ne | Stupeň invalidity; first/second a 1/2 = I. a II. stupeň, third a 3 = III. stupeň, 0 nebo prázdné = žádná Hodnoty: first, second, third, 1, 2, 3, 0. |
ztpp | ano/ne | ne | Držitel průkazu ZTP/P Výchozí false. |
student | ano/ne | ne | Student Výchozí false. |
children | pole (objekt) | ne | Děti pro daňové zvýhodnění (uplatní se ve všech měsících) |
children[] | celé číslo | ne | Pořadí dítěte (1, 2, 3) |
children[] | ano/ne | ne | Dítě je držitelem průkazu ZTP/P |
Odpověď
200 application/json Výpočet výplatní pásky.
| Pole | Význam |
|---|---|
gross | Hrubá mzda |
insured | Účast na pojištění: social, health |
assessment_base | Vyměřovací základy: social, health |
employee, employer | Pojistné zaměstnance a zaměstnavatele: social, health, total |
health_min_base_topup | Doplatek zdravotního pojistného do minimálního vyměřovacího základu |
tax | Daň: base, rounded_base, rate_split, advance_before_credits, credits, child_benefit (total, as_credit, bonus), advance, withholding, kind (advance nebo withholding) |
net | Čistá mzda |
payout | K výplatě: čistá mzda plus daňový bonus |
employer_cost | Hrubá mzda plus pojistné zaměstnavatele |
postings | Účetní předpis, který by se zaúčtoval: debit, credit, amount, text |
warnings | Upozornění (česky) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro zadaný rok nejsou v Saldu zákonné sazby – „Pro rok RRRR nejsou k dispozici zákonné sazby“ |
| 500 | – | Vstup, který výpočet odmítne, ale API předem neověří: záporná gross, month mimo 1–12 (i nečíselný), neznámý contract nebo disability, nečíselné children[].order (známá chyba: výjimka místo chyby 422) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2026,"month":9,"contract":"hpp","gross":52000,"declaration":true,"children":[{"order":1}]}' \
https://techtools.cz/ucetnictvi-api/entities/1/payslips/calculateJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/calculate', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2026,
"month": 9,
"contract": "hpp",
"gross": 52000,
"declaration": true,
"children": [
{
"order": 1
}
]
})
});
const data = await response.json();{
"gross": 52000.0,
"insured": {
"social": true,
"health": true
},
"assessment_base": {
"social": 52000.0,
"health": 52000.0
},
"employee": {
"social": 3692.0,
"health": 2340.0,
"total": 6032.0
},
"employer": {
"social": 12896.0,
"health": 4680.0,
"total": 17576.0
},
"health_min_base_topup": 0.0,
"tax": {
"base": 52000.0,
"rounded_base": 52000.0,
"rate_split": [
{
"rate": 0.15,
"base": 52000.0,
"tax": 7800.0
}
],
"advance_before_credits": 7800.0,
"credits": [
{
"key": "taxpayer",
"label": "Základní sleva na poplatníka",
"amount": 2570.0,
"entitlement": 2570.0
}
],
"child_benefit": {
"total": 1267.0,
"as_credit": 1267.0,
"bonus": 0.0
},
"advance": 3963.0,
"withholding": 0.0,
"kind": "advance"
},
"net": 42005.0,
"payout": 42005.0,
"employer_cost": 69576.0,
"postings": [
{
"debit": "521",
"credit": "331",
"amount": 52000.0,
"text": "Hrubá mzda"
},
{
"debit": "524",
"credit": "336",
"amount": 12896.0,
"text": "Sociální pojištění hrazené zaměstnavatelem"
}
],
"warnings": []
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Vygenerování výplatních pásek za měsíc
/entities/{entity_id}/payslips/generate
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Vytvoří nebo přepočítá výplatní pásky všech pracovníků, jejichž vztah v daném měsíci trval aspoň jeden den. Základem je mzda z karty pracovníka; u HPP a DPČ trvajících jen část měsíce se krátí podle pracovních dnů (pondělí až pátek), u DPP ne. Zachová uložené prémie, docházku a roční zúčtování pásky, ruční změnu hrubé mzdy přepíše a nezaúčtované pásky vrátí do stavu draft. Zaúčtované pásky ponechá beze změny. Rok se zadává v query, měsíc v těle.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
year | dotaz | celé číslo | ne | Rok pásek; bez parametru nebo při nečíselné hodnotě aktuální rok, mimo rozsah se zarovná na 2000 až 2100. Rozsah od 2000 do 2100. Příklad 2026. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
month | celé číslo | ano | Měsíc pásek 1–12; chybějící nebo nečíselný měsíc, 0 nebo číslo nad 12 vrátí 400. Záporné číslo API neodmítne – s aktivními pracovníky skončí chybou 500 (známá chyba) Rozsah od 1 do 12. |
Odpověď
201 application/json Pásky měsíce po generování.
| Pole | Význam |
|---|---|
year, month | Období |
payslips | Pásky pracovníků, jejichž vztah v měsíci trval (nové, přepočtené i nezměněné zaúčtované), ve tvaru jako v seznamu |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro rok nejsou v Saldu zákonné sazby – „Pro rok RRRR nejsou k dispozici zákonné sazby“ |
| 500 | – | Výpočet některé pásky selže (např. nečíselné pořadí dítěte na kartě pracovníka nebo záporný měsíc) – známá chyba; pásky pracovníků zpracovaných před ním zůstanou uložené |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří nebo přepíše nezaúčtované výplatní pásky měsíce (stav draft) a zapíše událost payroll.generated. Nic nezaúčtuje, nevyplatí ani nepodá (JMHZ se připravuje zvlášť). Uzamčení období se nekontroluje, protože pásky samy nejsou účetními zápisy. Pásky se ukládají po jedné bez společné transakce.
- Opakování
- Duplicitní pásky nevzniknou (jedna páska na pracovníka a měsíc); opakované volání znovu přepočítá nezaúčtované pásky a zapíše novou událost.
Příklad
Prosinec aktuálního roku ukázková firma ještě nemá, takže příklad vytvoří nové pásky ve stavu draft.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"month":12}' \
"https://techtools.cz/ucetnictvi-api/entities/1/payslips/generate?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/generate?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"month": 12
})
});
const data = await response.json();{
"year": 2026,
"month": 12,
"payslips": [
{
"id": 18,
"created_at": "2026-09-28T10:00:00.000Z",
"data": {
"gross": 52000.0,
"insured": {
"social": true,
"health": true
},
"assessment_base": {
"social": 52000.0,
"health": 52000.0
},
"employee": {
"social": 3692.0,
"health": 2340.0,
"total": 6032.0
},
"employer": {
"social": 12896.0,
"health": 4680.0,
"total": 17576.0
},
"health_min_base_topup": 0.0,
"tax": {
"base": 52000.0,
"rounded_base": 52000.0,
"rate_split": [
{
"rate": 0.15,
"base": 52000.0,
"tax": 7800.0
}
],
"advance_before_credits": 7800.0,
"credits": [
{
"key": "taxpayer",
"label": "Základní sleva na poplatníka",
"amount": 2570.0,
"entitlement": 2570.0
}
],
"child_benefit": {
"total": 1267.0,
"as_credit": 1267.0,
"bonus": 0.0
},
"advance": 3963.0,
"withholding": 0.0,
"kind": "advance"
},
"net": 42005.0,
"payout": 42005.0,
"employer_cost": 69576.0,
"postings": [
{
"debit": "521",
"credit": "331",
"amount": 52000.0,
"text": "Hrubá mzda"
},
{
"debit": "524",
"credit": "336",
"amount": 12896.0,
"text": "Sociální pojištění hrazené zaměstnavatelem"
}
],
"warnings": [],
"base_gross": 52000.0,
"bonuses": 0.0
},
"employee_id": 1,
"employer_cost": 69576.0,
"gross": 52000.0,
"month": 12,
"net": 42005.0,
"status": "draft",
"updated_at": "2026-09-28T10:00:00.000Z",
"year": 2026,
"employee_name": "Anna Ukázková"
},
{
"id": 19,
"created_at": "2026-09-28T10:00:00.000Z",
"data": {
"gross": 8500.0,
"insured": {
"social": false,
"health": false
},
"assessment_base": {
"social": 0.0,
"health": 0.0
},
"employee": {
"social": 0.0,
"health": 0.0,
"total": 0.0
},
"employer": {
"social": 0.0,
"health": 0.0,
"total": 0.0
},
"health_min_base_topup": 0.0,
"tax": {
"base": 8500.0,
"rounded_base": 8500.0,
"rate_split": [
{
"rate": 0.15,
"base": 8500.0,
"tax": 1275.0
}
],
"advance_before_credits": 0.0,
"credits": [],
"child_benefit": {
"total": 0.0,
"as_credit": 0.0,
"bonus": 0.0
},
"advance": 0.0,
"withholding": 1275.0,
"kind": "withholding"
},
"net": 7225.0,
"payout": 7225.0,
"employer_cost": 8500.0,
"postings": [
{
"debit": "521",
"credit": "331",
"amount": 8500.0,
"text": "Hrubá mzda"
},
{
"debit": "331",
"credit": "342",
"amount": 1275.0,
"text": "Srážková daň z příjmů ze závislé činnosti"
}
],
"warnings": [],
"base_gross": 8500.0,
"bonuses": 0.0
},
"employee_id": 2,
"employer_cost": 8500.0,
"gross": 8500.0,
"month": 12,
"net": 7225.0,
"status": "draft",
"updated_at": "2026-09-28T10:00:00.000Z",
"year": 2026,
"employee_name": "Petr Vzorový"
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
PATCH Úprava výplatní pásky – mzda, prémie, stav a docházka
/entities/{entity_id}/payslips/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Pole se posílají přímo v těle bez obalu. gross nebo bonuses pásku přepočítají podle aktuální karty pracovníka a vrátí ji do stavu draft: gross nastaví novou základní mzdu a zruší krácení, bonuses nastaví prémie. Přepočet bez bonuses nastaví prémie na 0, přepočet jen s bonuses zachová dosavadní základ i krácení. status přepne draft/approved (jiné hodnoty se ignorují). attendance nahradí uloženou docházku, která slouží jen pro JMHZ a výpočet mzdy nemění. U zaúčtované pásky lze měnit jen docházku.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID výplatní pásky Příklad 41. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
gross | číslo | ne | Nová základní hrubá mzda pásky v Kč (bez prémií); nečíselná hodnota se počítá jako 0; záporný součet s bonuses skončí chybou 500 (viz chyby) |
bonuses | číslo | ne | Prémie a odměny přičtené k základní mzdě v Kč |
status | text | ne | Stav pásky; zaúčtování provede POST …/post_entries Hodnoty: draft, approved. |
attendance | objekt | ne | Docházka pro JMHZ; prázdné hodnoty se vynechají, desetinná čárka je dovolena, jiné klíče se zahodí |
attendance. | číslo | ne | Odpracované hodiny |
attendance. | číslo | ne | Přesčasové hodiny (z odpracovaných) |
attendance. | číslo | ne | Příplatky za práci přesčas (Kč) |
attendance. | číslo | ne | Hodiny čerpané dovolené |
attendance. | číslo | ne | Náhrada mzdy za dovolenou (Kč) |
attendance. | číslo | ne | Hodiny neplaceného volna |
Odpověď
200 application/json Upravená výplatní páska (tvar jako v seznamu).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Páska je zaúčtovaná a požadavek mění něco jiného než docházku – „Zaúčtovanou pásku nelze měnit – smažte ji a vytvořte znovu“ |
| 500 | – | Přepočet selže – záporný součet gross a bonuses nebo nečíselné pořadí dítěte na kartě (známá chyba); docházka z téhož požadavku už zůstane uložená |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží pásku (přepočet, stav, docházku) a zapíše událost payroll.updated. Účetní zápisy nemění – změněnou pásku je třeba znovu zaúčtovat. Uzamčení období se nekontroluje.
- Opakování
- Opakování se stejnými hodnotami vede ke stejnému výsledku; každé volání zapíše událost payroll.updated.
Příklad
Docházku lze zapsat i do zaúčtované pásky; změna gross nebo bonuses vyžaduje nezaúčtovanou pásku.
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"attendance":{"worked_hours":160,"overtime_hours":4,"vacation_hours":8,"vacation_pay":2150}}' \
https://techtools.cz/ucetnictvi-api/entities/1/payslips/16JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/16', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"attendance": {
"worked_hours": 160,
"overtime_hours": 4,
"vacation_hours": 8,
"vacation_pay": 2150
}
})
});
const data = await response.json();{
"data": {
"gross": 52000.0,
"insured": {
"social": true,
"health": true
},
"assessment_base": {
"social": 52000.0,
"health": 52000.0
},
"employee": {
"social": 3692.0,
"health": 2340.0,
"total": 6032.0
},
"employer": {
"social": 12896.0,
"health": 4680.0,
"total": 17576.0
},
"health_min_base_topup": 0.0,
"tax": {
"base": 52000.0,
"rounded_base": 52000.0,
"rate_split": [
{
"rate": 0.15,
"base": 52000.0,
"tax": 7800.0
}
],
"advance_before_credits": 7800.0,
"credits": [
{
"key": "taxpayer",
"label": "Základní sleva na poplatníka",
"amount": 2570.0,
"entitlement": 2570.0
}
],
"child_benefit": {
"total": 1267.0,
"as_credit": 1267.0,
"bonus": 0.0
},
"advance": 3963.0,
"withholding": 0.0,
"kind": "advance"
},
"net": 42005.0,
"payout": 42005.0,
"employer_cost": 69576.0,
"postings": [
{
"debit": "521",
"credit": "331",
"amount": 52000.0,
"text": "Hrubá mzda"
},
{
"debit": "524",
"credit": "336",
"amount": 12896.0,
"text": "Sociální pojištění hrazené zaměstnavatelem"
}
],
"warnings": [],
"base_gross": 52000.0,
"bonuses": 0.0,
"attendance": {
"worked_hours": 160.0,
"overtime_hours": 4.0,
"vacation_hours": 8.0,
"vacation_pay": 2150.0
}
},
"employee_id": 1,
"year": 2026,
"month": 9,
"gross": 52000.0,
"id": 16,
"created_at": "2026-09-28T10:00:00.000Z",
"employer_cost": 69576.0,
"net": 42005.0,
"status": "draft",
"updated_at": "2026-09-28T10:00:00.000Z",
"employee_name": "Anna Ukázková"
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
DELETE Smazání výplatní pásky
/entities/{entity_id}/payslips/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Smaže výplatní pásku včetně jejích účetních zápisů; u zaúčtované pásky pak přepočte zápis zaokrouhlení sociálního pojistného zaměstnavatele za měsíc. V uzamčeném období nelze.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID výplatní pásky Příklad 41. |
Odpověď
204 Prázdná odpověď.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Poslední den měsíce pásky leží v uzamčeném období – „Období je uzamčeno – pásku nelze smazat“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- V jedné transakci smaže účetní zápisy pásky (zdroj payroll), pásku samotnou a u zaúčtované pásky přepočte zápis zaokrouhlení sociálního pojistného zaměstnavatele za měsíc; zapíše událost payroll.deleted.
- Opakování
- Druhé smazání vrátí 404.
Příklad
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/payslips/16JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/16', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();soubor, 0 bajtů
POST Zaúčtování výplatní pásky
/entities/{entity_id}/payslips/{id}/post_entries
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Zaúčtuje mzdový předpis pásky k poslednímu dni jejího měsíce a nastaví stav posted; schválení se nevyžaduje. Zápisy vzniknou z výpočtu pásky (data.postings): hrubá mzda MD 521 / D 331, pojistné zaměstnavatele MD 524 / D 336, pojistné zaměstnance MD 331 / D 336, záloha nebo srážková daň MD 331 / D 342, daňový bonus MD 342 / D 331. Pak přepočte zápis zaokrouhlení sociálního pojistného zaměstnavatele za měsíc (rozdíl mezi součtem z pásek a pojistným zaokrouhleným jednou z úhrnu vyměřovacích základů, jako v hlášení ČSSZ). Mzdu nevyplácí ani neodvádí pojistné a daň – úhrady se párují z banky.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID výplatní pásky Příklad 41. |
Odpověď
200 application/json Zaúčtovaná výplatní páska se stavem posted.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Firma nevede podvojné účetnictví – „Mzdy se účtují jen v podvojném účetnictví“ |
| 422 | – | Poslední den měsíce pásky leží v uzamčeném období – „Období je uzamčeno“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- V jedné transakci smaže dřívější zápisy pásky, vytvoří nové účetní zápisy (zdroj payroll) s datem posledního dne měsíce, nastaví stav posted a přepočte zápis zaokrouhlení sociálního pojistného zaměstnavatele za měsíc; zapíše událost payroll.posted.
- Opakování
- Opakované zaúčtování nahradí zápisy pásky stejnými novými; stav zůstane posted.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/payslips/16/post_entriesJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/16/post_entries', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST'
});
const data = await response.json();{
"status": "posted",
"employee_id": 1,
"year": 2026,
"month": 9,
"gross": 52000.0,
"id": 16,
"created_at": "2026-09-28T10:00:00.000Z",
"data": {
"gross": 52000.0,
"insured": {
"social": true,
"health": true
},
"assessment_base": {
"social": 52000.0,
"health": 52000.0
},
"employee": {
"social": 3692.0,
"health": 2340.0,
"total": 6032.0
},
"employer": {
"social": 12896.0,
"health": 4680.0,
"total": 17576.0
},
"health_min_base_topup": 0.0,
"tax": {
"base": 52000.0,
"rounded_base": 52000.0,
"rate_split": [
{
"rate": 0.15,
"base": 52000.0,
"tax": 7800.0
}
],
"advance_before_credits": 7800.0,
"credits": [
{
"key": "taxpayer",
"label": "Základní sleva na poplatníka",
"amount": 2570.0,
"entitlement": 2570.0
}
],
"child_benefit": {
"total": 1267.0,
"as_credit": 1267.0,
"bonus": 0.0
},
"advance": 3963.0,
"withholding": 0.0,
"kind": "advance"
},
"net": 42005.0,
"payout": 42005.0,
"employer_cost": 69576.0,
"postings": [
{
"debit": "521",
"credit": "331",
"amount": 52000.0,
"text": "Hrubá mzda"
},
{
"debit": "524",
"credit": "336",
"amount": 12896.0,
"text": "Sociální pojištění hrazené zaměstnavatelem"
}
],
"warnings": [],
"base_gross": 52000.0,
"bonuses": 0.0
},
"employer_cost": 69576.0,
"net": 42005.0,
"updated_at": "2026-09-28T10:00:00.000Z",
"employee_name": "Anna Ukázková"
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Kontrola a stav hlášení JMHZ za měsíc
/entities/{entity_id}/payslips/jmhz
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Zkontroluje data pro jednotné měsíční hlášení zaměstnavatele (JMHZ) za měsíc a vrátí jeho stav: chyby, které brání sestavení XML, upozornění, lhůtu pro podání (20. den následujícího měsíce posunutý na pracovní den, za leden až březen 2026 do 30. 6. 2026), lhůtu pro storno, souhrny daně a pojistného z pásek, druh hlášení, které by se teď vytvořilo, a historii uložených podání. Hlášení se podává za měsíce od ledna 2026 a až po skončení měsíce.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
year | dotaz | celé číslo | ne | Rok hlášení; bez parametru nebo při nečíselné hodnotě aktuální rok, mimo rozsah se zarovná na 2000 až 2100. Rozsah od 2000 do 2100. Příklad 2026. |
month | dotaz | celé číslo | ano | Měsíc hlášení Rozsah od 1 do 12. Příklad 8. |
Odpověď
200 application/json Stav a kontrola hlášení JMHZ.
| Pole | Význam |
|---|---|
year, month, period | Období; period ve tvaru RRRR-MM |
state | none (nic uloženo), draft (připraveno), filed (řádné označeno jako podané), cancelled (stornováno) |
kind | Druh, který by se teď vytvořil: regular, nebo corrective po podaném řádném hlášení |
ready | true, když kontrola nenašla chyby |
errors, warnings | Nálezy kontroly: level, code, subject, field, message, employee_id |
due_date, cancellation_deadline, can_cancel | Lhůta podání, poslední den pro storno a zda lze ještě stornovat |
totals | Souhrny: tax, insurance, payslips a employer_rounding; null pro rok bez sazeb |
employments, persons | Počet pracovněprávních vztahů a osob v hlášení |
submission_id, proof_state | GUID řádného podání a stav doložení posledního podaného hlášení |
plan | Jen pro opravné hlášení: corrected, added, cancelled, stale (vztahy podle názvu) |
filings | Uložená podání JMHZ měsíce od nejnovějšího: id, filing_type (B, O, S), status, proof_state, filed_on, submission_id, forms (počet formulářů), filled_at |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí nebo je neplatný měsíc – „Měsíc hlášení musí být číslo 1 až 12.“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
Příklad
Ukázková firma má pro leden vyplněné údaje pro JMHZ, kontrola proto nenašla chyby (ready true) a vrací jen upozornění na uplynulou lhůtu a chybějící OIČ.
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/payslips/jmhz?year=2026&month=1"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/jmhz?year=2026&month=1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"year": 2026,
"month": 1,
"period": "2026-01",
"state": "none",
"kind": "regular",
"proof_state": null,
"due_date": "2026-06-30",
"cancellation_deadline": "2026-02-20",
"can_cancel": false,
"ready": true,
"errors": [],
"warnings": [
{
"level": "warning",
"code": "late",
"subject": "Zaměstnavatel",
"field": null,
"message": "Lhůta pro hlášení za 1/2026 uplynula 30. 6. 2026; podejte je bez odkladu.",
"employee_id": null
},
{
"level": "warning",
"code": "unidentified",
"subject": "Anna Ukázková (HPP)",
"field": "oic",
"message": "Chybí OIČ a ID pracovněprávního vztahu z registrace zaměstnance – formulář se podá se jménem, datem narození, datem nástupu a druhem činnosti a ČSSZ jej ztotožní; po přidělení je doplňte.",
"employee_id": 1
}
],
"totals": {
"tax": {
"advance": 3963.0,
"bonus": 0.0,
"withholding": 0.0,
"withholding_base": 0.0
},
"insurance": {
"base": 52000.0,
"employer": 12896.0,
"employee": 3692.0,
"total": 16588.0,
"discount_persons": 0,
"discount_base": 0.0,
"discount": 0.0,
"payable": 16588.0
},
"payslips": {
"gross": 52000.0,
"employer_social": 12896.0,
"employee_social": 3692.0,
"employer_health": 4680.0,
"employee_health": 2340.0,
"net": 42005.0
},
"employer_rounding": 0.0
},
"employments": 1,
"persons": 1,
"submission_id": null,
"plan": null,
"filings": []
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Stažení XML hlášení JMHZ a jeho uložení jako podání
/entities/{entity_id}/payslips/jmhz/xml
- Oprávnění
- Vlastník, účetní nebo editor
- Pravidlo
- Přestože jde o GET, požadavek zakládá podání, a proto ho odmítne i API klíč jen pro čtení (403 READ_ONLY_KEY) a požadavek z cizího webu podle hlavičky Sec-Fetch-Site (403 CROSS_SITE).
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Sestaví XML jednotného měsíčního hlášení zaměstnavatele podle schématu ČSSZ jmhzPodani 1.4.3, uloží je jako podání JMHZ ve stavu draft a vrátí jako soubor. Řádné hlášení (regular) jde vytvořit, dokud řádné hlášení měsíce není označené jako podané, a znovu po podaném stornu; opravné (corrective) a storno (cancellation) navazují na podané řádné hlášení a přebírají jeho GUID. Opravné hlášení opraví známé formuláře, přidá nové a formuláře vztahů, které z hlášení zmizely, do lhůty pro storno stornuje. Storno ruší celé hlášení a lze je jen do 20. dne následujícího měsíce. ČSSZ nic neodesílá – podání se označí jako podané až přes PATCH /entities/{entity_id}/filings/{id} se status filed.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
year | dotaz | celé číslo | ne | Rok hlášení; bez parametru nebo při nečíselné hodnotě aktuální rok, mimo rozsah se zarovná na 2000 až 2100. Rozsah od 2000 do 2100. Příklad 2026. |
month | dotaz | celé číslo | ano | Měsíc hlášení Rozsah od 1 do 12. Příklad 8. |
kind | dotaz | text | ne | Druh hlášení – řádné, opravné nebo storno Hodnoty: regular, corrective, cancellation. Výchozí regular. Příklad regular. |
Odpověď
200 application/xml XML hlášení jako příloha jmhz-RRRR-MM-radne.xml, jmhz-RRRR-MM-opravne.xml nebo jmhz-RRRR-MM-storno.xml.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Kontrola JMHZ našla chyby (neukončený měsíc, období před lednem 2026, chybějící údaje, storno po lhůtě) – error „Hlášení nelze sestavit – nejprve opravte chyby z kontroly JMHZ.“ a pole issues s nálezy kontroly |
| 422 | – | Chybí nebo je neplatný měsíc – „Měsíc hlášení musí být číslo 1 až 12.“ |
| 422 | – | Neznámý druh – „Druh hlášení musí být regular, corrective nebo cancellation.“ |
| 422 | – | Řádné hlášení je už podané – „Řádné hlášení za M/RRRR je podané – změny podejte opravným hlášením…“ |
| 422 | – | Opravné hlášení nebo storno bez řádného hlášení – „Za M/RRRR zatím není řádné hlášení – … navazuje na podané řádné hlášení.“ |
| 422 | – | Řádné hlášení není označené jako podané – „Řádné hlášení za M/RRRR není označené jako podané – …“ |
| 422 | – | Hlášení je stornované a chce se opravné nebo storno – „Hlášení za M/RRRR je stornované – podejte nové řádné hlášení.“ |
| 403 | READ_ONLY_KEY | API klíč jen pro čtení |
| 403 | CROSS_SITE | Hlavička Sec-Fetch-Site je jiná než same-origin nebo none |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří nebo přepíše podání JMHZ (kind jmhz, period RRRR-MM, filing_type B řádné, O opravné, S storno, stav draft) s XML, GUID podání, seznamem formulářů a časem vyplnění; zapíše událost payroll.jmhz. ČSSZ nic neodesílá ani nepodává, účetnictví nemění.
- Limity
- Jeden soubor pojme nejvýše 1 500 formulářů pracovněprávních vztahů; větší hlášení tento endpoint nesestaví a skončí chybou 500.
- Opakování
- Dokud je podání daného druhu ve stavu draft, opakované stažení přepíše totéž podání novým XML a časem vyplnění a zachová GUID podání. GUID formulářů zůstanou u řádného hlášení a u formulářů známých z podaných hlášení; vztahy nově přidané v opravném hlášení dostanou při každém stažení nové GUID. Nové podání vznikne, jen když rozpracované podání daného druhu neexistuje (například další opravné hlášení po podaném opravném nebo nové řádné po podaném stornu).
Příklad
Ukázková firma má pro leden vyplněné údaje pro JMHZ, příklad proto vrací XML řádného hlášení a uloží je jako podání ve stavu draft.
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/payslips/jmhz/xml?year=2026&month=1&kind=regular"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/jmhz/xml?year=2026&month=1&kind=regular', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();<?xml version="1.0" encoding="UTF-8"?>
<n1:jmhz xmlns:n1="http://schemas.cssz.cz/JMHZ/podani/1.0" xmlns:so="http://schemas.cssz.cz/JMHZ/souhrn/1.0" xmlns:pvpoj="http://schemas.cssz.cz/JMHZ/PVPOJ/1.0" xmlns:form="http://schemas.cssz.cz/JMHZ/form/1.0">
<n1:VENDOR productName="Saldo" productVersion="1.0"/>
<n1:hlavicka>
<n1:idPodani>01a0e5f0-f986-70b4-87b9-bf839613fbac</n1:idPodani>
<n1:typPodani>R</n1:typPodani>
<n1:variabilniSymbol>1234567890</n1:variabilniSymbol>
<n1:mesic>1</n1:mesic>
<n1:rok>2026</n1:rok>
<n1:datumVyplneni>2026-09-28T10:00:00Z</n1:datumVyplneni>
<n1:balikPoradi>1</n1:balikPoradi>
<n1:balikyPocet>1</n1:balikyPocet>
<n1:formularePocetVBaliku>3</n1:formularePocetVBaliku>
<n1:formularePocetCelkem>3</n1:formularePocetCelkem>
</n1:hlavicka>
<so:souhrn>
<so:danUdajeMesic>
<so:danZalohaPoSleve>3963</so:danZalohaPoSleve>
<so:danBonus>0</so:danBonus>
</so:danUdajeMesic>
</so:souhrn>
<pvpoj:PVPOJ>
<pvpoj:pojistne>
<pvpoj:zakladZamestnavateleA>52000</pvpoj:zakladZamestnavateleA>
<pvpoj:pojistneZamestnavateleA>12896</pvpoj:pojistneZamestnavateleA>
<pvpoj:zakladZamestnavateleB>0</pvpoj:zakladZamestnavateleB>
<pvpoj:pojistneZamestnavateleB>0</pvpoj:pojistneZamestnavateleB>
<pvpoj:zakladZamestnavateleC>0</pvpoj:zakladZamestnavateleC>
<pvpoj:pojistneZamestnavateleC>0</pvpoj:pojistneZamestnavateleC>
<pvpoj:pojistneZamestnavateleCelkem>12896</pvpoj:pojistneZamestnavateleCelkem>
<pvpoj:pojistneZamestnance>3692</pvpoj:pojistneZamestnance>
<pvpoj:pojistneCelkem>16588</pvpoj:pojistneCelkem>
</pvpoj:pojistne>
<pvpoj:pojistneUhrada>16588</pvpoj:pojistneUhrada>
</pvpoj:PVPOJ>
<n1:formulareOsob>
<n1:formularOsoby>
<n1:hlavicka>
<n1:idFormulare>01a0e5f0-f986-7765-9242-2848a7934754</n1:idFormulare>
<n1:typFormulare>R</n1:typFormulare>
<n1:primarniPpv>true</n1:primarniPpv>
</n1:hlavicka>
<form:bezPriznaku>
<form:identifikace>
<form:prijmeni>Ukázková</form:prijmeni>
<form:jmeno>Anna</form:jmeno>
<form:datumNarozeni>1990-04-12</form:datumNarozeni>
<form:datumNastupu>2025-04-01</form:datumNastupu>
<form:druhCinnosti>1</form:druhCinnosti>
</form:identifikace>
<form:souhrnDataZec>
<form:prijmy>
<form:zuctovanoCelkem>52000</form:zuctovanoCelkem>
</form:prijmy>
<form:zalohaNaDan>
<form:zakladDane>52000</form:zakladDane>
<form:vypoctenaZaloha>7800</form:vypoctenaZaloha>
<form:danZalohaPoSleve>3963</form:danZalohaPoSleve>
<form:danBonus>0</form:danBonus>
</form:zalohaNaDan>
<form:prohlaseniPoplatnika>true</form:prohlaseniPoplatnika>
<form:prohlaseniPoplatnikaDane>
<form:zakladniSleva>2570</form:zakladniSleva>
<form:danoveZvyhodneniDetiMesic>1267</form:danoveZvyhodneni
…
POST Předběžná kontrola hlášení JMHZ validační službou ČSSZ
/entities/{entity_id}/payslips/jmhz/validation
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Sestaví XML hlášení JMHZ stejně jako stažení, ale neuloží je, a odešle je anonymní validační službě ČSSZ ePodaniValidace. Vrátí, zda služba hlášení přijala bez chyb, a její nálezy s přiřazeným pracovníkem. Nic nepodává. Parametry year, month a kind se posílají v těle JSON.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok hlášení; bez hodnoty aktuální rok, mimo rozsah se zarovná Rozsah od 2000 do 2100. |
month | celé číslo | ano | Měsíc hlášení Rozsah od 1 do 12. |
kind | text | ne | Druh hlášení; bez hodnoty regular, nebo corrective, je-li řádné hlášení podané Hodnoty: regular, corrective, cancellation. |
Odpověď
200 application/json Výsledek kontroly ČSSZ.
| Pole | Význam |
|---|---|
ok | true, když služba vrátila výsledek OK |
request_id | ID požadavku u ČSSZ |
errors | Nálezy služby: category, code (číslo chyby ČSSZ), message, form (GUID formuláře), employee (pracovník a vztah) |
kind | Kontrolovaný druh hlášení |
checked_at | Čas kontroly |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 502 | – | Validační služba ČSSZ je nedostupná, neodpověděla včas, vrátila chybu nebo odpověď bez výsledku (česká zpráva v error) |
| 422 | – | Kontrola JMHZ našla chyby – error „Hlášení nelze sestavit – nejprve opravte chyby z kontroly JMHZ.“ a pole issues |
| 422 | – | Chybí nebo je neplatný měsíc – „Měsíc hlášení musí být číslo 1 až 12.“ |
| 422 | – | Neznámý druh – „Druh hlášení musí být regular, corrective nebo cancellation.“ |
| 422 | – | Druh neodpovídá stavu podání (řádné už podané, opravné nebo storno bez podaného řádného, stornované hlášení) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Odešle XML hlášení včetně osobních údajů zaměstnanců na produkční validační službu ČSSZ (https://epodani.cssz.cz/ePodaniValidace.svc), která je jen zkontroluje. Nic nepodá ani neuloží jako podání; zapíše událost payroll.jmhz_validation do historie.
- Limity
- Časové limity spojení se službou ČSSZ – navázání 10 s, odeslání 20 s, čekání na odpověď 45 s. Hlášení nad 1 500 formulářů se nesestaví (chyba 500).
- Opakování
- Každé volání znovu odešle XML ke kontrole a zapíše novou událost.
Příklad
Ukázková firma má pro leden vyplněné údaje pro JMHZ. Volání služby ČSSZ se při záznamu příkladu nahrazuje smyšlenou odpovědí ve formátu služby (výsledek OK).
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2026,"month":1}' \
https://techtools.cz/ucetnictvi-api/entities/1/payslips/jmhz/validationJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/payslips/jmhz/validation', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2026,
"month": 1
})
});
const data = await response.json();{
"ok": true,
"request_id": "6649AE42-D62E-4614-B287-099B191081C2",
"errors": [],
"kind": "regular",
"checked_at": "2026-09-28T10:00:00.000Z"
}
Odpověď externí služby (ČSSZ, hlášení JMHZ) je v ukázce nahrazená smyšlenými údaji ve formátu, který služba vrací.
GET Seznam cestovních příkazů
/entities/{entity_id}/trips
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí cestovní příkazy firmy od nejpozdějšího odjezdu, každý s uloženými vstupy a výsledkem výpočtu náhrad. S parametrem year jen cesty s odjezdem v hospodářském roce firmy začínajícím v tomto roce (u kalendářního roku 1. 1. až 31. 12.).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
year | dotaz | celé číslo | ne | Rok odjezdu; bez parametru cesty všech let, nečíselná hodnota znamená aktuální rok. Rozsah od 2000 do 2100. Příklad 2026. |
Odpověď
200 application/json Pole cestovních příkazů.
| Pole | Význam |
|---|---|
id, employee_id, employee_name, traveller_name | Příkaz a cestující |
purpose, destination, departed_at, returned_at | Účel, místo a čas cesty |
status | draft (koncept), approved (schváleno), paid (proplaceno) – jen označení |
total | Náhrady celkem v Kč (bez zahraničního stravného v cizí měně) |
input, result | Uložené vstupy formuláře a výsledek výpočtu (tvar jako u výpočtu); null u příkazu, který nevznikl přes API ani aplikaci (např. ukázková data), a total je pak 0 |
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Vrátí nejvýše 500 cest, bez stránkování.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/trips?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/trips?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"departed_at": "2026-08-12T06:40:00.000Z",
"destination": "Brno",
"employee_id": 1,
"input": null,
"purpose": "Workshop u klienta",
"result": null,
"returned_at": "2026-08-12T19:05:00.000Z",
"status": "approved",
"total": 0.0,
"traveller_name": "Anna Ukázková",
"updated_at": "2026-09-28T10:00:00.000Z",
"employee_name": "Anna Ukázková"
}
]
POST Nový cestovní příkaz s výpočtem náhrad
/entities/{entity_id}/trips
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Spočítá náhrady stejně jako POST /entities/{entity_id}/trips/calculate a uloží cestovní příkaz se vstupy, výsledkem a celkovou částkou. Stav se zadává v trip.status (výchozí draft).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
trip | objekt | ano | |
trip. | celé číslo | ne | Pracovník této firmy; neexistující vrátí 404 |
trip. | text | ne | Jméno cestujícího; bez hodnoty jméno pracovníka |
trip. | text | ne | employee zaměstnanec (náhrady podle zákoníku práce), self_employed OSVČ (výdaje podle § 24 odst. 2 písm. k) ZDP). Bez hodnoty employee, je-li zadán employee_id nebo jde o právnickou osobu, jinak self_employed. Hodnoty: employee, self_employed. |
trip. | text | ne | Účel cesty; výpočet neovlivní |
trip. | text | ano | Místo cesty; při uložení povinné, nejvýše 200 znaků |
trip. | text | ano | Odjezd, datum a čas ISO 8601 (např. 2026-09-21T06:30). Zadávejte místní čas bez časového pásma – server jej uloží beze změny jako UTC a podle něj dělí cestu na kalendářní dny. |
trip. | text | ano | Návrat ve stejném tvaru; musí být po odjezdu a nejvýš 366 dní po něm |
trip. | číslo | ne | Ujeté km soukromým vozidlem; bez hodnoty nebo 0 se náhrada za vozidlo nepočítá |
trip. | text | ne | Soukromé vozidlo; truck má u zaměstnance dvojnásobnou sazbu osobního auta, electric počítá s elektřinou Hodnoty: car, motorcycle, truck, electric. Výchozí car. |
trip. | číslo | ne | Průměrná spotřeba na 100 km podle technického průkazu (l nebo kWh) |
trip. | text | ne | Druh paliva Hodnoty: petrol95, petrol98, diesel, lpg, electricity. Výchozí petrol95. |
trip. | číslo | ne | Cena paliva za litr nebo kWh podle dokladu; bez ní průměrná cena z vyhlášky platná v den odjezdu. Palivo bez průměrné ceny (např. lpg) bez fuel_price dá náhradu za PHM 0 a upozornění. |
trip. | číslo | ne | Ubytování v Kč, nezáporné |
trip. | číslo | ne | Ostatní nutné vedlejší výdaje v Kč, nezáporné |
trip. | text | ne | Kód cílové země (ISO 3166-1 alpha-2, jiný než CZ); zapne zahraniční stravné |
trip. | číslo | ne | Hodiny strávené v zahraničí, nejvýš délka cesty; přechod hranice se umístí doprostřed cesty. Bez hodnoty 0 |
trip. | pole (objekt) | ne | Bezplatně poskytnutá jídla, která krátí stravné. V této verzi každá položka pole skončí chybou 400 „invalid date“ (aplikace datum jídla nepřečte), proto výpočet s jídly zatím nejde |
trip. | datum | ano | Den (RRRR-MM-DD) |
trip. | celé číslo | ne | Počet jídel v daném dni |
trip. | text | ne | draft koncept, approved schváleno, paid proplaceno – jen označení, nic neúčtuje ani nevyplácí Hodnoty: draft, approved, paid. Výchozí draft. |
Odpověď
201 application/json Uložený cestovní příkaz (tvar jako v seznamu).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 404 | – | employee_id nepatří pracovníkovi této firmy – „Záznam nebyl nalezen“ |
| 422 | – | Chybí nebo je nečitelný odjezd či návrat, návrat není po odjezdu nebo cesta trvá přes 366 dní (zprávy jako u výpočtu) |
| 422 | – | Pro rok odjezdu nejsou v Saldu sazby – „Pro rok RRRR nejsou k dispozici zákonné sazby“ |
| 400 | – | Pole meals obsahuje jakoukoli položku – v této verzi vždy „invalid date“ (známá chyba zpracování jídel) |
| 500 | – | Vstup, který výpočet odmítne, ale API předem neověří (stejné případy jako u výpočtu); příkaz se neuloží – známá chyba |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří cestovní příkaz a zapíše událost trip.created. Nic nezaúčtuje ani nevyplatí; stav paid je jen označení.
- Opakování
- Každé volání založí nový příkaz; duplicity se nekontrolují.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"trip":{"employee_id":1,"destination":"Brno","purpose":"Jednání s klientem","departure":"2026-09-21T06:30","arrival":"2026-09-21T19:10","km":420,"vehicle_kind":"car","consumption":6.1,"fuel":"diesel","status":"draft"}}' \
https://techtools.cz/ucetnictvi-api/entities/1/tripsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/trips', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"trip": {
"employee_id": 1,
"destination": "Brno",
"purpose": "Jednání s klientem",
"departure": "2026-09-21T06:30",
"arrival": "2026-09-21T19:10",
"km": 420,
"vehicle_kind": "car",
"consumption": 6.1,
"fuel": "diesel",
"status": "draft"
}
})
});
const data = await response.json();{
"id": 2,
"created_at": "2026-09-28T10:00:00.000Z",
"departed_at": "2026-09-21T06:30:00.000Z",
"destination": "Brno",
"employee_id": 1,
"input": {
"employee_id": 1,
"purpose": "Jednání s klientem",
"destination": "Brno",
"departure": "2026-09-21T06:30",
"arrival": "2026-09-21T19:10",
"vehicle_kind": "car",
"consumption": 6.1,
"fuel": "diesel",
"km": 420
},
"purpose": "Jednání s klientem",
"result": {
"duration_hours": 12.67,
"per_diem": {
"band": "medium",
"rate": 236.0,
"reductions": 0.0,
"amount": 236.0,
"days": [
{
"date": "2026-09-21",
"dates": [
"2026-09-21"
],
"hours": 12.67,
"band": "medium",
"range": {
"min": 236.0,
"max": 284.0
},
"rate": 236.0,
"meals": 0,
"reductions": 0.0,
"amount": 236.0
}
]
},
"foreign_per_diem": null,
"mileage": {
"base_rate": 5.9,
"km": 420.0,
"amount": 2478.0
},
"fuel": {
"type": "diesel",
"price": 44.5,
"consumption": 6.1,
"amount": 1140.09
},
"accommodation": 0.0,
"other": 0.0,
"total": 3855.0,
"basis": [
"§ 163 odst. 1 až 3 zákoníku práce, vyhláška č. 573/2025 Sb. § 2",
"§ 6 odst. 7 písm. a) ZDP, § 176 odst. 1 zákoníku práce, vyhláška č. 573/2025 Sb. § 3"
],
"warnings": []
},
"returned_at": "2026-09-21T19:10:00.000Z",
"status": "draft",
"total": 3855.0,
"traveller_name": "Anna Ukázková",
"updated_at": "2026-09-28T10:00:00.000Z",
"employee_name": "Anna Ukázková"
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Výpočet cestovních náhrad bez uložení
/entities/{entity_id}/trips/calculate
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Spočítá náhrady za pracovní cestu (celou cestu od odjezdu do návratu bere jako jeden úsek) a nic neuloží: tuzemské stravné po kalendářních dnech krácené o poskytnutá jídla, zahraniční stravné v měně cílové země, základní náhradu za soukromé vozidlo, náhradu za pohonné hmoty, ubytování a ostatní výdaje. Zaměstnanci počítá minimální sazby stravného podle vyhlášky a celkovou částku zaokrouhlí na koruny nahoru; OSVČ počítá horní hranici sazeb a jen dny delší než 12 hodin. Sazby se berou podle roku odjezdu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
trip | objekt | ano | |
trip. | celé číslo | ne | Pracovník firmy; výpočet ho nehledá (neexistující ID nevrátí 404), jen jeho zadání přepne výchozí traveller na employee |
trip. | text | ne | Jméno cestujícího; výpočet ho nepoužije |
trip. | text | ne | employee zaměstnanec (náhrady podle zákoníku práce), self_employed OSVČ (výdaje podle § 24 odst. 2 písm. k) ZDP). Bez hodnoty employee, je-li zadán employee_id nebo jde o právnickou osobu, jinak self_employed. Hodnoty: employee, self_employed. |
trip. | text | ne | Účel cesty; výpočet neovlivní |
trip. | text | ne | Místo cesty; při uložení povinné, nejvýše 200 znaků |
trip. | text | ano | Odjezd, datum a čas ISO 8601 (např. 2026-09-21T06:30). Zadávejte místní čas bez časového pásma – server jej uloží beze změny jako UTC a podle něj dělí cestu na kalendářní dny. |
trip. | text | ano | Návrat ve stejném tvaru; musí být po odjezdu a nejvýš 366 dní po něm |
trip. | číslo | ne | Ujeté km soukromým vozidlem; bez hodnoty nebo 0 se náhrada za vozidlo nepočítá |
trip. | text | ne | Soukromé vozidlo; truck má u zaměstnance dvojnásobnou sazbu osobního auta, electric počítá s elektřinou Hodnoty: car, motorcycle, truck, electric. Výchozí car. |
trip. | číslo | ne | Průměrná spotřeba na 100 km podle technického průkazu (l nebo kWh) |
trip. | text | ne | Druh paliva Hodnoty: petrol95, petrol98, diesel, lpg, electricity. Výchozí petrol95. |
trip. | číslo | ne | Cena paliva za litr nebo kWh podle dokladu; bez ní průměrná cena z vyhlášky platná v den odjezdu. Palivo bez průměrné ceny (např. lpg) bez fuel_price dá náhradu za PHM 0 a upozornění. |
trip. | číslo | ne | Ubytování v Kč, nezáporné |
trip. | číslo | ne | Ostatní nutné vedlejší výdaje v Kč, nezáporné |
trip. | text | ne | Kód cílové země (ISO 3166-1 alpha-2, jiný než CZ); zapne zahraniční stravné |
trip. | číslo | ne | Hodiny strávené v zahraničí, nejvýš délka cesty; přechod hranice se umístí doprostřed cesty. Bez hodnoty 0 |
trip. | pole (objekt) | ne | Bezplatně poskytnutá jídla, která krátí stravné. V této verzi každá položka pole skončí chybou 400 „invalid date“ (aplikace datum jídla nepřečte), proto výpočet s jídly zatím nejde |
trip. | datum | ano | Den (RRRR-MM-DD) |
trip. | celé číslo | ne | Počet jídel v daném dni |
Odpověď
200 application/json Výpočet cestovních náhrad.
| Pole | Význam |
|---|---|
duration_hours | Délka cesty v hodinách |
per_diem | Tuzemské stravné: band, rate, reductions, amount a days (po dnech: date, hours, band short/medium/long, rate, meals, reductions, amount) |
foreign_per_diem | Zahraniční stravné (nebo null): country, country_name, currency, base_rate, days, amount, pocket_money_max, pocket_money, exchange_rate a amount_czk (vždy null) |
mileage | Základní náhrada: base_rate, km, amount |
fuel | Náhrada za PHM: type, price, consumption, amount |
accommodation, other | Zadané výdaje |
total | Náhrady celkem v Kč; zahraniční stravné v cizí měně v něm není |
basis | Právní základ použitých sazeb |
warnings | Upozornění (česky) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí nebo je nečitelný odjezd či návrat – „Zadejte odjezd i návrat“ |
| 422 | – | Návrat není po odjezdu – „Návrat musí být po odjezdu“ |
| 422 | – | Cesta je delší než 366 dní – „Cesta smí trvat nejvýš 366 dní“ |
| 422 | – | Pro rok odjezdu nejsou v Saldu sazby – „Pro rok RRRR nejsou k dispozici zákonné sazby“ |
| 400 | – | Pole meals obsahuje jakoukoli položku – v této verzi vždy „invalid date“ (známá chyba zpracování jídel) |
| 500 | – | Vstup, který výpočet odmítne, ale API předem neověří: neznámé vehicle_kind nebo fuel, záporné km, accommodation nebo other, foreign_country CZ, hours_abroad delší než cesta, datum a čas mimo rozsah (např. měsíc 13) – známá chyba: výjimka místo chyby 422 |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Cesta smí trvat nejvýš 366 dní; více úseků ani časy přechodu hranice API nepřijímá.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"trip":{"destination":"Brno","purpose":"Jednání s klientem","departure":"2026-09-21T06:30","arrival":"2026-09-22T19:10","km":420,"vehicle_kind":"car","consumption":6.1,"fuel":"diesel","accommodation":1200}}' \
https://techtools.cz/ucetnictvi-api/entities/1/trips/calculateJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/trips/calculate', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"trip": {
"destination": "Brno",
"purpose": "Jednání s klientem",
"departure": "2026-09-21T06:30",
"arrival": "2026-09-22T19:10",
"km": 420,
"vehicle_kind": "car",
"consumption": 6.1,
"fuel": "diesel",
"accommodation": 1200
}
})
});
const data = await response.json();{
"duration_hours": 36.67,
"per_diem": {
"band": "multi_day",
"rate": 606.0,
"reductions": 0.0,
"amount": 606.0,
"days": [
{
"date": "2026-09-21",
"dates": [
"2026-09-21"
],
"hours": 17.5,
"band": "medium",
"range": {
"min": 236.0,
"max": 284.0
},
"rate": 236.0,
"meals": 0,
"reductions": 0.0,
"amount": 236.0
},
{
"date": "2026-09-22",
"dates": [
"2026-09-22"
],
"hours": 19.17,
"band": "long",
"range": {
"min": 370.0,
"max": 442.0
},
"rate": 370.0,
"meals": 0,
"reductions": 0.0,
"amount": 370.0
}
]
},
"foreign_per_diem": null,
"mileage": {
"base_rate": 5.9,
"km": 420.0,
"amount": 2478.0
},
"fuel": {
"type": "diesel",
"price": 44.5,
"consumption": 6.1,
"amount": 1140.09
},
"accommodation": 1200.0,
"other": 0.0,
"total": 5425.0,
"basis": [
"§ 163 odst. 1 až 3 zákoníku práce, vyhláška č. 573/2025 Sb. § 2",
"§ 6 odst. 7 písm. a) ZDP, § 176 odst. 1 zákoníku práce, vyhláška č. 573/2025 Sb. § 3"
],
"warnings": []
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
PATCH Přepočet a úprava cestovního příkazu
/entities/{entity_id}/trips/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Znovu spočítá náhrady z odeslaného formuláře a přepíše jím celý příkaz: pole, která v trip chybí, se vymažou (například purpose nebo vazba na pracovníka); stav zůstane, pokud trip.status nepošlete. Posílejte proto vždy celý formulář.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID cestovního příkazu Příklad 7. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
trip | objekt | ano | |
trip. | celé číslo | ne | Pracovník této firmy; neexistující vrátí 404 |
trip. | text | ne | Jméno cestujícího; bez hodnoty jméno pracovníka |
trip. | text | ne | employee zaměstnanec (náhrady podle zákoníku práce), self_employed OSVČ (výdaje podle § 24 odst. 2 písm. k) ZDP). Bez hodnoty employee, je-li zadán employee_id nebo jde o právnickou osobu, jinak self_employed. Hodnoty: employee, self_employed. |
trip. | text | ne | Účel cesty; výpočet neovlivní |
trip. | text | ano | Místo cesty; při uložení povinné, nejvýše 200 znaků |
trip. | text | ano | Odjezd, datum a čas ISO 8601 (např. 2026-09-21T06:30). Zadávejte místní čas bez časového pásma – server jej uloží beze změny jako UTC a podle něj dělí cestu na kalendářní dny. |
trip. | text | ano | Návrat ve stejném tvaru; musí být po odjezdu a nejvýš 366 dní po něm |
trip. | číslo | ne | Ujeté km soukromým vozidlem; bez hodnoty nebo 0 se náhrada za vozidlo nepočítá |
trip. | text | ne | Soukromé vozidlo; truck má u zaměstnance dvojnásobnou sazbu osobního auta, electric počítá s elektřinou Hodnoty: car, motorcycle, truck, electric. Výchozí car. |
trip. | číslo | ne | Průměrná spotřeba na 100 km podle technického průkazu (l nebo kWh) |
trip. | text | ne | Druh paliva Hodnoty: petrol95, petrol98, diesel, lpg, electricity. Výchozí petrol95. |
trip. | číslo | ne | Cena paliva za litr nebo kWh podle dokladu; bez ní průměrná cena z vyhlášky platná v den odjezdu. Palivo bez průměrné ceny (např. lpg) bez fuel_price dá náhradu za PHM 0 a upozornění. |
trip. | číslo | ne | Ubytování v Kč, nezáporné |
trip. | číslo | ne | Ostatní nutné vedlejší výdaje v Kč, nezáporné |
trip. | text | ne | Kód cílové země (ISO 3166-1 alpha-2, jiný než CZ); zapne zahraniční stravné |
trip. | číslo | ne | Hodiny strávené v zahraničí, nejvýš délka cesty; přechod hranice se umístí doprostřed cesty. Bez hodnoty 0 |
trip. | pole (objekt) | ne | Bezplatně poskytnutá jídla, která krátí stravné. V této verzi každá položka pole skončí chybou 400 „invalid date“ (aplikace datum jídla nepřečte), proto výpočet s jídly zatím nejde |
trip. | datum | ano | Den (RRRR-MM-DD) |
trip. | celé číslo | ne | Počet jídel v daném dni |
trip. | text | ne | Nový stav; bez hodnoty zůstane dosavadní Hodnoty: draft, approved, paid. |
Odpověď
200 application/json Přepočtený cestovní příkaz.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 404 | – | employee_id nepatří pracovníkovi této firmy – „Záznam nebyl nalezen“ |
| 422 | – | Chybí nebo je nečitelný odjezd či návrat, návrat není po odjezdu nebo cesta trvá přes 366 dní (zprávy jako u výpočtu) |
| 422 | – | Pro rok odjezdu nejsou v Saldu sazby – „Pro rok RRRR nejsou k dispozici zákonné sazby“ |
| 400 | – | Pole meals obsahuje jakoukoli položku – v této verzi vždy „invalid date“ (známá chyba zpracování jídel) |
| 500 | – | Vstup, který výpočet odmítne, ale API předem neověří (stejné případy jako u výpočtu); příkaz se nezmění – známá chyba |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Přepíše cestovní příkaz. Událost do historie nezapisuje a nic nezaúčtuje.
- Opakování
- Opakování se stejným formulářem vede ke stejnému výsledku.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"trip":{"employee_id":1,"destination":"Brno","purpose":"Workshop u klienta","departure":"2026-09-12T06:40","arrival":"2026-09-12T19:05","status":"approved"}}' \
https://techtools.cz/ucetnictvi-api/entities/1/trips/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/trips/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"trip": {
"employee_id": 1,
"destination": "Brno",
"purpose": "Workshop u klienta",
"departure": "2026-09-12T06:40",
"arrival": "2026-09-12T19:05",
"status": "approved"
}
})
});
const data = await response.json();{
"employee_id": 1,
"traveller_name": "Anna Ukázková",
"purpose": "Workshop u klienta",
"destination": "Brno",
"departed_at": "2026-09-12T06:40:00.000Z",
"returned_at": "2026-09-12T19:05:00.000Z",
"status": "approved",
"total": 236.0,
"input": {
"employee_id": 1,
"purpose": "Workshop u klienta",
"destination": "Brno",
"departure": "2026-09-12T06:40",
"arrival": "2026-09-12T19:05"
},
"result": {
"duration_hours": 12.42,
"per_diem": {
"band": "medium",
"rate": 236.0,
"reductions": 0.0,
"amount": 236.0,
"days": [
{
"date": "2026-09-12",
"dates": [
"2026-09-12"
],
"hours": 12.42,
"band": "medium",
"range": {
"min": 236.0,
"max": 284.0
},
"rate": 236.0,
"meals": 0,
"reductions": 0.0,
"amount": 236.0
}
]
},
"foreign_per_diem": null,
"mileage": {
"base_rate": 0.0,
"km": 0.0,
"amount": 0.0
},
"fuel": {
"type": null,
"price": null,
"consumption": 0.0,
"amount": 0.0
},
"accommodation": 0.0,
"other": 0.0,
"total": 236.0,
"basis": [
"§ 163 odst. 1 až 3 zákoníku práce, vyhláška č. 573/2025 Sb. § 2",
"§ 6 odst. 7 písm. a) ZDP, § 176 odst. 1 zákoníku práce, vyhláška č. 573/2025 Sb. § 3"
],
"warnings": []
},
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"employee_name": "Anna Ukázková"
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
DELETE Smazání cestovního příkazu
/entities/{entity_id}/trips/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Smaže cestovní příkaz v jakémkoli stavu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID cestovního příkazu Příklad 7. |
Odpověď
204 Prázdná odpověď.
Chování
- Co změní
- Smaže cestovní příkaz. Událost do historie nezapisuje; uzamčení období nekontroluje, protože příkaz nemá účetní zápisy.
- Opakování
- Druhé smazání vrátí 404.
Příklad
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/trips/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/trips/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();soubor, 0 bajtů