Reference API
Daně, podání a doručenky
Daňové sestavy, XML pro EPO a přehledy OSVČ, kontrola na portálu finanční správy a předběžná kontrola přehledu u ČSSZ, platby úřadům, evidence podání, doručenky a výjimky bez doručenky a daňový kalendář. Saldo samo nic úřadu nepodává.
GET Daňový výkaz nebo přehled podle hodnoty report
/entities/{entity_id}/taxes/{report}
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
- V příručce
- Daně a pojistné › Platby úřadům; Daně a pojistné › Zaplatit platbu QR kódem; Daně a pojistné › DPH a hlášení; Daně a pojistné › Zkontrolovat přiznání a hlášení k DPH; Daně a pojistné › Daň a pojistné OSVČ; Daně a pojistné › Porovnat skutečné výdaje, paušál a paušální daň; Daně a pojistné › Daň z příjmů s.r.o. a jiných právnických osob; Daně a pojistné › Roční přiznání a přehledy
Sestaví a vrátí jeden daňový výkaz z aktuálních dat účetní jednotky; který, určuje hodnota report (viz varianty). Počítá se při každém volání z vystavených dokladů, účetních zápisů, bankovních pohybů a nastavení firmy. Operace nic neukládá a nic nepodává – XML, kontrolu v EPO a uložení podání obstarávají operace …/xml, …/epo, …/filing a /filings.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
report | cesta | text | ano | Druh výkazu (viz varianty) Hodnoty: vat_return, control_statement, recap_statement, income_tax, regime, filings_check, depreciation, payments. Příklad vat_return. |
Odpověď
200 application/json JSON podle varianty.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 404 | – | Neznámá hodnota report (error „Neznámý daňový výkaz“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
/entities/{entity_id}/taxes/vat_return – Přiznání k DPH za období
Sestaví přiznání k DPH (řádky formuláře DPHDP3) z vystavených dokladů druhů invoice_out, invoice_in, credit_out, credit_in, advance_out, advance_in, cash_in a cash_out, jejichž datum pro DPH spadá do období; koncepty a stornované doklady se nezapočítají. Období určí period; bez něj year a month, u čtvrtletního plátce bez month čtvrtletí quarter. Výchozí je běžící měsíc (čtvrtletí) aktuálního roku, u jiného roku prosinec (4. čtvrtletí). Bez period má identifikovaná osoba vždy měsíční období.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
period | dotaz | text | ne | Období ve tvaru YYYY-MM nebo YYYY-Qn (např. 2026-08, 2026-Q3); má přednost před year, month a quarter. Neplatná hodnota skončí chybou 500. Příklad 2026-08. |
year | dotaz | celé číslo | ne | Rok období, když chybí period; výchozí (i při nečíselné hodnotě) aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
month | dotaz | celé číslo | ne | Měsíc období, když chybí period; mimo 1–12 skončí chybou 500 Rozsah od 1 do 12. Příklad 8. |
quarter | dotaz | celé číslo | ne | Čtvrtletí; použije se jen u čtvrtletního plátce, když chybí period i month Rozsah od 1 do 4. Příklad 3. |
Pole odpovědi
| Pole | Význam |
|---|---|
period | Období: year, month, quarter, from, to, label, deadline (lhůta pro podání), key |
report.period | Období, za které je přiznání sestavené (stejné jako period) |
report.form | Označení tiskopisu přiznání, podle kterého jsou řádky sestavené (např. „25 5401 MFin 5401 vzor č. 26“) |
report.rows | Částky podle čísel řádků přiznání |
report.own_tax | Vlastní daňová povinnost (řádek 64) |
report.excess_deduction | Nadměrný odpočet (řádek 65) |
report.documents | Číslo řádku → ID dokladů, které do něj přispěly |
report.warnings | Upozornění k dokladům, které se nepodařilo zařadit nebo vyžadují kontrolu |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Účetní jednotka není plátcem ani identifikovanou osobou (vat_status none) – „Účetní jednotka není registrovaná k DPH“ |
| 500 | – | Neplatné period, month nebo quarter (výjimka z Vat::Period se neošetřuje) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/taxes/vat_return?period=2026-08"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/vat_return?period=2026-08', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"report": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"form": "25 5401 MFin 5401 vzor č. 26",
"rows": {
"1": {
"base": 211500.0,
"tax": 44415.0
},
"2": {
"base": 0.0,
"tax": 0.0
},
"3": {
"base": 0.0,
"tax": 0.0
},
"4": {
"base": 0.0,
"tax": 0.0
},
"5": {
"base": 28003.0,
"tax": 5881.0
},
"6": {
"base": 0.0,
"tax": 0.0
},
"7": {
"base": 0.0,
"tax": 0.0
},
"8": {
"base": 0.0,
"tax": 0.0
},
"9": {
"base": 0.0,
"tax": 0.0
},
"10": {
"base": 0.0,
"tax": 0.0
},
"11": {
"base": 0.0,
"tax": 0.0
},
"12": {
"base": 0.0,
"tax": 0.0
},
"13": {
"base": 0.0,
"tax": 0.0
},
"14": {
"base": 0.0,
"tax": 0.0
},
"20": 0.0,
"21": 0.0,
"22": 0.0,
"23": 0.0,
"24": 0.0,
"25": 0.0,
"26": 0.0,
"30": 0.0,
"31": 0.0,
"32": 0.0,
"33": 0.0,
"34": 0.0,
"40": {
"base": 20700.0,
"full": 4347.0,
"reduced": 0.0
},
"41": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"42": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"43": {
"base": 28003.0,
"full": 5881.0,
"reduced": 0.0
},
"44": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"45": {
"full": 0.0,
"reduced": 0.0
},
"46": {
"full": 10228.0,
"reduced": 0.0
},
"47": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"48": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"50": 0.0,
"51": {
"with_credit": 0.0,
"without_credit": 0.0
},
"52": {
"coefficient": null,
"deduction": 0.0
},
"53": {
"coefficient": null,
"change": 0.0
},
"60": 0.0,
"61": 0.0,
"62": 50296.0,
"63": 10228.0,
"64": 40068.0,
"65": 0.0,
"66": 0.0
},
"own_tax": 40068.0,
"excess_deduction": 0.0,
"documents": {
"1": [
19,
20
],
"5": [
65
],
"40": [
62,
63
],
"43": [
65
]
},
"warnings": []
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/entities/{entity_id}/taxes/control_statement – Kontrolní hlášení za období
Sestaví kontrolní hlášení (oddíly A.1–A.5 a B.1–B.3) ze stejných dokladů jako přiznání k DPH a přidá kontrolní součty proti řádkům přiznání. Období se volí stejně jako u vat_return. Identifikovaná osoba kontrolní hlášení nepodává (422 IDENTIFIED_KH); právnická osoba ho podává za každý měsíc, čtvrtletní období proto odmítne (422 MONTHLY_KH).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
period | dotaz | text | ne | Období YYYY-MM nebo YYYY-Qn; má přednost před year, month a quarter. Neplatná hodnota skončí chybou 500. Příklad 2026-08. |
year | dotaz | celé číslo | ne | Rok období, když chybí period; výchozí aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
month | dotaz | celé číslo | ne | Měsíc období, když chybí period Rozsah od 1 do 12. Příklad 8. |
quarter | dotaz | celé číslo | ne | Čtvrtletí u čtvrtletního plátce – jen pro fyzickou osobu Rozsah od 1 do 4. Příklad 3. |
Pole odpovědi
| Pole | Význam |
|---|---|
period | Období (jako u vat_return) |
report.sections | Oddíly a1, a2, a3, a4, b1, b2 jako seznamy dokladů; a5 a b3 jako souhrnné částky s document_ids |
report.control | Kontrolní součty: base a return_rows – řádky přiznání, se kterými se porovnávají |
report.warnings | Upozornění k dokladům |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Účetní jednotka není registrovaná k DPH |
| 422 | IDENTIFIED_KH | Identifikovaná osoba kontrolní hlášení nepodává (§ 101c ZDPH) |
| 422 | MONTHLY_KH | Právnická osoba zvolila čtvrtletí – kontrolní hlášení podává za každý měsíc (§ 101e ZDPH) |
| 500 | – | Neplatné period, month nebo quarter |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/taxes/control_statement?period=2026-08"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/control_statement?period=2026-08', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"report": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"sections": {
"a1": [],
"a2": [
{
"document_id": 65,
"country": "DE",
"vat_id": "998877665",
"number": "2026083526",
"dppd": "2026-08-07",
"base1": 28002.5,
"tax1": 5880.53,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0
}
],
"a3": [],
"a4": [
{
"document_id": 20,
"partner_dic": "90000013",
"number": "FV20260020",
"dppd": "2026-08-15",
"base1": 115500.0,
"tax1": 24255.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"bad_debt": false
}
],
"a5": {
"base1": 96000.0,
"tax1": 20160.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"document_ids": [
19
]
},
"b1": [],
"b2": [
{
"document_id": 62,
"partner_dic": "90000056",
"number": "2026085713",
"dppd": "2026-08-02",
"base1": 14500.0,
"tax1": 3045.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"proportional": false,
"bad_debt": false
}
],
"b3": {
"base1": 6200.0,
"tax1": 1302.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"document_ids": [
63,
64
]
}
},
"control": {
"a4_a5_basic": {
"base": 211500.0,
"return_rows": [
1
]
},
"a4_a5_reduced": {
"base": 0.0,
"return_rows": [
2
]
},
"b2_b3_basic": {
"base": 20700.0,
"return_rows": [
40
]
},
"b2_b3_reduced": {
"base": 0.0,
"return_rows": [
41
]
},
"a1": {
"base": 0.0,
"return_rows": [
25
]
},
"b1_basic": {
"base": 0.0,
"return_rows": [
10
]
},
"b1_reduced": {
"base": 0.0,
"return_rows": [
11
]
},
"a2": {
"base": 28002.5,
"return_rows": [
3,
4
]
}
},
"warnings": []
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/entities/{entity_id}/taxes/recap_statement – Souhrnné hlášení za období
Sestaví souhrnné hlášení VIES z vystavených prodejních dokladů v režimu dodání zboží, poskytnutí služby nebo třístranného obchodu do jiného státu EU, seskupených podle státu, DIČ odběratele a kódu plnění. Období se volí stejně jako u vat_return.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
period | dotaz | text | ne | Období YYYY-MM nebo YYYY-Qn; má přednost před year, month a quarter. Neplatná hodnota skončí chybou 500. Příklad 2026-08. |
year | dotaz | celé číslo | ne | Rok období, když chybí period; výchozí aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
month | dotaz | celé číslo | ne | Měsíc období, když chybí period Rozsah od 1 do 12. Příklad 8. |
quarter | dotaz | celé číslo | ne | Čtvrtletí u čtvrtletního plátce Rozsah od 1 do 4. Příklad 3. |
Pole odpovědi
| Pole | Význam |
|---|---|
report.rows | Řádky: country, vat_id, code (kód plnění), count, value (Kč), document_ids |
report.total_value | Součet hodnot všech řádků |
report.warnings | Upozornění, např. čtvrtletní období u dodání zboží |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Účetní jednotka není registrovaná k DPH |
| 500 | – | Neplatné period, month nebo quarter |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/taxes/recap_statement?period=2026-08"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/recap_statement?period=2026-08', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"report": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"rows": [],
"total_value": 0.0,
"warnings": []
}
}
/entities/{entity_id}/taxes/income_tax – Výpočet daně z příjmů za rok
Spočítá daň z příjmů za rok year. U OSVČ (kind dpfo) z peněžního deníku nebo účetnictví a daňového profilu: základ daně, slevy, daňové zvýhodnění, sociální a zdravotní pojištění a zálohy na další rok. U právnické osoby (kind dppo) z účetní závěrky za účetní období začínající v roce year: úpravy základu daně včetně rozdílu účetních a daňových odpisů, daň, zálohy a doplatek. Rok bez zákonných sazeb v Saldu (mimo 2024–2026) vrátí 422.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
year | dotaz | celé číslo | ne | Zdaňovací období (rok); výchozí aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
Pole odpovědi
| Pole | Význam |
|---|---|
kind | dpfo (OSVČ) nebo dppo (právnická osoba) |
books | Jen dpfo: income, expenses, depreciation a source (peněžní deník nebo účetnictví) |
result | Výpočet: mimo jiné tax, form_rows (řádky přiznání) a warnings; u dpfo také sp, zp, tax_advances a tax_balance, u dppo advances a balance |
profile | Daňový profil firmy, ze kterého výpočet vychází |
statements_result | Jen dppo: výsledek hospodaření z výkazu zisku a ztráty |
non_deductible | Jen dppo: daňově neuznatelné náklady podle účtů |
statements | Jen dppo: účetní závěrka (rozvaha a výkaz zisku a ztráty) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro rok nejsou v Saldu zákonné sazby („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.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"kind": "dpfo",
"books": {
"income": 784689.6,
"expenses": 163711.05,
"depreciation": 16998.0,
"source": "peněžní deník"
},
"result": {
"year": 2026,
"income": 784689.6,
"expenses": 180709.05,
"expense_method": {
"kind": "actual",
"parts": []
},
"profit": 603980.55,
"employment_income": 0.0,
"tax_base": 603980.55,
"deductions": [],
"tax_base_rounded": 603900.0,
"tax_before_credits": 90585.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": 44541.0,
"bonus": 0.0,
"tax_withheld": 0.0,
"tax_advances_paid": 0.0,
"tax_balance": 44541.0,
"tax_advances": {
"last_known_tax": 44541.0,
"frequency": "half_yearly",
"amount": 17900.0,
"period": {
"from": "2027-05-04",
"to": "2028-05-02"
},
"schedule": [
{
"due_on": "2027-06-15",
"amount": 17900.0
},
{
"due_on": "2027-12-15",
"amount": 17900.0
}
],
"basis": "§ 38a ZDP"
},
"sp": {
"participates": true,
"decisive_amount": null,
"assessment_base": 332190.0,
"minimum_base": 205668.0,
"maximum_base": 2350416.0,
"applied_base": 332190.0,
"rate": 0.292,
"premium": 97000.0,
"discount": 0.0,
"premium_after_discount": 97000.0,
"advances_paid": 0.0,
"balance": 97000.0,
"monthly_advance_next": 8084.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": 301990.275,
"minimum_base": 293802.0,
"applied_base": 301990.275,
"rate": 0.135,
"premium": 40769.0,
"advances_paid": 0.0,
"balance": 40769.0,
"monthly_advance_next": 3398.0,
"basis": "§ 2, § 3a a § 8 zákona č. 592/1992 Sb."
},
"total_levies": 182310.0,
"net_income": 421670.55,
"effective_rate": 0.2323,
"form_rows": {
"37": 603980.55,
"41": 603980.55,
"42": 603980.55,
"45": 603980.55,
"55": 603980.55,
"56": 603900.0,
"57": 90585.0,
"58": 90585.0,
"60": 90585.0,
"70": 30840.0,
"71": 59745.0,
"72": 15204.0,
"73": 15204.0,
"74": 44541.0,
"75": 44541.0,
"77": 44541.0,
"91": 44541.0,
"64": 30840.0,
"101": 784689.6,
"102": 180709.05,
"104": 603980.55,
"113": 603980.55
},
"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)."
]
},
"profile": {
"children": [
{
"order": 1,
"first_name": "Eliška",
"last_name": "Ukázková",
"birth_number": "1855120003"
}
],
"main_activity": true,
"birth_number": "8001010006",
"ossz_code": "110",
"cssz_variable_symbol": "12345678",
"health_insurer": "111"
}
}
/entities/{entity_id}/taxes/regime – Srovnání daňových režimů OSVČ za rok
Porovná za rok year odvody OSVČ (daň, sociální a zdravotní pojištění) při skutečných výdajích, výdajových paušálech a paušální dani a doporučí nejvýhodnější variantu, na kterou má nárok. Vychází z příjmů a výdajů v knihách a z daňového profilu. U právnické osoby se volání neodmítne, výsledek má ale smysl jen u OSVČ.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
year | dotaz | celé číslo | ne | Rok srovnání; výchozí aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
Pole odpovědi
| Pole | Význam |
|---|---|
year | Rok srovnání |
income | Příjmy za rok |
actual_expenses | Skutečné výdaje včetně daňových odpisů |
income_kind | Druh příjmů pro výdajový paušál (např. trade) |
current | Klíč současného režimu: actual_expenses, flat_rate_80, flat_rate_60, flat_rate_40, flat_rate_30 (výdajový paušál v procentech), flat_rate_mixed nebo flat_tax |
recommended | Klíč doporučeného režimu (stejné hodnoty jako current) |
savings | Úspora doporučeného režimu proti současnému |
options | Všechny varianty s odvody, eligible a savings_vs_current |
summary | Slovní shrnutí |
warnings | Upozornění |
books | Příjmy a výdaje z knih, ze kterých srovnání vychází |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro rok nejsou v Saldu zákonné sazby |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/2/taxes/regime?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/regime?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"year": 2026,
"income": 784689.6,
"actual_expenses": 180709.05,
"income_kind": "trade",
"current": "actual_expenses",
"recommended": "flat_rate_60",
"savings": 81564.0,
"options": [
{
"key": "flat_rate_60",
"label": "Výdajový paušál 60 %",
"eligible": true,
"rank": 1,
"basis": "§ 7 odst. 7 písm. b) ZDP",
"expenses": 470813.76,
"profit": 313875.84,
"tax": 1026.0,
"bonus": 0.0,
"sp": 60056.0,
"zp": 39664.0,
"sickness": 0.0,
"total_levies": 100746.0,
"net_income": 503234.55,
"effective_rate": 0.1284,
"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": 81564.0
},
{
"key": "flat_tax",
"label": "Paušální daň – 1. pásmo",
"eligible": true,
"rank": 2,
"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": 494036.55,
"effective_rate": 0.1401,
"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": 72366.0
}
],
"summary": "Nejvýhodnější je výdajový paušál 60 %: odvody 100 746 Kč ročně, o 81 564 Kč méně než současný režim (skutečné výdaje v daňové evidenci).",
"warnings": [],
"books": {
"income": 784689.6,
"expenses": 163711.05,
"depreciation": 16998.0,
"source": "peněžní deník"
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/entities/{entity_id}/taxes/filings_check – Připravenost ročních podání za rok
Zkusí za rok year sestavit přiznání k dani z příjmů (DPFDP7 u OSVČ, DPPDP9 u právnické osoby) a u OSVČ i přehled pro ČSSZ (OSVC25) a pro zdravotní pojišťovnu (formát v6). U každého formuláře vrátí, co chybí a kde to doplnit, upozornění, souhrn částek, lhůtu podle způsobu podání, adresáta a už uložená podání. Mezi problémy se objeví i omezení Salda: DPFO jen za roky 2024–2025, přehledy jen za rok 2025 a DPPO za celé zdaňovací období 2026 zatím ne. Nic neukládá ani nepodává.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
year | dotaz | celé číslo | ne | Rok podání; výchozí aktuální rok Rozsah od 2000 do 2100. Příklad 2025. |
Pole odpovědi
| Pole | Význam |
|---|---|
year | Rok |
forms | Formuláře: kind (dpfo, dppo, prehled_sp, prehled_zp), title, form, ready, problems, warnings, summary, deadline, recipient, filings |
forms[].problems | message a fix – kde údaj doplnit: settings (nastavení firmy), profile (daňový profil), books (účetnictví) nebo null; u přehledů i field |
forms[].deadline | date, mode, label a options – lhůty pro jednotlivé způsoby podání, posunuté na pracovní den |
forms[].filings | Uložená podání tohoto druhu za rok |
options | Jen OSVČ: seznam správ sociálního zabezpečení a zdravotních pojišťoven; jinak prázdný objekt |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro rok nejsou v Saldu zákonné sazby |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
Rok 2025 je poslední, za který Saldo sestaví všechny tři formuláře OSVČ.
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/2/taxes/filings_check?year=2025"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/filings_check?year=2025', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"year": 2025,
"forms": [
{
"kind": "dpfo",
"title": "Daňové přiznání",
"form": "DPFDP7",
"ready": true,
"problems": [],
"warnings": [
"Daňový bonus nenáleží: příjmy podle § 6 a § 7 nedosáhly 6násobku minimální mzdy (124 800 Kč, § 35c ZDP).",
"Minimální záloha hlavní činnosti činila v roce 2026 do června 5 720 Kč, od července 5 005 Kč (čl. I a čl. II bod 1 zákona č. 90/2026 Sb.)."
],
"summary": [
{
"label": "Daň",
"value": 0.0
},
{
"label": "Doplatek daně",
"value": 0.0
}
],
"deadline": {
"date": "2026-05-04",
"mode": "electronic",
"label": "elektronicky",
"options": [
{
"mode": "paper",
"label": "do 1. dubna",
"date": "2026-04-01"
},
{
"mode": "electronic",
"label": "elektronicky",
"date": "2026-05-04"
}
]
},
"recipient": {
"name": "Finanční správa – EPO",
"portal": "https://mojedane.gov.cz/",
"channel": "epo",
"office": "Finanční úřad pro hlavní město Prahu, Územní pracoviště pro Prahu 2"
},
"filings": []
},
{
"kind": "prehled_sp",
"title": "Přehled pro ČSSZ",
"form": "OSVC25",
"ready": true,
"problems": [],
"warnings": [],
"summary": [
{
"label": "Pojistné",
"value": 57098.0
},
{
"label": "Doplatek",
"value": 57098.0
}
],
"deadline": {
"date": "2026-05-04",
"mode": "paper",
"label": "přiznání podané do 1. dubna",
"options": [
{
"mode": "paper",
"label": "přiznání podané do 1. dubna",
"date": "2026-05-04"
},
{
"mode": "electronic",
"label": "přiznání podané elektronicky po 1. dubnu",
"date": "2026-06-04"
}
]
},
"recipient": {
"name": "Česká správa sociálního zabezpečení – e-Podání",
"databox": "5ffu6xk",
"portal": "https://eportal.cssz.cz/web/portal/-/tiskopisy/osvc-2025",
"office": {
"code": "110",
"name": "PSSZ Praha 10"
}
},
"filings": []
}
],
"options": {
"offices": [
{
"code": "110",
"name": "PSSZ Praha 10"
},
{
"code": "111",
"name": "PSSZ Praha 1"
}
],
"insurers": [
{
"code": "111",
"name": "Všeobecná zdravotní pojišťovna ČR",
"databox": "i48ae3q"
},
{
"code": "201",
"name": "Vojenská zdravotní pojišťovna ČR",
"databox": "p3aaext"
}
]
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
/entities/{entity_id}/taxes/depreciation – Daňové odpisy za rok
Vrátí součet daňově uznatelných odpisů za rok year z veškerého odpisovaného majetku, který má daňovou odpisovou skupinu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
year | dotaz | celé číslo | ne | Rok; výchozí aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
Pole odpovědi
| Pole | Význam |
|---|---|
year | Rok |
amount | Daňové odpisy celkem (Kč) |
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/taxes/depreciation?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/depreciation?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"year": 2026,
"amount": 154798.0
}
/entities/{entity_id}/taxes/payments – Platby finančnímu úřadu, ČSSZ a zdravotním pojišťovnám
Vrátí platby se splatností v měsících from–to: DPH nebo nadměrný odpočet, zálohy na daň z příjmů, paušální daň, zálohy OSVČ na sociální a zdravotní pojištění, nemocenské pojištění, odvody za zaměstnance, srážkovou a silniční daň. U každé platby účet, IBAN, symboly, termín posunutý na pracovní den, QR Platbu (SPAYD) a stav. Za zaplacenou se platba považuje, když mezi odchozími bankovními pohyby v Kč je pohyb se správnou částkou a shodným účtem nebo variabilním symbolem, s datem od začátku sledovaného období do 60 dnů po splatnosti (u silniční daně bez částky musí sedět účet i symbol). Chybějící údaje vrátí v missing, u OSVČ i s návrhem nalezeným v jejích platbách.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
from | dotaz | text | ne | První měsíc ve tvaru YYYY-MM (nebo datum YYYY-MM-DD; použije se jeho měsíc); výchozí předchozí měsíc Příklad 2026-08. |
to | dotaz | text | ne | Poslední měsíc ve tvaru YYYY-MM (nebo datum YYYY-MM-DD; použije se konec jeho měsíce); výchozí měsíc o dva po aktuálním Příklad 2026-11. |
Pole odpovědi
| Pole | Význam |
|---|---|
from | První den rozsahu |
to | Poslední den rozsahu |
today | Dnešní datum, ke kterému je stav plateb spočten |
next | Klíč nejbližší nezaplacené platby (přednostně po splatnosti) |
summary | Počet a součet plateb podle stavu due, overdue, paid, refund a počet odhadů (estimate) |
items | Platby: key, kind, authority (fu, cssz, zp), title, period, due_date, statutory_date, shifted, shift_basis, recipient, account, iban, bic, amount, currency, variable_symbol, constant_symbol, specific_symbol, message, basis, source, status, paid, accepts a reduced (další částky, které se také uznají jako úhrada), ready, explanation, spayd, estimate, estimate_note, missing, notes |
items[].status | paid (spárováno s pohybem), due, overdue, nothing (nic k platbě), refund (vratka nadměrného odpočtu) |
missing | Chybějící údaje: field, label, fix, where, items a suggestion (value, display, count, last_on) nalezený v bankovních pohybech |
notes | Poznámky k výpočtu |
options | Číselníky správ sociálního zabezpečení a pojišťoven a zvolené hodnoty |
sources | Zdroje čísel účtů a symbolů |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Konec rozsahu je před začátkem („Konec období musí být po jeho začátku“) |
| 422 | – | Rozsah je delší než 24 měsíců |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Limity
- Nejvýše 24 měsíců v jednom dotazu.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/2/taxes/payments?from=2026-08"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/payments?from=2026-08', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"from": "2026-08-01",
"to": "2026-11-30",
"today": "2026-09-28",
"next": "social-2026-09",
"summary": {
"due": {
"count": 4,
"total": 18321.0
},
"overdue": {
"count": 0,
"total": 0.0
},
"paid": {
"count": 4,
"total": 14923.0
},
"refund": {
"count": 0,
"total": 0.0
},
"estimate": 0
},
"items": [
{
"key": "health-2026-07",
"kind": "health_advance",
"authority": "zp",
"title": "Záloha na zdravotní pojištění",
"period": {
"key": "2026-07",
"label": "červenec 2026",
"phrase": "za červenec 2026"
},
"due_date": "2026-08-10",
"statutory_date": "2026-08-08",
"shifted": true,
"recipient": {
"name": "Všeobecná zdravotní pojišťovna ČR",
"short": "VZP",
"code": "111"
},
"account": "1112001221/0710",
"iban": "CZ7407100000001112001221",
"bic": "CNBACZPP",
"amount": 3306.0,
"currency": "CZK",
"variable_symbol": "8001010006",
"constant_symbol": "558",
"specific_symbol": null,
"message": "Záloha ZP červenec 2026",
"basis": "§ 7 odst. 2 zákona č. 592/1992 Sb.: záloha je splatná od prvního dne měsíce, za který se platí, do osmého dne následujícího měsíce; Pojistné samoplátců (OSVČ, OBZP) na účet VZP podle kraje; VS zpravidla rodné číslo, případně číslo přidělené pojišťovnou; KS 558 pro převodní příkaz",
"source": "https://www.vzp.cz/platci/cisla-uctu",
"shift_basis": "Připadne-li poslední den splatnosti na sobotu, neděli nebo svátek, je posledním dnem nejbližší pracovní den (metodika VZP 2.2 a 2.4, RBP)",
"missing": [],
"notes": [
"Minimální záloha. Pokud vám pojišťovna podle přehledu stanovila vyšší zálohu, platíte ji.",
"VZP má pro každý kraj jiný účet – Saldo vybralo účet podle vašeho finančního úřadu (Finanční úřad pro hlavní město Prahu). Pokud jste u pobočky v jiném kraji, ověřte účet na https://www.vzp.cz/platci/cisla-uctu."
],
"estimate": false,
"estimate_note": null,
"status": "paid",
"accepts": [],
"reduced": null,
"paid": {
"on": "2026-07-07",
"amount": 3306.0,
"transaction_id": 181,
"bank_account_id": 4,
"late": false
},
"ready": true,
"explanation": "Záloha na zdravotní pojištění za červenec 2026 – splatné do 10. 8. (8. 8. je sobota)",
"spayd": "SPD*1.0*ACC:CZ7407100000001112001221*AM:3306.00*CC:CZK*RN:Vseobecna zdravotni pojistovna CR*MSG:Zaloha ZP cervenec 2026*X-VS:8001010006*X-KS:558"
},
{
"key": "social-2026-08",
"kind": "social_advance",
"authority": "cssz",
"title": "Záloha na sociální pojištění",
"period": {
"key": "2026-08",
"label": "srpen 2026",
"phrase": "za srpen 2026"
},
"due_date": "2026-08-31",
"statutory_date": "2026-08-31",
"shifted": false,
"recipient": {
"name": "PSSZ Praha 10",
"short": "PSSZ Praha 10",
"code": "110"
},
"account": "1011-7921101/0710",
"iban": "CZ0707100010110007921101",
"bic": "CNBACZPP",
"amount": 5005.0,
"currency": "CZK",
"variable_symbol": "12345678",
"constant_symbol": null,
"specific_symbol": null,
"message": "Záloha SP srpen 2026",
"basis": "§ 14a odst. 1 zákona č. 589/1992 Sb.: záloha je splatná od prvního do posledního dne kalendářního měsíce, za který se platí; záloha za měsíc zahájení činnosti je splatná do konce následujícího měsíce",
"source": "https://www.cssz.gov.cz/web/cz/kontakty/region/ossz/praha",
"shift_basis": null,
"missing": [],
"notes": [
"Minimální záloha hlavní činnosti. Pokud vám správa podle přehledu stanovila vyšší zálohu, platíte ji.",
"ČSSZ doporučuje zadat příkaz nejpozději 26. dne měsíce; za den platby se považuje den připsání na účet správy"
],
"estimate": false,
"estimate_note": null,
"status": "paid",
"accepts": [],
"reduced": null,
"paid": {
"on": "2026-08-28",
"amount": 5005.0,
"transaction_id": 184,
"bank_account_id": 4,
"late": false
},
"ready": true,
"explanation": "Záloha na sociální pojištění za srpen 2026 – splatné do 31. 8.",
"spayd": "SPD*1.0*ACC:CZ0707100010110007921101*AM:5005.00*CC:CZK*RN:PSSZ Praha 10*MSG:Zaloha SP srpen 2026*X-VS:12345678"
}
],
"missing": [],
"notes": [
"Zálohy na daň z příjmů: Saldo nemá účetnictví za rok 2025, poslední známou daň proto nezná. Přesáhla-li 30 000 Kč, platíte zálohy (§ 38a ZDP) na účet 721-77628031/0710."
],
"options": {
"offices": [
{
"code": "110",
"name": "PSSZ Praha 10"
},
{
"code": "111",
"name": "PSSZ Praha 1"
}
],
"insurers": [
{
"code": "111",
"name": "Všeobecná zdravotní pojišťovna ČR"
},
{
"code": "201",
"name": "Vojenská zdravotní pojišťovna ČR"
}
],
"ossz_code": "110",
"employer_ossz_code": null,
"health_insurer": "111",
"employer_variable_symbol": null
},
"sources": {
"offices": "https://financnisprava.gov.cz/assets/cs/prilohy/d-placeni-dani/Priloha_1_bankovni_ucty_fu_sfu_01012026.pdf",
"prefixes": "https://financnisprava.gov.cz/assets/cs/prilohy/d-placeni-dani/Priloha_2_pbu_fu_mimo_sfu_01012026.pdf",
"symbols": "https://financnisprava.gov.cz/assets/cs/prilohy/d-placeni-dani/Jak_spravne_zaplatit_dan_FU_v_roce_2026.pdf",
"cssz": "https://www.cssz.gov.cz/web/cz/kontakty/region/ossz",
"health_insurers": {
"111": "https://www.vzp.cz/platci/cisla-uctu",
"201": "https://www.vozp.cz/bankovni-spojeni",
"205": "https://www.cpzp.cz/clanek/4754-0-Bankovni-ucty-pro-platce-pojistneho.html",
"207": "https://www.ozp.cz/pro-platce/obe
…
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET XML podání pro EPO nebo přehled OSVČ ke stažení
/entities/{entity_id}/taxes/{report}/xml
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Sestaví a vrátí soubor XML s podáním: přiznání k DPH, kontrolní a souhrnné hlášení a přiznání k dani z příjmů ve formátu EPO (portál Moje daně), přehledy OSVČ ve formátech ČSSZ a zdravotních pojišťoven. Soubor se jen vrátí ke stažení: Saldo ho nikam neposílá a jako podání ho neukládá (k tomu slouží POST /filings a POST …/taxes/{report}/filing). Na rozdíl od GET …/taxes/vat_return operace nekontroluje registraci k DPH; u firmy neregistrované k DPH vznikne u dph, kh a sh podání bez dokladů.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
report | cesta | text | ano | Druh podání (viz varianty) Hodnoty: dph, kh, sh, income_tax, prehled_sp, prehled_zp. Příklad dph. |
year | dotaz | celé číslo | ne | Rok – u DPH, když chybí period; u daně z příjmů a přehledů zdaňovací období; výchozí aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
filing_type | dotaz | text | ne | Druh podání: B řádné, O opravné, D dodatečné, E opravné dodatečné, N následné. Význam se liší podle varianty (viz varianty); neznámá hodnota se bere jako B. Hodnoty: B, O, D, E, N. Výchozí B. Příklad B. |
date | dotaz | datum | ne | Datum podání (vyplnění) uvedené v XML; výchozí dnešní datum Příklad 2026-09-25. |
reasons_found_on | dotaz | datum | ne | Den zjištění důvodů pro dodatečné či následné podání (u přehledu ČSSZ datum zjištění nové výše vyměřovacího základu u opravného přehledu) Příklad 2026-09-10. |
Odpověď
200 application/xml Soubor XML (Content-Disposition attachment). Název: {druh}-{DIČ nebo IČO}-{období}.xml u DPH, KH, SH a daně z příjmů (druh dph, kh, sh, dpfo, dppo), prehled-osvc-{rok}-cssz.xml a prehled-osvc-{rok}-{pojišťovna}.xml u přehledů (u opravného s příponou -opravny).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Nelze sestavit XML (chybí nebo je neplatný údaj firmy či dokladu, chybí den zjištění důvodů u dodatečného podání, rok není podporovaný…); error obsahuje důvod česky |
| 422 | – | Neznámá hodnota report („Neznámý typ podání“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Po úspěšném sestavení zapíše do historie firmy událost tax.xml („Vytvořeno XML …“), a to i při GET, u člena jen pro čtení a u API klíče jen pro čtení. Nic jiného neukládá a nic nikam neposílá.
/entities/{entity_id}/taxes/dph/xml – Přiznání k DPH (DPHDP3) jako XML
XML přiznání k DPH ve formátu EPO DPHDP3 verze 03.01 za období zvolené jako u GET …/taxes/vat_return. filing_type: B řádné, O opravné, D dodatečné, E opravné dodatečné; N se zapíše jako dodatečné. U D, E a N je povinný reasons_found_on.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
period | dotaz | text | ne | Období YYYY-MM nebo YYYY-Qn; má přednost před year, month a quarter. Neplatná hodnota skončí chybou 500. Příklad 2026-08. |
month | dotaz | celé číslo | ne | Měsíc, když chybí period Rozsah od 1 do 12. Příklad 8. |
quarter | dotaz | celé číslo | ne | Čtvrtletí čtvrtletního plátce, když chybí period i month Rozsah od 1 do 4. Příklad 3. |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Dodatečné podání bez reasons_found_on („Dodatečné či následné podání vyžaduje den zjištění důvodů pro jeho podání“) |
| 422 | – | Neplatné DIČ, finanční úřad, územní pracoviště nebo kód CZ-NACE firmy |
| 500 | – | Neplatné period, month nebo quarter |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/taxes/dph/xml?period=2026-08"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/dph/xml?period=2026-08', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();<?xml version="1.0" encoding="UTF-8"?>
<Pisemnost nazevSW="Saldo" verzeSW="1.0">
<DPHDP3 verzePis="03.01">
<VetaD dokument="DP3" k_uladis="DPH" typ_platce="P" dapdph_forma="B" rok="2026" mesic="8" d_poddp="28.09.2026" c_okec="621000" trans="A"/>
<VetaP c_ufo="451" c_pracufo="2001" dic="99999994" typ_ds="P" zkrobchjm="Ukázková firma s.r.o." ulice="Na Příkopě" c_pop="859" c_orient="22" naz_obce="Praha" psc="11000" stat="ČESKÁ REPUBLIKA" email="demo@example.cz" c_telef="+420777000000" opr_jmeno="Jana" opr_prijmeni="Ukázková" opr_postaveni="jednatelka" sest_jmeno="Jana" sest_prijmeni="Ukázková"/>
<Veta1 obrat23="211500" dan23="44415" p_sl23_e="28003" dan_psl23_e="5881"/>
<Veta4 pln23="20700" odp_tuz23_nar="4347" nar_zdp23="28003" od_zdp23="5881" odp_sum_nar="10228"/>
<Veta6 dan_zocelk="50296" odp_zocelk="10228" dano_da="40068"/>
</DPHDP3>
</Pisemnost>
/entities/{entity_id}/taxes/kh/xml – Kontrolní hlášení (DPHKH1) jako XML
XML kontrolního hlášení ve formátu EPO DPHKH1 verze 03.01. filing_type: B řádné, O opravné, N následné (D se zapíše jako následné), E opravné následné; u D, E a N je povinný reasons_found_on. Identifikované osobě a právnické osobě se čtvrtletním obdobím vrátí 422 – na rozdíl od GET …/taxes/control_statement bez pole code.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
period | dotaz | text | ne | Období YYYY-MM nebo YYYY-Qn; má přednost před year, month a quarter. Neplatná hodnota skončí chybou 500. Příklad 2026-08. |
month | dotaz | celé číslo | ne | Měsíc, když chybí period Rozsah od 1 do 12. Příklad 8. |
quarter | dotaz | celé číslo | ne | Čtvrtletí, když chybí period i month (jen fyzická osoba) Rozsah od 1 do 4. Příklad 3. |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Identifikovaná osoba („Identifikovaná osoba kontrolní hlášení nepodává (§ 101c ZDPH).“) |
| 422 | – | Právnická osoba a čtvrtletní období („Právnická osoba podává kontrolní hlášení za kalendářní měsíc (§ 101e odst. 1 ZDPH)“) |
| 422 | – | Dokladu v hlášení chybí DIČ partnera, evidenční číslo nebo kód předmětu plnění |
| 500 | – | Neplatné period, month nebo quarter |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/taxes/kh/xml?period=2026-08"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/kh/xml?period=2026-08', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();<?xml version="1.0" encoding="UTF-8"?>
<Pisemnost nazevSW="Saldo" verzeSW="1.0">
<DPHKH1 verzePis="03.01">
<VetaD dokument="KH1" k_uladis="DPH" rok="2026" mesic="8" d_poddp="28.09.2026" khdph_forma="B"/>
<VetaP c_ufo="451" c_pracufo="2001" dic="99999994" typ_ds="P" zkrobchjm="Ukázková firma s.r.o." ulice="Na Příkopě" c_pop="859" c_orient="22" naz_obce="Praha" psc="11000" stat="ČESKÁ REPUBLIKA" email="demo@example.cz" c_telef="+420777000000" opr_jmeno="Jana" opr_prijmeni="Ukázková" opr_postaveni="jednatelka" sest_jmeno="Jana" sest_prijmeni="Ukázková"/>
<VetaA2 k_stat="DE" vatid_dod="998877665" c_evid_dd="2026083526" dppd="07.08.2026" zakl_dane1="28002.50" dan1="5880.53"/>
<VetaA4 dic_odb="90000013" c_evid_dd="FV20260020" dppd="15.08.2026" zakl_dane1="115500.00" dan1="24255.00" kod_rezim_pl="0" zdph_44="N"/>
<VetaA5 zakl_dane1="96000.00" dan1="20160.00"/>
<VetaB2 dic_dod="90000056" c_evid_dd="2026085713" dppd="02.08.2026" zakl_dane1="14500.00" dan1="3045.00" pomer="N" zdph_44="N"/>
<VetaB3 zakl_dane1="6200.00" dan1="1302.00"/>
<VetaC obrat23="211500.00" pln23="20700.00" celk_zd_a2="28002.50"/>
</DPHKH1>
</Pisemnost>
/entities/{entity_id}/taxes/sh/xml – Souhrnné hlášení (DPHSHV) jako XML
XML souhrnného hlášení ve formátu EPO DPHSHV verze 02.01. filing_type B vytvoří řádné hlášení (R), O, D a N následné (N); E (opravné dodatečné) souhrnné hlášení nezná a vrátí 422. Den zjištění důvodů se nevyžaduje.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
period | dotaz | text | ne | Období YYYY-MM nebo YYYY-Qn; má přednost před year, month a quarter. Neplatná hodnota skončí chybou 500. Příklad 2026-08. |
month | dotaz | celé číslo | ne | Měsíc, když chybí period Rozsah od 1 do 12. Příklad 8. |
quarter | dotaz | celé číslo | ne | Čtvrtletí, když chybí period i month Rozsah od 1 do 4. Příklad 3. |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | filing_type E („Neznámý druh podání :supplementary_corrective“) |
| 422 | – | Odběratel nemá platné DIČ („Souhrnné hlášení – neplatné DIČ pořizovatele …“) |
| 500 | – | Neplatné period, month nebo quarter |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/taxes/sh/xml?period=2026-08"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/sh/xml?period=2026-08', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();<?xml version="1.0" encoding="UTF-8"?>
<Pisemnost nazevSW="Saldo" verzeSW="1.0">
<DPHSHV verzePis="02.01">
<VetaD k_uladis="DPH" dokument="SHV" rok="2026" mesic="8" shvies_forma="R" d_poddp="28.09.2026"/>
<VetaP c_ufo="451" c_pracufo="2001" dic="99999994" typ_ds="P" zkrobchjm="Ukázková firma s.r.o." ulice="Na Příkopě" c_pop="859" c_orient="22" naz_obce="Praha" psc="11000" stat="ČESKÁ REPUBLIKA" opr_jmeno="Jana" opr_prijmeni="Ukázková" opr_postaveni="jednatelka" sest_jmeno="Jana" sest_prijmeni="Ukázková"/>
</DPHSHV>
</Pisemnost>
/entities/{entity_id}/taxes/income_tax/xml – Přiznání k dani z příjmů (DPFDP7 nebo DPPDP9) jako XML
XML přiznání k dani z příjmů za rok year: u OSVČ DPFDP7 verze 01.01.02 (jen roky 2024–2025), u právnické osoby DPPDP9 verze 05.01.01 s rozvahou a výkazem zisku a ztráty. DPPO vyžaduje vyrovnanou rozvahu; za celé zdaňovací období 2026 ho Saldo zatím odmítne, struktura formuláře pokrývá rok 2026 jen pro jeho části. filing_type: B, O, D, E (N se zapíše jako D); u D, E i N je povinný reasons_found_on a last_known_tax.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
last_known_tax | dotaz | číslo | ne | Poslední známá daň – povinná u dodatečného přiznání (D, E, N) Příklad 48210. |
publish | dotaz | ano/ne | ne | Jen DPPO – přesně hodnota false vynechá žádost o zveřejnění rozvahy a výkazu zisku a ztráty ve sbírce listin; jiná hodnota (i 0) žádost ponechá Výchozí true. Příklad true. |
accounts_approved | dotaz | ano/ne | ne | Jen DPPO – true uvede, že účetní závěrka je schválená Výchozí false. Příklad false. |
accounts_audited | dotaz | ano/ne | ne | Jen DPPO s povinným auditem – true uvede, že závěrka je ověřená auditorem Výchozí false. Příklad false. |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Rok mimo formulář („… lze sestavit jen za roky 2024–2025“ u DPFO, 2021–2026 u DPPO) nebo bez zákonných sazeb v Saldu |
| 422 | – | DPPO za celé zdaňovací období 2026 („Přiznání za celé zdaňovací období 2026 zatím sestavit nelze …“) |
| 422 | – | Chybějící údaje („Doplňte DIČ v Nastavení → Firma; …“), nevyrovnaná rozvaha nebo neúplné údaje zástupce |
| 422 | – | Dodatečné přiznání (D, E, N) bez last_known_tax nebo bez reasons_found_on |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax/xml?year=2025"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax/xml?year=2025', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();<?xml version="1.0" encoding="UTF-8"?>
<Pisemnost nazevSW="Saldo" verzeSW="1.0">
<DPFDP7 verzePis="01.01.02">
<VetaD dokument="DP7" k_uladis="DPF" dap_typ="B" rok="2025" c_ufo_cil="451" pln_moc="N" audit="N" zdobd_od="01.01.2025" zdobd_do="31.12.2025" m_deti="12" kc_op15_1a="30840" uhrn_slevy35ba="30840" kc_dazvyhod="15204"/>
<VetaP c_pracufo="2002" dic="8001010006" prijmeni="Ukázka" jmeno="Jan" ulice="Vinohradská" c_pop="1" naz_obce="Praha" psc="12000" stat="ČESKÁ REPUBLIKA" email="demo@example.cz" c_telef="+420777000000" rod_c="8001010006" k_stat="CZ"/>
<VetaA vyzdite_jmeno="Eliška" vyzdite_prijmeni="Ukázková" vyzdite_r_cislo="1855120003" vyzdite_pocmes="12"/>
<VetaB priloha1="1" priloh_celk="1"/>
<VetaT c_nace="741200" m_podnik="12" vyd7proc="N" uc_soust="1"/>
</DPFDP7>
</Pisemnost>
/entities/{entity_id}/taxes/prehled_sp/xml – Přehled OSVČ pro ČSSZ (OSVC25) jako XML
XML přehledu o příjmech a výdajích OSVČ pro ČSSZ ve formátu e-Podání OSVC25 (jmenný prostor http://schemas.cssz.cz/OSVC2025). Jen pro OSVČ a jen za rok 2025. filing_type O vytvoří opravný přehled (vyžaduje reasons_found_on a reason), jakákoli jiná hodnota řádný. Před vrácením projde XML kontrolami podle pravidel ČSSZ; nalezené problémy vrátí v poli problems.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
reason | dotaz | text | ne | Důvod opravného přehledu (povinný u filing_type O) Příklad Opravné daňové přiznání. |
tax_return | dotaz | text | ne | Jak se podává daňové přiznání (ovlivní lhůtu přehledu); výchozí advisor, má-li firma v nastavení daňového poradce, jinak standard; neznámá hodnota se ignoruje Hodnoty: standard, electronic, advisor, none, extended. Příklad electronic. |
tax_return_extended_until | dotaz | datum | ne | Den, do kterého finanční úřad prodloužil lhůtu – povinný u tax_return extended Příklad 2026-07-01. |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Firma není OSVČ („Přehledy pro ČSSZ a zdravotní pojišťovnu podává jen OSVČ“) |
| 422 | – | Rok jiný než 2025, chybějící údaje daňového profilu nebo nesplněné kontroly ČSSZ; odpověď { error, problems } s jednotlivými nálezy |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_sp/xml?year=2025"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_sp/xml?year=2025', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();<?xml version="1.0" encoding="UTF-8"?>
<OSVC xmlns="http://schemas.cssz.cz/OSVC2025" version="1.0">
<VENDOR productName="Saldo" productVersion="1.0"/>
<prehledosvc vsdp="12345678" for="prehledosvc" dep="110" rok="2025" typ="N">
<client>
<name sur="Ukázka" fir="Jan" tit=""/>
<birth bno="8001010006" den="1980-01-01"/>
<adr str="Vinohradská" num="1" pnu="12000" cit="Praha" cnt="CZ"/>
<email>demo@example.cz</email>
<tel>+420 777 000 000</tel>
<druc>H</druc>
<hlavc>
<m1/>
<m2/>
<m3/>
<m4/>
<m5/>
<m6/>
<m7/>
<m8/>
<m9/>
<m10/>
<m11/>
<m12/>
<m13>A</m13>
</hlavc>
<vedc>
<m1/>
<m2/>
<m3/>
<m4/>
<m5/>
<m6/>
<m7/>
<m8/>
<m9/>
<m10/>
<m11/>
<m12/>
<m13/>
<zam/>
<duchod/>
<pdite/>
<ppm/>
<pece/>
<ndite/>
</vedc>
<narok>
<m1/>
<m2/>
<m3/>
<m4/>
<m5/>
<m6/>
<m7/>
<m8/>
<m9/>
<m10/>
<m11/>
<m12/>
<m13/>
</narok>
<sleva>
<m1/>
<m2/>
<m3/>
<m4/>
<m5/>
<m6/>
<m7/>
<m8/>
<m9/>
<m10/>
<m11/>
<m12/>
<m13/>
</sleva>
<vzpm/>
</client>
<pvv pri="0">
<mesc h="12" v=""/>
<mesv h="12" v=""/>
<mesp>0</mesp>
<rdza h="0" v="0"/>
<vvz h="0" v="0"/>
<dvz h="0" v="0"/>
<mvz>195540</mvz>
<uvz>195540</uvz>
<vzza/>
<vzsu>195540</vzsu>
<vzsvc>195540</vzsvc>
<poj>57098</poj>
<slev>0</slev>
<pojposlev>57098</pojposlev>
<zal>0</zal>
<ned>57098</ned>
</pvv>
<prihldp/>
<zal ved="H" pau="" vzpm="" duch="" vz="17139" dp="5005" np="0"/>
<pre vra="0" kam="">
<rok/>
<iban/>
<bs pu="" cu="" kb="" ss="" vs=""/>
<adr str="" num="" pnu="" cit="" cnt=""/>
</pre>
<prizn>
<pau/>
<pov>A</pov>
<elektr>N</elektr>
<por>N</por>
<meldat/>
</prizn>
<opr datopr="" duvod=""/>
<spo bno="" den="">
<name sur="" fir="" tit=""/>
<adr str="" num="" pnu="" cit="" cnt=""/>
</spo>
<dat dre="2026-09-28"/>
</prehledosvc>
</OSVC>
/entities/{entity_id}/taxes/prehled_zp/xml – Přehled OSVČ pro zdravotní pojišťovnu jako XML
XML přehledu OSVČ pro zdravotní pojišťovnu ve společném formátu pojišťoven (prehledOSVC v6, jmenný prostor http://xmlns.vzp.cz/prehledOSVC/v6). Jen pro OSVČ a jen za rok 2025. filing_type O vytvoří opravný přehled, jiná hodnota řádný. Před vrácením projde XML kontrolami; problémy vrátí v poli problems.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
tax_return | dotaz | text | ne | Jak se podává daňové přiznání; výchozí advisor nebo standard podle nastavení firmy Hodnoty: standard, electronic, advisor, none, extended. Příklad electronic. |
tax_return_extended_until | dotaz | datum | ne | Den, do kterého finanční úřad prodloužil lhůtu – povinný u tax_return extended Příklad 2026-07-01. |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Firma není OSVČ |
| 422 | – | Rok jiný než 2025, chybějící údaje daňového profilu nebo nesplněné kontroly; odpověď { error, problems } |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_zp/xml?year=2025"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_zp/xml?year=2025', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();<?xml version="1.0" encoding="UTF-8"?>
<prehledOSVC xmlns="http://xmlns.vzp.cz/prehledOSVC/v6">
<identifikacePredmetuPodaniText>Přehled OSVČ pro ZP 2026+</identifikacePredmetuPodaniText>
<identifikacePredmetuPodaniKod>3e0520e9-2dea-4073-8252-ed57cb5d1c89</identifikacePredmetuPodaniKod>
<kodZdravotniPojistovny>111</kodZdravotniPojistovny>
<rokPrehledu>2025</rokPrehledu>
<typPrehledu>radny</typPrehledu>
<pojistenec>
<cisloPojistence>8001010006</cisloPojistence>
<ic>99999986</ic>
<prijmeni>Ukázka</prijmeni>
<jmeno>Jan</jmeno>
<adresa>
<ulice>Vinohradská</ulice>
<cisloDomu>1</cisloDomu>
<psc>12000</psc>
<obec>Praha</obec>
</adresa>
<telefon>420777000000</telefon>
<email>demo@example.cz</email>
</pojistenec>
<prohlaseniRezimPojistneho>
<prohlaseni>
<klicProhlaseni>prohlaseniPp</klicProhlaseni>
<seznamMesicu/>
</prohlaseni>
</prohlaseniRezimPojistneho>
<prohlaseniPojistenceDP>
<zpusobPodaniDP>priznaniDPFO</zpusobPodaniDP>
</prohlaseniPojistenceDP>
<stanovenePojistneOSVC>
<radekHodnoty>
<klicRadku>3</klicRadku>
<hodnotaRadku>0.00</hodnotaRadku>
</radekHodnoty>
<radekHodnoty>
<klicRadku>4</klicRadku>
<hodnotaRadku>12</hodnotaRadku>
</radekHodnoty>
<radekHodnoty>
<klicRadku>5</klicRadku>
<hodnotaRadku>12</hodnotaRadku>
</radekHodnoty>
<radekHodnoty>
<klicRadku>6</klicRadku>
<hodnotaRadku>12</hodnotaRadku>
</radekHodnoty>
<radekHodnoty>
<klicRadku>9</klicRadku>
<hodnotaRadku>279342.00</hodnotaRadku>
</radekHodnoty>
<radekHodnoty>
<klicRadku>14</klicRadku>
<hodnotaRadku>279342.00</hodnotaRadku>
</radekHodnoty>
<radekHodnoty>
<klicRadku>16</klicRadku>
<hodnotaRadku>37712</hodnotaRadku>
</radekHodnoty>
</stanovenePojistneOSVC>
<vyrovnaniZalohPojistne>
<seznamRadku>
<radekHodnoty>
<klicRadku>41</klicRadku>
<hodnotaRadku>0</hodnotaRadku>
</radekHodnoty>
<radekHodnoty>
<klicRadku>43</klicRadku>
<hodnotaRadku>-37712</hodnotaRadku>
</radekHodnoty>
</seznamRadku>
</vyrovnaniZalohPojistne>
<vyseZalohy>
<seznamRadkuSekceZalohy>
<radekHodnoty>
<klicRadku>51</klicRadku>
<hodnotaRadku>0</hodnotaRadku>
</radekHodnoty>
</seznamRadkuSekceZalohy>
<typZalohy>zalohaMinimalni</typZalohy>
<novaVyseZalohy>3306</novaVyseZalohy>
</vyseZalohy>
</prehledOSVC>
POST Kontrola podání v EPO nebo otevření předvyplněného formuláře
/entities/{entity_id}/taxes/{report}/epo
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Sestaví XML podání stejně jako GET …/taxes/{report}/xml a předá ho rozhraní EPO portálu Moje daně. S check=true ho portál jen zkontroluje v testovacím režimu a vrátí nalezené chyby. Bez check portál vrátí odkaz na formulář předvyplněný tímto XML. Ani jedna možnost nic nepodá: podání odešle až uživatel sám v portálu Moje daně a Saldo o tom nic neví. Stav podání v Saldu se nemění a podání se neukládá. Vstupy lze poslat v těle JSON i v query stringu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
report | cesta | text | ano | Druh podání; prehled_sp a prehled_zp vrátí 422 Hodnoty: dph, kh, sh, income_tax. Příklad dph. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
check | ano/ne | ne | true = jen kontrola v testovacím režimu EPO; false = odkaz na předvyplněný formulář Výchozí false. |
year | celé číslo | ne | Rok (u DPH, když chybí period; u daně z příjmů zdaňovací období); výchozí aktuální rok |
filing_type | text | ne | Druh podání jako u GET …/xml; výchozí B Hodnoty: B, O, D, E, N. |
date | datum | ne | Datum podání uvedené v XML; výchozí dnešní datum |
reasons_found_on | datum | ne | Den zjištění důvodů – povinný u dodatečného či následného podání |
Odpověď
200 application/json S check=true výsledek kontroly (errors, raw), jinak odkaz na formulář (url, valid_until). Chyby nalezené portálem vrací operace se stavem 200 v poli errors.
| Pole | Význam |
|---|---|
errors | Jen s check=true: chyby hlášené portálem ve tvaru „Typ: text“; prázdné pole = bez chyb |
raw | Jen s check=true: odpověď portálu, nejvýše 4000 znaků |
url | Jen bez check: adresa předvyplněného formuláře na mojedane.gov.cz |
valid_until | Jen bez check: čas volání + 30 minut – platnost odkazu, jak ji předpokládá Saldo (portál ji nevrací) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | report je prehled_sp nebo prehled_zp („Přehledy OSVČ se podávají ČSSZ a zdravotní pojišťovně, ne přes portál Moje daně“); XML se sestaví dřív, takže chybějící údaje přehledu vrátí 422 s problems |
| 422 | – | Nelze sestavit XML – stejné důvody jako u GET …/taxes/{report}/xml |
| 422 | – | Neznámá hodnota report („Neznámý typ podání“) |
| 502 | – | Portál Moje daně je nedostupný nebo odpověděl chybovým stavem HTTP („Portál Moje daně …“), nebo bez check nevrátil odkaz na formulář (error pak obsahuje první chybu hlášenou portálem) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Pošle XML metodou POST na https://mojedane.gov.cz/dpr/epo_podani: s check=true s parametrem test=1 (kontrolní hlášení zabalené do ZIP jako podani.xml), bez check s parametrem otevriFormular=1. Saldo tím podání neodesílá: test=1 je kontrola v testovacím režimu, otevriFormular=1 formulář jen předvyplní a odeslat ho musí uživatel v portálu; o odeslání se Saldo nedozví. Po úspěšné odpovědi portálu zapíše do historie událost tax.epo; jinak nezapisuje nic.
- Limity
- Spojení s portálem má limit 10 s na navázání a 40 s na odpověď.
- Opakování
- Každé volání znovu kontaktuje portál a zapíše novou událost; nic se nehromadí ani nepodává.
/entities/{entity_id}/taxes/dph/epo – Přiznání k DPH v EPO
XML přiznání k DPH (DPHDP3) za zvolené období.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
period | text | ne | Období YYYY-MM nebo YYYY-Qn; má přednost před year, month a quarter. Neplatná hodnota skončí chybou 500. |
month | celé číslo | ne | Měsíc 1–12, když chybí period |
quarter | celé číslo | ne | Čtvrtletí 1–4 čtvrtletního plátce, když chybí period i month |
Příklad
Volání portálu Moje daně je v ukázce nahrazeno záznamem.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"period":"2026-08","check":true}' \
https://techtools.cz/ucetnictvi-api/entities/1/taxes/dph/epoJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/dph/epo', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"period": "2026-08",
"check": true
})
});
const data = await response.json();{
"errors": [],
"raw": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Odpoved><Vysledek>Kontrola proběhla bez chyb.</Vysledek></Odpoved>"
}
Odpověď externí služby (portál Moje daně) je v ukázce nahrazená smyšlenými údaji ve formátu, který služba vrací.
/entities/{entity_id}/taxes/kh/epo – Kontrolní hlášení v EPO
XML kontrolního hlášení (DPHKH1). Pro kontrolu (check=true) se posílá zabalené do ZIP. Identifikovaná osoba a právnická osoba se čtvrtletním obdobím dostanou 422.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
period | text | ne | Období YYYY-MM nebo YYYY-Qn. Neplatná hodnota skončí chybou 500. |
month | celé číslo | ne | Měsíc 1–12, když chybí period |
quarter | celé číslo | ne | Čtvrtletí 1–4, když chybí period i month (jen fyzická osoba) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Identifikovaná osoba nebo právnická osoba se čtvrtletním obdobím |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
Volání portálu Moje daně je v ukázce nahrazeno záznamem.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"period":"2026-08","check":true}' \
https://techtools.cz/ucetnictvi-api/entities/1/taxes/kh/epoJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/kh/epo', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"period": "2026-08",
"check": true
})
});
const data = await response.json();{
"errors": [],
"raw": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Odpoved><Vysledek>Kontrola proběhla bez chyb.</Vysledek></Odpoved>"
}
Odpověď externí služby (portál Moje daně) je v ukázce nahrazená smyšlenými údaji ve formátu, který služba vrací.
/entities/{entity_id}/taxes/sh/epo – Souhrnné hlášení v EPO
XML souhrnného hlášení (DPHSHV); filing_type E vrátí 422.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
period | text | ne | Období YYYY-MM nebo YYYY-Qn. Neplatná hodnota skončí chybou 500. |
month | celé číslo | ne | Měsíc 1–12, když chybí period |
quarter | celé číslo | ne | Čtvrtletí 1–4, když chybí period i month |
Příklad
Bez check – vrátí odkaz na předvyplněný formulář. Volání portálu je v ukázce nahrazeno záznamem.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"period":"2026-08"}' \
https://techtools.cz/ucetnictvi-api/entities/1/taxes/sh/epoJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/taxes/sh/epo', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"period": "2026-08"
})
});
const data = await response.json();{
"url": "https://adisspr.mfcr.cz/pmd/epo/formular/ukazka",
"valid_until": "2026-09-28T10:30:00.000Z"
}
Odpověď externí služby (portál Moje daně) je v ukázce nahrazená smyšlenými údaji ve formátu, který služba vrací.
/entities/{entity_id}/taxes/income_tax/epo – Přiznání k dani z příjmů v EPO
XML přiznání k dani z příjmů (DPFDP7 u OSVČ, DPPDP9 u právnické osoby) se stejnými omezeními jako u GET …/xml.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
last_known_tax | číslo | ne | Poslední známá daň – povinná u dodatečného přiznání (D, E, N) |
publish | text | ne | Jen DPPO – řetězec "false" vynechá žádost o zveřejnění závěrky. Hodnota se porovnává jako text: JSON false se nerozpozná a závěrka se zveřejní. Bez pole se zveřejní. Hodnoty: false. |
accounts_approved | ano/ne | ne | Jen DPPO – závěrka je schválená; výchozí false |
accounts_audited | ano/ne | ne | Jen DPPO s auditem – závěrka je ověřená; výchozí false |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | DPFO mimo roky 2024–2025, DPPO za celé zdaňovací období 2026, chybějící údaje nebo nevyrovnaná rozvaha |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
Bez check – vrátí odkaz na předvyplněný formulář. Volání portálu je v ukázce nahrazeno záznamem.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2025}' \
https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax/epoJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax/epo', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2025
})
});
const data = await response.json();{
"url": "https://adisspr.mfcr.cz/pmd/epo/formular/ukazka",
"valid_until": "2026-09-28T10:30:00.000Z"
}
Odpověď externí služby (portál Moje daně) je v ukázce nahrazená smyšlenými údaji ve formátu, který služba vrací.
POST Předběžná kontrola přehledu OSVČ u ČSSZ
/entities/{entity_id}/taxes/{report}/validate
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Sestaví XML přehledu OSVČ pro ČSSZ (jako GET …/taxes/prehled_sp/xml) a pošle ho k anonymní předběžné kontrole validační službě ČSSZ. Vrátí, zda přehled kontrolou prošel, a nálezy s kódy ČSSZ. Přehled se tím nepodává a v Saldu se neukládá. Jiná hodnota report než prehled_sp vrátí 422. Vstupy lze poslat v těle JSON i v query stringu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
report | cesta | text | ano | Jediná podporovaná hodnota Hodnoty: prehled_sp. Příklad prehled_sp. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Rok přehledu – Saldo sestaví jen rok 2025; výchozí aktuální rok |
filing_type | text | ne | O = opravný přehled, jinak řádný |
date | datum | ne | Datum vyplnění; výchozí dnešní datum |
reasons_found_on | datum | ne | Datum zjištění nové výše vyměřovacího základu (u opravného) |
reason | text | ne | Důvod opravného přehledu |
tax_return | text | ne | Jak se podává daňové přiznání Hodnoty: standard, electronic, advisor, none, extended. |
tax_return_extended_until | datum | ne | Prodloužená lhůta – povinná u tax_return extended |
Odpověď
200 application/json Výsledek kontroly ČSSZ.
| Pole | Význam |
|---|---|
ok | true, když služba vrátila výsledek OK |
findings | Nálezy: category, code (kód chyby ČSSZ), message, form |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | report není prehled_sp („Předběžnou kontrolu nabízí jen ČSSZ pro přehled OSVČ“) |
| 422 | – | XML přehledu nelze sestavit (firma není OSVČ, rok jiný než 2025, chybějící údaje); odpověď { error, problems } |
| 502 | – | Validační služba ČSSZ neodpověděla včas, je nedostupná nebo nevrátila výsledek |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Pošle XML přehledu na https://epodani.cssz.cz/ePodaniValidace.svc (SOAP ValidujPodani, bez přihlášení). Služba přehled jen kontroluje, nic se nepodá. Po odpovědi služby zapíše do historie událost tax.validate.
- Limity
- Spojení se službou ČSSZ má limit 10 s na navázání a 40 s na odpověď.
- Opakování
- Každé volání pošle přehled ke kontrole znovu a zapíše novou událost.
Příklad
Volání služby ČSSZ je v ukázce nahrazeno záznamem.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2025}' \
https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_sp/validateJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_sp/validate', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2025
})
});
const data = await response.json();{
"ok": true,
"findings": []
}
Odpověď externí služby (ČSSZ) je v ukázce nahrazená smyšlenými údaji ve formátu, který služba vrací.
POST Uložení podání daně z příjmů nebo přehledu OSVČ
/entities/{entity_id}/taxes/{report}/filing
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Sestaví XML jako GET …/taxes/{report}/xml a uloží ho jako podání ve stavu draft (Připraveno) spolu se snímkem výpočtu. Podání tím nikam neodchází; odeslání uživatel potvrdí později přes PATCH /filings/{id} se stavem filed. Podání k DPH (dph, kh, sh) se ukládají přes POST /filings. Vstupy lze poslat v těle JSON i v query stringu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
report | cesta | text | ano | Druh podání; jiné hodnoty vrátí 422 Hodnoty: income_tax, prehled_sp, prehled_zp. Příklad income_tax. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
year | celé číslo | ne | Zdaňovací období (rok); výchozí aktuální rok |
filing_type | text | ne | Druh podání (viz varianty); výchozí B |
date | datum | ne | Datum podání uvedené v XML; výchozí dnešní datum |
reasons_found_on | datum | ne | Den zjištění důvodů (dodatečné přiznání, opravný přehled ČSSZ) |
Odpověď
201 application/json Uložené podání (bez XML).
| Pole | Význam |
|---|---|
id | ID podání |
kind | dpfo, dppo, prehled_sp nebo prehled_zp |
period | Rok (YYYY) |
filing_type | Druh podání |
status | draft |
data | Snímek výpočtu (u daně výsledek výpočtu, u přehledu řádky přehledu) |
proof_state | draft |
has_xml | true |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | report není income_tax, prehled_sp ani prehled_zp („Podání k DPH ukládejte přes /filings“) |
| 422 | – | XML nelze sestavit – stejné důvody jako u GET …/taxes/{report}/xml |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří záznam podání (kind dpfo nebo dppo podle firmy, případně prehled_sp nebo prehled_zp) ve stavu draft s XML a daty a zapíše událost filing.created. Nic nikam neposílá, nic neúčtuje.
- Opakování
- Každé volání vytvoří nové podání; duplicity se nekontrolují.
/entities/{entity_id}/taxes/income_tax/filing – Uložení přiznání k dani z příjmů
Uloží přiznání DPFO (OSVČ) nebo DPPO (právnická osoba) za rok year. filing_type se uloží tak, jak přišel (B, O, D, E, N, S), XML ale zná jen B, O, D a E – N se v XML zapíše jako D a S jako B.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
last_known_tax | číslo | ne | Poslední známá daň – povinná u dodatečného přiznání (D, E, N) |
publish | text | ne | Jen DPPO – řetězec "false" vynechá žádost o zveřejnění závěrky. Hodnota se porovnává jako text: JSON false se nerozpozná a závěrka se zveřejní. Bez pole se zveřejní. Hodnoty: false. |
accounts_approved | ano/ne | ne | Jen DPPO – závěrka je schválená; výchozí false |
accounts_audited | ano/ne | ne | Jen DPPO s auditem – závěrka je ověřená; výchozí false |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | DPFO mimo roky 2024–2025, DPPO za celé zdaňovací období 2026, chybějící údaje nebo nevyrovnaná rozvaha |
| 422 | – | filing_type mimo B, O, D, E, N, S – validace podání { error, errors } |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2025}' \
https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax/filingJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/income_tax/filing', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2025
})
});
const data = await response.json();{
"id": 3,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"year": 2025,
"income": 0.0,
"expenses": 0.0,
"expense_method": {
"kind": "actual",
"parts": []
},
"profit": 0.0,
"employment_income": 0.0,
"tax_base": 0.0,
"deductions": [],
"tax_base_rounded": 0.0,
"tax_before_credits": 0.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": 0.0,
"bonus": 0.0,
"children": [
{
"order": 1,
"months": 12,
"ztpp": false,
"amount": 15204.0
}
]
},
"tax": 0.0,
"bonus": 0.0,
"tax_withheld": 0.0,
"tax_advances_paid": 0.0,
"tax_balance": 0.0,
"tax_advances": {
"last_known_tax": 0.0,
"frequency": "none",
"amount": 0.0,
"period": {
"from": "2026-05-05",
"to": "2027-05-03"
},
"schedule": [],
"basis": "§ 38a ZDP"
},
"sp": {
"participates": true,
"decisive_amount": null,
"assessment_base": 0.0,
"minimum_base": 195540.0,
"maximum_base": 2234736.0,
"applied_base": 195540.0,
"rate": 0.292,
"premium": 57098.0,
"discount": 0.0,
"premium_after_discount": 57098.0,
"advances_paid": 0.0,
"balance": 57098.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": 0.0,
"minimum_base": 279342.0,
"applied_base": 279342.0,
"rate": 0.135,
"premium": 37712.0,
"advances_paid": 0.0,
"balance": 37712.0,
"monthly_advance_next": 3306.0,
"basis": "§ 2, § 3a a § 8 zákona č. 592/1992 Sb."
},
"total_levies": 94810.0,
"net_income": -94810.0,
"effective_rate": 0.0,
"form_rows": {
"37": 0.0,
"41": 0.0,
"42": 0.0,
"45": 0.0,
"55": 0.0,
"56": 0.0,
"57": 0.0,
"58": 0.0,
"60": 0.0,
"70": 30840.0,
"71": 0.0,
"72": 15204.0,
"74": 0.0,
"75": 0.0,
"91": 0.0,
"64": 30840.0,
"101": 0.0,
"102": 0.0,
"104": 0.0,
"113": 0.0
},
"warnings": [
"Daňový bonus nenáleží: příjmy podle § 6 a § 7 nedosáhly 6násobku minimální mzdy (124 800 Kč, § 35c ZDP).",
"Minimální záloha hlavní činnosti činila v roce 2026 do června 5 720 Kč, od července 5 005 Kč (čl. I a čl. II bod 1 zákona č. 90/2026 Sb.)."
]
},
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"filed_on": null,
"filing_type": "B",
"first_filed_at": null,
"kind": "dpfo",
"period": "2025",
"status": "draft",
"submission_version": 0,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přiznání k dani z příjmů FO",
"has_xml": true,
"proof_state": "draft",
"evidence_count": 0
}
/entities/{entity_id}/taxes/prehled_sp/filing – Uložení přehledu OSVČ pro ČSSZ
Uloží přehled pro ČSSZ za rok 2025; filing_type O uloží opravný přehled (typ O), cokoli jiného řádný (typ B).
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
reason | text | ne | Důvod opravného přehledu (povinný u O) |
tax_return | text | ne | Jak se podává daňové přiznání Hodnoty: standard, electronic, advisor, none, extended. |
tax_return_extended_until | datum | ne | Prodloužená lhůta – povinná u tax_return extended |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Rok jiný než 2025, chybějící údaje nebo nesplněné kontroly; odpověď { error, problems } |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2025}' \
https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_sp/filingJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_sp/filing', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2025
})
});
const data = await response.json();{
"id": 3,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"druc": "H",
"pri": 0.0,
"mesc": {
"h": 12,
"v": 0
},
"mesv": {
"h": 12,
"v": 0
},
"mesp": 0.0,
"rdza": {
"h": 0.0,
"v": 0.0
},
"vvz": {
"h": 0.0,
"v": 0.0
},
"dvz": {
"h": 0.0,
"v": 0.0
},
"mvz": 195540.0,
"uvz": 195540.0,
"vzza": null,
"vzsu": 195540.0,
"vzsvc": 195540.0,
"poj": 57098.0,
"slev": 0.0,
"pojposlev": 57098.0,
"zal": 0.0,
"ned": 57098.0,
"secondary_participates": false,
"decisive_amount": null,
"maximum_base": 2234736.0,
"next_year": {
"ved": "H",
"pau": "",
"vzpm": "",
"duch": "",
"vz": 17139.0,
"dp": 5005.0,
"np": 0.0
}
},
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"filed_on": null,
"filing_type": "B",
"first_filed_at": null,
"kind": "prehled_sp",
"period": "2025",
"status": "draft",
"submission_version": 0,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přehled pro ČSSZ",
"has_xml": true,
"proof_state": "draft",
"evidence_count": 0
}
/entities/{entity_id}/taxes/prehled_zp/filing – Uložení přehledu OSVČ pro zdravotní pojišťovnu
Uloží přehled pro zdravotní pojišťovnu za rok 2025; filing_type O uloží opravný přehled, cokoli jiného řádný.
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
tax_return | text | ne | Jak se podává daňové přiznání Hodnoty: standard, electronic, advisor, none, extended. |
tax_return_extended_until | datum | ne | Prodloužená lhůta – povinná u tax_return extended |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Rok jiný než 2025, chybějící údaje nebo nesplněné kontroly; odpověď { error, problems } |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2025}' \
https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_zp/filingJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/prehled_zp/filing', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"year": 2025
})
});
const data = await response.json();{
"id": 3,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"3": 0.0,
"4": 12,
"5": 12,
"6": 12,
"9": 279342.0,
"14": 279342.0,
"16": 37712.0,
"41": 0.0,
"43": -37712.0,
"51": 0.0,
"advance_type": "minimum",
"new_advance": 3306.0,
"minimum_advance": 3306.0,
"monthly_minimum_base": 23278.5
},
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"filed_on": null,
"filing_type": "B",
"first_filed_at": null,
"kind": "prehled_zp",
"period": "2025",
"status": "draft",
"submission_version": 0,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přehled pro zdravotní pojišťovnu",
"has_xml": true,
"proof_state": "draft",
"evidence_count": 0
}
POST Doplnění daňového profilu OSVČ z bankovních pohybů
/entities/{entity_id}/taxes/profile_from_bank
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Projde odchozí bankovní pohyby OSVČ za posledních 24 měsíců a podle plateb na účty správ sociálního zabezpečení a zdravotních pojišťoven najde kód OSSZ, variabilní symbol ČSSZ, zdravotní pojišťovnu a rodné číslo. Do daňového profilu zapíše jen údaje, které v něm chybějí (rodné číslo ne, je-li DIČ rodným číslem). U právnické osoby nebo bez nálezu vrátí prázdné applied a nic nezmění. Stejné návrhy ukazuje GET …/taxes/payments v missing[].suggestion.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
Odpověď
200 application/json Doplněné údaje.
| Pole | Význam |
|---|---|
applied | Pole → zobrazená hodnota: ossz_code, cssz_variable_symbol, health_insurer, birth_number (ve tvaru 850101/1233) |
Chování
- Co změní
- Uloží nalezené hodnoty do nastavení firmy (settings.tax_profile) a zapíše událost entity.updated („Z výpisu z banky doplněno: …“). Nic neúčtuje.
- Opakování
- Opakované volání už nic nedoplní, protože údaje v profilu jsou; vrátí prázdné applied.
Příklad
Ukázková OSVČ má profil vyplněný, proto vrátí prázdné applied.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/2/taxes/profile_from_bankJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/2/taxes/profile_from_bank', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST'
});
const data = await response.json();{
"applied": {}
}
GET Seznam uložených podání
/entities/{entity_id}/filings
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
- V příručce
- Daně a pojistné › Záložka Podání
Vrátí uložená podání firmy všech druhů (DPH, KH, SH, daň z příjmů, přehledy OSVČ i JMHZ) od nejnověji vytvořeného, bez XML. U každého podání je stav v Saldu (status draft nebo filed) a zvlášť stav doložení doručení proof_state – status filed je jen tvrzení uživatele, že podání odeslal.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
Odpověď
200 application/json Pole podání.
| Pole | Význam |
|---|---|
[].id | ID podání |
[].kind | dph, kh, sh, dpfo, dppo, prehled_sp, prehled_zp, jmhz; kind_label česky |
[].period | Období: YYYY-MM, YYYY-Qn nebo YYYY |
[].filing_type | B řádné, O opravné, D dodatečné, E opravné dodatečné, N následné, S storno |
[].status | draft (Připraveno) nebo filed (označeno jako odeslané) |
[].filed_on | Datum odeslání zadané uživatelem |
[].first_filed_at | Kdy bylo podání poprvé označeno jako odeslané |
[].submission_version | Kolikrát bylo podání označeno jako odeslané (zvyšuje se při každém přechodu na filed) |
[].proof_state | draft; awaiting_proof (odesláno bez ověřené doručenky či výjimky); verified (ověřená doručenka nebo potvrzení přijetí k aktuálnímu XML a verzi odeslání); exception (schváleno bez doručenky) |
[].exception_approved_at | Schválení bez doručenky: kdy, kdo (exception_approved_by_id) a proč (exception_reason) |
[].evidence_count | Počet přiložených důkazních souborů včetně vyřazených |
[].data | Snímek výkazu nebo výpočtu z doby přípravy |
[].has_xml | Zda je uložené XML |
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Nejvýše 200 nejnovějších podání; stránkování není.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/filingsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"form": "25 5401 MFin 5401 vzor č. 26",
"rows": {
"1": {
"base": 211500.0,
"tax": 44415.0
},
"2": {
"base": 0.0,
"tax": 0.0
},
"3": {
"base": 0.0,
"tax": 0.0
},
"4": {
"base": 0.0,
"tax": 0.0
},
"5": {
"base": 28003.0,
"tax": 5881.0
},
"6": {
"base": 0.0,
"tax": 0.0
},
"7": {
"base": 0.0,
"tax": 0.0
},
"8": {
"base": 0.0,
"tax": 0.0
},
"9": {
"base": 0.0,
"tax": 0.0
},
"10": {
"base": 0.0,
"tax": 0.0
},
"11": {
"base": 0.0,
"tax": 0.0
},
"12": {
"base": 0.0,
"tax": 0.0
},
"13": {
"base": 0.0,
"tax": 0.0
},
"14": {
"base": 0.0,
"tax": 0.0
},
"20": 0.0,
"21": 0.0,
"22": 0.0,
"23": 0.0,
"24": 0.0,
"25": 0.0,
"26": 0.0,
"30": 0.0,
"31": 0.0,
"32": 0.0,
"33": 0.0,
"34": 0.0,
"40": {
"base": 20700.0,
"full": 4347.0,
"reduced": 0.0
},
"41": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"42": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"43": {
"base": 28003.0,
"full": 5881.0,
"reduced": 0.0
},
"44": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"45": {
"full": 0.0,
"reduced": 0.0
},
"46": {
"full": 10228.0,
"reduced": 0.0
},
"47": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"48": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"50": 0.0,
"51": {
"with_credit": 0.0,
"without_credit": 0.0
},
"52": {
"coefficient": null,
"deduction": 0.0
},
"53": {
"coefficient": null,
"change": 0.0
},
"60": 0.0,
"61": 0.0,
"62": 50296.0,
"63": 10228.0,
"64": 40068.0,
"65": 0.0,
"66": 0.0
},
"own_tax": 40068.0,
"excess_deduction": 0.0,
"documents": {
"1": [
19,
20
],
"5": [
65
],
"40": [
62,
63
],
"43": [
65
]
},
"warnings": []
},
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"filed_on": "2026-09-24",
"filing_type": "B",
"first_filed_at": "2026-09-28T10:00:00.000Z",
"kind": "dph",
"period": "2026-08",
"status": "filed",
"submission_version": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přiznání k DPH",
"has_xml": true,
"proof_state": "awaiting_proof",
"evidence_count": 1
},
{
"id": 2,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"sections": {
"a1": [],
"a2": [
{
"document_id": 65,
"country": "DE",
"vat_id": "998877665",
"number": "2026083526",
"dppd": "2026-08-07",
"base1": 28002.5,
"tax1": 5880.53,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0
}
],
"a3": [],
"a4": [
{
"document_id": 20,
"partner_dic": "90000013",
"number": "FV20260020",
"dppd": "2026-08-15",
"base1": 115500.0,
"tax1": 24255.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"bad_debt": false
}
],
"a5": {
"base1": 96000.0,
"tax1": 20160.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"document_ids": [
19
]
},
"b1": [],
"b2": [
{
"document_id": 62,
"partner_dic": "90000056",
"number": "2026085713",
"dppd": "2026-08-02",
"base1": 14500.0,
"tax1": 3045.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"proportional": false,
"bad_debt": false
}
],
"b3": {
"base1": 6200.0,
"tax1": 1302.0,
"base2": 0.0,
"tax2": 0.0,
"base3": 0.0,
"tax3": 0.0,
"document_ids": [
63,
64
]
}
},
"control": {
"a4_a5_basic": {
"base": 211500.0,
"return_rows": [
1
]
},
"a4_a5_reduced": {
"base": 0.0,
"return_rows": [
2
…
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Uložení podání k DPH (přiznání, kontrolní nebo souhrnné hlášení)
/entities/{entity_id}/filings
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Sestaví výkaz a XML přiznání k DPH, kontrolního nebo souhrnného hlášení za období a uloží je jako podání ve stavu draft (Připraveno). Podání nikam neodchází; že bylo odesláno, potvrdí uživatel přes PATCH /filings/{id}. Datum podání v XML je vždy dnešní. Operace nekontroluje registraci k DPH.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
kind | text | ano | Druh podání Hodnoty: dph, kh, sh. |
period | text | ano | Období YYYY-MM nebo YYYY-Qn; neplatná hodnota skončí chybou 500 |
filing_type | text | ne | Druh podání; jiná hodnota se uloží jako B. Uloží se tak, jak přišel, XML ale S nezná a sestaví ho jako řádné; význam D, E, N je u každého formuláře jiný (viz GET …/taxes/{report}/xml) Hodnoty: B, O, D, E, N, S. Výchozí B. |
reasons_found_on | datum | ne | Den zjištění důvodů – povinný u dodatečného či následného podání DPH a KH |
Odpověď
201 application/json Uložené podání bez XML (tvar jako v GET /filings).
| Pole | Význam |
|---|---|
id | ID podání |
status | draft |
data | Sestavený výkaz (přiznání, kontrolní nebo souhrnné hlášení) |
proof_state | draft |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | kind není dph, kh ani sh („Tento typ podání zatím nelze připravit“) |
| 422 | – | XML nelze sestavit – identifikovaná osoba u KH, právnická osoba se čtvrtletním KH, SH s filing_type E, chybí den zjištění důvodů, neplatné údaje firmy nebo dokladu |
| 500 | – | Neplatný formát period |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří podání (Filing) ve stavu draft s daty výkazu a XML a zapíše událost filing.created. Nic nikam neposílá, nic neúčtuje.
- Opakování
- Každé volání vytvoří nové podání, i za stejné období a druh.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"dph","period":"2026-08","filing_type":"B"}' \
https://techtools.cz/ucetnictvi-api/entities/1/filingsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"kind": "dph",
"period": "2026-08",
"filing_type": "B"
})
});
const data = await response.json();{
"id": 3,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"form": "25 5401 MFin 5401 vzor č. 26",
"rows": {
"1": {
"base": 211500.0,
"tax": 44415.0
},
"2": {
"base": 0.0,
"tax": 0.0
},
"3": {
"base": 0.0,
"tax": 0.0
},
"4": {
"base": 0.0,
"tax": 0.0
},
"5": {
"base": 28003.0,
"tax": 5881.0
},
"6": {
"base": 0.0,
"tax": 0.0
},
"7": {
"base": 0.0,
"tax": 0.0
},
"8": {
"base": 0.0,
"tax": 0.0
},
"9": {
"base": 0.0,
"tax": 0.0
},
"10": {
"base": 0.0,
"tax": 0.0
},
"11": {
"base": 0.0,
"tax": 0.0
},
"12": {
"base": 0.0,
"tax": 0.0
},
"13": {
"base": 0.0,
"tax": 0.0
},
"14": {
"base": 0.0,
"tax": 0.0
},
"20": 0.0,
"21": 0.0,
"22": 0.0,
"23": 0.0,
"24": 0.0,
"25": 0.0,
"26": 0.0,
"30": 0.0,
"31": 0.0,
"32": 0.0,
"33": 0.0,
"34": 0.0,
"40": {
"base": 20700.0,
"full": 4347.0,
"reduced": 0.0
},
"41": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"42": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"43": {
"base": 28003.0,
"full": 5881.0,
"reduced": 0.0
},
"44": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"45": {
"full": 0.0,
"reduced": 0.0
},
"46": {
"full": 10228.0,
"reduced": 0.0
},
"47": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"48": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"50": 0.0,
"51": {
"with_credit": 0.0,
"without_credit": 0.0
},
"52": {
"coefficient": null,
"deduction": 0.0
},
"53": {
"coefficient": null,
"change": 0.0
},
"60": 0.0,
"61": 0.0,
"62": 50296.0,
"63": 10228.0,
"64": 40068.0,
"65": 0.0,
"66": 0.0
},
"own_tax": 40068.0,
"excess_deduction": 0.0,
"documents": {
"1": [
19,
20
],
"5": [
65
],
"40": [
62,
63
],
"43": [
65
]
},
"warnings": []
},
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"filed_on": null,
"filing_type": "B",
"first_filed_at": null,
"kind": "dph",
"period": "2026-08",
"status": "draft",
"submission_version": 0,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přiznání k DPH",
"has_xml": true,
"proof_state": "draft",
"evidence_count": 0
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Detail podání nebo jeho uložené XML
/entities/{entity_id}/filings/{id}
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
- V příručce
- Daně a pojistné › Záložka Podání
Vrátí podání včetně uloženého XML v poli xml. S format=xml (nebo koncovkou .xml v cestě) vrátí přímo uložený soubor XML – přesně ten, který byl sestaven při přípravě podání.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
id | cesta | celé číslo | ano | ID podání Příklad 55. |
format | dotaz | text | ne | xml = vrátit soubor XML místo JSON Hodnoty: xml. Příklad xml. |
Odpověď
200 application/json Podání (pole jako v GET /filings) a navíc xml. S format=xml soubor application/xml s názvem {kind}-{period}.xml (Content-Disposition attachment).
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/filings/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"form": "25 5401 MFin 5401 vzor č. 26",
"rows": {
"1": {
"base": 211500.0,
"tax": 44415.0
},
"2": {
"base": 0.0,
"tax": 0.0
},
"3": {
"base": 0.0,
"tax": 0.0
},
"4": {
"base": 0.0,
"tax": 0.0
},
"5": {
"base": 28003.0,
"tax": 5881.0
},
"6": {
"base": 0.0,
"tax": 0.0
},
"7": {
"base": 0.0,
"tax": 0.0
},
"8": {
"base": 0.0,
"tax": 0.0
},
"9": {
"base": 0.0,
"tax": 0.0
},
"10": {
"base": 0.0,
"tax": 0.0
},
"11": {
"base": 0.0,
"tax": 0.0
},
"12": {
"base": 0.0,
"tax": 0.0
},
"13": {
"base": 0.0,
"tax": 0.0
},
"14": {
"base": 0.0,
"tax": 0.0
},
"20": 0.0,
"21": 0.0,
"22": 0.0,
"23": 0.0,
"24": 0.0,
"25": 0.0,
"26": 0.0,
"30": 0.0,
"31": 0.0,
"32": 0.0,
"33": 0.0,
"34": 0.0,
"40": {
"base": 20700.0,
"full": 4347.0,
"reduced": 0.0
},
"41": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"42": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"43": {
"base": 28003.0,
"full": 5881.0,
"reduced": 0.0
},
"44": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"45": {
"full": 0.0,
"reduced": 0.0
},
"46": {
"full": 10228.0,
"reduced": 0.0
},
"47": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"48": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"50": 0.0,
"51": {
"with_credit": 0.0,
"without_credit": 0.0
},
"52": {
"coefficient": null,
"deduction": 0.0
},
"53": {
"coefficient": null,
"change": 0.0
},
"60": 0.0,
"61": 0.0,
"62": 50296.0,
"63": 10228.0,
"64": 40068.0,
"65": 0.0,
"66": 0.0
},
"own_tax": 40068.0,
"excess_deduction": 0.0,
"documents": {
"1": [
19,
20
],
"5": [
65
],
"40": [
62,
63
],
"43": [
65
]
},
"warnings": []
},
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"filed_on": "2026-09-24",
"filing_type": "B",
"first_filed_at": "2026-09-28T10:00:00.000Z",
"kind": "dph",
"period": "2026-08",
"status": "filed",
"submission_version": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Pisemnost nazevSW=\"Saldo\" verzeSW=\"1.0\">\n <DPHDP3 verzePis=\"03.01\">\n <VetaD dokument=\"DP3\" k_uladis=\"DPH\" typ_platce=\"P\" dapdph_forma=\"B\" rok=\"2026\" mesic=\"8\" d_poddp=\"28.09.2026\" c_okec=\"621000\" trans=\"A\"/>\n <VetaP c_ufo=\"451\" c_pracufo=\"2001\" dic=\"99999994\" typ_ds=\"P\" zkrobchjm=\"Ukázková firma s.r.o.\" ulice=\"Na Příkopě\" c_pop=\"859\" c_orient=\"22\" naz_obce=\"Praha\" psc=\"11000\" stat=\"ČESKÁ REPUBLIKA\" email=\"demo@example.cz\" c_telef=\"+420777000000\" opr_jmeno=\"Jana\" opr_prijmeni=\"Ukázková\" opr_postaveni=\"jednatelka\" sest_jmeno=\"Jana\" sest_prijmeni=\"Uk…",
"kind_label": "Přiznání k DPH",
"has_xml": true,
"proof_state": "awaiting_proof",
"evidence_count": 1
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
PATCH Označení podání jako odeslaného nebo vrácení mezi připravená
/entities/{entity_id}/filings/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Změní stav podání evidovaný v Saldu. status filed znamená, že uživatel prohlašuje, že podání odeslal (Saldo to neověřuje a samo nic neposílá); doložení doručení je samostatný krok přes …/evidences a …/verify. Při přechodu z draft na filed se zvýší submission_version, takže dřívější ověřené doručenky přestanou platit a proof_state je znovu awaiting_proof. status draft vrátí podání mezi připravená, smaže filed_on a zruší schválenou výjimku bez doručenky; přiložené soubory zůstanou.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
id | cesta | celé číslo | ano | ID podání Příklad 55. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
status | text | ano | Nový stav Hodnoty: draft, filed. |
filed_on | datum | ne | Datum odeslání (jen se status filed); bez něj zůstane dosavadní datum u už odeslaného podání, jinak dnešní datum |
Odpověď
200 application/json Podání po změně (tvar jako v GET /filings).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | status není draft ani filed („Neplatný stav podání“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží status a filed_on, při prvním odeslání first_filed_at, při přechodu na filed zvýší submission_version; při návratu na draft vymaže schválenou výjimku. Zapíše událost filing.updated s předchozím datem odeslání a případně zrušenou výjimkou. Nic nikam neposílá.
- Opakování
- Opakované filed u už odeslaného podání verzi nezvyšuje (jen případně změní filed_on); každý přechod draft → filed ji zvýší. Každé volání zapíše událost.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"filed","filed_on":"2026-09-24"}' \
https://techtools.cz/ucetnictvi-api/entities/1/filings/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"status": "filed",
"filed_on": "2026-09-24"
})
});
const data = await response.json();{
"status": "filed",
"filed_on": "2026-09-24",
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"form": "25 5401 MFin 5401 vzor č. 26",
"rows": {
"1": {
"base": 211500.0,
"tax": 44415.0
},
"2": {
"base": 0.0,
"tax": 0.0
},
"3": {
"base": 0.0,
"tax": 0.0
},
"4": {
"base": 0.0,
"tax": 0.0
},
"5": {
"base": 28003.0,
"tax": 5881.0
},
"6": {
"base": 0.0,
"tax": 0.0
},
"7": {
"base": 0.0,
"tax": 0.0
},
"8": {
"base": 0.0,
"tax": 0.0
},
"9": {
"base": 0.0,
"tax": 0.0
},
"10": {
"base": 0.0,
"tax": 0.0
},
"11": {
"base": 0.0,
"tax": 0.0
},
"12": {
"base": 0.0,
"tax": 0.0
},
"13": {
"base": 0.0,
"tax": 0.0
},
"14": {
"base": 0.0,
"tax": 0.0
},
"20": 0.0,
"21": 0.0,
"22": 0.0,
"23": 0.0,
"24": 0.0,
"25": 0.0,
"26": 0.0,
"30": 0.0,
"31": 0.0,
"32": 0.0,
"33": 0.0,
"34": 0.0,
"40": {
"base": 20700.0,
"full": 4347.0,
"reduced": 0.0
},
"41": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"42": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"43": {
"base": 28003.0,
"full": 5881.0,
"reduced": 0.0
},
"44": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"45": {
"full": 0.0,
"reduced": 0.0
},
"46": {
"full": 10228.0,
"reduced": 0.0
},
"47": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"48": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"50": 0.0,
"51": {
"with_credit": 0.0,
"without_credit": 0.0
},
"52": {
"coefficient": null,
"deduction": 0.0
},
"53": {
"coefficient": null,
"change": 0.0
},
"60": 0.0,
"61": 0.0,
"62": 50296.0,
"63": 10228.0,
"64": 40068.0,
"65": 0.0,
"66": 0.0
},
"own_tax": 40068.0,
"excess_deduction": 0.0,
"documents": {
"1": [
19,
20
],
"5": [
65
],
"40": [
62,
63
],
"43": [
65
]
},
"warnings": []
},
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"filing_type": "B",
"first_filed_at": "2026-09-28T10:00:00.000Z",
"kind": "dph",
"period": "2026-08",
"submission_version": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přiznání k DPH",
"has_xml": true,
"proof_state": "awaiting_proof",
"evidence_count": 1
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
DELETE Smazání připraveného podání
/entities/{entity_id}/filings/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Smaže podání, které nikdy nebylo označeno jako odeslané a nemá žádný důkazní soubor. Podání, které už někdy bylo ve stavu filed (i když je teď draft), zůstává kvůli historii.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
id | cesta | celé číslo | ano | ID podání Příklad 56. |
Odpověď
204 Bez obsahu.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Podání je nebo někdy bylo označeno jako odeslané („… nelze smazat; zachovejte jeho historii“) |
| 422 | – | K podání jsou přiložené důkazní soubory („Podání s důkazními soubory nelze smazat“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Zapíše událost filing.deleted a podání smaže včetně XML.
Příklad
Potřebuje podání ve stavu draft, které nikdy nebylo odeslané a nemá důkazy.
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/filings/2JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/2', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();soubor, 0 bajtů
POST Schválení odeslaného podání bez doručenky
/entities/{entity_id}/filings/{id}/exception
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Výslovně schválí, že odeslané podání se pro uzávěrku považuje za doložené, i když k němu není ověřená doručenka; proof_state pak je exception (ověřená doručenka má přednost a proof_state zůstává verified). Vyžaduje stav filed, potvrzení confirmed_without_receipt a důvod. Nové schválení nahradí předchozí.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
id | cesta | celé číslo | ano | ID podání Příklad 55. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
confirmed_without_receipt | ano/ne | ano | Musí být true |
reason | text | ano | Důvod schválení, alespoň 10 znaků |
Odpověď
200 application/json Podání po schválení (proof_state exception, pokud nemá ověřenou doručenku).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Podání není ve stavu filed („Nejprve označte podání jako odeslané“) |
| 422 | – | confirmed_without_receipt není true („Potvrďte schválení bez doručenky“) |
| 422 | – | Důvod je kratší než 10 znaků |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží exception_approved_at, exception_approved_by_id a exception_reason a zapíše událost filing.exception_approved s důvodem a případně nahrazenou výjimkou.
- Opakování
- Každé volání přepíše schválení novým (čas, osoba, důvod) a zapíše novou událost.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"confirmed_without_receipt":true,"reason":"Podání je v portálu potvrzené, doručenka zatím nedorazila."}' \
https://techtools.cz/ucetnictvi-api/entities/1/filings/1/exceptionJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/exception', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"confirmed_without_receipt": true,
"reason": "Podání je v portálu potvrzené, doručenka zatím nedorazila."
})
});
const data = await response.json();{
"exception_approved_at": "2026-09-28T10:00:00.000Z",
"exception_approved_by_id": 1,
"exception_reason": "Podání je v portálu potvrzené, doručenka zatím nedorazila.",
"status": "filed",
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"form": "25 5401 MFin 5401 vzor č. 26",
"rows": {
"1": {
"base": 211500.0,
"tax": 44415.0
},
"2": {
"base": 0.0,
"tax": 0.0
},
"3": {
"base": 0.0,
"tax": 0.0
},
"4": {
"base": 0.0,
"tax": 0.0
},
"5": {
"base": 28003.0,
"tax": 5881.0
},
"6": {
"base": 0.0,
"tax": 0.0
},
"7": {
"base": 0.0,
"tax": 0.0
},
"8": {
"base": 0.0,
"tax": 0.0
},
"9": {
"base": 0.0,
"tax": 0.0
},
"10": {
"base": 0.0,
"tax": 0.0
},
"11": {
"base": 0.0,
"tax": 0.0
},
"12": {
"base": 0.0,
"tax": 0.0
},
"13": {
"base": 0.0,
"tax": 0.0
},
"14": {
"base": 0.0,
"tax": 0.0
},
"20": 0.0,
"21": 0.0,
"22": 0.0,
"23": 0.0,
"24": 0.0,
"25": 0.0,
"26": 0.0,
"30": 0.0,
"31": 0.0,
"32": 0.0,
"33": 0.0,
"34": 0.0,
"40": {
"base": 20700.0,
"full": 4347.0,
"reduced": 0.0
},
"41": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"42": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"43": {
"base": 28003.0,
"full": 5881.0,
"reduced": 0.0
},
"44": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"45": {
"full": 0.0,
"reduced": 0.0
},
"46": {
"full": 10228.0,
"reduced": 0.0
},
"47": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"48": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"50": 0.0,
"51": {
"with_credit": 0.0,
"without_credit": 0.0
},
"52": {
"coefficient": null,
"deduction": 0.0
},
"53": {
"coefficient": null,
"change": 0.0
},
"60": 0.0,
"61": 0.0,
"62": 50296.0,
"63": 10228.0,
"64": 40068.0,
"65": 0.0,
"66": 0.0
},
"own_tax": 40068.0,
"excess_deduction": 0.0,
"documents": {
"1": [
19,
20
],
"5": [
65
],
"40": [
62,
63
],
"43": [
65
]
},
"warnings": []
},
"filed_on": "2026-09-24",
"filing_type": "B",
"first_filed_at": "2026-09-28T10:00:00.000Z",
"kind": "dph",
"period": "2026-08",
"submission_version": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přiznání k DPH",
"has_xml": true,
"proof_state": "exception",
"evidence_count": 1
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
DELETE Zrušení schválení podání bez doručenky
/entities/{entity_id}/filings/{id}/exception
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Zruší schválenou výjimku; podání bez ověřené doručenky se vrátí do stavu awaiting_proof.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
id | cesta | celé číslo | ano | ID podání Příklad 55. |
Odpověď
200 application/json Podání po zrušení výjimky.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Výjimka není schválená („Výjimka není schválená“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vymaže údaje výjimky a zapíše událost filing.exception_revoked s jejím původním obsahem.
- Opakování
- Druhé volání vrátí 422, protože výjimka už schválená není.
Příklad
Předpokládá výjimku schválenou přes POST …/exception, jinak vrátí 422.
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/filings/1/exceptionJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/exception', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();{
"exception_approved_at": null,
"exception_approved_by_id": null,
"exception_reason": null,
"status": "filed",
"id": 1,
"created_at": "2026-09-28T10:00:00.000Z",
"created_by_id": 1,
"data": {
"period": {
"year": 2026,
"month": 8,
"quarter": null,
"from": "2026-08-01",
"to": "2026-08-31",
"label": "srpen 2026",
"deadline": "2026-09-25",
"key": "2026-08"
},
"form": "25 5401 MFin 5401 vzor č. 26",
"rows": {
"1": {
"base": 211500.0,
"tax": 44415.0
},
"2": {
"base": 0.0,
"tax": 0.0
},
"3": {
"base": 0.0,
"tax": 0.0
},
"4": {
"base": 0.0,
"tax": 0.0
},
"5": {
"base": 28003.0,
"tax": 5881.0
},
"6": {
"base": 0.0,
"tax": 0.0
},
"7": {
"base": 0.0,
"tax": 0.0
},
"8": {
"base": 0.0,
"tax": 0.0
},
"9": {
"base": 0.0,
"tax": 0.0
},
"10": {
"base": 0.0,
"tax": 0.0
},
"11": {
"base": 0.0,
"tax": 0.0
},
"12": {
"base": 0.0,
"tax": 0.0
},
"13": {
"base": 0.0,
"tax": 0.0
},
"14": {
"base": 0.0,
"tax": 0.0
},
"20": 0.0,
"21": 0.0,
"22": 0.0,
"23": 0.0,
"24": 0.0,
"25": 0.0,
"26": 0.0,
"30": 0.0,
"31": 0.0,
"32": 0.0,
"33": 0.0,
"34": 0.0,
"40": {
"base": 20700.0,
"full": 4347.0,
"reduced": 0.0
},
"41": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"42": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"43": {
"base": 28003.0,
"full": 5881.0,
"reduced": 0.0
},
"44": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"45": {
"full": 0.0,
"reduced": 0.0
},
"46": {
"full": 10228.0,
"reduced": 0.0
},
"47": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"48": {
"base": 0.0,
"full": 0.0,
"reduced": 0.0
},
"50": 0.0,
"51": {
"with_credit": 0.0,
"without_credit": 0.0
},
"52": {
"coefficient": null,
"deduction": 0.0
},
"53": {
"coefficient": null,
"change": 0.0
},
"60": 0.0,
"61": 0.0,
"62": 50296.0,
"63": 10228.0,
"64": 40068.0,
"65": 0.0,
"66": 0.0
},
"own_tax": 40068.0,
"excess_deduction": 0.0,
"documents": {
"1": [
19,
20
],
"5": [
65
],
"40": [
62,
63
],
"43": [
65
]
},
"warnings": []
},
"filed_on": "2026-09-24",
"filing_type": "B",
"first_filed_at": "2026-09-28T10:00:00.000Z",
"kind": "dph",
"period": "2026-08",
"submission_version": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"kind_label": "Přiznání k DPH",
"has_xml": true,
"proof_state": "awaiting_proof",
"evidence_count": 1
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Důkazní soubory podání (doručenky a potvrzení)
/entities/{entity_id}/filings/{filing_id}/evidences
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí všechny soubory přiložené k podání jako doklad o doručení, včetně vyřazených, v pořadí nahrání. U každého je stav ověření; verified je true jen u nevyřazeného ověřeného souboru s uloženým originálem, jehož ověření patří k aktuálnímu XML a aktuální verzi odeslání podání.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filing_id | cesta | celé číslo | ano | ID podání Příklad 55. |
Odpověď
200 application/json Objekt s polem evidences.
| Pole | Význam |
|---|---|
evidences[].id | ID důkazního souboru |
evidences[].kind | delivery_receipt (doručenka), acceptance (potvrzení přijetí), other (jiný podklad); kind_label česky |
evidences[].filename | Původní název souboru; content_type, byte_size, sha256 |
evidences[].delivered_on | Datum doručení zadané při ověření |
evidences[].delivery_reference | Identifikátor podání nebo zprávy zadaný při ověření |
evidences[].verified_at | Kdy a kdo (verified_by_id) ověřil; filing_xml_sha256 a submission_version, ke kterým ověření patří; verification_note |
evidences[].voided_at | Vyřazení: kdy, kdo (voided_by_id), důvod (void_reason) |
evidences[].verified | Ověření platí pro aktuální XML a verzi odeslání a soubor není vyřazený |
evidences[].has_file | Zda je originál uložený |
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/filings/1/evidencesJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"evidences": [
{
"id": 1,
"byte_size": 142,
"content_type": "application/pdf",
"created_at": "2026-09-28T10:00:00.000Z",
"delivered_on": null,
"delivery_reference": null,
"filename": "potvrzeni-podani.pdf",
"filing_id": 1,
"filing_xml_sha256": null,
"kind": "delivery_receipt",
"sha256": "93e31154c364805a3ef8c904bc257f5ef77600c31b67d392704cd6e1e9cd0657",
"submission_version": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"uploaded_by_id": 1,
"verification_note": null,
"verified_at": null,
"verified_by_id": null,
"void_reason": null,
"voided_at": null,
"voided_by_id": null,
"kind_label": "Doručenka",
"has_file": true,
"verified": false
}
]
}
POST Přiložení doručenky nebo potvrzení k podání
/entities/{entity_id}/filings/{filing_id}/evidences
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Uloží originální soubor dokladující doručení odeslaného podání (PDF, XML nebo ZFO z datové schránky). Typ se určí podle přípony a obsah se zkontroluje (PDF musí mít strukturu PDF, XML být platné XML, ZFO podepsaná obálka CMS – pečeť ani vztah k podání se nekontrolují). Přiložení samo doručení nedokládá: proof_state zůstane awaiting_proof, dokud vlastník nebo účetní soubor neověří přes …/verify.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filing_id | cesta | celé číslo | ano | ID podání Příklad 55. |
Tělo požadavku
Formát multipart/form-data.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
file | soubor | ano | Soubor .pdf, .xml nebo .zfo, 1 B až 15 MB |
kind | text | ne | Druh podkladu; neznámá hodnota se bere jako delivery_receipt Hodnoty: delivery_receipt, acceptance, other. Výchozí delivery_receipt. |
Odpověď
201 application/json Nový důkazní soubor (tvar jako v GET …/evidences). Stejný soubor znovu vrátí 200 s existujícím záznamem.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Podání není ve stavu filed („Nejprve označte podání jako odeslané“) |
| 400 | – | Chybí soubor v poli file („Vyberte doručenku nebo potvrzení“) |
| 413 | – | Soubor je prázdný nebo větší než 15 MB |
| 422 | – | Přípona není .pdf, .xml ani .zfo nebo obsah neodpovídá formátu |
| 422 | – | K podání je už 10 nevyřazených důkazních souborů |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží originál a záznam s jeho SHA-256, typem a nahrávající osobou a zapíše událost filing.evidence_attached. Stav podání ani proof_state nemění.
- Limity
- Soubor nejvýše 15 MB; nejvýše 10 nevyřazených souborů na podání (vyřazené se nepočítají).
- Opakování
- Soubor se stejným obsahem (SHA-256) u téhož podání se znovu neuloží – vrátí 200 s existujícím záznamem, i když je vyřazený, a nezapíše událost.
Příklad
Ukázka nejdřív označí připravené kontrolní hlášení jako odeslané a přiloží k němu soubor, který u něj ještě není.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-F "kind=delivery_receipt" \
-F "file=@potvrzeni-podani.pdf" \
https://techtools.cz/ucetnictvi-api/entities/1/filings/2/evidencesJavaScript
const form = new FormData();
form.append('file', fileInput.files[0], 'potvrzeni-podani.pdf');
form.append('kind', 'delivery_receipt');
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/2/evidences', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST',
body: form
});
const data = await response.json();{
"id": 2,
"byte_size": 142,
"content_type": "application/pdf",
"created_at": "2026-09-28T10:00:00.000Z",
"delivered_on": null,
"delivery_reference": null,
"filename": "potvrzeni-podani.pdf",
"filing_id": 2,
"filing_xml_sha256": null,
"kind": "delivery_receipt",
"sha256": "93e31154c364805a3ef8c904bc257f5ef77600c31b67d392704cd6e1e9cd0657",
"submission_version": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"uploaded_by_id": 1,
"verification_note": null,
"verified_at": null,
"verified_by_id": null,
"void_reason": null,
"voided_at": null,
"voided_by_id": null,
"kind_label": "Doručenka",
"has_file": true,
"verified": false
}
GET Detail důkazního souboru podání
/entities/{entity_id}/filings/{filing_id}/evidences/{id}
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí jeden důkazní soubor podání s jeho stavem ověření a vyřazení (bez obsahu souboru).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filing_id | cesta | celé číslo | ano | ID podání Příklad 55. |
id | cesta | celé číslo | ano | ID důkazního souboru Příklad 7. |
Odpověď
200 application/json Důkazní soubor (pole jako v GET …/evidences).
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/filings/1/evidences/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"id": 1,
"byte_size": 142,
"content_type": "application/pdf",
"created_at": "2026-09-28T10:00:00.000Z",
"delivered_on": null,
"delivery_reference": null,
"filename": "potvrzeni-podani.pdf",
"filing_id": 1,
"filing_xml_sha256": null,
"kind": "delivery_receipt",
"sha256": "93e31154c364805a3ef8c904bc257f5ef77600c31b67d392704cd6e1e9cd0657",
"submission_version": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"uploaded_by_id": 1,
"verification_note": null,
"verified_at": null,
"verified_by_id": null,
"void_reason": null,
"voided_at": null,
"voided_by_id": null,
"kind_label": "Doručenka",
"has_file": true,
"verified": false
}
GET Stažení originálu doručenky
/entities/{entity_id}/filings/{filing_id}/evidences/{id}/file
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí uložený originál přesně tak, jak byl nahrán, i u vyřazeného souboru. Vždy jako příloha typu application/octet-stream s hlavičkami Cache-Control private, no-store a X-Content-Type-Options nosniff.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filing_id | cesta | celé číslo | ano | ID podání Příklad 55. |
id | cesta | celé číslo | ano | ID důkazního souboru Příklad 7. |
Odpověď
200 application/octet-stream Obsah souboru s původním názvem (Content-Disposition attachment).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 404 | – | K záznamu není uložený soubor |
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/filings/1/evidences/1/fileJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1/file', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();application/octet-stream, 142 bajtů (soubor potvrzeni-podani.pdf)
POST Ověření doručenky k odeslanému podání
/entities/{entity_id}/filings/{filing_id}/evidences/{id}/verify
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY - V příručce
- Daně a pojistné › Ověřit doručení
Vlastník nebo účetní potvrdí, že soubor dokládá doručení právě tohoto podání (subjekt, druh a období souhlasí), a zadá datum doručení a identifikátor podání nebo zprávy. Ověření se váže k aktuálnímu XML podání (SHA-256) a verzi odeslání; po novém označení podání jako odeslaného přestane platit. Podklad druhu other ověřit nelze – pro něj slouží schválení výjimky. Opakované ověření již ověřeného souboru vyžaduje důvod opravy.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filing_id | cesta | celé číslo | ano | ID podání Příklad 55. |
id | cesta | celé číslo | ano | ID důkazního souboru Příklad 7. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
confirmed_match | ano/ne | ano | Musí být true – potvrzení shody subjektu, druhu a období s podáním |
delivery_reference | text | ano | Identifikátor podání nebo zprávy (např. ID datové zprávy) |
delivered_on | datum | ano | Datum doručení; neplatné datum vrátí 422 |
verification_note | text | ne | Poznámka k ověření |
correction_reason | text | ne | Důvod opravy, alespoň 10 znaků – povinný, pokud už soubor ověřený byl |
Odpověď
200 application/json Důkazní soubor po ověření (verified true); proof_state podání je verified.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Soubor je vyřazený („Vyřazený podklad nelze potvrdit“) |
| 422 | – | Soubor je druhu other („Jiný podklad není doručenkou; použijte výslovné schválení účetní“) |
| 422 | – | Chybí původní soubor |
| 422 | – | Podání není ve stavu filed („Podání musí být označené jako odeslané“) |
| 422 | – | confirmed_match není true, chybí delivery_reference nebo delivered_on |
| 422 | – | Opakované ověření bez důvodu opravy alespoň 10 znaky |
| 422 | – | Neplatné datum delivered_on (error „invalid date“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží datum doručení, identifikátor, poznámku, ověřující osobu a čas a SHA-256 XML a verzi odeslání podání. Zapíše událost filing.evidence_verified s novým i předchozím ověřením. Podání ani soubor nikam neposílá.
- Opakování
- Opakované ověření přepíše údaje, ale jen s důvodem opravy; každé zapíše novou událost.
Příklad
Předpokládá dosud neověřený soubor; u ověřeného je nutný i correction_reason.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"confirmed_match":true,"delivery_reference":"DS-4816235","delivered_on":"2026-09-24","verification_note":"Doručenka z datové schránky"}' \
https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1/verifyJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1/verify', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"confirmed_match": true,
"delivery_reference": "DS-4816235",
"delivered_on": "2026-09-24",
"verification_note": "Doručenka z datové schránky"
})
});
const data = await response.json();{
"filing_id": 1,
"delivery_reference": "DS-4816235",
"delivered_on": "2026-09-24",
"verified_by_id": 1,
"verified_at": "2026-09-28T10:00:00.000Z",
"filing_xml_sha256": "2841cae7085c494ec117a79d5a1d49e67a625a99b136188ebc9f000e85bca3b9",
"submission_version": 1,
"verification_note": "Doručenka z datové schránky",
"byte_size": 142,
"sha256": "93e31154c364805a3ef8c904bc257f5ef77600c31b67d392704cd6e1e9cd0657",
"id": 1,
"content_type": "application/pdf",
"created_at": "2026-09-28T10:00:00.000Z",
"filename": "potvrzeni-podani.pdf",
"kind": "delivery_receipt",
"updated_at": "2026-09-28T10:00:00.000Z",
"uploaded_by_id": 1,
"void_reason": null,
"voided_at": null,
"voided_by_id": null,
"kind_label": "Doručenka",
"has_file": true,
"verified": true
}
POST Vyřazení chybného důkazního souboru
/entities/{entity_id}/filings/{filing_id}/evidences/{id}/void
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Označí soubor jako vyřazený (např. doručenka patří k jinému podání). Originál ani údaje o dřívějším ověření se nemažou, ověření ale přestane platit a proof_state podání se přepočítá. Vyřazený soubor se nepočítá do limitu 10 souborů.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filing_id | cesta | celé číslo | ano | ID podání Příklad 55. |
id | cesta | celé číslo | ano | ID důkazního souboru Příklad 7. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
reason | text | ano | Důvod vyřazení, alespoň 10 znaků |
Odpověď
200 application/json Důkazní soubor po vyřazení.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Soubor je už vyřazený („Podklad je již vyřazený“) |
| 422 | – | Důvod je kratší než 10 znaků |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží voided_at, voided_by_id a void_reason a zapíše událost filing.evidence_voided s předchozím ověřením.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"Doručenka patří k jinému podání"}' \
https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1/voidJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1/void', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"reason": "Doručenka patří k jinému podání"
})
});
const data = await response.json();{
"filing_id": 1,
"voided_at": "2026-09-28T10:00:00.000Z",
"voided_by_id": 1,
"void_reason": "Doručenka patří k jinému podání",
"byte_size": 142,
"sha256": "93e31154c364805a3ef8c904bc257f5ef77600c31b67d392704cd6e1e9cd0657",
"id": 1,
"content_type": "application/pdf",
"created_at": "2026-09-28T10:00:00.000Z",
"delivered_on": null,
"delivery_reference": null,
"filename": "potvrzeni-podani.pdf",
"filing_xml_sha256": null,
"kind": "delivery_receipt",
"submission_version": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"uploaded_by_id": 1,
"verification_note": null,
"verified_at": null,
"verified_by_id": null,
"kind_label": "Doručenka",
"has_file": true,
"verified": false
}
POST Oprava druhu nebo obnovení vyřazeného důkazního souboru
/entities/{entity_id}/filings/{filing_id}/evidences/{id}/correct
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Opraví druh podkladu nebo obnoví omylem vyřazený soubor, aniž by se mazal originál či dřívější události. Oprava vždy zruší vyřazení i dosavadní ověření – soubor je potřeba znovu ověřit přes …/verify.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filing_id | cesta | celé číslo | ano | ID podání Příklad 55. |
id | cesta | celé číslo | ano | ID důkazního souboru Příklad 7. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
kind | text | ano | Správný druh podkladu; u nevyřazeného souboru musí být jiný než dosavadní Hodnoty: delivery_receipt, acceptance, other. |
reason | text | ano | Důvod opravy, alespoň 10 znaků |
Odpověď
200 application/json Důkazní soubor po opravě (nevyřazený, neověřený).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Důvod je kratší než 10 znaků |
| 422 | – | Neplatný druh („Neplatný typ podkladu“) |
| 422 | – | Stejný druh u nevyřazeného souboru („Zvolte jiný typ nebo obnovte vyřazený podklad“) |
| 422 | – | Obnovení vyřazeného souboru by překročilo 10 nevyřazených souborů |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Změní kind, vymaže údaje o vyřazení i ověření a zapíše událost filing.evidence_corrected s předchozím stavem a důvodem.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"acceptance","reason":"Soubor je potvrzení přijetí, ne doručenka"}' \
https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1/correctJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/filings/1/evidences/1/correct', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"kind": "acceptance",
"reason": "Soubor je potvrzení přijetí, ne doručenka"
})
});
const data = await response.json();{
"filing_id": 1,
"kind": "acceptance",
"voided_at": null,
"voided_by_id": null,
"void_reason": null,
"verified_at": null,
"verified_by_id": null,
"delivered_on": null,
"delivery_reference": null,
"filing_xml_sha256": null,
"submission_version": null,
"verification_note": null,
"byte_size": 142,
"sha256": "93e31154c364805a3ef8c904bc257f5ef77600c31b67d392704cd6e1e9cd0657",
"id": 1,
"content_type": "application/pdf",
"created_at": "2026-09-28T10:00:00.000Z",
"filename": "potvrzeni-podani.pdf",
"updated_at": "2026-09-28T10:00:00.000Z",
"uploaded_by_id": 1,
"kind_label": "Potvrzení přijetí",
"has_file": true,
"verified": false
}
GET Daňový kalendář firmy (JSON nebo iCalendar)
/entities/{entity_id}/calendar
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí daňové a pojistné lhůty firmy za rok: DPH a hlášení, daň z příjmů a zálohy, pojistné OSVČ, paušální daň, mzdové odvody a hlášení, daň z nemovitých věcí, silniční daň a účetní závěrku – podle profilu odvozeného z nastavení a dat firmy. Termíny připadající na víkend nebo svátek jsou posunuté na nejbližší následující pracovní den. S format=ics (nebo koncovkou .ics) vrátí soubor iCalendar s celodenními událostmi a připomenutím 3 dny předem. Soubor se stahuje s přihlášením (relace nebo API klíč v hlavičce); veřejný odkaz pro odběr v kalendáři neexistuje.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
year | dotaz | celé číslo | ne | Kalendářní rok; výchozí (i při nečíselné hodnotě) aktuální rok Rozsah od 2000 do 2100. Příklad 2026. |
format | dotaz | text | ne | ics = soubor iCalendar místo JSON Hodnoty: ics. Příklad ics. |
Odpověď
200 application/json JSON s rokem, profilem a událostmi. S format=ics soubor text/calendar; charset=utf-8 s názvem danovy-kalendar-{rok}.ics.
| Pole | Význam |
|---|---|
year | Rok |
profile | Z čeho kalendář vychází: legal_form, vat, recap_statement, recap_goods, fiscal_year_start, employees, advisor, databox, electronic, flat_tax, audit, real_estate, road_tax |
events | Lhůty seřazené podle data: date, statutory_date, shifted, key, title, detail, description, category (income_tax, vat, insurance, payroll, property, accounts, other), basis |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pro rok nejsou v Saldu zákonné sazby (Saldo je má pro roky 2024–2026) |
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/calendar?year=2026"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/calendar?year=2026', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"year": 2026,
"profile": {
"legal_form": "sro",
"vat": "monthly",
"recap_statement": true,
"recap_goods": false,
"fiscal_year_start": 1,
"employees": true,
"advisor": false,
"databox": false,
"electronic": true,
"flat_tax": false,
"audit": false,
"real_estate": false,
"road_tax": false
},
"events": [
{
"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."
},
{
"date": "2026-01-26",
"statutory_date": "2026-01-25",
"shifted": true,
"key": "vat_control_statement_2025_12",
"title": "Kontrolní hlášení DPH",
"detail": "za prosinec 2025",
"description": "Podejte elektronicky kontrolní hlášení s přehledem vydaných a přijatých daňových dokladů. Právnická osoba ho podává vždy za měsíc, fyzická osoba ve lhůtě pro přiznání.",
"category": "vat",
"basis": "§ 101e zákona č. 235/2004 Sb."
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.