Reference API
Veřejné kalkulátory a číselníky
Operace bez přihlášení: zákonné sazby, svátky a lhůty, číselníky, kalkulátory (DPH, daně a pojistné, mzda, cestovní náhrady, odpisy, úrok z prodlení), QR Platba, čtení ISDOC, veřejný náhled sdílené faktury a popis API. Do účetnictví nic nezapisují; náhled sdílené faktury jen zaznamená, že ji někdo otevřel.
GET Stručný popis API ve formátu JSON
/docs
- Oprávnění
- Veřejné, bez přihlášení
Vrátí statický přehled API Salda: konvence (peníze, data, chyby, přihlášení, ochrana proti CSRF, limity), veřejné endpointy s ukázkovými vstupy a stručný seznam endpointů účetních jednotek. Obsah je napsaný v kódu (Ucetnictvi::ApiDocs), nikoli generovaný z rout. Úplný strojový popis operací je v GET /openapi.json.
Odpověď
200 application/json Objekt s popisem API.
| Pole | Význam |
|---|---|
name | Název API |
version | Verze popisu |
description | Stručný popis API (anglicky) |
base_url | Základní adresa https://techtools.cz/ucetnictvi-api |
ui | Adresa aplikace Saldo |
conventions | Konvence: money, dates, errors, auth, csrf, rate_limits |
public_endpoints | Veřejné endpointy s ukázkovými vstupy kalkulaček |
account_endpoints | Stručný přehled endpointů, které vyžadují přihlášení |
disclaimer | Upozornění, že výpočty nejsou daňovým poradenstvím |
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
https://techtools.cz/ucetnictvi-api/docsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/docs');
const data = await response.json();{
"name": "Saldo – TechTools účetnictví API",
"version": "1.1",
"description": "Czech bookkeeping for s.r.o. and OSVČ: invoices, bank matching, double-entry ledger or daňová evidence, VAT return + kontrolní hlášení + souhrnné hlášení with EPO XML, income tax (DPFO/DPPO), OSVČ insurance, income tax returns (DPFO/DPPO) as EPO XML, OSVČ insurance, payroll, travel allowances and depreciation, plus shared invoice links, attachments, quotes and orders, Fio bank feeds and insolvency checks. Public calculators need no account; bookkeeping endpoints need a personal API key or the TechTools session cookie.",
"base_url": "https://techtools.cz/ucetnictvi-api",
"ui": "https://techtools.cz/tools/ucetnictvi/",
"documentation": "https://techtools.cz/tools/ucetnictvi/dokumentace/api/",
"openapi": "https://techtools.cz/ucetnictvi-api/openapi.json",
"conventions": {
"money": "JSON numbers in the document currency, 2 decimals; *_czk fields are converted with the document exchange rate",
"dates": "ISO 8601 (YYYY-MM-DD)",
"errors": "{ \"error\": \"human readable message (Czech)\" } with 400/401/403/404/422",
"auth": "Agents: create a key in Saldo → Nastavení → API a integrace and send it as \"X-API-Key: saldo_…\" or \"Authorization: Bearer saldo_…\". A key acts with its owner's rights in every firm they belong to; read-only keys refuse every non-GET request (403 READ_ONLY_KEY). Browsers: the session cookie (_techtools4_session, fetch credentials: \"include\").",
"csrf": "Every non-GET request that carries the session cookie must also send \"X-Saldo: 1\"; cross-site requests (Origin or Sec-Fetch-Site from another site) are refused with 403 CROSS_SITE. Requests without cookies (API keys, curl to the public calculators) need no extra header.",
"rate_limits": "API keys: 600 requests per minute (429 RATE_LIMITED). Calculators are CPU-only and stateless; inputs are bounded (numbers ≤ 15 digits, dates 2000–2100)"
},
"public_endpoints": {
"docs": {
"method": "GET",
"path": "/docs"
},
"rates": {
"method": "GET",
"path": "/rates?year=2026",
"returns": "every statutory constant used by the engines, with source URLs and reviewed_on (the date they were last checked against the law)"
},
"holidays": {
"method": "GET",
"path": "/holidays?year=2026",
"returns": "Czech public holidays (deadline shifting: § 33 odst. 4 daňového řádu, § 23 odst. 3 zákona č. 589/1992 Sb.)"
},
"deadlines": {
"method": "GET",
"path": "/deadlines?year=2026&legal_form=osvc&vat=quarterly&employees=true",
"params": {
"legal_form": "osvc|sro|as",
"vat": "none|monthly|quarterly|identified",
"employees": "bool",
"advisor": "bool",
"databox": "bool",
"flat_tax": "bool",
"recap_statement": "bool",
"real_estate": "bool",
"road_tax": "bool"
},
"returns": "{ events: [{ date, title, detail, category, basis }] } — every tax and insurance deadline, shifted to business days"
},
"codebooks": {
"method": "GET",
"path": "/codebooks",
"returns": "document kinds, VAT modes, account kinds, insurers, EU countries, RC codes, tax offices…"
},
"qr_platba": {
"method": "GET",
"path": "/qr?iban=CZ6508000000192000145399&amount=1210&vs=20260001&message=Faktura",
"returns": "{ spayd: \"SPD*1.0*ACC:…\" } — the Czech QR Platba string (render it as a QR code)"
},
"shared_document": {
"method": "GET",
"path": "/share/:token",
"returns": "public view of a shared invoice (JSON: document, entity, bank_account, spayd); GET /share/:token/isdoc downloads its ISDOC. The page is /tools/ucetnictvi/faktura/#<token>"
},
"isdoc_parse": {
"method": "POST",
"path": "/isdoc/parse",
"body": "multipart field file (.isdoc/.isdocx, or a PDF with embedded ISDOC) or the raw XML as the request body",
"returns": "normalized invoice: parties, lines, VAT recap, payment details",
"example": "curl -F file=@faktura.isdoc https://techtools.cz/ucetnictvi-api/isdoc/parse"
},
"calculators": {
"method": "POST",
"path": "/calc/:calculator",
"body": "JSON object (Content-Type: application/json) or form fields",
"available": {
"vat": {
"input": {
"net": 1000,
"rate": 21
},
"alt": {
"gross": 1210,
"rate": 21
}
},
"osvc": {
"input": {
"year": 2026,
"income": 900000,
"flat_rate": 60,
"children": [
{
"order": 1
}
],
"spouse": false
},
"returns": "DPFO tax, credits, child bonus, social and health insurance, advances for next year"
},
"regime": {
"input": {
"year": 2026,
"income": 900000,
"expenses": 250000
},
"returns": "ranked comparison of actual expenses vs výdajové paušály vs paušální daň with the recommendation"
},
"flat_tax": {
"input": {
"year": 2026,
"income": 1400000,
"income_kind": "services",
"vat_payer": false
}
},
"corporate": {
"input": {
"year": 2026,
"accounting_profit": 1250000,
"non_deductible": [
{
"label": "Reprezentace",
"amount": 18000
}
]
},
"optional": "gifts (pole částek jednotlivých darů – odečítají se jen dary od 2 000 Kč, § 20 odst. 8 ZDP), loss_carryforward, rd_deduction, paid_advances, last_known_tax"
},
"payroll": {
"input": {
"year": 2026,
"month": 9,
"contract": "hpp",
"gross": 52000,
…
GET Popis API ve formátu OpenAPI 3.1
/openapi.json
- Oprávnění
- Veřejné, bez přihlášení
Vrátí popis API ve formátu OpenAPI 3.1 (JSON) pro generátory klientů a AI agenty. Routa nepřijímá příponu formátu, cesta je vždy přesně /openapi.json.
Odpověď
200 application/json Dokument OpenAPI 3.1: info, servers, components (securitySchemes apiKey, bearer a session), paths.
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
https://techtools.cz/ucetnictvi-api/openapi.jsonJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/openapi.json');
const data = await response.json();{
"openapi": "3.1.0",
"info": {
"title": "Saldo – TechTools účetnictví API",
"version": "1.1",
"description": "Czech bookkeeping for s.r.o. and OSVČ: invoices, bank matching, double-entry ledger or daňová evidence, VAT return + kontrolní hlášení + souhrnné hlášení with EPO XML, income tax (DPFO/DPPO), OSVČ insurance, income tax returns (DPFO/DPPO) as EPO XML, OSVČ insurance, payroll, travel allowances and depreciation, plus shared invoice links, attachments, quotes and orders, Fio bank feeds and insolvency checks. Public calculators need no account; bookkeeping endpoints need a personal API key or the TechTools session cookie.",
"contact": {
"url": "https://techtools.cz/tools/ucetnictvi/"
}
},
"servers": [
{
"url": "https://techtools.cz/ucetnictvi-api"
}
],
"externalDocs": {
"url": "https://techtools.cz/tools/ucetnictvi/dokumentace/api/",
"description": "Dokumentace API v češtině: rychlý start, oprávnění, chyby, limity a reference s příklady"
},
"tags": [
{
"name": "Veřejné kalkulátory a číselníky",
"description": "Sazby, svátky, lhůty, číselníky, QR Platba, čtení ISDOC, kalkulátory a sdílené faktury bez přihlášení."
},
{
"name": "Účet, firmy a přístupy",
"description": "API klíče, pozvánky, firmy, jejich nastavení, členové a role, historie změn, vyhledání firmy podle IČO."
}
],
"components": {
"securitySchemes": {
"apiKey": {
"type": "apiKey",
"in": "header",
"name": "X-API-Key",
"description": "Osobní klíč z Nastavení → API a integrace"
},
"bearer": {
"type": "http",
"scheme": "bearer",
"description": "Tentýž klíč jako Bearer token"
},
"session": {
"type": "apiKey",
"in": "cookie",
"name": "_techtools4_session",
"description": "Přihlášení v prohlížeči; zápisy navíc potřebují hlavičku X-Saldo: 1 a stejný původ"
}
},
"parameters": {
"entity": {
"name": "entity_id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
},
"description": "Účetní jednotka (GET /entities)"
},
"id": {
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
"year": {
"name": "year",
"in": "query",
"schema": {
"type": "integer",
"minimum": 2000,
"maximum": 2100
}
}
},
"schemas": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string"
},
"errors": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"security": [
{
"apiKey": []
},
{
"bearer": []
}
],
"paths": {
"/docs": {
"get": {
"operationId": "getApiDocs",
"tags": [
"Veřejné kalkulátory a číselníky"
],
"summary": "Stručný popis API ve formátu JSON",
"description": "Vrátí statický přehled API Salda: konvence (peníze, data, chyby, přihlášení, ochrana proti CSRF, limity), veřejné endpointy s ukázkovými vstupy a stručný seznam endpointů účetních jednotek. Obsah je napsaný v kódu (Ucetnictvi::ApiDocs), nikoli generovaný z rout. Úplný strojový popis operací je v GET /openapi.json.",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Objekt s popisem API.",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
},
"4XX": {
"description": "Chyba",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string"
},
"errors": {
"type": "object",
"additionalProperties": true
}
}
}
}
}
}
},
"x-saldo-group": "verejne",
"x-saldo-access": "public",
"x-saldo-side-effects": "Nic nezapisuje.",
"x-saldo-response-fields": [
{
"name": "name",
"description": "Název API"
},
{
"name": "version",
"description": "Verze popisu"
}
]
}
},
"/openapi.json": {
"get": {
"operationId": "getOpenApi",
"tags": [
"Veřejné kalkulátory a číselníky"
],
"summary": "Popis API ve formátu OpenAPI 3.1",
"description": "Vrátí popis API ve formátu OpenAPI 3.1 (JSON) pro generátory klientů a AI agenty. Routa nepřijímá příponu formátu, cesta je vždy přesně /openapi.json.",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Dokument OpenAPI 3.1: info, servers, components (securitySchemes apiKey, bearer a session), paths.",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
},
"4XX": {
"description": "Chyba",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
…
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Zákonné sazby a konstanty pro rok
/rates
- Oprávnění
- Veřejné, bez přihlášení
Vrátí všechny zákonné sazby a konstanty, se kterými počítají výpočty Salda (DPH, daň z příjmů, pojistné OSVČ, mzdy, paušální daň, cestovní náhrady, odpisy, repo sazby ČNB), sloučené ze společných a ročních souborů, se zdroji a právním základem. Pole years uvádí roky, pro které Saldo sazby má; jiný rok skončí chybou 422. reviewed_on je den poslední kontroly sazeb proti předpisům.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
year | dotaz | celé číslo | ne | Rok sazeb, výchozí je aktuální rok. Hodnota mimo 2000–2100 se posune na nejbližší mez, nečíselná hodnota znamená aktuální rok. Sazby existují jen pro roky z pole years (nyní 2024–2026). Rozsah od 2000 do 2100. Příklad 2026. |
Odpověď
200 application/json Rok, dostupné roky, datum kontroly a strom sazeb podle oblastí.
| Pole | Význam |
|---|---|
year | Rok, pro který jsou sazby vráceny |
years | Roky, pro které Saldo sazby má |
reviewed_on | Datum poslední kontroly sazeb proti předpisům (YYYY-MM-DD) |
rates | Sazby podle oblastí: general, vat, income_tax, osvc, employees, flat_tax, corporate, travel, foreign_travel, depreciation, repo_rates |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro zadaný rok Saldo sazby nemá (zpráva „Pro rok … nejsou k dispozici zákonné sazby“) |
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 \
"https://techtools.cz/ucetnictvi-api/rates?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/rates?year=2026');
const data = await response.json();{
"year": 2026,
"years": [
2024,
2025
],
"reviewed_on": "2026-09-27",
"rates": {
"depreciation": {
"groups": [
{
"group": 1,
"years": 3,
"label": "Počítače, telefony, kancelářská technika, nářadí",
"straight": {
"standard": {
"first": 20,
"following": 40,
"increased_price": 33.3
},
"first_year_plus_10": {
"first": 30,
"following": 35,
"increased_price": 33.3
},
"first_year_plus_15": {
"first": 35,
"following": 32.5,
"increased_price": 33.3
},
"first_year_plus_20": {
"first": 40,
"following": 30,
"increased_price": 33.3
}
},
"accelerated": {
"first": 3,
"following": 4,
"increased_price": 3
},
"examples": [
{
"item": "1-15",
"code": "CZ-CPA 26.20",
"name": "Počítače a periferní zařízení"
},
{
"item": "1-19",
"code": "CZ-CPA 26.30.2",
"name": "Telefonní přístroje včetně mobilních telefonů"
}
]
},
{
"group": 2,
"years": 5,
"label": "Osobní a nákladní automobily, nábytek, stroje, elektronika",
"straight": {
"standard": {
"first": 11,
"following": 22.25,
"increased_price": 20
},
"first_year_plus_10": {
"first": 21,
"following": 19.75,
"increased_price": 20
},
"first_year_plus_15": {
"first": 26,
"following": 18.5,
"increased_price": 20
},
"first_year_plus_20": {
"first": 31,
"following": 17.25,
"increased_price": 20
}
},
"accelerated": {
"first": 5,
"following": 6,
"increased_price": 5
},
"examples": [
{
"item": "2-65",
"code": "CZ-CPA 29.10.2",
"name": "Osobní automobily"
},
{
"item": "2-67",
"code": "CZ-CPA 29.10.4",
"name": "Motorová vozidla nákladní"
}
]
}
],
"increased_first_year": {
"percents": [
10,
15
],
"groups": [
1,
2
],
"basis": {
"straight": "§ 31 odst. 1 písm. b) až d) a odst. 2 až 6 ZDP",
"accelerated": "§ 32 odst. 2 písm. a) body 1 až 3 ZDP"
}
},
"disposal_year_share": 0.5,
"rounding": {
"digits": 0,
"mode": "ceiling"
},
"basis": {
"groups": "§ 30 odst. 1 a příloha č. 1 ZDP",
"straight": "§ 31 odst. 1, 7 a 8 ZDP",
"accelerated": "§ 32 odst. 1 až 3 ZDP",
"rounding": "§ 31 odst. 9 a § 32 odst. 5 ZDP",
"disposal": "§ 26 odst. 6 a 7 písm. a) bod 1 ZDP",
"interruption": "§ 26 odst. 8 ZDP",
"price_cap": "§ 30 odst. 3 ZDP"
},
"vehicle_m1": {
"expense_cap": 2000000,
"in_use_from_period_starting": "2024-01-01",
"basis": "§ 30e a § 30g ZDP: u osobního automobilu (kategorie M1) jde do výdajů jen poměrná část odpisu 2 000 000 Kč / vstupní cena; neplatí pro sanitky, pohřební vozy, vozidla pro koncesovanou silniční dopravu a vozidla pronajímaná na finanční leasing; čl. XVI bod 10 zákona č. 349/2023 Sb.: jen vozidla uvedená do užívání od prvního zdaňovacího období započatého 1. 1. 2024 nebo později"
},
"intangible": {
"acquired_before": "2021-01-01",
"months": {
"audiovisual": 18,
"software": 36,
"research": 36,
"other": 72
},
"months_after_improvement": {
"audiovisual": 9,
"software": 18,
"research": 18,
"other": 36
},
"rounding": {
"digits": 0,
"mode": "ceiling"
},
"basis": {
"schedule": "§ 32a odst. 4 a 5 ZDP ve znění účinném do 31. 12. 2020",
"improvement": "§ 32a odst. 6 ZDP ve znění účinném do 31. 12. 2020",
"transition": "čl. XII body 10 až 12 zákona č. 609/2020 Sb.; majetek pořízený od 1. 1. 2021 se daňově odpisuje účetními odpisy podle § 24 odst. 2 písm. v) bodu 2 ZDP"
}
},
"accounting": {
"rounding": {
"digits": 0,
"mode": "ceiling"
},
"legacy_rounding": {
"in_use_before": "2026-01-01",
"digits": 0,
"mode": "half_up"
},
"basis": "§ 28 odst. 6 zákona č. 563/1991 Sb., § 56 vyhlášky č. 500/2002 Sb. a ČÚS č. 013 body 4.1 a 4.2 (odpisy se zaokrouhlují na celé koruny nahoru; odpisový plán je účetní politikou; měsíčně od měsíce následujícího po uvedení do užívání; u majetku uvedeného do užívání před 1. 1. 2026 zůstává dosavadní plán se zaokrouhlením matematicky)"
},
"sources": {
"law": "https://www.e-sbirka.cz/eli/cz/sb/1992/586/2026-01-01",
"groups": "https://www.zakonyprolidi.cz/cs/1992-586",
"intangible_until_2020": "https://www.e-sbirka.cz/eli/cz/sb/1992/586/2020-07-01",
"transition": "https://www.e-sbirka.cz/eli/cz/sb/2020/609",
"vehicle_m1": "https://www.zakonyprolidi.cz/cs/1992-586#p30e",
"vehicle_m1_transition": "https://www.zakonyprolidi.cz/cs/2023-349",
"accounting": "https://mf.gov.cz/assets/attachments/Ucetnictvi_2018_Ceske-ucetni-standardy-pro-500-2002_v02.pdf"
},
"unverified": []
},
"repo_rates": {
"history": [
{
"from":
…
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Státní svátky v Česku pro rok
/holidays
- Oprávnění
- Veřejné, bez přihlášení
Vrátí data státních svátků a ostatních svátků podle zákona č. 245/2000 Sb. v daném roce, seřazená podle data: 11 pevných svátků, Velký pátek a Velikonoční pondělí. Saldo podle nich posouvá lhůty na nejbližší následující pracovní den. Seznam neobsahuje názvy svátků a Velký pátek vrací pro každý rok, i když je svátkem až od roku 2016.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
year | dotaz | celé číslo | ne | Rok, výchozí je aktuální. Hodnota mimo 2000–2100 se posune na nejbližší mez, nečíselná hodnota znamená aktuální rok. Rozsah od 2000 do 2100. Příklad 2026. |
Odpověď
200 application/json Rok a seřazené pole dat svátků.
| Pole | Význam |
|---|---|
year | Použitý rok |
holidays | Data svátků (YYYY-MM-DD) vzestupně |
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
"https://techtools.cz/ucetnictvi-api/holidays?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/holidays?year=2026');
const data = await response.json();{
"year": 2026,
"holidays": [
"2026-01-01",
"2026-04-03"
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Daňové a pojistné lhůty pro zadaný profil
/deadlines
- Oprávnění
- Veřejné, bez přihlášení
Vrátí kalendář lhůt jednoho poplatníka na kalendářní rok: DPH (přiznání, kontrolní a souhrnné hlášení), daň z příjmů a zálohy, pojistné OSVČ a přehledy, paušální daň, mzdové odvody a roční vyúčtování, daň z nemovitých věcí, silniční daň a účetní závěrka. Lhůta připadající na víkend nebo svátek se posune na nejbližší následující pracovní den (date), zákonný den zůstává v statutory_date. Počítá se vždy s elektronickým podáním; parametr databox jen doplní právní základ. Neznámá hodnota legal_form znamená osvc, neznámá hodnota vat znamená none. Události jsou seřazené podle data, kategorie a klíče.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
year | dotaz | celé číslo | ne | Kalendářní rok, výchozí je aktuální. Musí mít sazby (GET /rates → years), jinak 422. Rozsah od 2000 do 2100. Příklad 2026. |
legal_form | dotaz | text | ne | Právní forma. U sro a as je kontrolní hlášení vždy měsíční, přibudou lhůty účetní závěrky a platí fiscal_year_start. Hodnoty: osvc, sro, as. Výchozí osvc. Příklad osvc. |
vat | dotaz | text | ne | Vztah k DPH: neplátce, měsíční plátce, čtvrtletní plátce, identifikovaná osoba. Hodnoty: none, monthly, quarterly, identified. Výchozí none. Příklad quarterly. |
employees | dotaz | ano/ne | ne | Má zaměstnance – přidá mzdové odvody, JMHZ a roční vyúčtování. Výchozí false. Příklad true. |
advisor | dotaz | ano/ne | ne | Přiznání k dani z příjmů podává daňový poradce (prodloužená lhůta). Výchozí false. |
databox | dotaz | ano/ne | ne | Má datovou schránku; jen doplní právní základ povinného elektronického podání u přiznání. Výchozí false. |
flat_tax | dotaz | ano/ne | ne | OSVČ v paušálním režimu – místo přiznání, záloh na daň a pojistného dostane oznámení a měsíční paušální platby. U sro a as se ignoruje. Výchozí false. |
recap_statement | dotaz | ano/ne | ne | Podává souhrnné hlášení (dodání do jiného státu EU). Výchozí false. |
recap_goods | dotaz | ano/ne | ne | Čtvrtletní plátce dodává zboží do jiného státu EU – souhrnné hlášení se přidá měsíčně (i bez recap_statement) místo čtvrtletně. Výchozí false. |
audit | dotaz | ano/ne | ne | Povinný audit (jen sro a as) – prodloužená lhůta přiznání a text lhůty schválení závěrky. Výchozí false. |
real_estate | dotaz | ano/ne | ne | Přidá přiznání a splátky daně z nemovitých věcí. Výchozí false. |
road_tax | dotaz | ano/ne | ne | Přidá přiznání a platbu silniční daně. Výchozí false. |
fiscal_year_start | dotaz | celé číslo | ne | Měsíc začátku hospodářského roku (jen sro a as). Hodnota mimo 1–12 se posune na nejbližší mez. Výchozí 1. Rozsah od 1 do 12. |
Odpověď
200 application/json Rok, použitý profil (včetně electronic: true) a seřazené události.
| Pole | Význam |
|---|---|
year | Kalendářní rok |
profile | Použitý profil po doplnění výchozích hodnot |
events[].date | Lhůta posunutá na pracovní den |
events[].statutory_date | Zákonný den lhůty |
events[].shifted | Zda byla lhůta posunuta |
events[].key | Stabilní klíč události, např. vat_return_2026_01 |
events[].title | Název povinnosti |
events[].detail | Období, ke kterému se povinnost vztahuje |
events[].description | Vysvětlení povinnosti |
events[].category | income_tax, vat, insurance, payroll, property, accounts nebo other |
events[].basis | Právní základ |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro zadaný rok Saldo sazby nemá |
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 \
"https://techtools.cz/ucetnictvi-api/deadlines?year=2026&legal_form=osvc&vat=quarterly&employees=true"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/deadlines?year=2026&legal_form=osvc&vat=quarterly&employees=true');
const data = await response.json();{
"year": 2026,
"profile": {
"legal_form": "osvc",
"vat": "quarterly",
"employees": true,
"advisor": false,
"databox": false,
"electronic": true,
"flat_tax": false,
"recap_statement": false,
"recap_goods": false,
"audit": false,
"real_estate": false,
"road_tax": false,
"fiscal_year_start": 1
},
"events": [
{
"date": "2026-01-08",
"statutory_date": "2026-01-08",
"shifted": false,
"key": "osvc_health_advance_2025_12",
"title": "Záloha na zdravotní pojištění OSVČ",
"detail": "za prosinec 2025",
"description": "Zaplaťte zálohu své zdravotní pojišťovně do 8. dne následujícího měsíce. Kdo nemá minimální vyměřovací základ (např. zaměstnanec s pojistným aspoň z minima, pojištěnec státu nebo držitel ZTP či ZTP/P), zálohy neplatí a pojistné doplatí do 8 dnů po podání přehledu.",
"category": "insurance",
"basis": "§ 7 odst. 2 zákona č. 592/1992 Sb."
},
{
"date": "2026-01-20",
"statutory_date": "2026-01-20",
"shifted": false,
"key": "payroll_2025_12",
"title": "Odvody za zaměstnance a měsíční hlášení",
"detail": "za prosinec 2025",
"description": "Odveďte zálohy na daň ze mzdy, pojistné na sociální pojištění ČSSZ a zdravotní pojištění pojišťovnám spolu s přehledem o platbě pojistného. Podejte přehled o výši pojistného pro ČSSZ. Srážkovou daň odveďte do konce následujícího měsíce.",
"category": "payroll",
"basis": "§ 38h odst. 10 ZDP; § 9 odst. 1 zákona č. 589/1992 Sb.; § 5 odst. 2 a § 25 odst. 3 zákona č. 592/1992 Sb.; § 9 odst. 2 zákona č. 589/1992 Sb. ve znění do 31. 12. 2025; za prosinec 2025 čl. IX bod 1 zákona č. 360/2025 Sb."
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Číselníky pro formuláře a API
/codebooks
- Oprávnění
- Veřejné, bez přihlášení
Vrátí všechny číselníky v jednom objektu: druhy a stavy dokladů, režimy DPH, způsoby úhrady, druhy DPH na řádku, nárok na odpočet, právní formy, způsoby vedení účetnictví, vztahy k DPH, výdajové paušály, druhy účtů, role členů, pracovní poměry, zdravotní pojišťovny, invalidity, kategorie a způsoby odpisů majetku, druhy a typy podání, státy EU, měny, jednotky, sazby DPH podle roku, kódy přenesené daňové povinnosti, finanční úřady a odpisové skupiny.
Odpověď
200 application/json Objekt, jehož klíče jsou názvy číselníků.
| Pole | Význam |
|---|---|
document_kinds | Druhy dokladů s popisem a klíčem |
legal_forms | Právní formy (osvc, sro, as, vos, ks, druzstvo, spolek, other) |
bookkeeping_modes | Způsoby vedení (double_entry, tax_records, flat_expenses, flat_tax) |
vat_statuses | Vztah k DPH (none, monthly, quarterly, identified) |
roles | Role členů (owner, accountant, editor, viewer) |
vat_rates | Sazby DPH podle roku |
rc_codes | Kódy režimu přenesení daňové povinnosti |
tax_offices | Finanční úřady a územní pracoviště |
depreciation_groups | Odpisové skupiny s dobou odpisování a sazbami |
Chování
- Co změní
- Nic nezapisuje.
Příklad
cURL
curl \
https://techtools.cz/ucetnictvi-api/codebooksJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/codebooks');
const data = await response.json();{
"document_kinds": [
{
"label": "Faktura vydaná",
"short": "Faktura",
"prefix": "FV",
"direction": "sale",
"tax": true,
"key": "invoice_out"
},
{
"label": "Faktura přijatá",
"short": "Přijatá faktura",
"prefix": "FP",
"direction": "purchase",
"tax": true,
"key": "invoice_in"
}
],
"statuses": {
"draft": "Koncept",
"issued": "Vystaveno",
"cancelled": "Stornováno"
},
"vat_modes": {
"domestic": "Tuzemské plnění",
"reverse_charge": "Přenesená daňová povinnost (§ 92a)",
"eu_goods": "Dodání / pořízení zboží v EU",
"eu_services": "Služby v rámci EU",
"import": "Dovoz ze třetí země",
"export": "Vývoz do třetí země",
"exempt": "Osvobozené plnění",
"non_vat": "Mimo DPH",
"triangular": "Třístranný obchod"
},
"payment_methods": {
"bank": "Bankovní převod",
"cash": "Hotově",
"card": "Kartou",
"cod": "Dobírka",
"offset": "Zápočet",
"advance": "Uhrazeno zálohou",
"other": "Jinak"
},
"vat_kinds": {
"standard": "Zdanitelné plnění",
"exempt_with_credit": "Osvobozeno s nárokem na odpočet",
"exempt_without_credit": "Osvobozeno bez nároku na odpočet",
"not_subject": "Není předmětem daně"
},
"deductions": {
"full": "Plný odpočet",
"proportional": "Krácený odpočet",
"none": "Bez odpočtu"
},
"legal_forms": {
"osvc": "OSVČ",
"sro": "s.r.o.",
"as": "a.s.",
"vos": "v.o.s.",
"ks": "k.s.",
"druzstvo": "družstvo",
"spolek": "spolek",
"other": "jiná forma"
},
"bookkeeping_modes": {
"double_entry": "Podvojné účetnictví",
"tax_records": "Daňová evidence",
"flat_expenses": "Výdajový paušál",
"flat_tax": "Paušální daň"
},
"vat_statuses": {
"none": "Neplátce DPH",
"monthly": "Plátce DPH – měsíčně",
"quarterly": "Plátce DPH – čtvrtletně",
"identified": "Identifikovaná osoba"
},
"flat_expense_rates": [
80,
60
],
"account_kinds": {
"asset": "Aktivní",
"liability": "Pasivní",
"equity": "Vlastní kapitál",
"expense": "Nákladový",
"revenue": "Výnosový",
"closing": "Závěrkový",
"off_balance": "Podrozvahový",
"neutral": "Neutrální"
},
"roles": {
"owner": "Vlastník",
"accountant": "Účetní",
"editor": "Editor",
"viewer": "Jen čtení"
},
"contracts": {
"hpp": "Pracovní poměr (HPP)",
"dpc": "Dohoda o pracovní činnosti (DPČ)",
"dpp": "Dohoda o provedení práce (DPP)"
},
"health_insurers": {
"111": "VZP",
"201": "VoZP",
"205": "ČPZP",
"207": "OZP",
"209": "ZPŠ",
"211": "ZPMV",
"213": "RBP"
},
"disabilities": {
"first": "Invalidita I. a II. stupně",
"third": "Invalidita III. stupně"
},
"asset_categories": {
"tangible": "Hmotný",
"intangible": "Nehmotný",
"low_value": "Drobný"
},
"tax_methods": {
"straight": "Rovnoměrné",
"accelerated": "Zrychlené"
},
"filing_kinds": {
"dph": "Přiznání k DPH",
"kh": "Kontrolní hlášení",
"sh": "Souhrnné hlášení",
"dpfo": "Přiznání k dani z příjmů FO",
"dppo": "Přiznání k dani z příjmů PO",
"prehled_sp": "Přehled pro ČSSZ",
"prehled_zp": "Přehled pro zdravotní pojišťovnu",
"jmhz": "Jednotné měsíční hlášení zaměstnavatele"
},
"filing_types": {
"B": "Řádné",
"O": "Opravné",
"D": "Dodatečné",
"E": "Opravné dodatečné",
"N": "Následné",
"S": "Storno"
},
"eu_countries": [
"AT",
"BE"
],
"currencies": [
"CZK",
"EUR"
],
"units": [
"ks",
"hod"
],
"vat_rates": {
"2024": [
{
"rate": 21,
"band": "basic",
"kh_slot": 1
},
{
"rate": 12,
"band": "reduced",
"kh_slot": 2
}
],
"2025": [
{
"rate": 21,
"band": "basic",
"kh_slot": 1
},
{
"rate": 12,
"band": "reduced",
"kh_slot": 2
}
],
"2026": [
{
"rate": 21,
"band": "basic",
"kh_slot": 1
},
{
"rate": 12,
"band": "reduced",
"kh_slot": 2
}
]
},
"rc_codes": [
{
"code": "1",
"label": "Zlato",
"basis": "§ 92b odst. 2 ZDPH"
},
{
"code": "1a",
"label": "Zlato – zprostředkování dodání investičního zlata",
"basis": "§ 92b odst. 3 ZDPH"
}
],
"tax_offices": [
{
"code": 13,
"name": "Specializovaný finanční úřad",
"workplaces": []
},
{
"code": 451,
"name": "Finanční úřad pro hlavní město Prahu",
"workplaces": [
{
"code": 2001,
"name": "Územní pracoviště pro Prahu 1"
},
{
"code": 2002,
"name": "Územní pracoviště pro Prahu 2"
}
]
}
],
"depreciation_groups": [
{
"group": 1,
"years": 3,
"label": "Počítače, telefony, kancelářská technika, nářadí",
"straight": {
"first": 20.0,
"following": 40.0,
"increased_price": 33.3
},
"accelerated": {
"first": 3,
"following": 4,
"increased_price": 3
},
"examples": [
{
"item": "1-15",
"code": "CZ-CPA 26.20",
"name": "Počítače a periferní zařízení"
},
{
"item": "1-19",
"code": "CZ-CPA 26.30.2",
"name": "Telefonní přístroje včetně mobilních telefonů"
}
]
},
{
"group": 2,
"years": 5,
"label": "Osobní a nákladní automobily, nábytek, stroje, elektronika",
"straight": {
"first": 11.0,
"following": 22.25,
"increased_price": 20.0
},
"accelerated": {
"first": 5,
"following": 6,
"increased_price": 5
},
"examples": [
{
"item": "2-65",
"code": "CZ-CPA 29.10.2",
"name": "Osobní
…
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Řetězec QR Platby (SPAYD) pro platbu
/qr
- Oprávnění
- Veřejné, bez přihlášení
Sestaví řetězec QR Platby podle standardu SPAYD 1.0 České bankovní asociace, který stačí vykreslit jako QR kód. Ověří IBAN (kontrolní číslice, i zahraniční), měnu, částku, datum a symboly. Text zprávy a jméno příjemce zkrátí na délku podle standardu a znaky mimo ASCII zakóduje.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
iban | dotaz | text | ano | IBAN příjemce; mezery se odstraní a písmena převedou na velká. Příklad CZ6508000000192000145399. |
amount | dotaz | číslo | ano | Částka, kladná a nejvýše 9 999 999,99. Přijme i desetinnou čárku a mezery; nečíselná hodnota se bere jako 0 a skončí chybou 422. Příklad 1210. |
currency | dotaz | text | ne | Kód měny ISO 4217 (tři písmena). Výchozí CZK. Příklad CZK. |
vs | dotaz | text | ne | Variabilní symbol, nejvýše 10 číslic. Příklad 20260001. |
ks | dotaz | text | ne | Konstantní symbol, nejvýše 10 číslic. |
ss | dotaz | text | ne | Specifický symbol, nejvýše 10 číslic. |
message | dotaz | text | ne | Zpráva pro příjemce; zkrátí se na 60 znaků. Příklad Faktura 20260001. |
due_date | dotaz | datum | ne | Datum splatnosti (YYYY-MM-DD); jiný formát vrátí 400. Příklad 2026-10-15. |
name | dotaz | text | ne | Jméno příjemce; zkrátí se na 35 znaků. |
Odpověď
200 application/json Objekt s řetězcem SPAYD.
| Pole | Význam |
|---|---|
spayd | Řetězec QR Platby, např. SPD*1.0*ACC:CZ…*AM:1210.00*CC:CZK*X-VS:20260001 |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Neplatný IBAN („Neplatný IBAN: …“) |
| 422 | – | Částka není kladná („Částka musí být kladná“), a to i když není číslem |
| 422 | – | Částka je vyšší než 9 999 999,99 |
| 422 | – | Neplatný kód měny nebo symbol delší než 10 číslic či s jinými znaky než číslicemi |
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 \
"https://techtools.cz/ucetnictvi-api/qr?iban=CZ6508000000192000145399&amount=1210&vs=20260001&message=Faktura+20260001&due_date=2026-10-15"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/qr?iban=CZ6508000000192000145399&amount=1210&vs=20260001&message=Faktura+20260001&due_date=2026-10-15');
const data = await response.json();{
"spayd": "SPD*1.0*ACC:CZ6508000000192000145399*AM:1210.00*CC:CZK*DT:20261015*MSG:Faktura 20260001*X-VS:20260001"
}
POST Přečte fakturu ve formátu ISDOC
/isdoc/parse
- Oprávnění
- Veřejné, bez přihlášení
Přečte jeden doklad ISDOC 5.x nebo 6.x a vrátí ho jako JSON: strany, řádky, rekapitulaci DPH, součty a platební údaje. Přijme soubor .isdoc (XML), .isdocx (ZIP s manifestem a přílohami) i PDF s vloženým ISDOC. Soubor lze poslat jako pole file (multipart) nebo přímo jako tělo požadavku. Obsah souboru nikdy nezpůsobí chybu: neplatný soubor vrátí 200 s prázdnými poli a důvodem v prvním prvku warnings. Druh dokladu je vždy z pohledu příjemce (invoice_in, credit_in, proforma_in, advance_in).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
filename | dotaz | text | ne | Název souboru pro hlášení ve warnings, když se soubor posílá jako tělo požadavku. |
Tělo požadavku
Formát multipart/form-data.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
file | soubor | ano | Soubor .isdoc, .isdocx nebo PDF s vloženým ISDOC, nejvýše 10 MB. Místo multipart lze poslat samotný soubor jako tělo (např. Content-Type: application/xml). |
Odpověď
200 application/json Normalizovaný doklad. U nečitelného souboru jsou pole prázdná a warnings obsahuje důvod.
| Pole | Význam |
|---|---|
format_version | Verze ISDOC ze souboru |
document_type | Typ dokladu ISDOC (1 faktura, 2 dobropis, 3 vrubopis, 4 zálohová faktura, 5–6 daňový doklad k záloze, 7 zjednodušený) |
kind | Druh dokladu v Saldu z pohledu příjemce |
simplified | Zjednodušený daňový doklad (typ 7) |
number | Číslo dokladu |
uuid | UUID dokladu, je-li platné |
issue_date | Datum vystavení |
taxable_date | DUZP |
due_date | Datum splatnosti |
currency | Měna dokladu |
exchange_rate | Kurz u cizí měny |
vat_applicable | Doklad podléhá DPH (VATApplicable; bez údaje true, u nečitelného souboru null) |
note | Poznámka z dokladu |
order_reference | Číslo objednávky (ExternalOrderID nebo SalesOrderID) |
original | Původní doklad u opravného dokladu (number, uuid, issue_date), jinak null |
supplier | Dodavatel: name, ico, dic, street, house_number, city, zip, country, email, phone, register_note |
customer | Odběratel ve stejném tvaru |
lines | Řádky: description, quantity, unit, unit_price, net, vat, gross, vat_rate, net_czk, vat_czk, reverse_charge |
totals | Součty: net, vat, gross, rounding, payable, paid_deposits, by_rate a částky v Kč |
payment | method, variable_symbol, constant_symbol, specific_symbol, account_number, bank_code, iban, bic, due_date |
attachments | Přílohy z .isdocx (filename, content_type, size), bez obsahu |
warnings | Upozornění a důvody, proč něco nešlo přečíst |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 400 | – | Nebyl poslán žádný soubor ani tělo požadavku |
| 413 | – | Soubor je větší než 10 MB |
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
- Nejvýše 10 MB. ZIP (.isdocx) nejvýše 200 souborů, jeden soubor do 20 MB a celkem do 60 MB po rozbalení; PDF nejvýše 5 000 proudů, 20 MB na proud a 80 MB po dekompresi. Čte vždy jen jeden doklad: z archivu bez manifest.xml vezme první soubor .isdoc (přednostně z kořene archivu), ostatní soubory vrátí jen jako přílohy a do warnings doplní upozornění.
Příklad
cURL
curl \
-X POST \
-F "file=@faktura-dodavatel.isdoc" \
https://techtools.cz/ucetnictvi-api/isdoc/parseJavaScript
const form = new FormData();
form.append('file', fileInput.files[0], 'faktura-dodavatel.isdoc');
const response = await fetch('https://techtools.cz/ucetnictvi-api/isdoc/parse', {
method: 'POST',
body: form
});
const data = await response.json();{
"format_version": "6.0.2",
"document_type": 1,
"kind": "invoice_in",
"simplified": false,
"number": "FV2026-0317",
"uuid": "6C1F2B3A-4D5E-4F60-8A7B-9C0D1E2F3A4B",
"issue_date": "2026-09-14",
"taxable_date": "2026-09-12",
"due_date": "2026-09-28",
"currency": "CZK",
"exchange_rate": null,
"vat_applicable": true,
"note": "Fakturujeme Vám dodávku kancelářských potřeb dle objednávky.",
"order_reference": "OBJ/2026/112",
"original": null,
"supplier": {
"name": "Kancelářské potřeby Hradec s.r.o.",
"ico": "27082440",
"dic": "CZ27082440",
"street": "Gočárova třída",
"house_number": "1754/48a",
"city": "Hradec Králové",
"zip": "500 02",
"country": "CZ",
"email": "fakturace@kp-hradec.cz",
"phone": "+420 495 123 456",
"register_note": "Krajský soud v Hradci Králové, oddíl C, vložka 21456"
},
"customer": {
"name": "Novák Stavby s.r.o.",
"ico": "07082440",
"dic": "CZ07082440",
"street": "Na Příkopě",
"house_number": "33",
"city": "Praha 1",
"zip": "11000",
"country": "CZ",
"email": null,
"phone": null,
"register_note": null
},
"lines": [
{
"description": "Kancelářský papír A4 80 g/m², balení 500 listů",
"quantity": 25.0,
"unit": "ks",
"unit_price": 119.0,
"net": 2975.0,
"vat": 624.75,
"gross": 3599.75,
"vat_rate": 21.0,
"net_czk": 2975.0,
"vat_czk": 624.75,
"reverse_charge": null
},
{
"description": "Instalace a zprovoznění síťové tiskárny",
"quantity": 1.5,
"unit": "hod",
"unit_price": 950.0,
"net": 1425.0,
"vat": 299.25,
"gross": 1724.25,
"vat_rate": 21.0,
"net_czk": 1425.0,
"vat_czk": 299.25,
"reverse_charge": null
}
],
"totals": {
"net": 5378.0,
"vat": 1041.36,
"gross": 6419.36,
"rounding": -0.36,
"payable": 6419.0,
"paid_deposits": 0.0,
"by_rate": [
{
"rate": 21.0,
"net": 4400.0,
"vat": 924.0,
"gross": 5324.0,
"net_czk": 4400.0,
"vat_czk": 924.0
},
{
"rate": 12.0,
"net": 978.0,
"vat": 117.36,
"gross": 1095.36,
"net_czk": 978.0,
"vat_czk": 117.36
}
],
"net_czk": 5378.0,
"vat_czk": 1041.36,
"gross_czk": 6419.36,
"rounding_czk": -0.36,
"payable_czk": 6419.0
},
"payment": {
"method": "bank",
"variable_symbol": "20260317",
"constant_symbol": "308",
"specific_symbol": null,
"account_number": "19-2000145399",
"bank_code": "0800",
"iban": "CZ6508000000192000145399",
"bic": "GIBACZPX",
"due_date": "2026-09-28"
},
"attachments": [],
"warnings": []
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Veřejná kalkulačka daní, pojistného, mezd a náhrad
/calc/{calculator}
- Oprávnění
- Veřejné, bez přihlášení
Spustí jednu z bezstavových kalkulaček podle cesty: DPH, OSVČ, porovnání režimů, paušální daň, daň právnické osoby, mzda, cestovní náhrady, odpisy a úrok z prodlení. Vstupy se posílají jako JSON objekt (Content-Type: application/json) nebo jako formulářová pole. Výsledky počítají se sazbami roku, který kalkulačka použije; pro rok bez sazeb vrátí 422. Nečíselné hodnoty a čísla s více než 15 číslicemi se u částek berou jako 0, nevrátí chybu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
calculator | cesta | text | ano | Název kalkulačky. Pomlčky se převádějí na podtržítka, takže fungují i late-interest a flat-tax. Hodnoty: vat, osvc, regime, flat_tax, corporate, payroll, travel, depreciation, late_interest. Příklad osvc. |
Odpověď
200 application/json Výsledek výpočtu; tvar podle kalkulačky (viz varianty).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 404 | – | Neznámá kalkulačka; zpráva vyjmenuje dostupné názvy |
| 422 | – | Chybí povinné pole nebo má neplatnou hodnotu, včetně neplatného data; zpráva začíná „Chybí nebo je neplatný parametr:“ |
| 422 | – | Pole má jiný tvar, než kalkulačka čeká (např. objekt místo čísla); zpráva „Parametry mají neplatný tvar – popis vstupů je v /ucetnictvi-api/docs“ |
| 422 | – | Pro rok výpočtu Saldo sazby nemá („Pro rok … nejsou k dispozici zákonné sazby“) |
| 400 | – | Tělo není platný JSON; odpověď sestaví Rails (HTML stránka, s Accept: application/json objekt {status, error}), ne tvar {error} Salda |
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
- Částky mají nejvýše 15 číslic před desetinnou čárkou, jinak se berou jako 0. Roky jen z GET /rates → years (nyní 2024–2026). Aplikace sama volání bez API klíče neomezuje; s API klíčem platí limit 600 požadavků za minutu na klíč, počítaný zvlášť pro každou skupinu cest.
- Opakování
- Stejný vstup dává stejný výsledek. Výchozí hodnoty (rok, měsíc, den úhrady) se berou z dnešního data, takže se mohou mezi dny lišit.
/calc/vat – DPH ze základu nebo z částky s daní
Spočítá DPH zdola ze základu (net, § 37 písm. a) ZDPH), nebo shora z částky včetně daně (gross, § 37 písm. b) ZDPH). Když je zadané gross, net se ignoruje. Daň se zaokrouhlí na haléře. Sazba se neověřuje; nečíselná sazba znamená 0 %.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
net | číslo | ne | Základ daně; povinný, pokud není zadané gross. |
gross | číslo | ne | Částka včetně DPH; když je zadaná, počítá se shora. |
rate | číslo | ne | Sazba DPH v procentech. Výchozí 21. |
Pole odpovědi
| Pole | Význam |
|---|---|
rate | Použitá sazba |
net | Základ |
vat | Daň |
gross | Částka s daní |
method | Způsob výpočtu (zdola nebo shora) s paragrafem |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí net i gross |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"net":1000,"rate":21}' \
https://techtools.cz/ucetnictvi-api/calc/vatJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/vat', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"net": 1000,
"rate": 21
})
});
const data = await response.json();{
"rate": 21.0,
"net": 1000.0,
"vat": 210.0,
"gross": 1210.0,
"method": "zdola (§ 37 písm. a) ZDPH)"
}
/calc/osvc – Daň a pojistné OSVČ za rok
Spočítá rok OSVČ: daň z příjmů fyzických osob se slevami a daňovým zvýhodněním na děti, sociální a zdravotní pojištění podle přehledů, doplatky, zálohy na další rok, čistý příjem a řádky přiznání DPFO. Výdaje zadejte buď skutečné (expenses), nebo jako výdajový paušál (flat_rate) – právě jedno z nich. Sleva na manžela se přes tuto kalkulačku neuplatní (spouse se bere jen jako ano/ne a sleva vyžaduje příjem manžela a dítě do 3 let; vrátí se jen upozornění). Počet měsíců u dětí se neomezuje.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok, výchozí je aktuální; musí mít sazby. |
income | číslo | ano | Příjmy ze samostatné činnosti za rok. |
expenses | číslo | ne | Skutečné výdaje; nezadávejte současně s flat_rate. |
flat_rate | celé číslo | ne | Výdajový paušál v procentech; nezadávejte současně s expenses. Hodnoty: 80, 60, 40, 30. |
months | celé číslo | ne | Počet měsíců činnosti v roce. Výchozí 12. Rozsah od 1 do 12. |
main_activity | ano/ne | ne | Hlavní (true) nebo vedlejší (false) samostatná činnost. Výchozí true. |
sickness_insurance | ano/ne | ne | Platí dobrovolné nemocenské pojištění. Výchozí false. |
spouse | ano/ne | ne | Uplatnění slevy na manžela; v této kalkulačce jen vyvolá upozornění, slevu neuplatní. Výchozí false. |
children | pole (objekt) | ne | Vyživované děti pro daňové zvýhodnění. |
children[] | celé číslo | ne | Pořadí dítěte; 3 a vyšší mají sazbu třetího dítěte. Výchozí 1. |
children[] | celé číslo | ne | Počet měsíců nároku; hodnota se neověřuje. Výchozí 12. |
children[] | ano/ne | ne | Dítě je držitelem průkazu ZTP/P. Výchozí false. |
disability | text | ne | Stupeň invalidity poplatníka pro slevu. Hodnoty: 1, 2, 3, i, ii, iii, first, second, third. |
ztpp | ano/ne | ne | Poplatník je držitelem průkazu ZTP/P. Výchozí false. |
deductions | objekt | ne | Nezdanitelné části základu daně: gifts, blood_donations (počet odběrů), mortgage_interest, mortgage_before_2021, mortgage_months, pension, life_insurance, dip, long_term_care. Neznámý klíč vrátí upozornění. |
employment_income | číslo | ne | Příjmy ze závislé činnosti (§ 6 ZDP). Výchozí 0. |
paid_advances | objekt | ne | Již zaplacené částky: tax (zálohy na daň), withheld (sražená daň), bonuses (vyplacené měsíční daňové bonusy), sp (zálohy na sociální pojištění), zp (zálohy na zdravotní pojištění). |
Pole odpovědi
| Pole | Význam |
|---|---|
expenses | Uplatněné výdaje |
expense_method | Způsob výdajů a u paušálu jeho části se stropem |
profit | Dílčí základ ze samostatné činnosti |
tax_base | Základ daně |
deductions | Uplatněné odpočty |
tax_before_credits | Daň před slevami |
credits | Slevy na dani |
child_benefit | Daňové zvýhodnění na děti: celkem, uplatněno jako sleva, bonus |
tax | Daň po slevách |
bonus | Daňový bonus |
tax_withheld | Sražená daň (paid_advances.withheld) |
tax_advances_paid | Zaplacené zálohy na daň (paid_advances.tax) |
tax_balance | Doplatek (kladný) nebo přeplatek daně |
tax_advances | Zálohy na daň na další období |
sp | Sociální pojištění: základy, pojistné, sleva, doplatek, nová záloha, nemocenské |
zp | Zdravotní pojištění: základy, pojistné, doplatek, nová záloha |
total_levies | Daň a pojistné celkem |
net_income | Příjmy po výdajích a odvodech |
effective_rate | Podíl odvodů na příjmech |
form_rows | Hodnoty řádků přiznání DPFO |
warnings | Upozornění k výpočtu |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí income |
| 422 | – | Není zadán právě jeden z expenses a flat_rate („Zadejte buď skutečné výdaje, nebo výdajový paušál“) |
| 422 | – | flat_rate není 80, 60, 40 ani 30 („Neznámý výdajový paušál“) |
| 422 | – | months mimo 1–12 nebo neznámý stupeň invalidity |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"year":2026,"income":900000,"flat_rate":60,"children":[{"order":1}]}' \
https://techtools.cz/ucetnictvi-api/calc/osvcJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/osvc', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2026,
"income": 900000,
"flat_rate": 60,
"children": [
{
"order": 1
}
]
})
});
const data = await response.json();{
"year": 2026,
"income": 900000.0,
"expenses": 540000.0,
"expense_method": {
"kind": "flat_rate",
"parts": [
{
"kind": "trade",
"label": "živnostenské podnikání kromě řemeslných živností",
"rate": 0.6,
"income": 900000.0,
"amount": 540000.0,
"cap": 1200000.0,
"capped": false,
"basis": "§ 7 odst. 7 písm. b) ZDP"
}
]
},
"profit": 360000.0,
"employment_income": 0.0,
"tax_base": 360000.0,
"deductions": [],
"tax_base_rounded": 360000.0,
"tax_before_credits": 54000.0,
"credits": [
{
"key": "taxpayer",
"label": "Základní sleva na poplatníka",
"row": "64",
"months": 12,
"amount": 30840.0,
"basis": "§ 35ba odst. 1 písm. a) ZDP"
}
],
"child_benefit": {
"total": 15204.0,
"used_as_credit": 15204.0,
"bonus": 0.0,
"children": [
{
"order": 1,
"months": 12,
"ztpp": false,
"amount": 15204.0
}
]
},
"tax": 7956.0,
"bonus": 0.0,
"tax_withheld": 0.0,
"tax_advances_paid": 0.0,
"tax_balance": 7956.0,
"tax_advances": {
"last_known_tax": 7956.0,
"frequency": "none",
"amount": 0.0,
"period": {
"from": "2027-05-04",
"to": "2028-05-02"
},
"schedule": [],
"basis": "§ 38a ZDP"
},
"sp": {
"participates": true,
"decisive_amount": null,
"assessment_base": 198000.0,
"minimum_base": 205668.0,
"maximum_base": 2350416.0,
"applied_base": 205668.0,
"rate": 0.292,
"premium": 60056.0,
"discount": 0.0,
"premium_after_discount": 60056.0,
"advances_paid": 0.0,
"balance": 60056.0,
"monthly_advance_next": 5005.0,
"sickness": null,
"basis": "§ 5b, § 7 odst. 1 písm. e) bod 1, § 14 a § 15a zákona č. 589/1992 Sb."
},
"zp": {
"minimum_applies": true,
"assessment_base": 180000.0,
"minimum_base": 293802.0,
"applied_base": 293802.0,
"rate": 0.135,
"premium": 39664.0,
"advances_paid": 0.0,
"balance": 39664.0,
"monthly_advance_next": 3306.0,
"basis": "§ 2, § 3a a § 8 zákona č. 592/1992 Sb."
},
"total_levies": 107676.0,
"net_income": 252324.0,
"effective_rate": 0.1196,
"form_rows": {
"37": 360000.0,
"41": 360000.0,
"42": 360000.0,
"45": 360000.0,
"55": 360000.0,
"56": 360000.0,
"57": 54000.0,
"58": 54000.0,
"60": 54000.0,
"70": 30840.0,
"71": 23160.0,
"72": 15204.0,
"73": 15204.0,
"74": 7956.0,
"75": 7956.0,
"77": 7956.0,
"91": 7956.0,
"64": 30840.0,
"101": 900000.0,
"102": 540000.0,
"104": 360000.0,
"113": 360000.0
},
"warnings": [
"Minima pro rok 2027 zatím nejsou v sazbách, nové zálohy jsou spočteny s minimy roku 2026.",
"Minimální zálohy hlavní činnosti za leden až červen 2026 činily 5 720 Kč (40 % průměrné mzdy). Zákon č. 90/2026 Sb. snížil minimum od 1. 7. 2026 na 35 % (5 005 Kč) a přehled za rok 2026 se počítá s minimem 35 % za celý rok. Kdo měl platit minimální zálohu, může do 31. 12. 2026 písemně požádat o vrácení rozdílu, jinak se přeplatek zohlední v přehledu; nedoplatek do výše rozdílu a penále z něj zanikly, byla-li zaplacena aspoň nová výše zálohy (čl. II body 2, 3 a 5)."
]
}
/calc/regime – Porovnání skutečných výdajů, paušálů a paušální daně
Porovná roční odvody OSVČ (daň, sociální a zdravotní pojištění, případně nemocenské) při skutečných výdajích, při výdajových paušálech a v paušálním režimu, seřadí způsobilé varianty od nejlevnější, označí doporučenou a spočítá úsporu proti současnému režimu. Paušál neodpovídající druhu příjmů a nedostupný paušální režim jsou uvedeny s důvody. Osobní údaje se předávají v objektu profile; main_activity, vat_payer, children a spouse lze poslat i na nejvyšší úrovni a mají přednost. Na rozdíl od kalkulačky osvc lze v profile.spouse poslat objekt s příjmem manžela a slevu tak uplatnit.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok, výchozí je aktuální; musí mít sazby. |
income | číslo | ano | Příjmy ze samostatné činnosti. |
expenses | číslo | ne | Skutečné výdaje. Výchozí 0. |
main_activity | ano/ne | ne | Hlavní činnost; přepíše profile.main_activity. |
vat_payer | ano/ne | ne | Plátce DPH (vylučuje paušální režim); přepíše profile.vat_payer. |
children | pole (objekt) | ne | Děti jako u kalkulačky osvc; přepíše profile.children. |
spouse | ne | true/false, nebo objekt { income, child_under_three, months, ztpp }; přepíše profile.spouse. | |
profile | objekt | ne | Další údaje: income_kind (crafts, trade, other, rental nebo 80/60/40/30, případně objekt { druh: částka } pro smíšené příjmy; výchozí trade s upozorněním), flat_rate (totéž, když chybí income_kind), current_regime (klíč varianty), bookkeeping (tax_records, double_entry, flat_expenses, flat_tax – určí současný režim), employment_income, other_income, partner, insolvency, months, sickness_insurance, disability, ztpp, deductions, starting_business. |
Pole odpovědi
| Pole | Význam |
|---|---|
income_kind | Použitý druh příjmů |
current | Klíč současného režimu |
recommended | Klíč nejlevnější způsobilé varianty |
savings | Úspora doporučené varianty proti současné (null, když současná není způsobilá) |
options | Varianty (actual_expenses, flat_rate_80/60/40/30 nebo flat_rate_mixed, flat_tax): eligible, rank, total_levies, tax, sp, zp, net_income, reasons, notes, savings_vs_current |
summary | Shrnutí doporučení česky |
warnings | Upozornění |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí income nebo je neznámý druh příjmů (income_kind, flat_rate) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"year":2026,"income":900000,"expenses":250000,"profile":{"income_kind":"trade"}}' \
https://techtools.cz/ucetnictvi-api/calc/regimeJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/regime', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2026,
"income": 900000,
"expenses": 250000,
"profile": {
"income_kind": "trade"
}
})
});
const data = await response.json();{
"year": 2026,
"income": 900000.0,
"actual_expenses": 250000.0,
"income_kind": "trade",
"current": "actual_expenses",
"recommended": "flat_tax",
"savings": 104981.0,
"options": [
{
"key": "flat_tax",
"label": "Paušální daň – 1. pásmo",
"eligible": true,
"rank": 1,
"basis": "§ 2a, § 7a a § 38lk ZDP",
"band": 1,
"monthly": 9162.0,
"tax": 1200.0,
"bonus": 0.0,
"sp": 69072.0,
"zp": 39672.0,
"sickness": 0.0,
"total_levies": 109944.0,
"net_income": 540056.0,
"effective_rate": 0.1222,
"reasons": [],
"notes": [
"Paušální daň zahrnuje daň, sociální i zdravotní pojištění; je-li vaše daň rovna paušální dani, nepodáváte daňové přiznání ani přehledy pro ČSSZ a zdravotní pojišťovnu (§ 38lh ZDP, § 15 odst. 1 zákona č. 589/1992 Sb., § 24 odst. 2 zákona č. 592/1992 Sb.).",
"V paušálním režimu nelze uplatnit slevy na dani, daňové zvýhodnění na děti, daňový bonus ani odpočty od základu daně."
],
"savings_vs_current": 104981.0
},
{
"key": "flat_rate_60",
"label": "Výdajový paušál 60 %",
"eligible": true,
"rank": 2,
"basis": "§ 7 odst. 7 písm. b) ZDP",
"expenses": 540000.0,
"profit": 360000.0,
"tax": 23160.0,
"bonus": 0.0,
"sp": 60056.0,
"zp": 39664.0,
"sickness": 0.0,
"total_levies": 122880.0,
"net_income": 527120.0,
"effective_rate": 0.1365,
"reasons": [],
"notes": [
"Minima pro rok 2027 zatím nejsou v sazbách, nové zálohy jsou spočteny s minimy roku 2026.",
"Minimální zálohy hlavní činnosti za leden až červen 2026 činily 5 720 Kč (40 % průměrné mzdy). Zákon č. 90/2026 Sb. snížil minimum od 1. 7. 2026 na 35 % (5 005 Kč) a přehled za rok 2026 se počítá s minimem 35 % za celý rok. Kdo měl platit minimální zálohu, může do 31. 12. 2026 písemně požádat o vrácení rozdílu, jinak se přeplatek zohlední v přehledu; nedoplatek do výše rozdílu a penále z něj zanikly, byla-li zaplacena aspoň nová výše zálohy (čl. II body 2, 3 a 5)."
],
"savings_vs_current": 92045.0
}
],
"summary": "Nejvýhodnější je paušální daň – 1. pásmo: odvody 109 944 Kč ročně, o 104 981 Kč méně než současný režim (skutečné výdaje v daňové evidenci).",
"warnings": []
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/calc/flat_tax – Nárok na paušální daň a pásmo
Ověří, zda poplatník může být v paušálním režimu, a vrátí pásmo s měsíční paušální zálohou rozdělenou na daň, sociální a zdravotní pojištění. Nesplněné podmínky vrátí v reasons. Pro smíšené příjmy lze poslat income_kind jako objekt s částkami podle druhu.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok, výchozí je aktuální; musí mít sazby. |
income | číslo | ano | Roční příjmy ze samostatné činnosti. |
income_kind | text | ne | Druh příjmů: crafts, trade, other, rental nebo sazba paušálu 80, 60, 40, 30; případně objekt { druh: částka }. Výchozí trade. |
vat_payer | ano/ne | ne | Plátce DPH (vylučuje paušální režim). Výchozí false. |
employment | ano/ne | ne | Má příjmy ze závislé činnosti nezdaněné srážkovou daní (vylučuje režim). Výchozí false. |
other_income | číslo | ne | Příjmy z kapitálu, nájmu a ostatní příjmy (nad limit vylučují režim). Výchozí 0. |
Pole odpovědi
| Pole | Význam |
|---|---|
eligible | Zda může být v paušálním režimu |
band | Číslo pásma (null, když nesplní limit) |
monthly | Měsíční paušální záloha |
annual | Roční částka (12 měsíců) |
split | Rozdělení měsíční zálohy: tax, social, health |
reasons | Důvody, proč režim nelze použít |
notes | Poznámky k režimu |
basis | Právní základ |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí income nebo je neznámý druh příjmů („Neznámý výdajový paušál: …“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"year":2026,"income":800000,"income_kind":"trade","vat_payer":false}' \
https://techtools.cz/ucetnictvi-api/calc/flat_taxJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/flat_tax', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2026,
"income": 800000,
"income_kind": "trade",
"vat_payer": false
})
});
const data = await response.json();{
"eligible": true,
"band": 1,
"monthly": 9162.0,
"annual": 109944.0,
"split": {
"tax": 100.0,
"social": 5756.0,
"health": 3306.0
},
"reasons": [],
"notes": [
"Paušální daň zahrnuje daň, sociální i zdravotní pojištění; je-li vaše daň rovna paušální dani, nepodáváte daňové přiznání ani přehledy pro ČSSZ a zdravotní pojišťovnu (§ 38lh ZDP, § 15 odst. 1 zákona č. 589/1992 Sb., § 24 odst. 2 zákona č. 592/1992 Sb.).",
"V paušálním režimu nelze uplatnit slevy na dani, daňové zvýhodnění na děti, daňový bonus ani odpočty od základu daně."
],
"basis": "§ 2a, § 7a a § 38lk ZDP"
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/calc/corporate – Daň z příjmů právnické osoby
Spočítá daň z příjmů právnických osob z účetního výsledku hospodaření: připočte daňově neuznatelné náklady, odečte nezdanitelné výnosy, uplatní ztrátu z minulých let, odpočet na výzkum a dary (jen jednotlivé dary od zákonného minima, nejvýše podíl základu), zaokrouhlí základ, vrátí daň, zálohy na další období, doplatek a řádky přiznání DPPO. Úpravy se zařadí na výchozí řádky přiznání.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok, výchozí je aktuální (zdaňovací období končí 31. 12.); musí mít sazby. |
accounting_profit | číslo | ano | Účetní výsledek hospodaření před zdaněním (ztráta záporně). |
non_deductible | pole (objekt) | ne | Připočitatelné položky. |
non_deductible[] | text | ne | Popis |
non_deductible[] | číslo | ne | Částka |
non_taxable | pole (objekt) | ne | Odečitatelné položky. |
non_taxable[] | text | ne | Popis |
non_taxable[] | číslo | ne | Částka |
loss_carryforward | číslo | ne | Daňová ztráta z minulých let k uplatnění. Výchozí 0. |
gifts | pole (číslo) | ne | Částky jednotlivých darů (lze poslat i jedno číslo). |
rd_deduction | číslo | ne | Odpočet na výzkum a vývoj. Výchozí 0. |
paid_advances | číslo | ne | Zaplacené zálohy na daň. Výchozí 0. |
last_known_tax | číslo | ne | Poslední známá daň pro výpočet záloh; bez ní se použije vypočtená daň. |
Pole odpovědi
| Pole | Význam |
|---|---|
increases | Připočtené položky s řádkem přiznání |
decreases | Odečtené položky s řádkem přiznání |
tax_base | Základ daně před odpočty |
loss | Daňová ztráta běžného roku |
loss_applied | Uplatněná ztráta z minulých let |
rd_applied | Uplatněný odpočet na výzkum a vývoj |
base_after_deductions | Základ po odečtení ztráty a odpočtu na výzkum |
gifts_applied | Odečtené dary |
tax_base_rounded | Zaokrouhlený základ |
rate | Sazba daně |
tax | Daň |
advances | Zálohy: frequency, amount, period, schedule |
balance | Daň minus zaplacené zálohy |
form_rows | Nenulové řádky přiznání DPPO |
warnings | Upozornění (ztráta, malé dary, strop darů) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí accounting_profit |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"year":2026,"accounting_profit":1250000,"non_deductible":[{"label":"Reprezentace","amount":18000}],"gifts":[5000]}' \
https://techtools.cz/ucetnictvi-api/calc/corporateJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/corporate', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2026,
"accounting_profit": 1250000,
"non_deductible": [
{
"label": "Reprezentace",
"amount": 18000
}
],
"gifts": [
5000
]
})
});
const data = await response.json();{
"year": 2026,
"accounting_profit": 1250000.0,
"increases": [
{
"label": "Reprezentace",
"amount": 18000.0,
"row": "40"
}
],
"decreases": [],
"tax_base": 1268000.0,
"loss": 0.0,
"loss_applied": 0.0,
"rd_applied": 0.0,
"base_after_deductions": 1268000.0,
"gifts_applied": 5000.0,
"tax_base_rounded": 1263000.0,
"rate": 0.21,
"tax": 265230.0,
"advances": {
"last_known_tax": 265230.0,
"frequency": "quarterly",
"amount": 66400.0,
"period": {
"from": "2027-05-04",
"to": "2028-05-02"
},
"schedule": [
{
"due_on": "2027-06-15",
"amount": 66400.0
},
{
"due_on": "2027-09-15",
"amount": 66400.0
}
],
"basis": "§ 38a ZDP"
},
"paid_advances": 0.0,
"balance": 265230.0,
"form_rows": {
"40": 18000.0,
"10": 1250000.0,
"70": 18000.0,
"200": 1268000.0,
"220": 1268000.0,
"250": 1268000.0,
"260": 5000.0,
"270": 1263000.0,
"280": 21.0,
"290": 265230.0,
"310": 265230.0,
"330": 265230.0,
"340": 265230.0,
"360": 265230.0,
"V.4": -265230.0
},
"warnings": []
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/calc/payroll – Výplatní páska zaměstnance za měsíc
Spočítá měsíční mzdu zaměstnance v pracovním poměru (hpp), na dohodu o pracovní činnosti (dpc) nebo o provedení práce (dpp): účast na pojištění, pojistné zaměstnance i zaměstnavatele, zálohu nebo srážkovou daň se slevami a zvýhodněním na děti, čistou mzdu, výplatu s bonusem, náklady zaměstnavatele a předkontace mzdových zápisů.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok, výchozí je aktuální; musí mít sazby. |
month | celé číslo | ne | Měsíc, výchozí je aktuální. Rozsah od 1 do 12. |
contract | text | ne | Pracovněprávní vztah. Hodnoty: hpp, dpc, dpp. Výchozí hpp. |
gross | číslo | ano | Hrubá mzda za měsíc. Rozsah od 0. |
declaration | ano/ne | ne | Zaměstnanec podepsal prohlášení poplatníka. Výchozí true. |
children | pole (objekt) | ne | Děti pro daňové zvýhodnění. |
children[] | celé číslo | ne | Pořadí dítěte |
children[] | ano/ne | ne | Dítě s průkazem ZTP/P |
children[] | pole (celé číslo) | ne | Čísla měsíců nároku; bez nich se dítě uplatní v každém měsíci |
disability | text | ne | Stupeň invalidity zaměstnance (0 = žádná). Hodnoty: 0, 1, 2, 3, first, second, third. |
ztpp | ano/ne | ne | Zaměstnanec je držitelem průkazu ZTP/P. Výchozí false. |
student | ano/ne | ne | Student (bez minimálního vyměřovacího základu zdravotního pojištění). Výchozí false. |
pensioner_discount | ano/ne | ne | Pracující důchodce se slevou na pojistném. Výchozí false. |
health_minimum_exempt | ano/ne | ne | Neuplatní se minimální vyměřovací základ zdravotního pojištění. Výchozí false. |
agreed_wage | číslo | ne | Sjednaná mzda (pro účast na pojištění u zaměstnání malého rozsahu). |
ytd_social_base | číslo | ne | Dosavadní roční vyměřovací základ sociálního pojištění (kvůli ročnímu maximu). Výchozí 0. |
Pole odpovědi
| Pole | Význam |
|---|---|
insured | Účast na sociálním a zdravotním pojištění |
assessment_base | Vyměřovací základy |
employee | Pojistné zaměstnance: social, health, total |
employer | Pojistné zaměstnavatele: social, health, total |
health_min_base_topup | Doplatek do minimálního základu zdravotního pojištění |
tax | Daň: základ, sazby, slevy, zvýhodnění na děti, advance, withholding, kind |
net | Čistá mzda |
payout | K výplatě včetně daňového bonusu |
employer_cost | Náklady zaměstnavatele |
postings | Předkontace: debit, credit, amount, text |
warnings | Upozornění |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí gross, gross je záporná, neznámý contract, měsíc mimo 1–12 nebo neplatný stupeň invalidity |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"year":2026,"month":9,"contract":"hpp","gross":52000,"children":[{"order":1}]}' \
https://techtools.cz/ucetnictvi-api/calc/payrollJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/payroll', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2026,
"month": 9,
"contract": "hpp",
"gross": 52000,
"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.
/calc/travel – Cestovní náhrady za jednu tuzemskou nebo zahraniční cestu
Spočítá cestovní náhrady jedné cesty ze sídla do cíle a zpět: stravné po kalendářních dnech s krácením za poskytnuté jídlo, základní náhradu za použití vozidla, náhradu za pohonné hmoty (bez ceny paliva se použije průměrná cena z vyhlášky), ubytování a ostatní výdaje. U zaměstnance se použije minimální sazba stravného, u OSVČ maximální. Zahraniční stravné se vrátí v cizí měně; do celkové částky se nezapočte, protože kalkulačka nemá kurz. Rok sazeb se bere z data odjezdu; časy bez časového pásma se berou tak, jak jsou zadané.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
departure | text | ano | Odjezd, např. 2026-09-21T06:30. |
arrival | text | ano | Návrat; musí být po odjezdu a nejvýše 366 dní od něj. |
destination | text | ne | Cíl cesty. |
traveller | text | ne | Zaměstnanec, nebo OSVČ. Hodnoty: employee, self_employed. Výchozí employee. |
km | číslo | ne | Ujeté kilometry soukromým vozidlem; bez nich se náhrady za vozidlo nepočítají. |
vehicle_kind | text | ne | Druh vozidla. Hodnoty: car, motorcycle, truck, electric. Výchozí car. |
consumption | číslo | ne | Spotřeba v litrech (nebo kWh) na 100 km podle technického průkazu. |
fuel | text | ne | Palivo; u elektromobilu vždy electricity. Hodnoty: petrol95, petrol98, diesel, lpg, electricity. Výchozí petrol95. |
fuel_price | číslo | ne | Doložená cena paliva za jednotku; bez ní průměrná cena z vyhlášky. |
meals | pole (objekt) | ne | Poskytnutá jídla, která krátí stravné. |
meals[] | datum | ne | Den |
meals[] | celé číslo | ne | Počet jídel |
accommodation | číslo | ne | Výdaje za ubytování. Výchozí 0. |
other | číslo | ne | Ostatní nutné výdaje. Výchozí 0. |
foreign_country | text | ne | Kód cílového státu (ISO 3166-1 alpha-2) u zahraniční cesty; CZ vrátí chybu. |
hours_abroad | číslo | ne | Počet hodin v zahraničí u zahraniční cesty. |
Pole odpovědi
| Pole | Význam |
|---|---|
duration_hours | Délka cesty v hodinách |
per_diem | Tuzemské stravné: band, rate, reductions, amount, days |
foreign_per_diem | Zahraniční stravné v cizí měně (amount_czk je null) nebo null |
mileage | Základní náhrada: base_rate, km, amount |
fuel | Náhrada za pohonné hmoty: type, price, consumption, amount |
accommodation | Výdaje za ubytování ze vstupu |
other | Ostatní nutné výdaje ze vstupu |
total | Celkem v Kč bez zahraničního stravného; u zaměstnance zaokrouhleno |
basis | Právní základ |
warnings | Upozornění |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí odjezd nebo návrat, návrat není po odjezdu, nebo cesta trvá déle než 366 dní; tyto zprávy („Zadejte odjezd i návrat“, „Návrat musí být po odjezdu“, „Cesta smí trvat nejvýš 366 dní“) nemají předponu „Chybí nebo je neplatný parametr:“ |
| 422 | – | Neznámý druh vozidla, palivo, záporné kilometry nebo náhrady, u zahraniční cesty stát CZ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"destination":"Brno","departure":"2026-09-21T06:30","arrival":"2026-09-21T19:10","km":420,"vehicle_kind":"car","consumption":6.1,"fuel":"diesel"}' \
https://techtools.cz/ucetnictvi-api/calc/travelJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/travel', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"destination": "Brno",
"departure": "2026-09-21T06:30",
"arrival": "2026-09-21T19:10",
"km": 420,
"vehicle_kind": "car",
"consumption": 6.1,
"fuel": "diesel"
})
});
const data = await response.json();{
"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": []
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/calc/depreciation – Daňové a účetní odpisy majetku
Vrátí odpisový plán hmotného majetku. S group spočítá daňové odpisy rovnoměrné nebo zrychlené po letech (§ 30 až 32 ZDP); s useful_life_months účetní odpisy po měsících sečtené po letech, od měsíce po zařazení. Lze zadat obojí; alespoň jedno je povinné.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
price | číslo | ano | Vstupní (pořizovací) cena, kladná. |
group | celé číslo | ne | Odpisová skupina pro daňové odpisy. Rozsah od 1 do 6. |
method | text | ne | Rovnoměrné nebo zrychlené daňové odpisy. Hodnoty: straight, accelerated. Výchozí straight. |
start_year | celé číslo | ne | Rok zahájení daňového odpisování, výchozí je aktuální. |
disposal_year | celé číslo | ne | Rok vyřazení (polovina ročního odpisu); nesmí předcházet start_year. |
useful_life_months | celé číslo | ne | Doba použitelnosti v měsících pro účetní odpisy. Rozsah od 1 do 1200. |
in_use_from | datum | ne | Datum zařazení do užívání; povinné s useful_life_months. |
residual | číslo | ne | Zbytková hodnota (0 až cena). Výchozí 0. |
Pole odpovědi
| Pole | Význam |
|---|---|
tax | Daňové odpisy po letech: year, rate_or_coefficient, kind, amount, deductible, accumulated, remaining |
accounting | Účetní odpisy po letech: year, amount, accumulated, remaining |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí price, nebo group i useful_life_months |
| 422 | – | Neznámá skupina nebo způsob, cena není kladná, rok vyřazení před zahájením |
| 422 | – | useful_life_months mimo 1–1200, chybí nebo je neplatné in_use_from, zbytková hodnota mimo 0 až cenu |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"price":850000,"group":2,"method":"straight","start_year":2026}' \
https://techtools.cz/ucetnictvi-api/calc/depreciationJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/depreciation', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"price": 850000,
"group": 2,
"method": "straight",
"start_year": 2026
})
});
const data = await response.json();{
"tax": [
{
"year": 2026,
"rate_or_coefficient": 11.0,
"kind": "first_year",
"amount": 93500.0,
"deductible": 93500.0,
"accumulated": 93500.0,
"remaining": 756500.0
},
{
"year": 2027,
"rate_or_coefficient": 22.25,
"kind": "following_year",
"amount": 189125.0,
"deductible": 189125.0,
"accumulated": 282625.0,
"remaining": 567375.0
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/calc/late_interest – Úrok z prodlení a náklady spojené s uplatněním pohledávky
Spočítá zákonný úrok z prodlení podle nařízení vlády č. 351/2013 Sb.: repo sazba ČNB platná první den kalendářního pololetí, v němž prodlení začalo, plus 8 procentních bodů, po celou dobu prodlení; výsledek je rozdělený po pololetích. Mezi podnikateli přidá paušál 1 200 Kč. Zaplaceno do splatnosti znamená nulový úrok. Částka je vždy v Kč.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
principal | číslo | ano | Dlužná jistina. Rozsah od 0. |
due_date | datum | ano | Den splatnosti; prodlení začíná následujícím dnem. Nejdříve 31. 12. 2013. |
paid_on | datum | ne | Den úhrady, výchozí je dnešek. |
business | ano/ne | ne | Závazek mezi podnikateli nebo vůči veřejnému zadavateli (nárok na paušál 1 200 Kč). Výchozí true. |
Pole odpovědi
| Pole | Význam |
|---|---|
delay_from | První den prodlení (null bez prodlení) |
days | Počet dní prodlení |
reference_date | Rozhodný den pro repo sazbu |
repo_rate | Repo sazba ČNB |
rate | Roční sazba úroku z prodlení |
periods | Pololetí: from, to, days, rate, interest |
interest | Úrok celkem |
recovery_cost | Paušální náklady 1 200 Kč nebo 0 |
basis | Právní základ |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Chybí principal nebo due_date, datum je neplatné nebo jistina záporná |
| 422 | – | Data mimo roky 2000–2100 nebo od sebe víc než 30 let |
| 422 | – | Splatnost před 31. 12. 2013 (prodlení podle nařízení č. 142/1994 Sb. Saldo nepočítá) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"principal":48400,"due_date":"2026-05-15","paid_on":"2026-09-26"}' \
https://techtools.cz/ucetnictvi-api/calc/late_interestJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/calc/late_interest', {
headers: { 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"principal": 48400,
"due_date": "2026-05-15",
"paid_on": "2026-09-26"
})
});
const data = await response.json();{
"principal": 48400.0,
"currency": "CZK",
"delay_from": "2026-05-16",
"days": 134,
"reference_date": "2026-01-01",
"repo_rate": 3.5,
"rate": 11.5,
"periods": [
{
"from": "2026-05-16",
"to": "2026-06-30",
"days": 46,
"rate": 11.5,
"interest": 701.47
},
{
"from": "2026-07-01",
"to": "2026-09-26",
"days": 88,
"rate": 11.5,
"interest": 1341.94
}
],
"interest": 2043.41,
"recovery_cost": 1200.0,
"basis": [
"§ 2 odst. 1 nařízení vlády č. 351/2013 Sb. (repo sazba ČNB platná první den kalendářního pololetí, v němž došlo k prodlení, + 8 p. b., po celou dobu prodlení)",
"§ 3 nařízení vlády č. 351/2013 Sb. (vzájemný závazek podnikatelů nebo podnikatele a veřejného zadavatele)"
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.