Reference API
Automatizace, fronta a podklady
Přepínače automatizací a jejich ruční spuštění, přehled všech firem pro účetní, fronta úkolů napříč firmami a žádosti o chybějící doklady nebo vysvětlení.
GET Nastavení automatizací a jejich výsledky za tento měsíc
/entities/{entity_id}/automation
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí přepínače automatizací firmy a co která automatizace udělala v aktuálním kalendářním měsíci, spolu s tím, co právě čeká: splatná opakování faktur, faktury k upomínce a nové kontakty ke kontrole. Nic nespouští.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
Odpověď
200 application/json Nastavení a stav automatizací.
| Pole | Význam |
|---|---|
month | První den aktuálního měsíce; počty month níže platí pro něj |
settings | Přepínače bank_rules, auto_match, fio_on_open, recurring, reminders, partner_checks (výchozí true) a reminder_days (výchozí 7) |
bank_rules | rules, active (aktivní pravidla), month (použití pravidel), last_at |
auto_match | month (plateb spárovaných při importu výpisů), open (nespárovaných bankovních pohybů) |
fio | connected (účty napojené na Fio API), month (pohybů staženo z Fio), accounts s časem a chybou poslední synchronizace |
recurring | active, due (splatná k dnešku), upcoming (nejbližších 6 opakování se šablonou a částkou), month (dokladů vytvořených z opakování) |
reminders | days, count a totals podle měn (vydané faktury k upomínce), month (upomínek zaznamenaných tento měsíc – Saldo je samo neposílá), rows (prvních 8 faktur) |
partner_checks | new (kontakty za 30 dní), unchecked, demo, month (provedených kontrol), flagged (až 8 nespolehlivých, insolventních nebo v ARES nenalezených kontaktů) |
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/automationJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/automation', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"month": "2026-09-01",
"settings": {
"bank_rules": true,
"auto_match": true,
"fio_on_open": true,
"recurring": true,
"reminders": true,
"reminder_days": 7,
"partner_checks": true
},
"bank_rules": {
"rules": 5,
"active": 5,
"month": 36,
"last_at": "2026-09-28T10:00:00.000Z"
},
"auto_match": {
"month": 0,
"open": 6
},
"fio": {
"connected": 0,
"month": 0,
"accounts": []
},
"recurring": {
"active": 1,
"due": 0,
"upcoming": [
{
"id": 1,
"next_on": "2026-10-03",
"frequency": "monthly",
"auto_issue": false,
"template_id": 22,
"number": "FV20260022",
"partner": "Kavárna U Zeleného stromu s.r.o.",
"total": 77440.0,
"currency": "CZK",
"due": false
}
],
"month": 0
},
"reminders": {
"days": 7,
"count": 0,
"totals": {},
"month": 0,
"rows": []
},
"partner_checks": {
"new": 17,
"unchecked": 22,
"demo": true,
"month": 0,
"flagged": []
}
}
PATCH Zapnutí a vypnutí automatizací
/entities/{entity_id}/automation
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Změní přepínače automatizací firmy; neuvedené a neznámé klíče se nemění. bank_rules a auto_match řídí, zda se při importu bankovního výpisu použijí pravidla pro banku a spárují platby s doklady (auto_match platí i pro import ISDOC). recurring, reminders a partner_checks řídí, co udělá POST …/automation/run. fio_on_open čte jen aplikace, která podle něj při otevření banky stáhne pohyby z Fio; server podle něj nic nespouští.
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 |
|---|---|---|---|
automation | objekt | ano | |
automation. | ano/ne | ne | Pravidla pro banku při importu výpisu |
automation. | ano/ne | ne | Párování plateb s doklady při importu výpisu a ISDOC |
automation. | ano/ne | ne | Stažení pohybů z Fio při otevření banky v aplikaci |
automation. | ano/ne | ne | Vytváření opakovaných faktur při běhu automatizací |
automation. | ano/ne | ne | Přehled faktur k upomínce při běhu automatizací |
automation. | celé číslo | ne | Kolik dní po splatnosti (a od poslední upomínky) je faktura k upomínce; 1–90 |
automation. | ano/ne | ne | Kontrola nových kontaktů v registrech při běhu automatizací |
Odpověď
200 application/json Nastavení po změně.
| Pole | Význam |
|---|---|
settings | Všech sedm přepínačů včetně nezměněných |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | reminder_days není celé číslo 1–90 („Upomínky lze chystat 1 až 90 dní po splatnosti …“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Pokud se něco změnilo, uloží nastavení firmy (settings.automation) a zapíše událost automation.updated se seznamem změn. Hodnoty přepínačů se převedou na true/false (jiná hodnota než pravdivá znamená false).
- Opakování
- Stejné hodnoty podruhé nic neuloží ani nezapíší.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"automation":{"reminder_days":14,"partner_checks":true}}' \
https://techtools.cz/ucetnictvi-api/entities/1/automationJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/automation', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"automation": {
"reminder_days": 14,
"partner_checks": true
}
})
});
const data = await response.json();{
"settings": {
"bank_rules": true,
"auto_match": true,
"fio_on_open": true,
"recurring": true,
"reminders": true,
"reminder_days": 14,
"partner_checks": true
}
}
POST Spuštění automatizací firmy
/entities/{entity_id}/automation/run
- Oprávnění
- Zvláštní pravidlo
- Pravidlo
- Volat smí každý člen firmy. Automatizace ale spustí jen vlastník, účetní nebo editor; divákovi vrátí 200 s ran false a důvodem a nic neudělá (ne 403).
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Spustí automatizace, které aplikace pouští při otevření firmy: opakované faktury (recurring), kontrolu nových kontaktů v registrech (partner_checks) a přepočet faktur k upomínce (reminders). Každá běží jen, je-li v nastavení zapnutá; s only jen ta jedna. Upomínky se jen spočítají, nic se neodesílá. Hodnoty only bank_rules, auto_match, fio_on_open a reminder_days nespustí nic; neznámá hodnota se ignoruje a běží vše zapnuté.
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 |
|---|---|---|---|
only | text | ne | Spustit jen tuto automatizaci; účinek mají recurring, reminders a partner_checks Hodnoty: bank_rules, auto_match, fio_on_open, recurring, reminders, reminder_days, partner_checks. |
force | ano/ne | ne | Zkontrolovat kontakty i během 10minutové pauzy po předchozí kontrole Výchozí false. |
Odpověď
200 application/json Výsledek každé spuštěné automatizace; klíč chybí u automatizace, která neběžela.
| Pole | Význam |
|---|---|
ran | true; false u člena jen pro čtení |
reason | Jen při ran false: proč se nic nespustilo |
recurring | count, documents (id, number, kind, status, partner_name, total_payable, currency) a failed (recurrence_id, template, error) |
partners | vat, isir, ares (počty ověřených kontaktů), errors a flagged (id, name); nebo skipped true (pauza) či skipped a demo true (ukázková firma) |
reminders | count – počet vydaných faktur k upomínce |
Chování
- Co změní
- recurring: pro každé aktivní opakování s termínem dnes nebo dříve vytvoří doklad podle šablony (datum vystavení = termín, splatnost podle kontaktu nebo firmy, u cizí měny kurz ČNB, je-li dostupný). S auto_issue ho vystaví (v podvojném účetnictví i zaúčtuje), nebo pošle ke schválení, pokud ho pokrývá pravidlo schvalování; jinak zůstane koncept. Termín opakování posune (po ends_on ho deaktivuje); při chybě se doklad nevytvoří, opakování se neposune a chyba je ve failed. partner_checks: u kontaktů založených za posledních 30 dní ověří všechna dosud neověřená česká DIČ v registru plátců DPH (uloží spolehlivost a plátcovství), až 5 IČO v ISIR (uloží insolvenci) a až 5 IČO v ARES (doplní chybějící DIČ, ulici, obec a PSČ, zapíše událost partner.ares_checked); když něco ověřila nebo narazila na chybu, zapíše souhrnnou událost automation.partner_checks. U ukázkové firmy se registry nevolají. reminders nic nezapisuje. Volá externí služby ARES, ISIR, registr plátců DPH a ČNB.
- Limity
- Nejvýše 24 dokladů na jedno opakování v jednom běhu (dohánění zmeškaných termínů); ISIR a ARES nejvýše 5 kontaktů na běh; bez force se kontrola kontaktů přeskočí, pokud byla v posledních 10 minutách zapsána událost automation.partner_checks.
- Opakování
- Tentýž termín opakování nevytvoří dva doklady: běh si každý termín atomicky zarezervuje posunem data dalšího opakování. Další volání vytvoří doklad jen za termín, který mezitím nastal, nebo za termíny nad limit 24 z předchozího běhu. Kontrola kontaktů se do 10 minut po zapsané kontrole přeskočí (skipped); s force proběhne znovu, ale jen pro dosud neověřené kontakty.
Příklad
Ukázková firma má další opakování až příští měsíc, proto count je 0.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"only":"recurring"}' \
https://techtools.cz/ucetnictvi-api/entities/1/automation/runJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/automation/run', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"only": "recurring"
})
});
const data = await response.json();{
"recurring": {
"count": 0,
"failed": [],
"documents": []
},
"ran": true
}
GET Přehled všech firem volajícího podle naléhavosti
/clients
- Oprávnění
- Přihlášený uživatel nebo jeho API klíč, bez vazby na jednu firmu
- Klíč jen pro čtení
- Stačí
Vrátí všechny firmy, kde je volající přijatým členem (archivované na konci), s tím, co vyžaduje pozornost: stav přiznání k DPH za poslední skončené období a další lhůtu, pohledávky po splatnosti, nespárované bankovní pohyby, koncepty, uzamčení období a poslední aktivitu. Seřazeno podle naléhavosti (urgency), při shodě podle názvu. Stav DPH počítá jen s podáními druhu dph; podání označené jako odeslané bez ověřené doručenky nebo schválené výjimky je unverified, ne filed.
Odpověď
200 application/json Souhrn a seznam firem.
| Pole | Význam |
|---|---|
today | Dnešní datum |
total | Počet vrácených firem |
truncated | true, když má volající víc než 200 firem |
limit | Nejvyšší počet vrácených firem (200) |
summary | Jen nearchivované firmy: attention, critical, vat_due (DPH do 7 dnů nebo po lhůtě), overdue_count, overdue_amount (Kč), unmatched, drafts |
clients[] | id, name, ico, legal_form, legal_form_label, role, role_label, archived, demo, bookkeeping, vat, overdue (count, amount v Kč), unmatched, drafts, locked_until, last_activity, level, urgency |
clients[].vat.state | none (neregistrovaná), filed (odesláno a doloženo), unverified (odesláno bez doložení), draft (jen připraveno), optional (podání není povinné), late (nepodáno po lhůtě), open (nepodáno, lhůta běží) |
clients[].vat | Také period, deadline, days, filed_on, proof_state a další období next_period, next_deadline, next_days |
clients[].level | critical, warning, ok nebo archived |
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Nejvýše 200 firem; výběr proběhne podle archivace a názvu ještě před řazením podle naléhavosti, takže nad 200 firem se naléhavější firma dál v abecedě nemusí vrátit.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/clientsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/clients', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"today": "2026-09-28",
"total": 2,
"truncated": false,
"limit": 200,
"summary": {
"attention": 2,
"critical": 0,
"vat_due": 1,
"overdue_count": 2,
"overdue_amount": 132600.0,
"unmatched": 9,
"drafts": 2
},
"clients": [
{
"id": 1,
"name": "Ukázková firma s.r.o.",
"ico": "99999994",
"legal_form": "sro",
"legal_form_label": "s.r.o.",
"role": "owner",
"role_label": "Vlastník",
"archived": false,
"demo": true,
"bookkeeping": "double_entry",
"vat": {
"status": "monthly",
"label": "Plátce DPH – měsíčně",
"payer": true,
"period": "2026-08",
"period_label": "srpen 2026",
"deadline": "2026-09-25",
"days": -3,
"filing": "filed",
"filed_on": "2026-09-24",
"proof_state": "awaiting_proof",
"state": "unverified",
"next_period": "2026-09",
"next_period_label": "září 2026",
"next_deadline": "2026-10-26",
"next_days": 28
},
"overdue": {
"count": 1,
"amount": 72600.0
},
"unmatched": 6,
"drafts": 2,
"locked_until": null,
"last_activity": {
"at": "2026-09-28T10:00:00.000Z",
"action": "filing.evidence_attached",
"summary": "DPH 2026-08: přiložen potvrzeni-podani.pdf",
"user": "ukazka"
},
"level": "warning",
"urgency": 85
},
{
"id": 2,
"name": "Jan Ukázka – grafické studio (ukázka)",
"ico": "99999986",
"legal_form": "osvc",
"legal_form_label": "OSVČ",
"role": "owner",
"role_label": "Vlastník",
"archived": false,
"demo": true,
"bookkeeping": "tax_records",
"vat": {
"status": "none",
"label": "Neplátce DPH",
"payer": false,
"state": "none"
},
"overdue": {
"count": 1,
"amount": 60000.0
},
"unmatched": 3,
"drafts": 0,
"locked_until": null,
"last_activity": {
"at": "2026-09-28T10:00:00.000Z",
"action": "bank.rule_applied",
"summary": "Pravidlo „Zdravotní pojištění“: pohyb -3306,00 CZK ze dne 7. 9. 2026 zaúčtován na V91",
"user": "ukazka"
},
"level": "warning",
"urgency": 25
}
]
}
GET Fronta úkolů účetní napříč firmami
/work_items
- Oprávnění
- Přihlášený uživatel nebo jeho API klíč, bez vazby na jednu firmu
- Klíč jen pro čtení
- Stačí
- V příručce
- Daně a pojistné › Úkol Doložit doručení
Vrátí konkrétní kroky ve všech nearchivovaných firmách volajícího: koncepty účetních dokladů (draft), nespárované bankovní pohyby (bank), vystavené přijaté faktury, dobropisy a výdajové pokladní doklady bez přílohy od 1. 1. předchozího roku, kromě načtených z ISDOC (missing), u plátců DPH nepodaná přiznání k DPH za každé skončené období od příchodu firmy do Salda a za období před ním, pokud jeho lhůta tehdy ještě běžela (filing; počítá se i podání se stavem filed pokrývající jen část období), a podání označená jako odeslaná bez ověřené doručenky či schválené výjimky (proof, podání všech druhů). Nepodaná kontrolní a souhrnná hlášení fronta nesleduje. Před výpisem frontu synchronizuje s daty (refresh): nové a vrácené kroky otevře, otevřený krok vyřeší, jen když kontrola jeho vlastního zdroje ukáže, že je hotový, a zruší přidělení lidem, kteří ve firmě ztratili právo zápisu. S refresh=0 nebo s API klíčem jen pro čtení vrátí frontu tak, jak byla naposledy synchronizována.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | dotaz | celé číslo | ne | Jen kroky této firmy (firma bez členství vrátí prázdný seznam) Příklad 12. |
assignee | dotaz | text | ne | me (přidělené mně), unassigned (nepřidělené) nebo číselné ID uživatele; jiná hodnota nefiltruje Příklad me. |
priority | dotaz | text | ne | Jen kroky s touto prioritou Hodnoty: high, normal, low. Příklad high. |
due | dotaz | text | ne | overdue = termín už minul; week = termín nejpozději za 7 dní (včetně prošlých) Hodnoty: overdue, week. Příklad week. |
state | dotaz | text | ne | resolved = vyřešené za posledních 90 dní, nejnovější první; jiná hodnota znamená open Hodnoty: open, resolved. Výchozí open. Příklad open. |
refresh | dotaz | text | ne | 0 = bez synchronizace; jakákoli jiná hodnota nebo vynechání synchronizuje Hodnoty: 0, 1. Výchozí 1. Příklad 1. |
Odpověď
200 application/json Kroky, počty a lidé, kterým lze kroky přidělit.
| Pole | Význam |
|---|---|
today | Dnešní datum, ke kterému se počítá overdue |
rows | Kroky: id, entity_id, entity_name, kind, kind_label, title, detail, href (odkaz do aplikace), due_on, period, year, overdue, priority, priority_label, assignee_id, assignee, can_assign, state, first_seen_at, resolved_at, reopened_count |
rows[].kind | filing, proof, bank, draft, missing |
truncated | true, když je kroků víc než 1000 |
limit | Nejvyšší počet vrácených kroků (1000) |
counts | Otevřené kroky ve všech firmách bez ohledu na filtr: open, mine, unassigned, high, overdue |
firms | Firmy ve frontě: id, name, manage (volající smí přidělovat) |
people | Lidé s právem zápisu v některé z firem |
members | ID firmy → lidé s právem zápisu v ní |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 400 | – | Parametr entity_id, assignee, priority, due, state nebo refresh je pole či objekt („Parametr … musí být jedna hodnota“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Synchronizace zapisuje jen do fronty úkolů (nové kroky, aktualizace názvu, termínu a priority, vyřešení, znovuotevření s reopened_count, zrušení přidělení); účetní data nemění. S refresh=0 nebo klíčem jen pro čtení nic nezapisuje.
- Limity
- Nejvýše 200 nearchivovaných firem (podle názvu) a 1000 řádků. Nové kroky se hledají nejvýše po 500 na firmu a druh; krok proof jen u podání odeslaných za posledních 365 dní nebo bez data odeslání. Vyřešené kroky se vypisují 90 dní.
- Opakování
- Opakovaná synchronizace bez změny dat nic nového nezaloží.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/work_items?state=open"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/work_items?state=open', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"today": "2026-09-28",
"rows": [
{
"id": 3,
"entity_id": 1,
"entity_name": "Ukázková firma s.r.o.",
"kind": "bank",
"kind_label": "Bankovní výjimka",
"title": "Spárovat nebo zaúčtovat pohyb 1 500,00 Kč",
"detail": "Vratka přeplatku · 15. 7. 2026",
"href": "#/banka?account=2",
"due_on": "2026-08-15",
"period": null,
"year": null,
"overdue": true,
"priority": "high",
"priority_label": "Vysoká",
"assignee_id": null,
"assignee": null,
"can_assign": true,
"state": "open",
"first_seen_at": "2026-09-28T10:00:00.000Z",
"resolved_at": null,
"reopened_count": 0
},
{
"id": 4,
"entity_id": 1,
"entity_name": "Ukázková firma s.r.o.",
"kind": "bank",
"kind_label": "Bankovní výjimka",
"title": "Spárovat nebo zaúčtovat pohyb 12 100,00 Kč",
"detail": "Nordwood Studio s.r.o. · Úhrada faktury · 12. 8. 2026",
"href": "#/banka?account=2",
"due_on": "2026-09-15",
"period": null,
"year": null,
"overdue": true,
"priority": "high",
"priority_label": "Vysoká",
"assignee_id": null,
"assignee": null,
"can_assign": true,
"state": "open",
"first_seen_at": "2026-09-28T10:00:00.000Z",
"resolved_at": null,
"reopened_count": 0
}
],
"truncated": false,
"limit": 1000,
"counts": {
"open": 97,
"mine": 0,
"unassigned": 97,
"high": 3,
"overdue": 3
},
"firms": [
{
"id": 2,
"name": "Jan Ukázka – grafické studio (ukázka)",
"manage": true
},
{
"id": 1,
"name": "Ukázková firma s.r.o.",
"manage": true
}
],
"people": [
{
"id": 2,
"name": "ucetni_ukazka"
},
{
"id": 1,
"name": "ukazka"
}
],
"members": {
"1": [
{
"id": 1,
"name": "ukazka"
},
{
"id": 2,
"name": "ucetni_ukazka"
}
],
"2": [
{
"id": 1,
"name": "ukazka"
}
]
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
PATCH Přidělení kroku z fronty úkolů
/work_items/{id}
- Oprávnění
- Zvláštní pravidlo
- Pravidlo
- Krok musí patřit nearchivované firmě, kde je volající přijatým členem (jinak 404). Přidělovat smí jen vlastník nebo účetní té firmy; ostatním vrátí 422, ne 403.
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Přidělí krok fronty úkolů odpovědné osobě, nebo přidělení zruší (assignee_id null). Přidělit lze jen členovi firmy s právem zápisu (vlastník, účetní, editor).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
id | cesta | celé číslo | ano | ID kroku fronty Příklad 301. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
assignee_id | celé číslo | ne | ID uživatele; null nebo prázdná hodnota přidělení zruší |
Odpověď
200 application/json Krok po přidělení (tvar jako rows[] v GET /work_items).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 400 | – | assignee_id je pole či objekt („Parametr assignee_id musí být jedna hodnota“) |
| 422 | – | Volající není vlastník ani účetní firmy („Úkoly smí přidělovat vlastník nebo účetní firmy“) |
| 422 | – | Uživatel není členem firmy s právem zápisu („Úkol lze přidělit jen členovi firmy s právem zápisu“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží odpovědnou osobu, kdo a kdy přidělil, a zapíše do historie firmy událost work_item.assigned. Účetní data nemění.
- Opakování
- Každé volání znovu uloží čas a autora přidělení a zapíše novou událost, i při stejné osobě.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"assignee_id":2}' \
https://techtools.cz/ucetnictvi-api/work_items/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/work_items/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"assignee_id": 2
})
});
const data = await response.json();{
"id": 1,
"entity_id": 1,
"entity_name": "Ukázková firma s.r.o.",
"kind": "draft",
"kind_label": "Koncept dokladu",
"title": "Dokončit a vystavit koncept: Přijatá faktura 2026090418",
"detail": "Coworking Karlín s.r.o. · 17 545,00 Kč · 25. 9. 2026",
"href": "#/doklad/146",
"due_on": null,
"period": null,
"year": null,
"overdue": false,
"priority": "low",
"priority_label": "Nízká",
"assignee_id": 2,
"assignee": "ucetni_ukazka",
"can_assign": true,
"state": "open",
"first_seen_at": "2026-09-28T10:00:00.000Z",
"resolved_at": null,
"reopened_count": 0
}
GET Žádosti o podklady ve firmě
/entities/{entity_id}/document_requests
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí žádosti o chybějící doklad nebo vysvětlení k bankovnímu pohybu či dokladu, bez zpráv. Otevřené (waiting, delivered) jsou seřazené podle termínu (žádosti bez termínu na konci, při shodě nejnovější první), uzavřené (verified, cancelled) od posledně uzavřené; s filter=all jsou otevřené první. filter=action vrátí jen otevřené žádosti, které čekají na volajícího.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
filter | dotaz | text | ne | open = čekající a dodané; action = z nich ty, na které má volající odpovědět nebo které smí ověřit; closed = ověřené a zrušené; all = vše. Jiná hodnota znamená open. Hodnoty: open, action, closed, all. Výchozí open. Příklad open. |
subject_type | dotaz | text | ne | Jen žádosti k tomuto druhu položky – vyžaduje subject_ids Hodnoty: bank_transaction, document. Příklad bank_transaction. |
subject_ids | dotaz | text | ne | ID položek oddělená čárkou (nejvýše 500); bez subject_type se ignorují, bez nich je výsledek prázdný Příklad 4711,4712. |
Odpověď
200 application/json Žádosti a počty.
| Pole | Význam |
|---|---|
rows | Žádosti: id, title, status, status_label, subject, requested_by, assignee_id, assignee, due_on, overdue, created_at, updated_at, closed_at, action_needed, can_reply, can_verify, can_cancel, files_count |
rows[].status | waiting (čeká na podklad), delivered (podklad dodán), verified (ověřeno), cancelled (zrušeno) |
rows[].subject | type, id, label, amount, currency, date, partner, href; u pohybu i message a tx_status; u smazané položky missing true |
rows[].assignee_id | Odpovědná osoba, jen dokud má ve firmě právo zápisu, jinak null. Určuje, na koho žádost čeká (action_needed); odpovědět smí kterýkoli člen s právem zápisu |
truncated | true, když žádostí je víc než limit |
limit | 500 |
action_needed | Počet všech otevřených žádostí firmy, které čekají na volajícího (bez ohledu na filtr) |
members | Členové s právem zápisu (id, name, role); žádost lze přidělit kterémukoli z nich kromě sebe |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Neznámý subject_type („Neznámý druh položky“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Nejvýše 500 žádostí; u filter=action se limit uplatní před výběrem žádostí čekajících na volajícího.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/document_requests?filter=all"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests?filter=all', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"rows": [
{
"id": 1,
"title": "Doklad k příchozí platbě",
"status": "delivered",
"status_label": "Podklad dodán",
"subject": {
"type": "bank_transaction",
"id": 64,
"label": "Platba 18 150,00 Kč z 25. 9. 2026",
"amount": 18150.0,
"currency": "CZK",
"date": "2026-09-25",
"partner": "Atelier Lumen s.r.o.",
"message": "Úhrada – viz smlouva",
"tx_status": "unmatched",
"href": "#/banka?tx=64"
},
"requested_by": "ukazka",
"assignee_id": 2,
"assignee": "ucetni_ukazka",
"due_on": "2026-10-05",
"overdue": false,
"created_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"closed_at": null,
"action_needed": true,
"can_reply": true,
"can_verify": true,
"can_cancel": true,
"files_count": 1
}
],
"truncated": false,
"limit": 500,
"action_needed": 1,
"members": [
{
"id": 1,
"name": "ukazka",
"role": "owner"
},
{
"id": 2,
"name": "ucetni_ukazka",
"role": "accountant"
}
]
}
POST Žádost o doklad nebo vysvětlení k pohybu či dokladu
/entities/{entity_id}/document_requests
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Založí žádost o podklad k bankovnímu pohybu nebo účetnímu dokladu (i konceptu) s první zprávou. K jedné položce může být otevřená jen jedna žádost; k nabídce, objednávce a dodacímu listu žádost založit nelze. Odpovědnou osobou může být jiný člen firmy s právem zápisu, ne sám žadatel. Smazání pohybu nebo dokladu jeho otevřenou žádost zruší se systémovou zprávou.
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 |
|---|---|---|---|
subject_type | text | ano | Druh položky Hodnoty: bank_transaction, document. |
subject_id | celé číslo | ano | ID bankovního pohybu nebo dokladu v této firmě |
question | text | ano | Co je potřeba dodat, nejvýše 2000 znaků |
title | text | ne | Název žádosti, nejvýše 200 znaků (delší se zkrátí); výchozí „Doklad nebo vysvětlení k platbě“ nebo „Chybějící podklad k dokladu“ |
assignee_id | celé číslo | ne | ID uživatele, který má odpovědět – jiný člen s právem zápisu |
due_on | datum | ne | Termín, dnes nebo později |
Odpověď
201 application/json Nová žádost se zprávami (tvar jako GET …/document_requests/{id}), status waiting.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Neznámý subject_type („Žádost lze založit k bankovnímu pohybu nebo dokladu“) |
| 422 | – | Položka je nabídka, objednávka nebo dodací list |
| 422 | – | K položce už je otevřená žádost („K této položce už je otevřená žádost … – pokračujte v ní“) |
| 422 | – | Prázdná otázka nebo delší než 2000 znaků |
| 422 | – | Termín v minulosti („Termín nemůže být v minulosti“) |
| 422 | – | Odpovědnou osobou je sám žadatel, nebo člen bez práva zápisu |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří žádost ve stavu waiting a zprávu s otázkou a zapíše událost document_request.created. Bankovní pohyb ani doklad nemění a nic neúčtuje.
- Opakování
- Druhá žádost ke stejné položce vrátí 422, dokud je první otevřená; po uzavření lze založit novou.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"subject_type":"bank_transaction","subject_id":22,"title":"Doklad k platbě","question":"Prosím o fakturu nebo účtenku k této platbě."}' \
https://techtools.cz/ucetnictvi-api/entities/1/document_requestsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"subject_type": "bank_transaction",
"subject_id": 22,
"title": "Doklad k platbě",
"question": "Prosím o fakturu nebo účtenku k této platbě."
})
});
const data = await response.json();{
"id": 2,
"title": "Doklad k platbě",
"status": "waiting",
"status_label": "Čeká na podklad",
"subject": {
"type": "bank_transaction",
"id": 22,
"label": "Platba 77 440,00 Kč z 22. 9. 2026",
"amount": 77440.0,
"currency": "CZK",
"date": "2026-09-22",
"partner": "Kavárna U Zeleného stromu s.r.o.",
"message": "Úhrada faktury FV20260022",
"tx_status": "matched",
"href": "#/banka?tx=22"
},
"requested_by": "ukazka",
"assignee_id": null,
"assignee": null,
"due_on": null,
"overdue": false,
"created_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"closed_at": null,
"action_needed": false,
"can_reply": true,
"can_verify": false,
"can_cancel": true,
"files_count": 0,
"attachable_files": 0,
"messages": [
{
"id": 3,
"kind": "question",
"user": "ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Prosím o fakturu nebo účtenku k této platbě.",
"files": []
}
]
}
GET Detail žádosti o podklad se zprávami a soubory
/entities/{entity_id}/document_requests/{id}
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí žádost se všemi zprávami (otázka, odpovědi, ověření, zrušení) a jejich soubory a s tím, co smí volající udělat (can_reply, can_verify, can_cancel).
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 žádosti Příklad 88. |
Odpověď
200 application/json Žádost (pole jako v rows[] seznamu) a zprávy.
| Pole | Význam |
|---|---|
messages | Zprávy od nejstarší: id, kind (question, reply, verified, cancelled), user (null u systémové zprávy po smazání položky), at, body, files (id, filename, content_type, byte_size) |
attachable_files | Kolik souborů dodaných jinými než žadatelem by ověření s attach přiložilo k dokladu (0 u pohybu nebo když volající ověřit nesmí) |
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/document_requests/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"id": 1,
"title": "Doklad k příchozí platbě",
"status": "delivered",
"status_label": "Podklad dodán",
"subject": {
"type": "bank_transaction",
"id": 64,
"label": "Platba 18 150,00 Kč z 25. 9. 2026",
"amount": 18150.0,
"currency": "CZK",
"date": "2026-09-25",
"partner": "Atelier Lumen s.r.o.",
"message": "Úhrada – viz smlouva",
"tx_status": "unmatched",
"href": "#/banka?tx=64"
},
"requested_by": "ukazka",
"assignee_id": 2,
"assignee": "ucetni_ukazka",
"due_on": "2026-10-05",
"overdue": false,
"created_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"closed_at": null,
"action_needed": true,
"can_reply": true,
"can_verify": true,
"can_cancel": true,
"files_count": 1,
"attachable_files": 0,
"messages": [
{
"id": 1,
"kind": "question",
"user": "ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Pošlete prosím fakturu nebo smlouvu k platbě 7 260 Kč.",
"files": []
},
{
"id": 2,
"kind": "reply",
"user": "ucetni_ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Posílám smlouvu.",
"files": [
{
"id": 4,
"filename": "faktura.pdf",
"content_type": "application/pdf",
"byte_size": 142
}
]
}
]
}
GET Počty otevřených žádostí a žádostí čekajících na volajícího
/entities/{entity_id}/document_requests/counts
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí jen počty bez žádostí a zpráv – pro odznaky v aplikaci. action_needed počítá žádosti, na které má volající odpovědět (není žadatel a žádost je přidělená jemu nebo nikomu), a dodané žádosti, které smí ověřit; člen bez práva zápisu má vždy 0.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky Příklad 12. |
Odpověď
200 application/json Počty.
| Pole | Význam |
|---|---|
open | Otevřené žádosti firmy (waiting a delivered) |
action_needed | Z nich ty, které čekají na volajícího |
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/document_requests/countsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests/counts', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"open": 1,
"action_needed": 1
}
POST Odpověď na žádost o podklad, případně se soubory
/entities/{entity_id}/document_requests/{id}/reply
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Přidá do otevřené žádosti odpověď s textem a/nebo soubory. Odpověď kohokoli jiného než žadatele žádost označí jako dodanou (delivered); odpověď žadatele (doplňující dotaz) ji vrátí do stavu waiting. Soubory zůstávají u žádosti – k dokladu se přiloží až při ověření s attach. Soubory se posílají jako multipart/form-data v poli files[] (nebo files[0], files[1] …); odpověď bez souborů lze poslat i jako JSON.
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 žádosti Příklad 88. |
Tělo požadavku
Formát multipart/form-data.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
body | text | ne | Text odpovědi, nejvýše 2000 znaků; povinný, není-li přiložen soubor |
files | pole (text) | ne | Nejvýše 5 souborů PDF, JPEG, PNG, WebP, GIF, HEIC/HEIF nebo XML (typ se určí z obsahu), každý nejvýše 15 MB, dohromady nejvýše 20 MB |
Odpověď
200 application/json Žádost se zprávami po odpovědi (tvar jako GET …/document_requests/{id}).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Žádost je uzavřená („Žádost je uzavřená – případně založte novou“) |
| 422 | – | Chybí text i soubor, nebo je text delší než 2000 znaků |
| 422 | – | Víc než 5 souborů, prázdný soubor, soubor nad 15 MB, nepovolený typ nebo víc než 20 MB dohromady |
| 422 | – | V poli files není soubor („Soubory se nepodařilo přečíst – pošlete je jako multipart/form-data v poli files[]“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží zprávu a soubory a změní stav žádosti (delivered s časem a autorem dodání, nebo waiting); zapíše událost document_request.delivered nebo document_request.followed_up. Doklad ani pohyb nemění, nic neúčtuje. Když cokoli selže, nahrané soubory se smažou.
- Limity
- 5 souborů, 15 MB na soubor, 20 MB na odpověď, 2000 znaků textu.
- Opakování
- Každé volání přidá novou zprávu; stejné soubory se neslučují.
Příklad
V ukázce odpovídá sám žadatel (doplňující dotaz), proto se žádost vrátí do stavu waiting; odpověď jiného člena by ji označila jako delivered.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-F "body=Posílám účtenku z čerpací stanice." \
-F "files[]=@uctenka.jpg" \
https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1/replyJavaScript
const form = new FormData();
form.append('files[]', fileInput.files[0], 'uctenka.jpg');
form.append('body', 'Posílám účtenku z čerpací stanice.');
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1/reply', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST',
body: form
});
const data = await response.json();{
"id": 1,
"title": "Doklad k příchozí platbě",
"status": "waiting",
"status_label": "Čeká na podklad",
"subject": {
"type": "bank_transaction",
"id": 64,
"label": "Platba 18 150,00 Kč z 25. 9. 2026",
"amount": 18150.0,
"currency": "CZK",
"date": "2026-09-25",
"partner": "Atelier Lumen s.r.o.",
"message": "Úhrada – viz smlouva",
"tx_status": "unmatched",
"href": "#/banka?tx=64"
},
"requested_by": "ukazka",
"assignee_id": 2,
"assignee": "ucetni_ukazka",
"due_on": "2026-10-05",
"overdue": false,
"created_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"closed_at": null,
"action_needed": false,
"can_reply": true,
"can_verify": false,
"can_cancel": true,
"files_count": 2,
"attachable_files": 0,
"messages": [
{
"id": 1,
"kind": "question",
"user": "ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Pošlete prosím fakturu nebo smlouvu k platbě 7 260 Kč.",
"files": []
},
{
"id": 2,
"kind": "reply",
"user": "ucetni_ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Posílám smlouvu.",
"files": [
{
"id": 4,
"filename": "faktura.pdf",
"content_type": "application/pdf",
"byte_size": 142
}
]
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Ověření dodaného podkladu a uzavření žádosti
/entities/{entity_id}/document_requests/{id}/verify
- Oprávnění
- Zvláštní pravidlo
- Pravidlo
- Vyžaduje právo zápisu. Ověřit smí žadatel, dokud má ve firmě právo zápisu; jinak vlastník nebo účetní. Nikdy člen, který podklad dodal. Nesplnění vrátí 422.
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Uzavře dodanou žádost jako ověřenou. U žádosti k dokladu s attach=true zkopíruje k dokladu jako přílohy soubory, které v odpovědích dodal někdo jiný než žadatel a které doklad ještě nemá (podle kontrolního součtu). Nic se neúčtuje a stav bankovního pohybu se nemě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 žádosti Příklad 88. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
attach | ano/ne | ne | Přiložit dodané soubory k dokladu (jen u žádosti k dokladu) Výchozí false. |
Odpověď
200 application/json Žádost se zprávami po ověření (status verified).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Volající nesmí ověřit („Ověřit smí ten, kdo o podklad požádal; vlastník nebo účetní jen za žadatele, který už nemá právo zápisu“) |
| 422 | – | Žádost je uzavřená („Žádost je už uzavřená“) |
| 422 | – | Žádost není ve stavu delivered („Ověřit lze až dodaný podklad …“) |
| 422 | – | Volající podklad sám dodal („Vámi dodaný podklad musí ověřit někdo jiný“) |
| 422 | – | Doklad by měl víc než 20 příloh |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Zapíše zprávu verified, nastaví stav verified s časem a autorem ověření a zapíše událost document_request.verified; s attach přiloží soubory k dokladu a u každého zapíše událost document.attached. Nic neúčtuje.
- Limity
- Doklad může mít nejvýše 20 příloh.
- Opakování
- Druhé volání vrátí 422, protože žádost je uzavřená.
Příklad
Potřebuje žádost ve stavu delivered, kterou založil volající a dodal jiný člen.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"attach":false}' \
https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1/verifyJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1/verify', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"attach": false
})
});
const data = await response.json();{
"id": 1,
"title": "Doklad k příchozí platbě",
"status": "verified",
"status_label": "Ověřeno",
"subject": {
"type": "bank_transaction",
"id": 64,
"label": "Platba 18 150,00 Kč z 25. 9. 2026",
"amount": 18150.0,
"currency": "CZK",
"date": "2026-09-25",
"partner": "Atelier Lumen s.r.o.",
"message": "Úhrada – viz smlouva",
"tx_status": "unmatched",
"href": "#/banka?tx=64"
},
"requested_by": "ukazka",
"assignee_id": 2,
"assignee": "ucetni_ukazka",
"due_on": "2026-10-05",
"overdue": false,
"created_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"closed_at": "2026-09-28T10:00:00.000Z",
"action_needed": false,
"can_reply": false,
"can_verify": false,
"can_cancel": false,
"files_count": 1,
"attachable_files": 0,
"messages": [
{
"id": 1,
"kind": "question",
"user": "ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Pošlete prosím fakturu nebo smlouvu k platbě 7 260 Kč.",
"files": []
},
{
"id": 2,
"kind": "reply",
"user": "ucetni_ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Posílám smlouvu.",
"files": [
{
"id": 4,
"filename": "faktura.pdf",
"content_type": "application/pdf",
"byte_size": 142
}
]
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Zrušení otevřené žádosti o podklad
/entities/{entity_id}/document_requests/{id}/cancel
- Oprávnění
- Zvláštní pravidlo
- Pravidlo
- Vyžaduje právo zápisu. Zrušit smí žadatel, dokud má ve firmě právo zápisu; jinak vlastník nebo účetní. Nesplnění vrátí 422.
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Uzavře otevřenou žádost jako zrušenou, s nepovinným důvodem.
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 žádosti Příklad 88. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
reason | text | ne | Důvod zrušení; delší než 2000 znaků se zkrátí |
Odpověď
200 application/json Žádost se zprávami po zrušení (status cancelled).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Volající nesmí zrušit („Zrušit smí ten, kdo o podklad požádal; …“) |
| 422 | – | Žádost je uzavřená („Žádost je už uzavřená“) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Zapíše zprávu cancelled s důvodem, nastaví stav cancelled a čas uzavření a zapíše událost document_request.cancelled.
- Opakování
- Druhé volání vrátí 422, protože žádost je uzavřená.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"Doklad dorazil poštou."}' \
https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1/cancelJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1/cancel', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"reason": "Doklad dorazil poštou."
})
});
const data = await response.json();{
"id": 1,
"title": "Doklad k příchozí platbě",
"status": "cancelled",
"status_label": "Zrušeno",
"subject": {
"type": "bank_transaction",
"id": 64,
"label": "Platba 18 150,00 Kč z 25. 9. 2026",
"amount": 18150.0,
"currency": "CZK",
"date": "2026-09-25",
"partner": "Atelier Lumen s.r.o.",
"message": "Úhrada – viz smlouva",
"tx_status": "unmatched",
"href": "#/banka?tx=64"
},
"requested_by": "ukazka",
"assignee_id": 2,
"assignee": "ucetni_ukazka",
"due_on": "2026-10-05",
"overdue": false,
"created_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"closed_at": "2026-09-28T10:00:00.000Z",
"action_needed": false,
"can_reply": false,
"can_verify": false,
"can_cancel": false,
"files_count": 1,
"attachable_files": 0,
"messages": [
{
"id": 1,
"kind": "question",
"user": "ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Pošlete prosím fakturu nebo smlouvu k platbě 7 260 Kč.",
"files": []
},
{
"id": 2,
"kind": "reply",
"user": "ucetni_ukazka",
"at": "2026-09-28T10:00:00.000Z",
"body": "Posílám smlouvu.",
"files": [
{
"id": 4,
"filename": "faktura.pdf",
"content_type": "application/pdf",
"byte_size": 142
}
]
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Stažení souboru ze žádosti o podklad
/entities/{entity_id}/document_requests/{id}/files/{file_id}
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí soubor přiložený k některé zprávě žádosti. PDF, JPEG, PNG, WebP a GIF se posílají k zobrazení (inline), HEIC, HEIF a XML jako příloha; vždy s hlavičkou Cache-Control private, no-store. Soubor, který k žádosti nepatří, vrátí 404.
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 žádosti Příklad 88. |
file_id | cesta | celé číslo | ano | ID souboru z messages[].files[].id Příklad 902. |
Odpověď
200 application/octet-stream Obsah souboru s uloženým Content-Type a původním názvem.
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/document_requests/1/files/4JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/document_requests/1/files/4', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();application/pdf, 142 bajtů (soubor faktura.pdf)