Reference API
Banka, párování a výpisy
Bankovní účty a pokladny, import výpisů z datových souborů i PDF, archiv originálů s kontrolou zůstatků, napojení Fio, párování pohybů s doklady, přímé zaúčtování a bankovní pravidla.
GET Seznam bankovních účtů a pokladen
/entities/{entity_id}/bank_accounts
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
- V příručce
- Banka a pokladna › Stránka Banka
Vrátí všechny bankovní účty a pokladny firmy včetně archivovaných; nejdřív aktivní, pak podle druhu (bank před cash) a ID. Každý účet má vlastní analytický účet 221xxx (bankovní účet) nebo 211xxx (pokladna) a zůstatek k dnešnímu dni. V podvojném účetnictví je zůstatek účtu vedeného v CZK zůstatkem jeho analytického účtu podle účetních zápisů; jinak jde o počáteční stav + všechny pohyby účtu (i ignorované) + ručně zadané úhrady, u pokladny navíc vystavené pokladní doklady. Token Fio API se nikdy nevrací, jen příznak api_connected.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Odpověď
200 application/json Pole bankovních účtů a pokladen.
| Pole | Význam |
|---|---|
kind | bank = bankovní účet, cash = pokladna |
name | Název účtu |
number | Číslo účtu s případným předčíslím |
bank_code | Kód banky (4 číslice) |
display_number | Číslo účtu ve tvaru číslo/kód banky |
iban | IBAN (velkými písmeny bez mezer) |
bic | BIC/SWIFT |
currency | Měna účtu |
account_code | Analytický účet v účtovém rozvrhu (221xxx nebo 211xxx) |
opening_balance | Počáteční stav v měně účtu |
opening_date | Datum počátečního stavu; zůstatky a kontrola výpisů se počítají od něj |
is_default | Výchozí účet svého druhu |
archived | Archivovaný účet (nezapočítává se do přehledu peněz a nenabízí se jako výchozí účet dokladů) |
balance | Zůstatek k dnešnímu dni v měně účtu |
balance_czk | Zůstatek v CZK; u cizoměnového účtu v podvojném účetnictví zůstatek účetních zápisů, v daňové evidenci přepočet kurzem ČNB k dnešku (null, když kurz není k dispozici) |
api_connected | Zda je k účtu uložený token Fio API |
synced_at | Čas posledního úspěšného stažení z Fio API |
sync_error | Text poslední chyby stažení z Fio API |
Chování
- Co změní
- Nic nezapisuje. U cizoměnového účtu v daňové evidenci načte kurz ČNB k dnešnímu dni pro
balance_czk.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_accountsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 2,
"account_code": "221001",
"archived": false,
"bank_code": "2010",
"bic": null,
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"iban": "CZ3820100000002900001227",
"is_default": true,
"kind": "bank",
"name": "Provozní účet",
"number": "2900001227",
"opening_balance": 420000.0,
"opening_date": "2026-01-01",
"sync_error": null,
"synced_at": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"display_number": "2900001227/2010",
"balance": 887525.6,
"api_connected": false,
"balance_czk": 887525.6
},
{
"id": 6,
"account_code": "221002",
"archived": false,
"bank_code": "2010",
"bic": null,
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"iban": null,
"is_default": false,
"kind": "bank",
"name": "Rezervní účet",
"number": "2900005005",
"opening_balance": 0.0,
"opening_date": "2026-01-01",
"sync_error": null,
"synced_at": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"display_number": "2900005005/2010",
"balance": 0.0,
"api_connected": false,
"balance_czk": 0.0
}
]
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Přidání bankovního účtu nebo pokladny
/entities/{entity_id}/bank_accounts
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Založí bankovní účet (kind: bank) nebo pokladnu (kind: cash) a přidělí mu nejnižší analytický účet 221001–221999, resp. 211001–211999, který nemá žádný jiný bankovní účet ani pokladna firmy, a tento účet založí v účtovém rozvrhu s názvem „název číslo/kód banky“. V podvojném účetnictví zaúčtuje nenulový počáteční stav (MD analytický účet / D 701) ke dni opening_date, bez něj k prvnímu dni aktuálního účetního roku; počáteční stav v cizí měně přepočte kurzem ČNB k tomuto dni. is_default: true zruší příznak výchozího účtu u ostatních účtů stejného druhu. Do pokladny nelze importovat výpis a její zůstatek zahrnuje i vystavené pokladní doklady.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
bank_account | objekt | ano | |
bank_account. | text | ne | Druh účtu, výchozí bank; později ho změnit nelze Hodnoty: bank, cash. Výchozí bank. |
bank_account. | text | ne | Název, nejvýše 120 znaků; prázdný dostane název „Bankovní účet“ nebo „Pokladna“ Nejvýše 120 znaků. |
bank_account. | text | ne | Číslo účtu s případným předčíslím, např. 19-2000145399 |
bank_account. | text | ne | Kód banky, přesně 4 číslice |
bank_account. | text | ne | IBAN; mezery se odstraní a písmena převedou na velká |
bank_account. | text | ne | BIC/SWIFT; mezery se odstraní a písmena převedou na velká |
bank_account. | text | ne | Měna účtu jako tři velká písmena, výchozí CZK Výchozí CZK. |
bank_account. | číslo | ne | Počáteční stav v měně účtu, výchozí 0 Výchozí 0. |
bank_account. | datum | ne | Datum počátečního stavu |
bank_account. | ano/ne | ne | Výchozí účet svého druhu |
Odpověď
201 application/json Založený účet ve stejném tvaru jako v seznamu účtů (včetně account_code a zůstatku).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Nenulový počáteční stav spadá do uzamčeného období: „Období do … je uzamčeno – počáteční stav účtu nelze změnit“ |
| 422 | – | V podvojném účetnictví nejde počáteční stav v cizí měně přepočítat, protože kurz ČNB není k dispozici: „Kurz ČNB pro … ke dni … se nepodařilo načíst – počáteční stav uložte prosím později“ |
| 422 | – | Přidělený analytický účet už v účtovém rozvrhu je (řádek zůstal po smazaném účtu stejného druhu): „Číslo účtu už existuje“; založení projde, až se nepoužitý řádek z účtového rozvrhu smaže |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří účet, řádek účtového rozvrhu s jeho analytickým účtem a v podvojném účetnictví účetní zápis počátečního stavu (zdroj
opening). Zapíše auditní událostbank_account.created. - Opakování
- Každé volání založí další účet s dalším volným analytickým účtem.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bank_account":{"kind":"bank","name":"Spořicí účet","number":"2400112238","bank_code":"2010","currency":"CZK","opening_balance":50000}}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_accountsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"bank_account": {
"kind": "bank",
"name": "Spořicí účet",
"number": "2400112238",
"bank_code": "2010",
"currency": "CZK",
"opening_balance": 50000
}
})
});
const data = await response.json();{
"id": 7,
"account_code": "221003",
"archived": false,
"bank_code": "2010",
"bic": null,
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"iban": null,
"is_default": false,
"kind": "bank",
"name": "Spořicí účet",
"number": "2400112238",
"opening_balance": 50000.0,
"opening_date": null,
"sync_error": null,
"synced_at": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"display_number": "2400112238/2010",
"balance": 50000.0,
"api_connected": false,
"balance_czk": 50000.0
}
PATCH Úprava bankovního účtu nebo pokladny
/entities/{entity_id}/bank_accounts/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Změní údaje účtu nebo pokladny; druh (kind) změnit nelze a pole se ignoruje. Když se změní počáteční stav, jeho datum nebo měna, Saldo ověří, že původní ani nový nenulový počáteční stav nespadá do uzamčeného období, a v podvojném účetnictví zápis počátečního stavu smaže a zaúčtuje znovu. Řádek analytického účtu v účtovém rozvrhu se přejmenuje na „název číslo/kód banky“. archived: true účet archivuje: pohyby i zápisy zůstanou, jen se nezapočítává do přehledu peněz a nenabízí se jako výchozí.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního účtu nebo pokladny Příklad 31. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
bank_account | objekt | ano | |
bank_account. | text | ne | Název, nejvýše 120 znaků Nejvýše 120 znaků. |
bank_account. | text | ne | Číslo účtu s případným předčíslím |
bank_account. | text | ne | Kód banky, přesně 4 číslice |
bank_account. | text | ne | IBAN; mezery se odstraní a písmena převedou na velká |
bank_account. | text | ne | BIC/SWIFT |
bank_account. | text | ne | Měna účtu jako tři velká písmena; Saldo změně nebrání ani u účtu, který už má pohyby, výpisy nebo úhrady |
bank_account. | číslo | ne | Počáteční stav v měně účtu |
bank_account. | datum | ne | Datum počátečního stavu |
bank_account. | ano/ne | ne | Výchozí účet svého druhu; ostatním účtům stejného druhu se příznak zruší |
bank_account. | ano/ne | ne | Archivovat (true) nebo vrátit mezi aktivní (false) |
Odpověď
200 application/json Upravený účet ve stejném tvaru jako v seznamu účtů.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Změna počátečního stavu zasahuje do uzamčeného období: „Období do … je uzamčeno – počáteční stav účtu nelze změnit“ |
| 422 | – | Počáteční stav v cizí měně nejde přepočítat bez kurzu ČNB: „Kurz ČNB pro … ke dni … se nepodařilo načíst – počáteční stav uložte prosím později“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží změny účtu. Při změně počátečního stavu, jeho data nebo měny v podvojném účetnictví nahradí zápis počátečního stavu (MD analytický účet / D
701). Přejmenuje řádek analytického účtu v účtovém rozvrhu. Zapíše auditní událostbank_account.updated. - Opakování
- Opakování se stejnými daty nic dalšího nezmění, jen zapíše další auditní událost; zápis počátečního stavu se nahrazuje jen při skutečné změně počátečních údajů.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bank_account":{"name":"Provozní účet Fio","is_default":true}}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/2JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/2', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"bank_account": {
"name": "Provozní účet Fio",
"is_default": true
}
})
});
const data = await response.json();{
"name": "Provozní účet Fio",
"is_default": true,
"opening_balance": 420000.0,
"opening_date": "2026-01-01",
"currency": "CZK",
"iban": "CZ3820100000002900001227",
"bic": null,
"number": "2900001227",
"account_code": "221001",
"id": 2,
"archived": false,
"bank_code": "2010",
"created_at": "2026-09-28T10:00:00.000Z",
"kind": "bank",
"sync_error": null,
"synced_at": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"display_number": "2900001227/2010",
"balance": 887525.6,
"api_connected": false,
"balance_czk": 887525.6
}
DELETE Smazání nepoužitého bankovního účtu nebo pokladny
/entities/{entity_id}/bank_accounts/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Smaže bankovní účet nebo pokladnu, ale jen pokud nemá žádné bankovní pohyby, uložené výpisy, úhrady ani doklady, které na něj odkazují; jinak ho lze jen archivovat (archived: true v úpravě účtu). Se smazáním zmizí i uložený token Fio API a zápis počátečního stavu. Řádek analytického účtu (221xxx nebo 211xxx) v účtovém rozvrhu zůstává: když Saldo tento kód později přidělí nově zakládanému účtu, založení skončí chybou „Číslo účtu už existuje“, dokud se řádek z účtového rozvrhu nesmaže. Pravidla pro banku omezená na smazaný účet zůstanou, žádný pohyb už nezachytí a při úpravě neprojdou kontrolou.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního účtu nebo pokladny Příklad 33. |
Odpověď
204 Prázdná odpověď.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Účet se používá: „Účet má pohyby, výpisy nebo doklady – můžete ho jen archivovat“ |
| 422 | – | Nenulový počáteční stav nebo jeho zápis leží v uzamčeném období: „Období do … je uzamčeno – počáteční stav účtu nelze změnit“ nebo „Období do … je uzamčeno – zaúčtování nelze změnit“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Smaže účet a jeho zápis počátečního stavu (zdroj
opening). Řádek analytického účtu v účtovém rozvrhu ponechá. Zapíše auditní událostbank_account.deleted. - Opakování
- Druhé volání vrátí 404.
Příklad
Smazat jde jen účet bez pohybů, výpisů, úhrad a dokladů, proto příklad maže nově založený prázdný účet.
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/6JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/6', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();soubor, 0 bajtů
POST Připojení nebo odpojení Fio API k účtu
/entities/{entity_id}/bank_accounts/{id}/connect
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY - V příručce
- Banka a pokladna › Připojit Fio API
Uloží k bankovnímu účtu token Fio API pro automatické stahování pohybů, nebo ho odpojí. Připojit lze jen účet s kódem banky 2010 (Fio banka); účet s jiným kódem banky nebo bez něj (typicky pokladnu) Saldo odmítne. Token musí mít přesně 64 znaků (písmena, číslice, _ a -), uloží se šifrovaně a API ho už nikdy nevrátí, jen api_connected: true. Při připojení Saldo Fio nekontaktuje – platnost tokenu a to, že patří k tomuto účtu, se ověří až při stažení pohybů. Prázdný nebo chybějící token připojení zruší.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního účtu Příklad 31. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
token | text | ne | Token Fio API z internetového bankovnictví (Nastavení → API); prázdná hodnota připojení zruší |
Odpověď
200 application/json Účet ve stejném tvaru jako v seznamu účtů, s api_connected a vymazaným sync_error.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Účet není u Fio banky: „Automatické stahování zatím umí jen Fio banka (kód banky 2010)“ |
| 422 | – | Token nemá tvar tokenu Fio: „Token Fio API má 64 znaků – zkopírujte ho celý z internetového bankovnictví“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží zašifrovaný token a vymaže
sync_error, nebo token smaže. Zapíše auditní událostbank.feed_connected, při odpojeníbank.feed_removed. Fio API nevolá. - Limity
- Token přesně 64 znaků
A–Z,a–z,0–9,_,-(okrajové mezery se ořežou). - Opakování
- Nový token přepíše předchozí; každé volání zapíše auditní událost.
Příklad
Token je vymyšlený; při připojení se Fio nekontaktuje.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"token":"SaldoDemoFioToken_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJ"}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/2/connectJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/2/connect', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"token": "SaldoDemoFioToken_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJ"
})
});
const data = await response.json();{
"sync_error": null,
"iban": "CZ3820100000002900001227",
"bic": null,
"number": "2900001227",
"account_code": "221001",
"id": 2,
"archived": false,
"bank_code": "2010",
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"is_default": true,
"kind": "bank",
"name": "Provozní účet",
"opening_balance": 420000.0,
"opening_date": "2026-01-01",
"synced_at": null,
"updated_at": "2026-09-28T10:00:00.000Z",
"display_number": "2900001227/2010",
"balance": 887525.6,
"api_connected": true,
"balance_czk": 887525.6
}
POST Stažení nových pohybů z Fio API
/entities/{entity_id}/bank_accounts/{id}/sync
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Stáhne z Fio API pohyby od poslední zarážky (dotaz last, Fio po každém stažení posune zarážku za vydané pohyby) a naimportuje je na účet stejně jako výpis: přeskočí pohyby, jejichž reference (ID pohybu Fio) už účet má, a pohyby s nulovou částkou nebo bez data. Když je zapnutá automatizace auto_match, nové pohyby spáruje s doklady, a když je zapnutá bank_rules, použije na ně pravidla pro banku. Pokud Fio vrátí výpis jiného účtu, nic se neimportuje. Na rozdíl od ručního importu se nevytváří archiv výpisu ani se neukládá soubor.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního účtu s připojeným Fio API Příklad 31. |
Odpověď
200 application/json Výsledek importu z Fio API a účet po stažení.
| Pole | Význam |
|---|---|
format | fio_api |
import_batch | Identifikátor dávky (12 šestnáctkových znaků) uložený u nových pohybů |
statement | Údaje výpisu z Fio (účet, období from–to, počáteční a konečný zůstatek, fio s ID pohybů a zarážky) |
imported | Počet nových pohybů |
skipped | Počet přeskočených pohybů (už uložené nebo s nulovou částkou); pohyb bez data nebo částky Saldo vynechá už při čtení odpovědi Fio a uvede ho jen ve warnings |
matched | Počet nových pohybů spárovaných s doklady |
ruled | Počet nových pohybů vyřízených pravidly |
rules | Co udělala pravidla – transaction_id, rule_id, rule_name, action, result, text |
warnings | Upozornění ke čtení výpisu |
account | Účet po stažení (s synced_at a sync_error) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Účet nemá uložený token: „Účet nemá připojené Fio API“ |
| 422 | – | Stahuje se častěji než jednou za 30 s: „Fio dovoluje stáhnout výpis nejvýš jednou za 30 sekund, zkuste to znovu za … s“; sync_error se neukládá |
| 422 | – | Fio dotaz odmítlo nebo je nedostupné (neplatný token, pohyby starší 90 dní bez odemčené historie, více než 50 000 pohybů, výpadek nebo nečitelná odpověď) nebo token patří jinému účtu („Token patří k účtu …“); text chyby se uloží do sync_error |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Volá Fio API (
https://fioapi.fio.cz/v1/rest/last/…/transactions.json). Vytvoří nové bankovní pohyby; podle automatizací zaznamená úhrady dokladů s účetními zápisy a pohyby vyřídí pravidly. Zapíše auditní událostbank.imported(zdrojfio), případněpayment.recordedabank.rule_applied. Uložísynced_ata vymažesync_error; při chybě Fio uloží její text dosync_error. - Limity
- Nejvýš jedno stažení za 30 s na jeden token v rámci procesu serveru; Fio při častějším dotazu vrací HTTP 409, které se hlásí stejně. Spojení 5 s, čtení odpovědi 30 s. Fio vydá najednou nejvýš 50 000 pohybů a pohyby starší 90 dní jen po odemčení historie v internetovém bankovnictví.
- Opakování
- Další stažení vrátí jen pohyby, které Fio od posledního stažení nevydalo; už uložené pohyby se navíc přeskočí podle reference. Volání dříve než za 30 s skončí chybou 422. Zarážku posune Fio už tím, že pohyby vydá: když pak import skončí chybou (např. „Token patří k účtu …“), tyto pohyby další stažení nevrátí a je potřeba je naimportovat z výpisu.
Příklad
Předpokládá, že účet má uložený token (viz připojení Fio API); odpověď Fio je v záznamu nahrazená ukázkovou.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/2/syncJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_accounts/2/sync', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST'
});
const data = await response.json();{
"format": "fio_api",
"import_batch": "3a65670cc2e5",
"statement": {
"format": "fio_api",
"variant": "last",
"account": {
"number": "2900001227",
"bank_code": "2010",
"iban": "CZ3820100000002900001227",
"currency": "CZK",
"name": null
},
"statement_number": null,
"from": "2026-10-01",
"to": "2026-10-05",
"opening_balance": 132284.87,
"closing_balance": 128825.52,
"fio": {
"id_from": 26544001234,
"id_to": 26544107777,
"id_last_download": 26543512307
}
},
"imported": 5,
"skipped": 0,
"matched": 0,
"ruled": 0,
"rules": [],
"warnings": [],
"account": {
"id": 2,
"account_code": "221001",
"archived": false,
"bank_code": "2010",
"bic": null,
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"iban": "CZ3820100000002900001227",
"is_default": true,
"kind": "bank",
"name": "Provozní účet",
"number": "2900001227",
"opening_balance": 420000.0,
"opening_date": "2026-01-01",
"sync_error": null,
"synced_at": "2026-09-28T10:00:00.000Z",
"updated_at": "2026-09-28T10:00:00.000Z",
"display_number": "2900001227/2010",
"balance": 887525.6,
"api_connected": true,
"balance_czk": 887525.6
}
}
Odpověď externí služby (Fio banka) je v ukázce nahrazená smyšlenými údaji ve formátu, který služba vrací.
GET Seznam bankovních pohybů
/entities/{entity_id}/bank_transactions
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
- V příručce
- Banka a pokladna › Stránka Banka
Vrátí bankovní pohyby všech účtů firmy od nejnovějšího (datum zaúčtování, pak ID sestupně) po stránkách po 200; filtry se kombinují. q hledá v názvu protistrany a ve zprávě bez ohledu na velikost písmen (neplatí pro písmena s diakritikou – velké „Č“ v datech hledání „č“ nenajde), ve variabilním symbolu a v čísle protiúčtu. Každý řádek obsahuje spárované doklady, přiřazenou částku a u nespárovaného pohybu zbývající nespárovanou částku.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
bank_account_id | dotaz | celé číslo | ne | Jen pohyby tohoto účtu Příklad 31. |
status | dotaz | text | ne | Stav pohybu: unmatched nespárováno, matched spárováno, posted zaúčtováno, ignored ignorováno Hodnoty: unmatched, matched, posted, ignored. Příklad unmatched. |
ids | dotaz | text | ne | Čárkami oddělená ID pohybů (bere se nejvýše 200) Příklad 5012,5013. |
from | dotaz | datum | ne | Pohyby zaúčtované tento den a později Příklad 2026-09-01. |
to | dotaz | datum | ne | Pohyby zaúčtované nejpozději tento den Příklad 2026-09-30. |
q | dotaz | text | ne | Hledaný text (protistrana, zpráva, VS, protiúčet) Příklad nordwood. |
page | dotaz | celé číslo | ne | Číslo stránky Výchozí 1. Rozsah od 1. Příklad 1. |
Odpověď
200 application/json Stránka pohybů se součty a počty podle stavů.
| Pole | Význam |
|---|---|
total | Počet pohybů odpovídajících filtru |
page | Číslo stránky |
per | Velikost stránky (vždy 200) |
sums | incoming = součet příchozích a outgoing = součet odchozích (záporné číslo) za celý filtr, ne jen stránku |
status_counts | Počty pohybů podle stavu za všechny pohyby firmy bez ohledu na filtr |
rows | Pohyby: id, bank_account_id, booked_on, amount (kladná = příchozí, záporná = odchozí), currency, counterparty_account, counterparty_bank_code, counterparty (číslo/kód), counterparty_name, variable_symbol, constant_symbol, specific_symbol, message, reference, import_batch, status, account_code (účet nebo kategorie přímého zaúčtování), documents (spárované doklady id, number, amount), assigned_amount a open_amount (nespárovaná část, u jiného stavu než unmatched 0); poslední dvě chybí, když pro přepočet měny nejde načíst kurz ČNB |
Chování
- Co změní
- Nic nezapisuje.
- Limity
- 200 pohybů na stránku; filtr
idsbere nejvýše 200 ID.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions?status=unmatched"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions?status=unmatched', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"total": 6,
"page": 1,
"per": 200,
"sums": {
"incoming": 39010.0,
"outgoing": -7620.0
},
"status_counts": {
"matched": 63,
"posted": 38,
"unmatched": 6
},
"rows": [
{
"id": 64,
"account_code": null,
"amount": 18150.0,
"bank_account_id": 2,
"booked_on": "2026-09-25",
"constant_symbol": null,
"counterparty_account": "2971512207",
"counterparty_bank_code": "0710",
"counterparty_name": "Atelier Lumen s.r.o.",
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"import_batch": null,
"message": "Úhrada – viz smlouva",
"reference": "demo-noise-3",
"specific_symbol": null,
"status": "unmatched",
"updated_at": "2026-09-28T10:00:00.000Z",
"variable_symbol": "777",
"counterparty": "2971512207/0710",
"documents": [],
"assigned_amount": 0.0,
"open_amount": 18150.0
},
{
"id": 63,
"account_code": null,
"amount": -4120.0,
"bank_account_id": 2,
"booked_on": "2026-09-23",
"constant_symbol": null,
"counterparty_account": "1599688387",
"counterparty_bank_code": "0710",
"counterparty_name": "Finanční úřad pro hl. m. Prahu",
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"import_batch": null,
"message": "Platba daně – finanční úřad",
"reference": "demo-noise-2",
"specific_symbol": null,
"status": "unmatched",
"updated_at": "2026-09-28T10:00:00.000Z",
"variable_symbol": "0000000001",
"counterparty": "1599688387/0710",
"documents": [],
"assigned_amount": 0.0,
"open_amount": 4120.0
}
]
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Import bankovního výpisu (datový export nebo PDF)
/entities/{entity_id}/bank_transactions/import
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY - V příručce
- Banka a pokladna › Nahrát bankovní výpis
Naimportuje pohyby z výpisu na bankovní účet a uloží originál výpisu (datový soubor a PDF z banky) k období a dávce importu. file je datový export (GPC/ABO, XML camt.053, MT940/STA nebo CSV; kódování UTF-8, UTF-16 nebo Windows-1250), který se čte přesně, nebo PDF výpis banky, jehož čtení je v betaverzi s ověřeným rozvržením pro Air Bank (3030), Českou národní banku (0710), Českou spořitelnu (0800), ČSOB (0300), Equa bank (6100), Fio banku (2010), Komerční banku (0100), MONETA Money Bank (0600), Oberbank (8040), Raiffeisenbank (5500), Sberbank CZ (6800) a UniCredit Bank (2700); PDF jiných bank se čte také a náhled je označí verified: false. PDF se naimportuje, jen když počáteční zůstatek + pohyby = konečný zůstatek a souhlasí případně uvedený počet položek i součty příjmů a výdajů; naskenované PDF bez textu se odmítne. Období se bere z výpisu (uvedené období, jinak rozsah dat pohybů), period_month je povinný jen u výpisu, který neuvádí období ani datované pohyby; výpis musí patřit zvolenému účtu (IBAN, případně číslo účtu a kód banky) a na pokladnu ho importovat nelze. S preview vrátí náhled po všech kontrolách se stavem 200 a nic nezapíše; bez něj uloží nové pohyby (201), se zapnutou automatizací auto_match je spáruje s doklady a se zapnutou bank_rules na zbylé použije pravidla pro banku.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát multipart/form-data.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
bank_account_id | celé číslo | ano | ID bankovního účtu firmy (kind: bank), na který se výpis importuje |
file | soubor | ano | Datový export (nejvýše 5 MB) nebo PDF výpis banky (nejvýše 15 MB). CSV se rozpozná podle hlavičky (exporty Fio, Air Bank, KB, ČSOB, Raiffeisenbank, MONETA, České spořitelny i jiné); ZIP se nepřijímá. |
statement_pdf | soubor | ne | Originální PDF výpis k datovému exportu, nejvýše 15 MB, musí jít o platné PDF. Když je file sám PDF, jiné PDF se odmítne. |
period_month | text | ne | Měsíc výpisu RRRR-MM (rok 2000–2100); povinný jen u výpisu bez uvedeného období a datovaných pohybů. Když je zadán, použije se místo období z výpisu, všechny pohyby musí do měsíce patřit a období se považuje za potvrzené. |
password | text | ne | Heslo zaheslovaného PDF; použije se jen pro toto čtení, neukládá se ani nezapisuje do logu |
preview | ano/ne | ne | true (nebo 1) vrátí náhled importu a nic nezapíše Výchozí false. |
Odpověď
201 application/json Výsledek importu a uložený výpis. S preview vrací stav 200 a místo výsledku náhled s poli preview, format, pdf, period, account, statement_number, opening_balance, closing_balance, movements, total, checks, new_count, skipped_count, already_archived, sample, new_movements, pdf_bank a warnings.
| Pole | Význam |
|---|---|
format | Rozpoznaný formát gpc, camt053, mt940, csv nebo pdf |
import_batch | Identifikátor dávky (12 šestnáctkových znaků) uložený u nových pohybů |
statement | Co výpis uvádí o sobě – účet, číslo výpisu, období from–to, počáteční a konečný zůstatek; u PDF i checks |
imported | Počet nových pohybů |
skipped | Počet přeskočených pohybů (už uložené, u PDF i z jiného zdroje, nulové nebo bez data) |
matched | Počet nových pohybů spárovaných s doklady |
ruled | Počet nových pohybů vyřízených pravidly; rules popisuje, co pravidla udělala |
warnings | Upozornění ke čtení výpisu (např. strany PDF bez přečtených pohybů) |
archive | Uložený výpis – id, bank_account_id, period_key (RRRR-MM nebo RRRR-MM-DD..RRRR-MM-DD), period_from, period_to, period_confirmed, format, data_filename, pdf_filename, import_batch, imported_count, skipped_count, created_at; u opakovaného importu stejného souboru dosavadní výpis |
period | Jen náhled: období key, from, to a confirmed (potvrzené měsícem, PDF nebo obdobím uvedeným v PDF) |
new_count | Jen náhled – kolik pohybů by bylo nových; skipped_count kolik by se přeskočilo |
already_archived | Jen náhled – stejný datový soubor za stejné období už je uložený |
checks | Jen náhled PDF – výsledky kontrol (zůstatky, počet položek, součty, průběžné zůstatky, počet výpisů v PDF) |
sample | Jen náhled – prvních 5 nových pohybů |
new_movements | Jen náhled PDF – nové pohyby ke kontrole (nejvýše 5 000); u datového exportu null |
pdf_bank | Jen náhled PDF – banka výpisu code, name a verified (rozvržení ověřené na skutečných výpisech) |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 413 | – | Soubor nebo PDF je větší než 15 MB: „Výpis je příliš velký (PDF nejvýše 15 MB, datový soubor 5 MB)“ |
| 422 | – | Účet je pokladna: „Výpis lze importovat jen na bankovní účet“ |
| 422 | – | Datový export je větší než 5 MB: „Datový výpis přesahuje limit 5 MB“ |
| 422 | – | file nebo statement_pdf není nahraný soubor nebo je prázdný: „Výpis chybí“, „Výpis je prázdný“, „PDF výpis chybí“, „PDF výpis je prázdný“ |
| 422 | – | PDF není platné: „Příloha bankovního výpisu musí být platný soubor PDF“ |
| 422 | PDF_PASSWORD_REQUIRED | PDF je zaheslované a heslo chybí nebo nesouhlasí: „…: PDF výpis je chráněný heslem – zadejte ho“ nebo „…: Heslo k PDF výpisu nesouhlasí“ |
| 422 | – | Výpis nejde přečíst – text první chyby čtení, např. nerozpoznaný formát, ZIP, PDF bez textu, PDF nad 400 stran, čtení PDF přes 30 s, pohyby z PDF nesouhlasí se zůstatky, počtem položek nebo součty („… nic se neimportovalo – nahrajte datový export výpisu“), výpisy v jednom PDF na sebe nenavazují nebo patří různým účtům |
| 422 | – | file je PDF a statement_pdf jiné PDF: „Výpis v PDF je zároveň originál od banky – druhé PDF nepřikládejte“ |
| 422 | – | Chybné období: „Měsíc výpisu musí být ve tvaru RRRR-MM“, „Rok výpisu je mimo podporovaný rozsah“, „Datový soubor obsahuje pohyby mimo vybraný měsíc“, „Datový soubor uvádí období mimo vybraný měsíc“, „Výpis neuvádí období ani datované pohyby – vyberte měsíc výpisu“ |
| 422 | – | Výpis patří jinému účtu: „Datový výpis patří jinému bankovnímu účtu, než je zvolený účet v Saldu“ |
| 422 | – | Konflikt s uloženým originálem: „K tomuto datovému výpisu je uložené jiné PDF; existující originál nelze tiše nahradit“, „K tomuto datovému výpisu je PDF už zaevidované pro jiné období“, „Ke stejnému datovému souboru existuje více nepotvrzených období; PDF je nutné přiřadit ručně“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Bez
previewv jedné transakci vytvoří nové bankovní pohyby (stavunmatched) a archiv výpisu s datovým souborem a PDF, nebo doplní PDF k dříve uloženému výpisu stejného souboru a potvrdí jeho období; při jakékoli chybě se neuloží nic. Podle automatizací nové pohyby spáruje (úhrady dokladů s účetními zápisy) a vyřídí pravidly (zaúčtování, párování, ignorování). Zapíše auditní událostibank.imported,bank.statement_archivednebobank.statement_pdf_attached, případněpayment.recordedabank.rule_applied. Spreviewnic nezapisuje. - Limity
- Soubor nad 15 MB odmítne stavem 413; datový export nejvýše 5 MB, PDF nejvýše 15 MB a 400 stran, každý krok čtení PDF nejvýše 30 s. Náhled vrací nejvýše 5 000 nových pohybů PDF a 5 ukázkových pohybů.
- Opakování
- Pohyby, jejichž reference (ID pohybu z banky, jinak otisk údajů pohybu) už účet má, se přeskočí; u PDF se navíc přeskočí pohyby, které účet má z jiného zdroje (stejná částka, nejdřív stejný den, pak ±3 dny, každý uložený pohyb nejvýš jednou). Stejný datový soubor (SHA-256) za stejné období nevytvoří druhý archiv, jen může doplnit chybějící PDF; jiné PDF k výpisu, který už PDF má, se odmítne. Auditní událost
bank.importedse zapíše při každém volání bezpreview.
Příklad
Datový výpis camt.053 k tomuto bankovnímu účtu; období a zůstatky se čtou ze souboru. Ukázková firma má tento soubor už naimportovaný, takže záznam ukazuje opakovaný import: oba pohyby se přeskočily (imported: 0, skipped: 2) a archive je dosavadní uložený výpis s původní dávkou.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-F "bank_account_id=2" \
-F "file=@vypis-2026-08.xml" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/importJavaScript
const form = new FormData();
form.append('file', fileInput.files[0], 'vypis-2026-08.xml');
form.append('bank_account_id', '2');
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/import', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST',
body: form
});
const data = await response.json();{
"format": "camt053",
"import_batch": "9f423b52d8a6",
"statement": {
"format": "camt053",
"variant": "camt.053.001.02",
"account": {
"number": "2900001227",
"bank_code": "2010",
"iban": "CZ3820100000002900001227",
"currency": "CZK",
"name": null
},
"statement_number": "2026-08",
"from": "2026-08-01",
"to": "2026-08-31",
"opening_balance": 100000.0,
"closing_balance": 108600.0
},
"imported": 0,
"skipped": 2,
"matched": 0,
"ruled": 0,
"rules": [],
"warnings": [],
"archive": {
"id": 1,
"bank_account_id": 2,
"period_key": "2026-08",
"period_from": "2026-08-01",
"period_to": "2026-08-31",
"period_confirmed": false,
"format": "camt053",
"data_filename": "vypis-2026-08.xml",
"pdf_filename": null,
"import_batch": "0d43e5520745",
"imported_count": 2,
"skipped_count": 0,
"created_at": "2026-09-28T10:00:00.000Z"
}
}
POST Automatické párování pohybů s doklady
/entities/{entity_id}/bank_transactions/auto_match
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Spáruje nespárované pohyby s vystavenými doklady, u kterých je shoda jistá, a zaznamená jejich úhradu. Skóre sčítá shodu variabilního symbolu (60), částky (35), čísla účtu kontaktu (15) a názvu protistrany (10); jistá shoda má skóre aspoň 90 a vyšší než druhý nejlepší doklad, takže automaticky se páruje jen při shodě VS i částky. Automaticky se nikdy nepárují pohyby v uzamčeném období, přijaté faktury placené kartou a odchozí platby v CZK, ke kterým může patřit neuhrazený přijatý doklad se stejnou částkou, datem vystavení ±3 dny a odpovídajícím obchodníkem (u platby kartou vystavený, s přiloženým originálem nebo placený kartou, u jiné platby jen placený kartou) – takové pohyby se nabídnou jen v návrzích k ručnímu spárování. Přepínač automatizace auto_match toto ruční spuštění neomezuje.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
transaction_ids | pole (celé číslo) | ne | Jen tyto pohyby (pole ID, bere se nejvýše 1 000; text s ID oddělenými čárkami se nerozdělí). Bez pole se zpracují všechny nespárované pohyby firmy; prázdné pole nespáruje nic. |
Odpověď
200 application/json Počet spárovaných pohybů a jejich páry.
| Pole | Význam |
|---|---|
matched | Počet spárovaných pohybů |
details | Páry transaction_id, document_id, score |
Chování
- Co změní
- Pro každou jistou shodu vytvoří úhradu dokladu (datum pohybu, způsob
bank, vazba na pohyb) ve výši menší z nespárované části pohybu a zbývající úhrady dokladu; v podvojném účetnictví ji zaúčtuje (např. MD221xxx/ D311, případně kurzový rozdíl563/663), přepočte uhrazenou částku dokladu a plně přiřazený pohyb označímatched. Zapíše auditní událostpayment.recordedu každé úhrady. Pohyb, u kterého párování selže, přeskočí. - Limity
- Nejvýše 1 000 ID v
transaction_ids. - Opakování
- Zpracuje jen pohyby ve stavu
unmatched; už spárované se znovu nepárují, takže opakované volání spáruje jen to, co mezitím přibylo.
Příklad
Pohyb v ukázce nemá jistou shodu s žádným dokladem, proto se nic nespárovalo (matched: 0).
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"transaction_ids":[64]}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/auto_matchJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/auto_match', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"transaction_ids": [
64
]
})
});
const data = await response.json();{
"matched": 0,
"details": []
}
GET Uložené výpisy s kontrolou zůstatků
/entities/{entity_id}/bank_transactions/statements
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí nejvýše 120 naposledy uložených výpisů (od nejnovějšího), volitelně jen jednoho účtu, a u každého výsledek kontroly reconciliation. Kontrola ověřuje, že počáteční zůstatek + pohyby = konečný zůstatek výpisu, návaznost na předchozí výpis účtu, chybějící výpis mezi nimi, jiný výpis za překrývající se období, že pohyby v Saldu za období odpovídají výpisu a že konečný zůstatek souhlasí s účetnictvím ke konci období (v podvojném účetnictví analytický účet 221xxx, u cizoměnového účtu spárované a zaúčtované pohyby v měně účtu, v daňové evidenci počáteční stav + pohyby + ruční úhrady; vždy od data počátečního stavu účtu). Kontrolované období je období uvedené v souboru, jinak rozsah dat jeho pohybů; zvolený měsíc (period_from–period_to) se použije, jen když soubor neuvádí ani jedno. U souboru bez uvedeného období se tak kontroluje jen úsek od prvního do posledního pohybu, i když byl importován s period_month, a zbytek měsíce se může hlásit jako chybějící výpis. Kontrola nikdy nic neúčtuje. status je matched (vše sedí), mismatch (jiná měna než účet, počáteční zůstatek + pohyby ≠ konečný, nenavazuje na předchozí výpis, pohyby v Saldu se liší od výpisu nebo konečný zůstatek nesouhlasí s účetnictvím), gap (chybí výpis – jen když zůstatky nenavazují, Saldo má v mezeře pohyby nebo mezera obsahuje celý měsíc), needs_manual (výpis nemá období, soubor nejde přečíst nebo neuvádí zůstatky), before_opening (výpis končí před počátečním stavem účtu, jen informativně) nebo reviewed (problém označený jako ručně zkontrolovaný, dokud se výsledek kontroly nezmění).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
bank_account_id | dotaz | celé číslo | ne | Jen výpisy tohoto účtu (účet musí patřit firmě, jinak 404) Příklad 31. |
Odpověď
200 application/json Pole uložených výpisů, každý s objektem reconciliation.
| Pole | Význam |
|---|---|
id | ID uloženého výpisu (archive_id); bank_account_id jeho účet, created_at čas uložení |
period_key | RRRR-MM, nebo RRRR-MM-DD..RRRR-MM-DD pro jiné období; period_from, period_to a period_confirmed k tomu |
format | Formát zdroje (gpc, camt053, mt940, csv, pdf) |
data_filename | Název uloženého datového souboru; pdf_filename název PDF (null bez PDF) |
import_batch | Dávka importu; imported_count a skipped_count z prvního importu souboru |
reconciliation.status | Výsledek kontroly (viz popis) |
reconciliation.issues | Popisy problémů česky, nejdůležitější první; překryv s jiným výpisem je jen upozornění a stav nemění |
reconciliation.period | Kontrolované období from–to (viz popis); currency je měna výpisu, jinak měna účtu |
reconciliation.opening_balance | Platný počáteční zůstatek (ze souboru nebo ručně zadaný), closing_balance konečný; file_opening_balance a file_closing_balance jsou hodnoty ze souboru, source je file, manual nebo null |
reconciliation.movements_total | Součet pohybů ve výpisu, movements_count jejich počet, movements_difference rozdíl proti zůstatkům |
reconciliation.previous | Předchozí výpis účtu (id, period_key, from, to, closing_balance); continuity_difference rozdíl návaznosti |
reconciliation.gap | Chybějící období from–to, jinak null; overlaps ID výpisů za překrývající se období |
reconciliation.imported | Pohyby v Saldu za období proti souboru – total, difference, ok |
reconciliation.books | Účetnictví na začátku a konci období – label, account_code, ledger, currency, opening, closing, opening_difference, closing_difference; při rozdílu v podvojném účetnictví pending (count, total) s nezaúčtovanými nebo ignorovanými pohyby do konce období |
reconciliation.manual | Kdo a kdy zadal zůstatky ručně a poznámka (by, at, note) |
reconciliation.review | Ruční kontrola (by, at, note, current); current je false, když se výsledek kontroly od označení změnil |
Chování
- Co změní
- Nic nezapisuje s jednou výjimkou: u výpisů uložených dřív, než Saldo začalo evidovat údaje ze souboru (zůstatky, období a součet pohybů), je jednou načte z uloženého souboru a uloží k výpisu bez auditní události.
- Limity
- Nejvýše 120 nejnověji uložených výpisů.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements?bank_account_id=2"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements?bank_account_id=2', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 2,
"bank_account_id": 2,
"period_key": "2026-07",
"period_from": "2026-07-01",
"period_to": "2026-07-31",
"period_confirmed": true,
"format": "csv",
"data_filename": "vypis-2026-07.csv",
"pdf_filename": null,
"import_batch": "abee45dce775",
"imported_count": 1,
"skipped_count": 0,
"created_at": "2026-09-28T10:00:00.000Z",
"reconciliation": {
"status": "needs_manual",
"source": null,
"currency": "CZK",
"period": {
"from": "2026-07-15",
"to": "2026-07-15"
},
"opening_balance": null,
"closing_balance": null,
"file_opening_balance": null,
"file_closing_balance": null,
"movements_total": 1500.0,
"movements_count": 1,
"movements_difference": null,
"previous": null,
"continuity_difference": null,
"gap": null,
"overlaps": [],
"imported": {
"total": 1500.0,
"difference": 0.0,
"ok": true
},
"books": {
"label": "účet 221001",
"account_code": "221001",
"ledger": true,
"currency": "CZK",
"opening": 365231.1,
"closing": 365231.1,
"opening_difference": null,
"closing_difference": null
},
"issues": [
"Datový výpis neuvádí počáteční a konečný zůstatek – opište je z PDF výpisu banky"
],
"manual": null,
"review": null
}
},
{
"id": 1,
"bank_account_id": 2,
"period_key": "2026-08",
"period_from": "2026-08-01",
"period_to": "2026-08-31",
"period_confirmed": false,
"format": "camt053",
"data_filename": "vypis-2026-08.xml",
"pdf_filename": null,
"import_batch": "0d43e5520745",
"imported_count": 2,
"skipped_count": 0,
"created_at": "2026-09-28T10:00:00.000Z",
"reconciliation": {
"status": "mismatch",
"source": "file",
"currency": "CZK",
"period": {
"from": "2026-08-01",
"to": "2026-08-31"
},
"opening_balance": 100000.0,
"closing_balance": 108600.0,
"file_opening_balance": 100000.0,
"file_closing_balance": 108600.0,
"movements_total": 8600.0,
"movements_count": 2,
"movements_difference": 0.0,
"previous": {
"id": 2,
"period_key": "2026-07",
"from": "2026-07-15",
"to": "2026-07-15",
"closing_balance": null
},
"continuity_difference": null,
"gap": {
"from": "2026-07-16",
"to": "2026-07-31"
},
"overlaps": [],
"imported": {
"total": 215716.5,
"difference": 207116.5,
"ok": false
},
"books": {
"label": "účet 221001",
"account_code": "221001",
"ledger": true,
"currency": "CZK",
"opening": 556774.6,
"closing": 763891.1,
"opening_difference": -456774.6,
"closing_difference": -655291.1,
"pending": {
"count": 3,
"total": 10100.0
}
},
"issues": [
"Konečný zůstatek 108 600,00 Kč nesouhlasí se zůstatkem – účet 221001 k 31. 8. 2026 je 763 891,10 Kč (rozdíl -655 291,10 Kč)",
"V účtu 221001 zatím nejsou 3 nezaúčtované nebo ignorované pohyby za 10 100,00 Kč"
],
"manual": null,
"review": null
}
}
]
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Stažení originálu uloženého výpisu
/entities/{entity_id}/bank_transactions/statements/{archive_id}/{kind}
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Stáhne uložený originál výpisu: data je importovaný soubor, pdf PDF výpis banky. U výpisu importovaného z PDF je týž soubor uložen jako oba druhy. Odpověď je příloha s původním názvem souboru a 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 (firmy) Příklad 12. |
archive_id | cesta | celé číslo | ano | ID uloženého výpisu Příklad 7. |
kind | cesta | text | ano | data = importovaný soubor, pdf = originální PDF výpis Hodnoty: data, pdf. Příklad data. |
Odpověď
200 application/octet-stream Obsah souboru; pro pdf s typem application/pdf, pro data s typem application/octet-stream.
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 404 | – | Výpis nemá uložený soubor tohoto druhu (např. datový export bez PDF) nebo kind není data ani pdf |
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/bank_transactions/statements/1/dataJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements/1/data', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();application/octet-stream, 1535 bajtů (soubor vypis-2026-08.xml)
PATCH Zadání zůstatků výpisu opsaných z PDF
/entities/{entity_id}/bank_transactions/statements/{archive_id}/balances
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Uloží počáteční a konečný zůstatek opsaný z PDF výpisu banky pro strany, které datový soubor neuvádí; stranu uvedenou v souboru změnit nelze (zadaná hodnota musí souhlasit, prázdná ji ponechá). Částka se čte jako v aplikaci: mezery a apostrofy se vynechají, poslední tečka nebo čárka je desetinná a smí mít nejvýše dvě desetinná místa (např. 12 500,40). Výpis, jehož období končí v uzamčeném období, měnit nelze. Nic se neúčtuje; změní se jen podklad kontroly, jejíž nový výsledek odpověď vrací.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
archive_id | cesta | celé číslo | ano | ID uloženého výpisu Příklad 8. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
opening_balance | text | ne | Počáteční zůstatek z PDF (text nebo číslo); povinný, když ho soubor neuvádí |
closing_balance | text | ne | Konečný zůstatek z PDF (text nebo číslo); povinný, když ho soubor neuvádí |
note | text | ne | Poznámka, nejvýše 250 znaků Nejvýše 250 znaků. |
Odpověď
200 application/json Výpis ve stejném tvaru jako v seznamu výpisů, s novým výsledkem kontroly reconciliation (source = manual).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Soubor uvádí oba zůstatky: „Zůstatky z datového výpisu nelze přepsat ručně“ |
| 422 | – | Výpis patří do uzamčeného období: „Období do … je uzamčeno – zůstatky tohoto výpisu už nelze měnit“ |
| 422 | – | Chybí zůstatek, který soubor neuvádí: „Zadejte počáteční i konečný zůstatek z PDF výpisu“, „Zadejte počáteční zůstatek z PDF výpisu“, „Zadejte konečný zůstatek z PDF výpisu“ |
| 422 | – | Zadaná hodnota se liší od zůstatku ze souboru: „Počáteční (Konečný) zůstatek uvádí datový výpis (…) – nelze ho přepsat ručně“ |
| 422 | – | Hodnota není číslo: „Počáteční (Konečný) zůstatek zadejte jako číslo s nejvýše dvěma desetinnými místy, např. 12 500,40“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží zůstatky k výpisu se zdrojem
manual, kdo a kdy je zadal a poznámku. Zapíše auditní událostbank.statement_balances_entereds původními i novými hodnotami. Neúčtuje. - Opakování
- Každé volání hodnoty přepíše a zapíše další auditní událost.
Příklad
Výpis z datového souboru, který zůstatky neuvádí.
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"opening_balance":"412 380,00","closing_balance":"431 250,50","note":"Opsáno z PDF výpisu č. 9"}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements/2/balancesJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements/2/balances', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"opening_balance": "412 380,00",
"closing_balance": "431 250,50",
"note": "Opsáno z PDF výpisu č. 9"
})
});
const data = await response.json();{
"id": 2,
"bank_account_id": 2,
"period_key": "2026-07",
"period_from": "2026-07-01",
"period_to": "2026-07-31",
"period_confirmed": true,
"format": "csv",
"data_filename": "vypis-2026-07.csv",
"pdf_filename": null,
"import_batch": "abee45dce775",
"imported_count": 1,
"skipped_count": 0,
"created_at": "2026-09-28T10:00:00.000Z",
"reconciliation": {
"status": "mismatch",
"source": "manual",
"currency": "CZK",
"period": {
"from": "2026-07-15",
"to": "2026-07-15"
},
"opening_balance": 412380.0,
"closing_balance": 431250.5,
"file_opening_balance": null,
"file_closing_balance": null,
"movements_total": 1500.0,
"movements_count": 1,
"movements_difference": 17370.5,
"previous": null,
"continuity_difference": null,
"gap": null,
"overlaps": [],
"imported": {
"total": 1500.0,
"difference": 0.0,
"ok": true
},
"books": {
"label": "účet 221001",
"account_code": "221001",
"ledger": true,
"currency": "CZK",
"opening": 365231.1,
"closing": 365231.1,
"opening_difference": 47148.9,
"closing_difference": 66019.4,
"pending": {
"count": 1,
"total": 1500.0
}
},
"issues": [
"Konečný zůstatek 431 250,50 Kč nesouhlasí se zůstatkem – účet 221001 k 15. 7. 2026 je 365 231,10 Kč (rozdíl 66 019,40 Kč)",
"V účtu 221001 zatím není 1 nezaúčtovaný nebo ignorovaný pohyb za 1 500,00 Kč"
],
"manual": {
"by": "ukazka",
"at": "2026-09-28T10:00:00.000Z",
"note": "Opsáno z PDF výpisu č. 9"
},
"review": null
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Označení problémového výpisu jako ručně zkontrolovaného
/entities/{entity_id}/bank_transactions/statements/{archive_id}/review
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Označí výpis, u kterého kontrola našla problém (mismatch, gap nebo needs_manual), jako ručně zkontrolovaný s poznámkou, co bylo ověřeno. Saldo si uloží otisk (SHA-256) výsledku kontroly; stav reviewed platí, jen dokud se výsledek kontroly nezmění – pak se vrátí původní problém a review.current je false. Výpis bez problému ani výpis, jehož období končí v uzamčeném období, označit nelze.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
archive_id | cesta | celé číslo | ano | ID uloženého výpisu Příklad 7. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
note | text | ano | Co bylo u výpisu ověřeno; po oříznutí mezer 1–250 znaků Nejvýše 250 znaků. |
Odpověď
200 application/json Výpis ve stejném tvaru jako v seznamu výpisů, s výsledkem kontroly reconciliation (stav reviewed).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Poznámka chybí: „Napište, co jste u výpisu ověřili“ |
| 422 | – | Poznámka je delší než 250 znaků: „Poznámka může mít nejvýše 250 znaků“ |
| 422 | – | Kontrola nenašla problém: „Ručně lze označit jen výpis, u kterého kontrola našla problém“ |
| 422 | – | Výpis patří do uzamčeného období: „Období do … je uzamčeno – ruční kontrolu tohoto výpisu už nelze měnit“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží k výpisu, kdo a kdy ho zkontroloval, poznámku a otisk výsledku kontroly. Zapíše auditní událost
bank.statement_reviewedse stavem a problémy. Neúčtuje. - Opakování
- Nové označení přepíše předchozí (poznámku, čas i otisk) a zapíše další auditní událost.
Příklad
Předpokládá, že kontrola výpisu našla problém (např. rozdíl proti účtu 221).
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"note":"Rozdíl tvoří platba zaúčtovaná až v dalším měsíci, ověřeno v internetovém bankovnictví"}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements/1/reviewJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements/1/review', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"note": "Rozdíl tvoří platba zaúčtovaná až v dalším měsíci, ověřeno v internetovém bankovnictví"
})
});
const data = await response.json();{
"id": 1,
"bank_account_id": 2,
"period_key": "2026-08",
"period_from": "2026-08-01",
"period_to": "2026-08-31",
"period_confirmed": false,
"format": "camt053",
"data_filename": "vypis-2026-08.xml",
"pdf_filename": null,
"import_batch": "0d43e5520745",
"imported_count": 2,
"skipped_count": 0,
"created_at": "2026-09-28T10:00:00.000Z",
"reconciliation": {
"status": "reviewed",
"source": "file",
"currency": "CZK",
"period": {
"from": "2026-08-01",
"to": "2026-08-31"
},
"opening_balance": 100000.0,
"closing_balance": 108600.0,
"file_opening_balance": 100000.0,
"file_closing_balance": 108600.0,
"movements_total": 8600.0,
"movements_count": 2,
"movements_difference": 0.0,
"previous": {
"id": 2,
"period_key": "2026-07",
"from": "2026-07-15",
"to": "2026-07-15",
"closing_balance": null
},
"continuity_difference": null,
"gap": {
"from": "2026-07-16",
"to": "2026-07-31"
},
"overlaps": [],
"imported": {
"total": 215716.5,
"difference": 207116.5,
"ok": false
},
"books": {
"label": "účet 221001",
"account_code": "221001",
"ledger": true,
"currency": "CZK",
"opening": 556774.6,
"closing": 763891.1,
"opening_difference": -456774.6,
"closing_difference": -655291.1,
"pending": {
"count": 3,
"total": 10100.0
}
},
"issues": [
"Konečný zůstatek 108 600,00 Kč nesouhlasí se zůstatkem – účet 221001 k 31. 8. 2026 je 763 891,10 Kč (rozdíl -655 291,10 Kč)",
"V účtu 221001 zatím nejsou 3 nezaúčtované nebo ignorované pohyby za 10 100,00 Kč"
],
"manual": null,
"review": {
"by": "ukazka",
"at": "2026-09-28T10:00:00.000Z",
"note": "Rozdíl tvoří platba zaúčtovaná až v dalším měsíci, ověřeno v internetovém bankovnictví",
"current": true
}
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
DELETE Zrušení ruční kontroly výpisu
/entities/{entity_id}/bank_transactions/statements/{archive_id}/review
- Oprávnění
- Vlastník nebo účetní
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Zruší ruční kontrolu výpisu, takže se jeho problém znovu počítá. Výpis, jehož období končí v uzamčeném období, změnit nelze.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
archive_id | cesta | celé číslo | ano | ID uloženého výpisu Příklad 7. |
Odpověď
200 application/json Výpis ve stejném tvaru jako v seznamu výpisů, s výsledkem kontroly bez ruční kontroly (review je null).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Výpis není označený: „Výpis není označený jako zkontrolovaný ručně“ |
| 422 | – | Výpis patří do uzamčeného období: „Období do … je uzamčeno – ruční kontrolu tohoto výpisu už nelze měnit“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Smaže u výpisu údaje o ruční kontrole. Zapíše auditní událost
bank.statement_review_withdrawns původní kontrolou. - Opakování
- Druhé volání skončí chybou 422, protože výpis už označený není.
Příklad
Navazuje na označení výpisu jako ručně zkontrolovaného.
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements/1/reviewJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/statements/1/review', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();{
"id": 1,
"bank_account_id": 2,
"period_key": "2026-08",
"period_from": "2026-08-01",
"period_to": "2026-08-31",
"period_confirmed": false,
"format": "camt053",
"data_filename": "vypis-2026-08.xml",
"pdf_filename": null,
"import_batch": "0d43e5520745",
"imported_count": 2,
"skipped_count": 0,
"created_at": "2026-09-28T10:00:00.000Z",
"reconciliation": {
"status": "mismatch",
"source": "file",
"currency": "CZK",
"period": {
"from": "2026-08-01",
"to": "2026-08-31"
},
"opening_balance": 100000.0,
"closing_balance": 108600.0,
"file_opening_balance": 100000.0,
"file_closing_balance": 108600.0,
"movements_total": 8600.0,
"movements_count": 2,
"movements_difference": 0.0,
"previous": {
"id": 2,
"period_key": "2026-07",
"from": "2026-07-15",
"to": "2026-07-15",
"closing_balance": null
},
"continuity_difference": null,
"gap": {
"from": "2026-07-16",
"to": "2026-07-31"
},
"overlaps": [],
"imported": {
"total": 215716.5,
"difference": 207116.5,
"ok": false
},
"books": {
"label": "účet 221001",
"account_code": "221001",
"ledger": true,
"currency": "CZK",
"opening": 556774.6,
"closing": 763891.1,
"opening_difference": -456774.6,
"closing_difference": -655291.1,
"pending": {
"count": 3,
"total": 10100.0
}
},
"issues": [
"Konečný zůstatek 108 600,00 Kč nesouhlasí se zůstatkem – účet 221001 k 31. 8. 2026 je 763 891,10 Kč (rozdíl -655 291,10 Kč)",
"V účtu 221001 zatím nejsou 3 nezaúčtované nebo ignorované pohyby za 10 100,00 Kč"
],
"manual": null,
"review": null
}
}
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Návrhy dokladů ke spárování s pohybem
/entities/{entity_id}/bank_transactions/{id}/suggestions
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí nejvýše 8 dokladů, se kterými lze nespárovaný pohyb spárovat, seřazených podle skóre. Kandidáti jsou otevřené vystavené doklady správného směru (k příchozí platbě vydané faktury, zálohové faktury a přijaté dobropisy, k odchozí přijaté faktury, zálohy a vydané dobropisy; nejvýše 400 nejnovějších); skóre sčítá shodu VS (60), částky (35), účtu kontaktu (15) a názvu protistrany (10) a vrací se jen návrhy se skóre aspoň 10. U odchozí karetní platby v CZK se na začátek zařadí vystavené přijaté faktury s přiloženým originálem, stejnou částkou, datem vystavení ±3 dny a odpovídajícím obchodníkem (source: card_receipt, requires_confirmation: true, skóre nejvýš 89) – takový doklad se nikdy nespáruje automaticky. Pohyb, který není ve stavu unmatched nebo nemá nespárovanou část, dostane prázdné pole.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního pohybu Příklad 5012. |
Odpověď
200 application/json Pole návrhů.
| Pole | Význam |
|---|---|
document_id | ID dokladu; number jeho číslo, partner název kontaktu |
remaining | Zbývající úhrada dokladu v jeho měně (currency); due_date splatnost |
score | Skóre shody 10–100 |
reasons | Důvody česky (variabilní symbol, částka, číslo účtu, název protistrany, originál dokladu, datum karetní platby) |
source | card_receipt u dokladu k karetní platbě, jinak chybí |
requires_confirmation | true u dokladu, který je nutné spárovat ručně |
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Nejvýše 8 návrhů z nejvýše 400 nejnovějších kandidátů.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/suggestionsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/suggestions', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"document_id": 27,
"number": "FV20260024",
"partner": "Atelier Lumen s.r.o.",
"remaining": 72600.0,
"currency": "CZK",
"due_date": "2026-09-27",
"score": 10,
"reasons": [
"název protistrany"
]
}
]
POST Spárování pohybu s dokladem
/entities/{entity_id}/bank_transactions/{id}/match
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Spáruje pohyb s vystaveným dokladem správného směru a zaznamená jeho úhradu s datem pohybu. Bez amount přiřadí menší z nespárované části pohybu a zbývající úhrady dokladu; u dokladu v jiné měně přepočítá kurzem ČNB ke dni pohybu (když kurz ČNB chybí, kurzem dokladu) a když se nespárovaná část od zbytku dokladu liší nejvýš o 3 %, uhradí celý zbytek dokladu. V podvojném účetnictví se úhrada zaúčtuje (vydaná faktura MD 221xxx / D 311, přijatá MD 321 / D 221xxx, zálohy přes 324/314, případně kurzový rozdíl 563/663). Pohyb přejde do stavu matched, až je přiřazený celý; jinak zůstane unmatched a zbytek lze spárovat s dalším dokladem nebo zaúčtovat. Karetní platba spárovaná s přijatou fakturou placenou kartou se zaznamená jako úhrada kartou.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního pohybu Příklad 5012. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
document_id | celé číslo | ano | ID vystaveného dokladu firmy |
amount | číslo | ne | Částka úhrady v měně dokladu (znaménko se ignoruje); nesmí převýšit zbývající úhradu dokladu ani nespárovanou část pohybu |
Odpověď
200 application/json Pohyb ve stejném tvaru jako řádek seznamu pohybů (se status, documents a open_amount).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pohyb je v uzamčeném období: „Období do … je uzamčeno – pohyb nelze změnit“ |
| 422 | – | Pohyb je vyřízený: „Pohyb už je zaúčtovaný“, „Pohyb je ignorovaný – nejdřív ho vraťte mezi nespárované“, „Pohyb už je spárovaný“ |
| 422 | – | Doklad nejde uhradit: „Doklad není vystavený“, „Doklad je už uhrazený“ |
| 422 | – | Doklad je opačného směru: „Příchozí platbu lze spárovat jen s vydanou fakturou, zálohou nebo přijatým dobropisem“ nebo „Odchozí platbu lze spárovat jen s přijatou fakturou, zálohou nebo vydaným dobropisem“ |
| 422 | – | Chybná částka: „Částka převyšuje zbývající úhradu dokladu“, „Částka převyšuje nespárovanou část pohybu“, „Částka úhrady nesmí být nulová“ |
| 422 | – | Pohyb je v cizí měně jiné než doklad a kurz ČNB k datu pohybu není k dispozici: „Kurz ČNB pro … ke dni … se nepodařilo načíst – zkuste to prosím později“ (v měně dokladu se místo chybějícího kurzu ČNB použije kurz dokladu) |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Vytvoří úhradu dokladu navázanou na pohyb a jeho účet, v podvojném účetnictví účetní zápisy úhrady (zdroj
payment), přepočte uhrazenou částku dokladu a stav pohybu. Zapíše auditní událostpayment.recorded. - Opakování
- Každé úspěšné volání vytvoří novou úhradu. Opakování bez
amountse odmítne, jakmile je pohyb celý přiřazen („Pohyb už je spárovaný“) nebo doklad uhrazen („Doklad je už uhrazený“); s menšíamountvznikají další dílčí úhrady.
Příklad
Příchozí platba spárovaná s vydanou fakturou.
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"document_id":143}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/matchJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/match', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"document_id": 143
})
});
const data = await response.json();{
"id": 64,
"account_code": null,
"amount": 18150.0,
"bank_account_id": 2,
"booked_on": "2026-09-25",
"constant_symbol": null,
"counterparty_account": "2971512207",
"counterparty_bank_code": "0710",
"counterparty_name": "Atelier Lumen s.r.o.",
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"import_batch": null,
"message": "Úhrada – viz smlouva",
"reference": "demo-noise-3",
"specific_symbol": null,
"status": "matched",
"updated_at": "2026-09-28T10:00:00.000Z",
"variable_symbol": "777",
"counterparty": "2971512207/0710",
"documents": [
{
"id": 143,
"number": "FV20260025",
"amount": 18150.0
}
],
"assigned_amount": 18150.0,
"open_amount": 0
}
POST Přímé zaúčtování pohybu bez dokladu
/entities/{entity_id}/bank_transactions/{id}/book
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Zaúčtuje pohyb bez dokladu (poplatek, úrok, daň, převod) přímo na zvolený účet nebo kategorii a označí ho posted. V podvojném účetnictví vytvoří jeden zápis ke dni pohybu: u příchozí platby MD analytický účet banky / D account_code, u odchozí MD account_code / D účet banky, na nespárovanou část pohybu v CZK (u cizí měny kurzem ČNB ke dni pohybu, s částkou v měně), takže u částečně spárovaného pohybu jen zbytek. V daňové evidenci se zápis nevytváří a account_code je kategorie příjmu nebo výdaje (např. V15). Saldo kontroluje jen tvar kódu, ne to, zda účet v účtovém rozvrhu existuje.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního pohybu Příklad 5012. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
account_code | text | ano | Účet nebo kategorie; převede se na velká písmena, smí obsahovat číslice, písmena, tečku a pomlčku (nejvýše 12 znaků) a v podvojném účetnictví nesmí být shodný s analytickým účtem banky |
text | text | ne | Text účetního zápisu, použije se jen v podvojném účetnictví (delší se zkrátí na 250 znaků); výchozí je zpráva pohybu, název protistrany nebo „Bankovní pohyb“ |
Odpověď
200 application/json Pohyb ve stejném tvaru jako řádek seznamu pohybů (status = posted, account_code).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pohyb je v uzamčeném období: „Období do … je uzamčeno – pohyb nelze změnit“ |
| 422 | – | Pohyb je vyřízený: „Pohyb už je zaúčtovaný“, „Pohyb je ignorovaný – nejdřív ho vraťte mezi nespárované“, „Pohyb už je spárovaný“ |
| 422 | – | Pohyb v cizí měně nejde přepočítat: „Kurz ČNB pro … ke dni … se nepodařilo načíst – zkuste to prosím později“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Uloží stav
postedaaccount_code; v podvojném účetnictví vytvoří účetní zápis se zdrojembank(případné starší zápisy téhož pohybu nahradí). Zapíše auditní událostbank.posted. - Opakování
- Druhé volání skončí 422 „Pohyb už je zaúčtovaný“; jiný účet lze zvolit až po vrácení pohybu mezi nespárované.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"account_code":"648","text":"Ostatní provozní výnos"}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/bookJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/book', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"account_code": "648",
"text": "Ostatní provozní výnos"
})
});
const data = await response.json();{
"id": 64,
"account_code": "648",
"amount": 18150.0,
"bank_account_id": 2,
"booked_on": "2026-09-25",
"constant_symbol": null,
"counterparty_account": "2971512207",
"counterparty_bank_code": "0710",
"counterparty_name": "Atelier Lumen s.r.o.",
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"import_batch": null,
"message": "Úhrada – viz smlouva",
"reference": "demo-noise-3",
"specific_symbol": null,
"status": "posted",
"updated_at": "2026-09-28T10:00:00.000Z",
"variable_symbol": "777",
"counterparty": "2971512207/0710",
"documents": [],
"assigned_amount": 0.0,
"open_amount": 0
}
POST Ignorování pohybu
/entities/{entity_id}/bank_transactions/{id}/ignore
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Označí pohyb jako ignorovaný (typicky převod mezi vlastními účty), takže se nenabízí k párování ani zaúčtování. Pohyb s přiřazenou úhradou ignorovat nejde, nejdřív je nutné párování zrušit (vrácení pohybu mezi nespárované). U zaúčtovaného pohybu se jeho zápis smaže.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního pohybu Příklad 5012. |
Odpověď
200 application/json Pohyb ve stejném tvaru jako řádek seznamu pohybů (status = ignored).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pohyb je v uzamčeném období: „Období do … je uzamčeno – pohyb nelze změnit“ |
| 422 | – | Pohyb má úhradu: „Pohyb má přiřazené úhrady – nejdřív zrušte párování“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Nastaví stav
ignored, vymažeaccount_codea smaže zápisy pohybu se zdrojembank. Zapíše auditní událostbank.ignored. - Opakování
- Lze opakovat bez chyby; každé volání zapíše další auditní událost.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/ignoreJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/64/ignore', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST'
});
const data = await response.json();{
"id": 64,
"account_code": null,
"amount": 18150.0,
"bank_account_id": 2,
"booked_on": "2026-09-25",
"constant_symbol": null,
"counterparty_account": "2971512207",
"counterparty_bank_code": "0710",
"counterparty_name": "Atelier Lumen s.r.o.",
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"import_batch": null,
"message": "Úhrada – viz smlouva",
"reference": "demo-noise-3",
"specific_symbol": null,
"status": "ignored",
"updated_at": "2026-09-28T10:00:00.000Z",
"variable_symbol": "777",
"counterparty": "2971512207/0710",
"documents": [],
"assigned_amount": 0.0,
"open_amount": 0
}
POST Vrácení pohybu mezi nespárované
/entities/{entity_id}/bank_transactions/{id}/reset
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Vrátí spárovaný, zaúčtovaný nebo ignorovaný pohyb mezi nespárované: zruší všechny jeho úhrady dokladů včetně jejich účetních zápisů (doklady znovu čekají na úhradu), smaže zápis přímého zaúčtování, vymaže account_code a nastaví stav unmatched. Pohyb ani jeho úhradu v uzamčeném období vrátit nelze.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID bankovního pohybu Příklad 5013. |
Odpověď
200 application/json Pohyb ve stejném tvaru jako řádek seznamu pohybů (status = unmatched, prázdné documents).
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pohyb je v uzamčeném období: „Období do … je uzamčeno – pohyb nelze změnit“ |
| 422 | – | Úhrada je v uzamčeném období: „Období do … je uzamčeno – úhradu z … nelze měnit“ |
Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.
Chování
- Co změní
- Smaže úhrady navázané na pohyb a jejich zápisy (zdroj
payment), přepočte uhrazené částky dokladů, smaže zápisy se zdrojembanka nastaví stavunmatched. Zapíše auditní událostpayment.deletedza každou úhradu abank.reset; pohyb pak už nenese značku vyřízení pravidlem. - Opakování
- U nespárovaného pohybu bez úhrad nic nezmění, jen zapíše další auditní událost
bank.reset.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/22/resetJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_transactions/22/reset', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST'
});
const data = await response.json();{
"id": 22,
"account_code": null,
"amount": 77440.0,
"bank_account_id": 2,
"booked_on": "2026-09-22",
"constant_symbol": null,
"counterparty_account": "190507963",
"counterparty_bank_code": "0800",
"counterparty_name": "Kavárna U Zeleného stromu s.r.o.",
"created_at": "2026-09-28T10:00:00.000Z",
"currency": "CZK",
"import_batch": null,
"message": "Úhrada faktury FV20260022",
"reference": "demo-22-2026-09-22",
"specific_symbol": null,
"status": "unmatched",
"updated_at": "2026-09-28T10:00:00.000Z",
"variable_symbol": "20260022",
"counterparty": "190507963/0800",
"documents": [],
"assigned_amount": 0.0,
"open_amount": 77440.0
}
GET Seznam pravidel pro banku
/entities/{entity_id}/bank_rules
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí všechna pravidla pro banku firmy včetně vypnutých v pořadí, ve kterém se zkoušejí (position, pak ID). Ke každému přidá český popis podmínek (summary) a akce (action_summary), název akce, jméno kontaktu a název účtu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Odpověď
200 application/json Pole pravidel.
| Pole | Význam |
|---|---|
id | ID pravidla |
name | Název |
active | Zda je pravidlo zapnuté |
position | Pořadí (menší se zkouší dřív) |
action | post zaúčtovat na účet, match spárovat s fakturami kontaktu, partner přiřadit ke kontaktu, ignore ignorovat |
conditions | Podmínky ve tvaru, v jakém je Saldo uložilo (viz vytvoření pravidla) |
action_data | Data akce (account_code, text, partner_id) |
matches_count | Kolikrát pravidlo vyřídilo pohyb; last_matched_at kdy naposledy |
summary | Podmínky česky, např. „Odchozí · zpráva obsahuje „poplat““ |
action_summary | Akce česky, např. „Zaúčtovat na 568 Ostatní finanční náklady“; action_label název akce |
partner_name | Jméno kontaktu z action_data; account_name název účtu z action_data |
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/bank_rulesJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();[
{
"id": 1,
"action": "post",
"action_data": {
"account_code": "336",
"text": "Sociální pojištění"
},
"active": true,
"conditions": {
"direction": "out",
"counterparty_account": "21012-7921101/0710"
},
"created_at": "2026-09-28T10:00:00.000Z",
"last_matched_at": "2026-09-28T10:00:00.000Z",
"matches_count": 8,
"name": "Sociální pojištění – ČSSZ",
"position": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"summary": "Odchozí · protiúčet 21012-7921101/0710",
"action_summary": "Zaúčtovat na 336 Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění",
"action_label": "Zaúčtovat na účet",
"partner_name": null,
"account_name": "Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění"
},
{
"id": 2,
"action": "post",
"action_data": {
"account_code": "336",
"text": "Zdravotní pojištění"
},
"active": true,
"conditions": {
"direction": "out",
"counterparty_account": "1111009221/0710"
},
"created_at": "2026-09-28T10:00:00.000Z",
"last_matched_at": "2026-09-28T10:00:00.000Z",
"matches_count": 8,
"name": "Zdravotní pojištění",
"position": 2,
"updated_at": "2026-09-28T10:00:00.000Z",
"summary": "Odchozí · protiúčet 1111009221/0710",
"action_summary": "Zaúčtovat na 336 Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění",
"action_label": "Zaúčtovat na účet",
"partner_name": null,
"account_name": "Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění"
}
]
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
POST Vytvoření pravidla pro banku
/entities/{entity_id}/bank_rules
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Vytvoří pravidlo pro banku a zařadí ho na konec pořadí. Pravidlo zachytí nespárovaný pohyb, který splní všechny zadané podmínky, a musí mít aspoň jednu podmínku kromě směru a účtu (protiúčet, protistrana, zpráva, symbol nebo rozmezí částky). Akce post zaúčtuje pohyb na účet nebo kategorii, která musí být aktivní v účtovém rozvrhu; match ho spáruje s otevřenými doklady kontaktu (jednoznačná shoda VS, jinak nejdříve splatný doklad se shodnou částkou, jinak aspoň dva nejdříve splatné doklady, jejichž součet přesně dá částku pohybu; přijaté faktury placené kartou vynechá) a kontaktu bez čísla účtu uloží protiúčet; partner uloží kontaktu protiúčet, pokud ho nemá, a zkusí spárovat; ignore pohyb ignoruje. S apply: true se zapnuté pravidlo hned použije na nespárované pohyby firmy.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
bank_rule | objekt | ano | |
bank_rule. | text | ano | Název pravidla, nejvýše 120 znaků Nejvýše 120 znaků. |
bank_rule. | ano/ne | ne | Zapnuté pravidlo, výchozí true Výchozí true. |
bank_rule. | text | ano | post zaúčtovat, match spárovat s fakturami kontaktu, partner přiřadit ke kontaktu, ignore ignorovat Hodnoty: post, match, partner, ignore. |
bank_rule. | objekt | ano | Podmínky, pohyb musí splnit všechny; neznámé klíče a prázdné hodnoty se zahodí. Samotný směr nebo účet nestačí. Text se porovnává bez ohledu na velikost písmen a diakritiku. |
bank_rule. | text | ne | in příchozí, out odchozí platba Hodnoty: in, out. |
bank_rule. | celé číslo | ne | Jen pohyby tohoto bankovního účtu firmy |
bank_rule. | text | ne | Protiúčet předčíslí-číslo/kód banky nebo IBAN (český se převede na číslo účtu); bez kódu banky odpovídá číslo u kterékoli banky; nejvýše 60 znaků |
bank_rule. | text | ne | Název protistrany obsahuje tento text (nejvýše 120 znaků) |
bank_rule. | objekt | ne | Zpráva pro příjemce; op contains (obsahuje) nebo equals (je), value nejvýše 140 znaků. Místo objektu lze poslat jen text, pak platí contains. |
bank_rule. | text | ne | Způsob porovnání, jiná hodnota znamená contains Hodnoty: contains, equals. |
bank_rule. | text | ne | Hledaný text |
bank_rule. | objekt | ne | Variabilní symbol, stejný tvar jako message; mezery se ignorují a equals nebere ohled na úvodní nuly |
bank_rule. | objekt | ne | Konstantní symbol, stejný tvar a porovnání jako variable_symbol |
bank_rule. | objekt | ne | Specifický symbol, stejný tvar a porovnání jako variable_symbol |
bank_rule. | číslo | ne | Nejmenší částka pohybu v absolutní hodnotě (0 se nebere) |
bank_rule. | číslo | ne | Největší částka pohybu v absolutní hodnotě; nesmí být menší než amount_min |
bank_rule. | objekt | ne | Data akce; pro ignore se nic neukládá |
bank_rule. | text | ne | Pro post povinný účet nebo kategorie, která je aktivní v účtovém rozvrhu firmy |
bank_rule. | text | ne | Pro post text účetního zápisu (nejvýše 250 znaků), jinak se použije název pravidla |
bank_rule. | celé číslo | ne | ID kontaktu firmy; povinné pro match a partner, u post volitelné (kontakt se zapíše k účetnímu zápisu) |
apply | ano/ne | ne | true hned použije nové pravidlo (je-li zapnuté) na nespárované pohyby firmy |
Odpověď
201 application/json Vytvořené pravidlo a výsledek okamžitého použití.
| Pole | Význam |
|---|---|
rule | Pravidlo ve stejném tvaru jako v seznamu pravidel |
applied | Počet pohybů, které pravidlo hned vyřídilo (bez apply 0) |
rows | Vyřízené pohyby – transaction_id, rule_id, rule_name, action, result, text |
Chování
- Co změní
- Vytvoří pravidlo a zapíše auditní událost
bank_rule.created; sapply: truenavíc vyřídí zachycené pohyby stejně jako spuštění pravidel. - Opakování
- Každé volání vytvoří další pravidlo.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bank_rule":{"name":"Bankovní poplatky","action":"post","conditions":{"direction":"out","message":{"op":"contains","value":"poplat"}},"action_data":{"account_code":"568","text":"Bankovní poplatky"}},"apply":true}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_rulesJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"bank_rule": {
"name": "Bankovní poplatky",
"action": "post",
"conditions": {
"direction": "out",
"message": {
"op": "contains",
"value": "poplat"
}
},
"action_data": {
"account_code": "568",
"text": "Bankovní poplatky"
}
},
"apply": true
})
});
const data = await response.json();{
"rule": {
"id": 8,
"action": "post",
"action_data": {
"account_code": "568",
"text": "Bankovní poplatky"
},
"active": true,
"conditions": {
"direction": "out",
"message": {
"op": "contains",
"value": "poplat"
}
},
"created_at": "2026-09-28T10:00:00.000Z",
"last_matched_at": null,
"matches_count": 0,
"name": "Bankovní poplatky",
"position": 6,
"updated_at": "2026-09-28T10:00:00.000Z",
"summary": "Odchozí · zpráva obsahuje „poplat“",
"action_summary": "Zaúčtovat na 568 Ostatní finanční náklady",
"action_label": "Zaúčtovat na účet",
"partner_name": null,
"account_name": "Ostatní finanční náklady"
},
"applied": 0,
"rows": []
}
PATCH Úprava pravidla pro banku
/entities/{entity_id}/bank_rules/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Změní název, zapnutí, akci, podmínky nebo data akce pravidla; poslané conditions a action_data nahradí dosavadní celé. Platí stejné kontroly jako při vytvoření a týkají se celého pravidla, ne jen změněných polí: pravidlo omezené na smazaný bankovní účet nebo zaúčtovávající na účet, který v účtovém rozvrhu chybí či je vypnutý, proto nejde uložit (ani jen vypnout), dokud se to neopraví; smazat ho lze vždy. S apply: true se pravidlo po uložení hned použije na nespárované pohyby firmy (jen když je zapnuté). Pořadí mění jen operace změny pořadí a na dříve vyřízené pohyby úprava nemá vliv.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID pravidla Příklad 4. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
bank_rule | objekt | ano | |
bank_rule. | text | ne | Název pravidla, nejvýše 120 znaků Nejvýše 120 znaků. |
bank_rule. | ano/ne | ne | Zapnout nebo vypnout pravidlo |
bank_rule. | text | ne | Akce pravidla Hodnoty: post, match, partner, ignore. |
bank_rule. | objekt | ne | Nové podmínky celé, ve stejném tvaru jako při vytvoření |
bank_rule. | objekt | ne | Nová data akce celá, ve stejném tvaru jako při vytvoření |
apply | ano/ne | ne | true hned použije upravené pravidlo (je-li zapnuté) na nespárované pohyby firmy |
Odpověď
200 application/json Upravené pravidlo (rule) a výsledek okamžitého použití (applied, rows) jako při vytvoření.
Chování
- Co změní
- Uloží změny a zapíše auditní událost
bank_rule.updated; sapply: truenavíc vyřídí zachycené pohyby stejně jako spuštění pravidel. - Opakování
- Opakování se stejnými daty pravidlo nezmění, jen zapíše další auditní událost.
Příklad
cURL
curl \
-X PATCH \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bank_rule":{"active":false}}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'PATCH',
body: JSON.stringify({
"bank_rule": {
"active": false
}
})
});
const data = await response.json();{
"rule": {
"id": 1,
"action": "post",
"action_data": {
"account_code": "336",
"text": "Sociální pojištění"
},
"active": false,
"conditions": {
"direction": "out",
"counterparty_account": "21012-7921101/0710"
},
"created_at": "2026-09-28T10:00:00.000Z",
"last_matched_at": "2026-09-28T10:00:00.000Z",
"matches_count": 8,
"name": "Sociální pojištění – ČSSZ",
"position": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"summary": "Odchozí · protiúčet 21012-7921101/0710",
"action_summary": "Zaúčtovat na 336 Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění",
"action_label": "Zaúčtovat na účet",
"partner_name": null,
"account_name": "Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění"
},
"applied": 0,
"rows": []
}
DELETE Smazání pravidla pro banku
/entities/{entity_id}/bank_rules/{id}
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Smaže pravidlo. Co pravidlo dříve udělalo (zaúčtování, spárování, ignorování), zůstává beze změny.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
id | cesta | celé číslo | ano | ID pravidla Příklad 4. |
Odpověď
204 Prázdná odpověď.
Chování
- Co změní
- Smaže pravidlo a zapíše auditní událost
bank_rule.deleted. - Opakování
- Druhé volání vrátí 404.
Příklad
cURL
curl \
-X DELETE \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/1JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/1', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'DELETE'
});
const data = await response.json();soubor, 0 bajtů
POST Spuštění pravidel na nespárované pohyby
/entities/{entity_id}/bank_rules/apply
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Použije zapnutá pravidla v pořadí na nespárované pohyby firmy nebo jen na transaction_ids; na pohyb se uplatní první pravidlo, jehož podmínky pohyb splní a jehož akci jde provést – když akce nejde (např. kontakt nemá odpovídající doklad), zkusí se další pravidlo. S rule_id se použije jen toto jedno pravidlo, a to i když je vypnuté. Přeskočí pohyby s přiřazenou úhradou (i částečnou), pohyby v uzamčeném období a odchozí pohyby v CZK, ke kterým existuje neuhrazený přijatý doklad se stejnou částkou, datem vystavení ±3 dny a odpovídajícím obchodníkem (vystavený, nebo koncept s přílohou) – ty čekají na ruční spárování. Přepínač automatizace bank_rules toto ruční spuštění neomezuje.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
rule_id | celé číslo | ne | Použít jen toto pravidlo firmy (i vypnuté) |
transaction_ids | pole (celé číslo) | ne | Jen tyto pohyby; lze poslat i jako text s ID oddělenými čárkami. Prázdné pole nebo prázdný text znamená všechny nespárované pohyby firmy (na rozdíl od automatického párování). |
Odpověď
200 application/json Počet vyřízených pohybů a co s nimi pravidla udělala.
| Pole | Význam |
|---|---|
applied | Počet vyřízených pohybů |
rows | Řádky transaction_id, rule_id, rule_name, action, result (posted, matched, partner, ignored) a text (např. „zaúčtován na 568“) |
Chování
- Co změní
- Podle akce pohyb zaúčtuje (stav
posted, v podvojném účetnictví zápis se zdrojembank, s kontaktem z pravidla; událostbank.posted), spáruje s doklady kontaktu (úhrady se zápisy, událostpayment.recorded; kontaktu bez čísla účtu uloží protiúčet), jen uloží protiúčet ke kontaktu (partner, když spárovat nejde) nebo pohyb ignoruje (stavignored). U pravidla zvýšímatches_counta nastavílast_matched_at; za každý vyřízený pohyb zapíše auditní událostbank.rule_applied. - Opakování
- Vyřízené pohyby už nejsou nespárované, takže je další spuštění znovu nezpracuje; pravidlo
partner, které jen uložilo číslo účtu, se podruhé neuplatní.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/applyJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/apply', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
method: 'POST'
});
const data = await response.json();{
"applied": 0,
"rows": []
}
POST Náhled pohybů, které by pravidlo zachytilo
/entities/{entity_id}/bank_rules/preview
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Ukáže, které pohyby z posledních 12 měsíců by pravidlo zachytilo a co by s nimi udělalo, a pravidlo neuloží. Posílá se stejný objekt bank_rule jako při vytvoření; kontroluje se jen to, že má aspoň jednu podmínku kromě směru a účtu. outcome říká, co by se s pohybem stalo (např. „Zaúčtuje na 568“), nebo že je už vyřízený či částečně spárovaný a pravidlo ho přeskočí. Náhled nezohledňuje, že spuštění přeskočí pohyby v uzamčeném období a pohyby s možným přijatým dokladem.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
bank_rule | objekt | ano | |
bank_rule. | text | ne | Název (pro náhled nepovinný) |
bank_rule. | text | ne | Akce pravidla Hodnoty: post, match, partner, ignore. |
bank_rule. | objekt | ano | Podmínky ve stejném tvaru jako při vytvoření pravidla |
bank_rule. | objekt | ne | Data akce ve stejném tvaru jako při vytvoření pravidla |
Odpověď
200 application/json Zachycené pohyby a co by s nimi pravidlo udělalo.
| Pole | Význam |
|---|---|
scanned | Počet prohledaných pohybů |
count | Počet zachycených pohybů |
open | Kolik zachycených pohybů je nespárovaných a bez úhrady |
rows | Nejvýše 40 pohybů – id, booked_on, amount, currency, counterparty_name, counterparty, variable_symbol, message, status a outcome |
Chyby této operace
| Stav | Kód | Kdy |
|---|---|---|
| 422 | – | Pravidlo nemá podmínku: „Zadejte alespoň jednu podmínku – účet nebo název protistrany, zprávu, symbol nebo rozmezí částky“ |
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
- Prohledá nejvýše 2 000 nejnovějších pohybů za posledních 12 měsíců a vrátí nejvýše 40 řádků.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bank_rule":{"name":"Bankovní poplatky","action":"post","conditions":{"direction":"out","message":{"op":"contains","value":"poplat"}},"action_data":{"account_code":"568"}}}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/previewJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/preview', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"bank_rule": {
"name": "Bankovní poplatky",
"action": "post",
"conditions": {
"direction": "out",
"message": {
"op": "contains",
"value": "poplat"
}
},
"action_data": {
"account_code": "568"
}
}
})
});
const data = await response.json();{
"scanned": 107,
"count": 1,
"open": 0,
"rows": [
{
"id": 61,
"booked_on": "2026-09-02",
"amount": -189.0,
"currency": "CZK",
"counterparty_name": "Fio banka",
"counterparty": "9603358056/0710",
"variable_symbol": null,
"message": "Poplatek za vedení účtu",
"status": "posted",
"outcome": "Už vyřízeno – zaúčtováno"
}
]
}
GET Návrh pravidla z jednoho pohybu
/entities/{entity_id}/bank_rules/draft
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Navrhne pravidlo podle jednoho pohybu a nic neuloží. Platbu státu (odchozí platba na účet v ČNB s VS) rozpozná podle předčíslí účtu finančního úřadu, podle ČSSZ nebo zdravotní pojišťovny a navrhne zaúčtování (v podvojném účetnictví 343, 341, 342, 538 nebo 336, v daňové evidenci V94, V03, V11 nebo V91); převod mezi vlastními účty navrhne ignorovat, poplatek zaúčtovat na 568 (V15), úrok na 662 (P90). Karetní platbu navrhne podle obchodníka a ostatní pohyby podle protistrany – s účtem, na který se její pohyby dřív zaúčtovaly, nebo se spárováním s kontaktem, kterému číslo účtu patří. hint vysvětluje důvod návrhu.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
transaction_id | dotaz | celé číslo | ano | ID bankovního pohybu firmy Příklad 5012. |
Odpověď
200 application/json Navržené pravidlo ve tvaru pro vytvoření pravidla.
| Pole | Význam |
|---|---|
name | Navržený název |
conditions | Navržené podmínky |
action | Navržená akce |
action_data | Navržená data akce (u karetní platby nebo neznámé protistrany může chybět account_code) |
hint | Česky, proč Saldo pravidlo navrhuje a co zkontrolovat |
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/bank_rules/draft?transaction_id=64"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/draft?transaction_id=64', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"name": "Atelier Lumen s.r.o.",
"conditions": {
"direction": "in",
"counterparty_account": "2971512207/0710"
},
"action": "post",
"action_data": {},
"hint": "Vyberte, co se má s dalšími pohyby od této protistrany stát."
}
GET Doporučená pravidla z historie pohybů
/entities/{entity_id}/bank_rules/suggestions
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Doporučí nejvýše 8 pravidel naučených z pohybů za posledních 12 měsíců: platby státu, převody mezi vlastními účty, bankovní poplatky a úroky, protistrany aspoň dvakrát zaúčtované na stejný účet a aspoň dvě karetní platby u stejného obchodníka. Návrh, jehož pohyby všechny zachytí některé existující pravidlo (i vypnuté) nebo dřívější návrh, se vynechá. complete říká, zda jde pravidlo uložit bez doplnění (např. karetní pravidlo bez známého účtu doplnění potřebuje).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Odpověď
200 application/json Objekt s polem rows.
| Pole | Význam |
|---|---|
rows | Návrhy – key, kind (state, transfer, fees, interest, posted, card), title, reason, rule (name, conditions, action, action_data), count (zachycené pohyby), open (z toho nespárované), complete a samples (nejvýše 3 pohyby) |
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Nejvýše 8 návrhů z nejvýše 2 000 nejnovějších pohybů za 12 měsíců.
Příklad
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/suggestionsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/suggestions', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"rows": [
{
"key": "state:1599688387/0710",
"kind": "state",
"title": "Platby finančnímu úřadu",
"reason": "1× platba na účet 1599688387/0710 v ČNB – platba daně",
"rule": {
"name": "Platby finančnímu úřadu",
"conditions": {
"direction": "out",
"counterparty_account": "1599688387/0710"
},
"action": "post",
"action_data": {
"account_code": "343",
"text": "Platba daně"
}
},
"count": 1,
"open": 1,
"complete": true,
"samples": [
{
"id": 63,
"booked_on": "2026-09-23",
"amount": -4120.0,
"currency": "CZK",
"counterparty_name": "Finanční úřad pro hl. m. Prahu",
"counterparty": "1599688387/0710",
"variable_symbol": "0000000001",
"message": "Platba daně – finanční úřad",
"status": "unmatched"
}
]
},
{
"key": "fees:message",
"kind": "fees",
"title": "Bankovní poplatky",
"reason": "1× poplatek banky",
"rule": {
"name": "Bankovní poplatky",
"conditions": {
"direction": "out",
"message": {
"op": "contains",
"value": "poplat"
}
},
"action": "post",
"action_data": {
"account_code": "568",
"text": "Bankovní poplatky"
}
},
"count": 1,
"open": 0,
"complete": true,
"samples": [
{
"id": 61,
"booked_on": "2026-09-02",
"amount": -189.0,
"currency": "CZK",
"counterparty_name": "Fio banka",
"counterparty": "9603358056/0710",
"variable_symbol": null,
"message": "Poplatek za vedení účtu",
"status": "posted"
}
]
}
]
}
GET Pohyby vyřízené pravidlem
/entities/{entity_id}/bank_rules/applied
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Pro zadané pohyby vrátí pravidlo, které je naposledy vyřídilo – jen když pohyb potom nebyl změněn ani vrácen mezi nespárované. Slouží ke značce „pravidlo“ u pohybu; pohyby jiné firmy a neznámá ID se vynechají.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
ids | dotaz | text | ne | ID pohybů oddělená čárkami (lze i opakovat ids[]); bere se nejvýše 500 různých Příklad 5012,5013. |
Odpověď
200 application/json Objekt, jehož klíče jsou ID pohybů (jako text) a hodnoty rule_id, rule_name a at (kdy pravidlo pohyb vyřídilo); pohyby bez takového pravidla chybí.
Chování
- Co změní
- Nic nezapisuje.
- Limity
- Nejvýše 500 ID.
Příklad
Pohyb v ukázce nevyřídilo pravidlo (spároval se s fakturou), proto je odpověď prázdný objekt.
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
"https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/applied?ids=22"JavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/applied?ids=22', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{}
POST Změna pořadí pravidel pro banku
/entities/{entity_id}/bank_rules/reorder
- Oprávnění
- Vlastník, účetní nebo editor
- Klíč jen pro čtení
- Nestačí, vrátí 403
READ_ONLY_KEY
Nastaví pořadí pravidel: pravidla z ids (jen ta, která firma má) půjdou v zadaném pořadí na začátek, ostatní za ně v dosavadním pořadí, a pozice se přečíslují od 1. Pořadí určuje, které pravidlo se na pohyb uplatní dřív.
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Tělo požadavku
Formát application/json.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
ids | pole (celé číslo) | ano | ID pravidel v požadovaném pořadí (pole; neznámá ID se vynechají, text s ID oddělenými čárkami se nerozdělí) |
Odpověď
200 application/json Všechna pravidla v novém pořadí ve stejném tvaru jako v seznamu pravidel.
Chování
- Co změní
- Přepíše pozice pravidel a zapíše auditní událost
bank_rule.reordered. - Opakování
- Stejné pořadí lze poslat opakovaně; každé volání zapíše auditní událost.
Příklad
cURL
curl \
-X POST \
-H "X-API-Key: $SALDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids":[1]}' \
https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/reorderJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/bank_rules/reorder', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
method: 'POST',
body: JSON.stringify({
"ids": [
1
]
})
});
const data = await response.json();[
{
"id": 1,
"action": "post",
"action_data": {
"account_code": "336",
"text": "Sociální pojištění"
},
"active": true,
"conditions": {
"direction": "out",
"counterparty_account": "21012-7921101/0710"
},
"created_at": "2026-09-28T10:00:00.000Z",
"last_matched_at": "2026-09-28T10:00:00.000Z",
"matches_count": 8,
"name": "Sociální pojištění – ČSSZ",
"position": 1,
"updated_at": "2026-09-28T10:00:00.000Z",
"summary": "Odchozí · protiúčet 21012-7921101/0710",
"action_summary": "Zaúčtovat na 336 Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění",
"action_label": "Zaúčtovat na účet",
"partner_name": null,
"account_name": "Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění"
},
{
"id": 2,
"action": "post",
"action_data": {
"account_code": "336",
"text": "Zdravotní pojištění"
},
"active": true,
"conditions": {
"direction": "out",
"counterparty_account": "1111009221/0710"
},
"created_at": "2026-09-28T10:00:00.000Z",
"last_matched_at": "2026-09-28T10:00:00.000Z",
"matches_count": 8,
"name": "Zdravotní pojištění",
"position": 2,
"updated_at": "2026-09-28T10:00:00.000Z",
"summary": "Odchozí · protiúčet 1111009221/0710",
"action_summary": "Zaúčtovat na 336 Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění",
"action_label": "Zaúčtovat na účet",
"partner_name": null,
"account_name": "Zúčtování s institucemi sociálního zabezpečení a zdravotního pojištění"
}
]
Dlouhé seznamy jsou v ukázce zkrácené na první položky.
GET Úhrady vydaných dokladů čekající v bance na spárování
/entities/{entity_id}/documents/waiting_payments
- Oprávnění
- Každý člen firmy včetně role Jen čtení
- Klíč jen pro čtení
- Stačí
Vrátí otevřené vystavené doklady (vydané faktury, zálohové faktury, přijaté dobropisy), jejichž úhrada už je mezi nespárovanými příchozími pohyby – přesně ty, které by spárovalo automatické párování (shoda VS i částky, jednoznačně, mimo uzamčené období), nejvýše jeden pohyb na doklad. Připojí datum posledního bankovního pohybu firmy a počet importovaných vydaných faktur a záloh po splatnosti (ISDOC, POHODA, import), které nejsou mezi řádky a jejichž splatnost je až po posledním pohybu, takže jejich úhradu bankovní data zatím nemohou ukázat (bez pohybů v bance všechny takové doklady).
Parametry
| Název | Kde | Typ | Povinný | Popis |
|---|---|---|---|---|
entity_id | cesta | celé číslo | ano | ID účetní jednotky (firmy) Příklad 12. |
Odpověď
200 application/json Doklady s čekající úhradou a údaje o pokrytí bankovními daty.
| Pole | Význam |
|---|---|
rows | Řádky document_id, number, transaction_id, booked_on, amount, currency (seřazené podle data pohybu) |
statements_until | Datum posledního bankovního pohybu firmy, null bez pohybů |
beyond_statements | Počet importovaných vydaných faktur a záloh po splatnosti, které nejsou mezi řádky a mají splatnost po statements_until (bez pohybů všechny takové) |
Chování
- Co změní
- Nic nezapisuje. Úhrady nezaznamená – k tomu slouží automatické párování s
transaction_ids.
Příklad
V ukázkové firmě teď žádná úhrada vydaného dokladu na spárování nečeká, proto je rows prázdné.
cURL
curl \
-H "X-API-Key: $SALDO_API_KEY" \
https://techtools.cz/ucetnictvi-api/entities/1/documents/waiting_paymentsJavaScript
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/waiting_payments', {
headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();{
"rows": [],
"statements_until": "2026-09-25",
"beyond_statements": 0
}