SaldoDokumentace Otevřít Saldo

Reference API

Doklady a jejich stavy

Všechny doklady firmy: vydané a přijaté faktury, zálohy, dobropisy, pokladní, interní a obchodní doklady. Koncept, vystavení s číslem (v podvojném účetnictví i se zaúčtováním), storno, úhrady, upomínky, sdílení, ISDOC a opakované faktury.

35 operací · vygenerováno z OpenAPI · ukázky zaznamenané na smyšlené firmě

GET Seznam dokladů

/entities/{entity_id}/documents

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí stránkovaný seznam dokladů firmy všech druhů a stavů (koncepty, vystavené i stornované), pokud je filtry nevyloučí. Řazení je pevné: od nejnovějšího data vystavení, při shodě od nejvyššího ID. Filtry se kombinují; hledání q prochází číslo dokladu, údaje kontaktu uložené na dokladu (jméno, IČO, DIČ, adresa, e-mail, telefon), jméno kontaktu v adresáři, variabilní symbol, popis a číslo dokladu dodavatele. Součty sums jsou za celý vyfiltrovaný výběr (všechny stránky, všechny druhy a směry dohromady, včetně konceptů a stornovaných dokladů, pokud je filtr status nevyloučí), ne jen za vrácenou stránku.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
kinddotaztextneDruhy dokladů oddělené čárkou. Hodnoty: invoice_out, invoice_in, proforma_out, proforma_in, advance_out, advance_in, credit_out, credit_in, cash_in, cash_out, internal, quote_out, order_out, delivery_out. Pole kind[] se nepodporuje; neznámá hodnota nic nenajde. Příklad invoice_out,credit_out.
statusdotaztextneStav dokladu – koncept, vystavený, stornovaný; jiná hodnota nic nenajde Hodnoty: draft, issued, cancelled. Příklad issued.
statedotaztextneStav úhrady; vybírá jen vystavené doklady s úhradou (faktury, zálohové faktury, dobropisy). unpaid = zbývá něco uhradit (i částečně uhrazené a po splatnosti), overdue = zbývá uhradit a splatnost už uplynula, paid = nic nezbývá (i přeplacené a doklady s nulovou částkou). Jiná hodnota se ignoruje. Hodnoty: unpaid, overdue, paid. Příklad unpaid.
approvaldotaztextnewaiting = přijaté výdaje ve schvalování (odeslané, vrácené k opravě nebo změněné po schválení), bez stornovaných; mine = doklady čekající na schválení (odeslané nebo změněné po schválení), které smí schválit volající. Jiná hodnota se ignoruje. Hodnoty: waiting, mine. Příklad waiting.
partner_iddotazcelé čísloneJen doklady tohoto kontaktu Příklad 118.
fromdotazdatumneDatum vystavení od (včetně), ISO YYYY-MM-DD Příklad 2026-09-01.
todotazdatumneDatum vystavení do (včetně), ISO YYYY-MM-DD Příklad 2026-09-30.
yeardotazcelé čísloneHospodářský rok firmy podle data vystavení (začíná měsícem fiscal_year_start firmy). Hodnota mimo rozsah se ořízne, nečíselná znamená aktuální rok. Rozsah od 2000 do 2100. Příklad 2026.
qdotaztextneHledaný text (část čísla, údajů kontaktu včetně IČO a adresy, variabilního symbolu, popisu nebo čísla dokladu dodavatele). Velikost písmen se nerozlišuje; u písmen s diakritikou ale jen tehdy, když jsou v uloženém textu malá. Příklad nordwood.
pagedotazcelé čísloneČíslo stránky; hodnota menší než 1 znamená 1 Výchozí 1. Rozsah od 1. Příklad 1.
perdotazcelé číslonePočet řádků na stránce; 0 nebo prázdná hodnota znamená 100, jiné hodnoty se ořežou do rozsahu 1–500 Výchozí 100. Rozsah od 1 do 500. Příklad 50.

Odpověď

200 application/json Objekt s počtem, stránkováním, součty v Kč a řádky dokladů (souhrnná podoba, bez položek a úhrad).

PoleVýznam
totalPočet dokladů odpovídajících filtrům (všechny stránky)
pageVrácená stránka
perPoužitý počet řádků na stránce
sums.net_czkSoučet základů v Kč za celý výběr
sums.vat_czkSoučet DPH v Kč za celý výběr
sums.gross_czkSoučet částek s DPH v Kč za celý výběr
rows[].idID dokladu
rows[].kindDruh dokladu (invoice_out, invoice_in, …)
rows[].kind_labelČeský název druhu, např. Faktura vydaná
rows[].statusdraft (koncept), issued (vystavený), cancelled (stornovaný)
rows[].numberČíslo z číselné řady; null u konceptu, který ještě nebyl vystaven
rows[].variable_symbolVariabilní symbol
rows[].original_numberČíslo dokladu dodavatele (u přijatých dokladů)
rows[].partner_idID kontaktu
rows[].partner_nameJméno kontaktu – u vystaveného dokladu ze snímku při vystavení
rows[].partner_icoIČO kontaktu
rows[].issue_dateDatum vystavení
rows[].taxable_dateDatum uskutečnění zdanitelného plnění (DUZP)
rows[].due_dateDatum splatnosti
rows[].currencyMěna dokladu (ISO 4217)
rows[].total_netZáklad v měně dokladu
rows[].total_vatDPH v měně dokladu
rows[].total_payableČástka k úhradě v měně dokladu (včetně zaokrouhlení)
rows[].total_gross_czkČástka s DPH přepočtená kurzem dokladu na Kč
rows[].paid_amountUhrazeno v měně dokladu
rows[].remainingZbývá uhradit (total_payable − paid_amount)
rows[].payment_statena (nevystavený doklad nebo druh bez úhrad), unpaid, partial, overdue, paid
rows[].days_overduePočet dní po splatnosti (0, není-li overdue)
rows[].descriptionPopis dokladu
rows[].vat_modeRežim DPH
rows[].sourcePůvod dokladu: manual, recurring, isdoc, pohoda, import
rows[].tagsŠtítky (text)
rows[].related_document_idID souvisejícího dokladu (např. faktura u dobropisu)
rows[].reminders_sentPočet zaznamenaných upomínek
rows[].outcomeVýsledek nabídky: accepted, rejected nebo null
rows[].attachments_countPočet příloh
rows[].approval_stateUložený stav schvalování (pending, approved, returned, changed) nebo null

Chování

Co změní
Nic nezapisuje.
Limity
Nejvýše 500 řádků na stránku (výchozí 100).

Příklad

cURL

curl \
  -H "X-API-Key: $SALDO_API_KEY" \
  "https://techtools.cz/ucetnictvi-api/entities/1/documents?kind=invoice_out&state=unpaid&per=2"

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents?kind=invoice_out&state=unpaid&per=2', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "total": 3,
  "page": 1,
  "per": 2,
  "sums": {
    "net_czk": 157720.0,
    "vat_czk": 16758.0,
    "gross_czk": 174478.0
  },
  "rows": [
    {
      "id": 143,
      "kind": "invoice_out",
      "kind_label": "Faktura vydaná",
      "status": "issued",
      "number": "FV20260025",
      "variable_symbol": "20260025",
      "original_number": null,
      "partner_id": 1,
      "partner_name": "Nordwood Studio s.r.o.",
      "partner_ico": "90000013",
      "issue_date": "2026-09-28",
      "taxable_date": "2026-09-28",
      "due_date": "2026-10-12",
      "currency": "CZK",
      "total_net": 19800.0,
      "total_vat": 4158.0,
      "total_payable": 23958.0,
      "total_gross_czk": 23958.0,
      "paid_amount": 0.0,
      "remaining": 23958.0,
      "payment_state": "unpaid",
      "days_overdue": 0,
      "description": "Správa webu – září",
      "vat_mode": "domestic",
      "source": "manual",
      "tags": null,
      "related_document_id": null,
      "reminders_sent": 0,
      "outcome": null,
      "attachments_count": 0,
      "approval_state": null
    },
    {
      "id": 23,
      "kind": "invoice_out",
      "kind_label": "Faktura vydaná",
      "status": "issued",
      "number": "FV20260023",
      "variable_symbol": "20260023",
      "original_number": null,
      "partner_id": 5,
      "partner_name": "Hafenlicht GmbH",
      "partner_ico": null,
      "issue_date": "2026-09-21",
      "taxable_date": "2026-09-21",
      "due_date": "2026-10-21",
      "currency": "EUR",
      "total_net": 3200.0,
      "total_vat": 0.0,
      "total_payable": 3200.0,
      "total_gross_czk": 77920.0,
      "paid_amount": 0.0,
      "remaining": 3200.0,
      "payment_state": "unpaid",
      "days_overdue": 0,
      "description": "Software development services – sprint",
      "vat_mode": "eu_services",
      "source": "manual",
      "tags": null,
      "related_document_id": null,
      "reminders_sent": 0,
      "outcome": null,
      "attachments_count": 0,
      "approval_state": null
    }
  ]
}

POST Založení dokladu, volitelně s vystavením

/entities/{entity_id}/documents

Oprávnění
Vlastník, účetní nebo editor
Pravidlo
S issue: true platí pro přijaté výdaje (invoice_in, cash_out, credit_in) pravidla schvalování: kdo doklad nesmí schválit, ten ho jen odešle ke schválení.
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Uloží nový doklad jako koncept: dopočítá částky řádků a součty podle sazeb DPH (DPH z rekapitulace po sazbách; u dokladu v Kč zaokrouhlí částku k úhradě – u prodeje podle nastavení firmy, u nákupu jen hotovostní), datum pro DPH a u dokladu v Kč kurz 1. Kontakt, bankovní účet, související doklad a odečítaná záloha, které firmě nepatří, se tiše vynechají (uloží se prázdné). S issue: true se doklad hned vystaví jako v issueDocument; přijatý výdaj, na který se vztahuje pravidlo schvalování a volající ho nesmí schválit, zůstane konceptem a odešle se ke schválení. Kurz cizí měny server nedoplňuje – bez exchange_rate se uloží kurz 1.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
documentobjektano
document.kindtextanoDruh dokladu (nelze později změnit). invoice_out/invoice_in – faktura vydaná/přijatá (řada FV/FP); proforma_out/proforma_in – zálohová faktura vydaná/přijatá (ZV/ZP, není daňový doklad; při vystavení se nezaúčtuje, její úhrady ano); advance_out/advance_in – daňový doklad k přijaté/poskytnuté platbě zálohy (DZ/DP); credit_out/ credit_in – opravný daňový doklad (dobropis) vydaný/přijatý (OV/OP); cash_in/cash_out – příjmový/ výdajový pokladní doklad (PP/VP); internal – interní doklad (ID, bez DPH, nezaúčtuje se; ruční účetní zápisy jsou /entries); quote_out – cenová nabídka (NA), order_out – objednávka vydaná (OB), delivery_out – dodací list (DL): obchodní doklady, nikdy se neúčtují ani nevstupují do DPH. Hodnoty: invoice_out, invoice_in, proforma_out, proforma_in, advance_out, advance_in, credit_out, credit_in, cash_in, cash_out, internal, quote_out, order_out, delivery_out.
document.partner_idcelé čísloneID kontaktu (odběratel nebo dodavatel); ID, které firmě nepatří, se uloží jako prázdné
document.issue_datedatumanoDatum vystavení; určuje rok číselné řady
document.taxable_datedatumneDUZP; u daňových dokladů se při vystavení doplní datem vystavení, pokud chybí
document.due_datedatumneDatum splatnosti; nesmí být dříve než datum vystavení
document.received_datedatumneDatum přijetí dokladu (u přijatých dokladů)
document.vat_datedatumneDatum pro DPH. U prodeje se vždy přepíše na DUZP (jinak datum vystavení). U nákupu se bez hodnoty nastaví na pozdější z DUZP a data přijetí (jinak datum vystavení); zadané dřívější datum se posune na tuto hodnotu.
document.currencytextneKód měny ze tří písmen (převede se na velká); výchozí CZK
document.exchange_ratečísloneKurz CZK za 1 jednotku měny (> 0, 6 desetinných míst). U CZK se vždy nastaví 1. Server kurz ČNB nedoplňuje – bez hodnoty zůstane 1 i u cizí měny.
document.rate_datedatumneDatum, ke kterému je kurz (informativní; posouzení limitu schvalování podle něj hledá kurz ČNB)
document.vat_modetextneRežim DPH: domestic – tuzemské plnění (výchozí), reverse_charge – přenesená daňová povinnost (§ 92a), eu_goods – dodání/pořízení zboží v EU, eu_services – služby v rámci EU, import – dovoz ze třetí země, export – vývoz do třetí země, exempt – osvobozené plnění, non_vat – mimo DPH, triangular – třístranný obchod. DPH se počítá jen v režimu domestic a jen na řádcích druhu standard (u prodeje jen u plátce DPH, u interního dokladu nikdy); u přijatých dokladů plátce DPH nebo identifikované osoby v režimech reverse_charge, eu_goods, eu_services, import a triangular se daň vyměří samovyměřením. Hodnoty: domestic, reverse_charge, eu_goods, eu_services, import, export, exempt, non_vat, triangular.
document.rc_codetextneKód předmětu plnění u přenesené daňové povinnosti (číselník rc_codes v /codebooks; hodnota se neověřuje)
document.prices_include_vatano/neneCeny řádků jsou včetně DPH (výchozí false)
document.simplifiedano/neneZjednodušený daňový doklad (výchozí false)
document.regime_44ano/neneOprava v režimu § 44 ZDPH (výchozí false)
document.payment_methodtextneZpůsob úhrady – převodem, hotově, kartou, dobírka, zápočet, uhrazeno zálohou, jinak (výchozí bank) Hodnoty: bank, cash, card, cod, offset, advance, other.
document.bank_account_idcelé čísloneID bankovního účtu nebo pokladny firmy pro úhradu; cizí ID se uloží jako prázdné
document.variable_symboltextneVariabilní symbol; nečíselné znaky se odstraní, nejvýše 10 číslic. U prodeje se při vystavení doplní z čísla dokladu
document.constant_symboltextneKonstantní symbol, nejvýše 10 číslic
document.specific_symboltextneSpecifický symbol, nejvýše 10 číslic
document.original_numbertextneČíslo dokladu dodavatele (u přijatých dokladů); používá se ke kontrole duplicit
document.descriptiontextnePopis dokladu
document.notetextneText na dokladu (vidí ho i zákazník)
document.internal_notetextneInterní poznámka; na sdílené stránce dokladu se nezobrazí
document.languagetextneJazyk dokladu (výchozí cs) Hodnoty: cs, en.
document.kh_sectiontextneOddíl kontrolního hlášení; jen se uloží, výpočty ho nečtou
document.cost_centertextneStředisko (podmínka pravidel schvalování)
document.projecttextneProjekt / zakázka
document.tagstextneŠtítky jako text
document.related_document_idcelé čísloneID souvisejícího dokladu firmy (např. původní faktura dobropisu); cizí ID se uloží jako prázdné
document.lines_attributespole (objekt)neŘádky dokladu v pořadí, v jakém se mají zobrazit
document.lines_attributes[].descriptiontextneText položky, nejvýše 500 znaků
document.lines_attributes[].quantityčísloneMnožství, nesmí být 0 (záporné u dobropisu nebo odpočtu); výchozí 1
document.lines_attributes[].unittextneJednotka, např. ks, hod
document.lines_attributes[].unit_pricečísloneJednotková cena (bez DPH, nebo s DPH při prices_include_vat), 4 desetinná místa
document.lines_attributes[].discount_percentčísloneSleva v procentech 0–100
document.lines_attributes[].vat_ratečísloneSazba DPH v procentech 0–100; bez hodnoty 0
document.lines_attributes[].vat_kindtextneDruh plnění – zdanitelné, osvobozené s nárokem, osvobozené bez nároku na odpočet, není předmětem daně (výchozí standard) Hodnoty: standard, exempt_with_credit, exempt_without_credit, not_subject.
document.lines_attributes[].account_codetextneÚčet (podvojné účetnictví) nebo kategorie daňové evidence; prázdný se při zaúčtování nahradí 602/518 (daňová evidence P02/V05); nejvýše 12 znaků: číslice, velká písmena, tečka, pomlčka
document.lines_attributes[].assetano/nenePořízení majetku
document.lines_attributes[].deductiontextneNárok na odpočet DPH u nákupu – plný, krácený koeficientem, žádný (výchozí full) Hodnoty: full, proportional, none.
document.lines_attributes[].advance_document_idcelé čísloneOdpočet zálohy – ID daňového dokladu k záloze (advance_out/advance_in); jiné ID se uloží jako prázdné
issueano/nenetrue = po uložení doklad vystavit (nebo odeslat ke schválení)
capture_keytextneVolitelný klíč idempotence (UUID). Opakovaný požadavek se stejným klíčem ve stejné firmě vrátí už uložený doklad místo nového.

Odpověď

201 application/json Detail založeného dokladu jako v getDocument (včetně approval). Při opakování se stejným capture_key odpověď 200 s detailem dříve uloženého dokladu bez klíče approval.

Chyby této operace

StavKódKdy
422–capture_key není UUID: „Neplatný identifikátor nahrání“
422–S issue: true doklad bez řádků: „Doklad nemá žádnou položku“
422–S issue: true faktura, zálohová faktura, dobropis, daňový doklad k záloze nebo obchodní doklad bez kontaktu: „Doplňte odběratele nebo dodavatele“
422–S issue: true řádek odečítá neexistující nebo nevystavený daňový doklad k záloze: „Odečítaná záloha neexistuje“
422–S issue: true je daňový doklad k záloze už odečtený na jiném vystaveném dokladu: „Daňový doklad … je už odečtený na dokladu …“
422–S issue: true datum dokladu v uzamčeném období: „Období do … je uzamčeno – doklad nelze měnit“ (tvar { error, errors }); se zadaným capture_key se místo této chyby vrátí 200 s uloženým konceptem

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Vytvoří doklad se zdrojem manual a jeho řádky a zapíše do historie document.created. S issue: true navíc totéž co issueDocument (číslo z řady, účetní zápisy v podvojném účetnictví, document.issued), případně odeslání ke schválení (document.approval_submitted). U přijatého výdaje v cizí měně se při zapnutém schvalování může dotázat kurz ČNB (jen pro posouzení limitu). Když vystavení selže (422), koncept už zůstane uložený.
Limity
Popis řádku nejvýše 500 znaků; variabilní, konstantní a specifický symbol nejvýše 10 číslic.
Opakování
Bez capture_key vytvoří každé volání nový doklad (i po chybě vystavení, kdy už koncept existuje). Se stejným capture_key (bez ohledu na velikost písmen, jedinečný v rámci firmy) vrátí opakované volání dříve uložený doklad se stavem 200, tělo ignoruje a nic nevystavuje; souběžné opakování se ošetří stejně.

Příklad

Vystaví fakturu vydanou; odpověď obsahuje číslo z řady FV a stav issued.

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"issue":true,"document":{"kind":"invoice_out","partner_id":1,"issue_date":"2026-09-28","taxable_date":"2026-09-28","due_date":"2026-10-12","payment_method":"bank","bank_account_id":2,"description":"Konzultace – září","lines_attributes":[{"description":"Konzultace – digitální strategie","quantity":6,"unit":"hod","unit_price":2200,"vat_rate":21,"account_code":"602"}]}}' \
  https://techtools.cz/ucetnictvi-api/entities/1/documents

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify({
    "issue": true,
    "document": {
      "kind": "invoice_out",
      "partner_id": 1,
      "issue_date": "2026-09-28",
      "taxable_date": "2026-09-28",
      "due_date": "2026-10-12",
      "payment_method": "bank",
      "bank_account_id": 2,
      "description": "Konzultace – září",
      "lines_attributes": [
        {
          "description": "Konzultace – digitální strategie",
          "quantity": 6,
          "unit": "hod",
          "unit_price": 2200,
          "vat_rate": 21,
          "account_code": "602"
        }
      ]
    }
  })
});
const data = await response.json();
Odpověď 201 Created
{
  "id": 149,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "issued",
  "number": "FV20260026",
  "variable_symbol": "20260026",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 13200.0,
  "total_vat": 2772.0,
  "total_payable": 15972.0,
  "total_gross_czk": 15972.0,
  "paid_amount": 0.0,
  "remaining": 15972.0,
  "payment_state": "unpaid",
  "days_overdue": 0,
  "description": "Konzultace – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 15972.0,
  "total_net_czk": 13200.0,
  "total_vat_czk": 2772.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 150,
      "position": 0,
      "description": "Konzultace – digitální strategie",
      "quantity": 6.0,
      "unit": "hod",
      "unit_price": 2200.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 13200.0,
      "vat": 2772.0,
      "gross": 15972.0,
      "net_czk": 13200.0,
      "vat_czk": 2772.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 13200.0,
      "vat": 2772.0,
      "gross": 15972.0,
      "net_czk": 13200.0,
      "vat_czk": 2772.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "approval": null
}

GET Detail dokladu

/entities/{entity_id}/documents/{id}

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí úplný doklad: souhrnné údaje jako v seznamu, všechny údaje dokladu, kontakt (uložený snímek – u vystaveného dokladu z okamžiku vystavení –, jinak aktuální údaje z adresáře), řádky s dopočítanými částkami, rekapitulaci DPH podle sazeb, úhrady, metadata příloh, stav sdíleného odkazu, bankovní účet, související doklad, aktivní opakování a stav schvalování.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Všechna pole řádku ze seznamu dokladů (listDocuments) a navíc údaje níže. Peníze jsou čísla v měně dokladu, pole *_czk v Kč.

PoleVýznam
uuidUUID dokladu (u importu z ISDOC), jinak null
constant_symbolKonstantní symbol
specific_symbolSpecifický symbol
received_dateDatum přijetí
vat_dateDatum pro DPH
exchange_rateKurz CZK za jednotku měny
rate_dateDatum kurzu
rc_codeKód předmětu plnění PDP
prices_include_vatCeny včetně DPH
simplifiedZjednodušený daňový doklad
regime_44Oprava podle § 44 ZDPH
payment_methodZpůsob úhrady
bank_account_idID účtu pro úhradu
roundingZaokrouhlení částky k úhradě
total_grossČástka s DPH v měně dokladu (před zaokrouhlením)
total_net_czkZáklad v Kč
total_vat_czkDPH v Kč
noteText na dokladu
internal_noteInterní poznámka
languagecs nebo en
kh_sectionUložený oddíl kontrolního hlášení
cost_centerStředisko
projectProjekt
paid_onDatum poslední úhrady, když je doklad plně uhrazen (u pokladního dokladu datum vystavení), jinak null
created_atZaloženo
updated_atNaposledy změněno
partnerKontakt { name, ico, dic, street, city, zip, country, email, phone }
lines[]Řádky { id, position, description, quantity, unit, unit_price, discount_percent, vat_rate, vat_kind, account_code, asset, deduction, advance_document_id, net, vat, gross, net_czk, vat_czk }
attachments[]Přílohy { id, filename, content_type, byte_size, inline, created_at }
shareVeřejný odkaz { token, shared_at, viewed_at, views } nebo null
payments[]Úhrady podle data { id, document_id, bank_transaction_id, bank_account_id, paid_on, amount, amount_czk, exchange_rate, payment_method, note }
vat_recap[]Rekapitulace DPH po sazbách sestupně { rate, net, vat, gross, net_czk, vat_czk }
bank_accountBankovní účet nebo pokladna dokladu (údaje účtu, display_number) nebo null
related_document{ id, number, kind } souvisejícího dokladu nebo null
recurrenceAktivní pravidlo opakování, kde je doklad vzorem (bez template), nebo null
approvalStav schvalování { state, label, required, rule, approvers, fingerprint, can_submit, can_approve, can_return, history[] } nebo null, když doklad nemá historii schvalování a schvalování se ho netýká (nebo byl vystaven dřív, než ho pravidlo pokrylo)

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/documents/143

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 143,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "issued",
  "number": "FV20260025",
  "variable_symbol": "20260025",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 0.0,
  "remaining": 23958.0,
  "payment_state": "unpaid",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 144,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": {
    "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
    "shared_at": "2026-09-28T10:00:00.000Z",
    "viewed_at": null,
    "views": 0
  },
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "approval": null
}

PATCH Úprava dokladu

/entities/{entity_id}/documents/{id}

Oprávnění
Vlastník, účetní nebo editor
Pravidlo
Změnu částky, kurzu, dodavatele (včetně jeho účtu), střediska nebo účtů zaúčtovaného přijatého výdaje, na který se vztahuje pravidlo schvalování, smí uložit jen jeho schvalovatel; ostatním vrátí 422.
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Změní údaje dokladu a jeho řádků; kind se ignoruje (druh nelze změnit). Řádek s id se upraví, řádek s id a _destroy: true se odebere, řádek bez id se přidá; řádky, které v požadavku nejsou, zůstanou beze změny. Upravit lze i vystavený doklad (a také stornovaný): u vystaveného se účetní zápisy smažou a zaúčtují znovu a při změně kontaktu se obnoví snímek kontaktu. Změna vystaveného nebo stornovaného dokladu, jehož data leží v uzamčeném období, se odmítne; u konceptu se uzamčení nekontroluje. S issue: true se koncept po uložení vystaví (nebo odešle ke schválení); u nekonceptu se issue ignoruje.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
documentobjektano
document.partner_idcelé čísloneID kontaktu; cizí ID se uloží jako prázdné
document.issue_datedatumneDatum vystavení
document.taxable_datedatumneDUZP
document.due_datedatumneDatum splatnosti; nesmí být dříve než datum vystavení
document.received_datedatumneDatum přijetí
document.vat_datedatumneDatum pro DPH (u prodeje se přepíše na DUZP, u nákupu nejdřív DUZP / datum přijetí)
document.currencytextneKód měny
document.exchange_ratečísloneKurz CZK za jednotku měny (> 0); u CZK vždy 1
document.rate_datedatumneDatum kurzu
document.vat_modetextneRežim DPH (viz createDocument) Hodnoty: domestic, reverse_charge, eu_goods, eu_services, import, export, exempt, non_vat, triangular.
document.rc_codetextneKód předmětu plnění PDP
document.prices_include_vatano/neneCeny včetně DPH
document.simplifiedano/neneZjednodušený daňový doklad
document.regime_44ano/neneOprava podle § 44 ZDPH
document.payment_methodtextneZpůsob úhrady Hodnoty: bank, cash, card, cod, offset, advance, other.
document.bank_account_idcelé čísloneID bankovního účtu nebo pokladny; cizí ID se uloží jako prázdné
document.variable_symboltextneVariabilní symbol (jen číslice, nejvýše 10)
document.constant_symboltextneKonstantní symbol, nejvýše 10 číslic
document.specific_symboltextneSpecifický symbol, nejvýše 10 číslic
document.original_numbertextneČíslo dokladu dodavatele
document.descriptiontextnePopis
document.notetextneText na dokladu
document.internal_notetextneInterní poznámka
document.languagetextneJazyk dokladu Hodnoty: cs, en.
document.kh_sectiontextneOddíl kontrolního hlášení (jen se uloží)
document.cost_centertextneStředisko
document.projecttextneProjekt
document.tagstextneŠtítky
document.related_document_idcelé čísloneID souvisejícího dokladu; cizí ID se uloží jako prázdné
document.lines_attributespole (objekt)neZměny řádků – s id úprava, s id a _destroy smazání, bez id nový řádek
document.lines_attributes[].idcelé čísloneID existujícího řádku dokladu
document.lines_attributes[]._destroyano/nenetrue = řádek odebrat
document.lines_attributes[].descriptiontextneText položky, nejvýše 500 znaků
document.lines_attributes[].quantityčísloneMnožství, nesmí být 0
document.lines_attributes[].unittextneJednotka
document.lines_attributes[].unit_pricečísloneJednotková cena
document.lines_attributes[].discount_percentčísloneSleva 0–100 %
document.lines_attributes[].vat_ratečísloneSazba DPH 0–100 %
document.lines_attributes[].vat_kindtextneDruh plnění Hodnoty: standard, exempt_with_credit, exempt_without_credit, not_subject.
document.lines_attributes[].account_codetextneÚčet nebo kategorie daňové evidence
document.lines_attributes[].assetano/nenePořízení majetku
document.lines_attributes[].deductiontextneNárok na odpočet Hodnoty: full, proportional, none.
document.lines_attributes[].advance_document_idcelé čísloneID odečítaného daňového dokladu k záloze
issueano/nenetrue = koncept po uložení vystavit (nebo odeslat ke schválení)

Odpověď

200 application/json Detail upraveného dokladu jako v getDocument (včetně approval).

Chyby této operace

StavKódKdy
422–Data dokladu v uzamčeném období (u nekonceptu): „Období do … je uzamčeno – doklad nelze měnit“ (tvar { error, errors })
422–Účetní zápisy vystaveného dokladu leží v uzamčeném období: „Období do … je uzamčeno – zaúčtování nelze změnit“
422–Nepovolená změna zaúčtovaného výdaje ve schvalování: „Změnu částky, kurzu, dodavatele, střediska nebo účtů u zaúčtovaného dokladu musí schválit … – vraťte doklad do konceptu a odešlete ho ke schválení“
422–S issue: true stejné chyby jako issueDocument (bez řádků, bez kontaktu, odečítaná záloha)

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 a zapíše document.updated; u vystaveného dokladu v podvojném účetnictví přeúčtuje jeho účetní zápisy. Při zapnutém schvalování změnu schvalovaných údajů schvalovatelem rovnou znovu schválí, změnu jiného člena u schváleného dokladu označí „Změněno po schválení“. S issue: true navíc jako issueDocument; když vystavení selže, změny už zůstanou uložené.
Opakování
Opakování se stejným tělem dá stejný výsledek, kromě řádků bez id – ty se při každém volání přidají znovu; každé volání zapíše další document.updated.

Příklad

cURL

curl \
  -X PATCH \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"document":{"due_date":"2026-10-20","note":"Děkujeme za spolupráci."}}' \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/145

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/145', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'PATCH',
  body: JSON.stringify({
    "document": {
      "due_date": "2026-10-20",
      "note": "Děkujeme za spolupráci."
    }
  })
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 145,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "draft",
  "number": null,
  "variable_symbol": null,
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-20",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 0.0,
  "remaining": 23958.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Návrh úvodní stránky",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": "Děkujeme za spolupráci.",
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 146,
      "position": 0,
      "description": "Návrh úvodní stránky",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "approval": null
}

DELETE Smazání konceptu

/entities/{entity_id}/documents/{id}

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Smaže koncept, který ještě nemá číslo (nikdy nebyl vystaven), s jeho řádky, přílohami a historií schvalování a zruší otevřené žádosti o podklad k dokladu. Vystavený ani stornovaný doklad a ani koncept vrácený z vystaveného dokladu (má číslo) smazat nelze – aby v číselné řadě nevznikla mezera, stornuje se.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1540.

Odpověď

204 Prázdná odpověď.

Chyby této operace

StavKódKdy
422–Doklad není koncept (vystavený nebo stornovaný): „Vystavený doklad nelze smazat – stornujte ho“
422–Koncept už má číslo z řady: „Doklad už má číslo z číselné řady – aby v ní nevznikla mezera, stornujte ho“

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Smaže doklad, řádky, přílohy a záznamy schvalování; otevřené žádosti o podklad k dokladu zruší (zpráva a událost document_request.cancelled) a zapíše document.deleted. Pravidlo opakování, jehož je doklad vzorem, se nesmaže.
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/documents/145

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/145', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'DELETE'
});
const data = await response.json();
Odpověď 204 No Content
soubor, 0 bajtů

GET Předvyplněný nový doklad

/entities/{entity_id}/documents/template

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí neuložený koncept zvoleného druhu s výchozími hodnotami firmy: datum vystavení dnes, DUZP dnes u daňových dokladů, datum přijetí dnes u nákupních, u faktur, zálohových faktur a dobropisů splatnost podle výchozí splatnosti firmy (u nabídky 30 dní, jinde žádná), jazyk z nastavení faktur, u pokladních dokladů hotově a první aktivní pokladna, jinak převodem a výchozí (nebo první) aktivní bankovní účet, tuzemské plnění a jeden řádek 1 ks s cenou 0, sazbou 21 % (u prodeje neplátce DPH 0 %) a výchozím účtem. Přidá number_preview – číslo, které by doklad dostal při vystavení dnes. Nic neukládá; doklad se založí přes createDocument.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
kinddotaztextneDruh dokladu; neznámá hodnota znamená invoice_out Hodnoty: invoice_out, invoice_in, proforma_out, proforma_in, advance_out, advance_in, credit_out, credit_in, cash_in, cash_out, internal, quote_out, order_out, delivery_out. Výchozí invoice_out. Příklad invoice_in.

Odpověď

200 application/json Doklad ve tvaru getDocument (id null, status draft, částky 0, přílohy a úhrady prázdné, approval chybí) a navíc number_preview.

PoleVýznam
number_previewNáhled čísla z číselné řady k dnešnímu dni
lines[]Jeden výchozí řádek bez id

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/documents/template?kind=invoice_out"

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/template?kind=invoice_out', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "id": null,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "draft",
  "number": null,
  "variable_symbol": null,
  "original_number": null,
  "partner_id": null,
  "partner_name": null,
  "partner_ico": null,
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 0.0,
  "total_vat": 0.0,
  "total_payable": 0.0,
  "total_gross_czk": 0.0,
  "paid_amount": 0.0,
  "remaining": 0.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": null,
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": null,
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 0.0,
  "total_net_czk": 0.0,
  "total_vat_czk": 0.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": null,
  "updated_at": null,
  "partner": {},
  "lines": [
    {
      "id": null,
      "position": 0,
      "description": "",
      "quantity": 1.0,
      "unit": "ks",
      "unit_price": 0.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "number_preview": "FV20260026"
}

GET Náhled dalšího čísla dokladu

/entities/{entity_id}/documents/next_number

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí číslo, které by dostal doklad druhu kind vystavený k datu date, podle formátu čísel firmy (výchozí {prefix}{yyyy}{nnnn}, např. FV20260001; další zástupné znaky {yy}, {mm}). Každý druh má vlastní řadu pro každý kalendářní rok data vystavení. Jde jen o náhled: číslo se nerezervuje a při vystavení se přeskočí čísla, která už nějaký doklad téhož druhu používá (např. z importu).

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
kinddotaztextneDruh dokladu; neznámá hodnota znamená invoice_out Hodnoty: invoice_out, invoice_in, proforma_out, proforma_in, advance_out, advance_in, credit_out, credit_in, cash_in, cash_out, internal, quote_out, order_out, delivery_out. Výchozí invoice_out. Příklad invoice_out.
datedotazdatumneDatum vystavení, ke kterému se číslo počítá (výchozí dnes) Příklad 2026-09-28.

Odpověď

200 application/json Objekt s náhledem čísla.

PoleVýznam
numberČíslo, např. FV20260042

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/documents/next_number?kind=invoice_out&date=2026-09-28"

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/next_number?kind=invoice_out&date=2026-09-28', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "number": "FV20260026"
}

GET Našeptávač položek z dřívějších dokladů

/entities/{entity_id}/documents/items

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí nejvýše 8 položek, které firma použila na dokladech stejného směru jako kind (prodej, nákup, nebo interní), jejichž text obsahuje všechna slova dotazu (bez ohledu na velikost písmen a diakritiku); prázdný dotaz vrátí nejčastější položky. Prochází posledních 3 000 řádků nestornovaných dokladů s kladným množstvím a neprázdným textem, bez odpočtů záloh. Položky se stejným textem se sloučí a hodnoty jsou z posledního použití. Pořadí: skóre (četnost, text nebo slovo začíná dotazem, použití za posledních 45 a 180 dní), pak novější použití.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
qdotaztextneHledaná slova Příklad konzultace.
kinddotaztextneDruh editovaného dokladu; určuje směr (prodej / nákup / interní) Hodnoty: invoice_out, invoice_in, proforma_out, proforma_in, advance_out, advance_in, credit_out, credit_in, cash_in, cash_out, internal, quote_out, order_out, delivery_out. Výchozí invoice_out. Příklad invoice_out.

Odpověď

200 application/json Návrhy položek.

PoleVýznam
rows[].descriptionText položky
rows[].unitJednotka
rows[].unit_priceJednotková cena z posledního použití
rows[].vat_rateSazba DPH
rows[].vat_kindDruh plnění
rows[].account_codeÚčet / kategorie
rows[].discount_percentSleva
rows[].currencyMěna dokladu, kde byla položka naposledy
rows[].prices_include_vatZda byla cena včetně DPH
rows[].countKolikrát byla položka použita
rows[].last_usedDatum vystavení posledního dokladu s položkou
rows[].scoreSkóre pořadí

Chování

Co změní
Nic nezapisuje.
Limity
Nejvýše 8 návrhů; prohledá posledních 3 000 řádků.

Příklad

cURL

curl \
  -H "X-API-Key: $SALDO_API_KEY" \
  "https://techtools.cz/ucetnictvi-api/entities/1/documents/items?q=konzultace&kind=invoice_out"

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/items?q=konzultace&kind=invoice_out', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "rows": [
    {
      "description": "Konzultace – digitální strategie",
      "unit": "hod",
      "unit_price": 2200.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "discount_percent": 0.0,
      "currency": "CZK",
      "prices_include_vat": false,
      "count": 3,
      "last_used": "2026-07-15",
      "score": 10
    }
  ]
}

GET Výchozí údaje dokladu podle kontaktu

/entities/{entity_id}/documents/partner_defaults

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Pro kontakt vrátí údaje z jeho posledního nestornovaného dokladu (i konceptu) stejného směru jako kind (přednostně stejného druhu): měnu, způsob úhrady, jazyk, režim DPH, kód PDP, ceny s DPH, konstantní symbol, bankovní účet (jen je-li stále aktivní) a splatnost ve dnech (z kontaktu, jinak z posledního dokladu s úhradou, 0–365). U nákupu navrhne účet řádku. last_document nese řádky posledního dokladu stejného druhu (bez odpočtů záloh) pro „Stejné jako minule“.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
partner_iddotazcelé čísloanoID kontaktu firmy Příklad 118.
kinddotaztextneDruh editovaného dokladu Hodnoty: invoice_out, invoice_in, proforma_out, proforma_in, advance_out, advance_in, credit_out, credit_in, cash_in, cash_out, internal, quote_out, order_out, delivery_out. Výchozí invoice_out. Příklad invoice_in.

Odpověď

200 application/json Výchozí hodnoty; bez předchozího dokladu jsou údaje dokladu null.

PoleVýznam
partner_idID kontaktu
based_on{ id, number, kind, issue_date } dokladu, ze kterého hodnoty pocházejí (number u konceptu je text Koncept), nebo null
currencyMěna
payment_methodZpůsob úhrady
languageJazyk
vat_modeRežim DPH
rc_codeKód PDP
prices_include_vatCeny s DPH
constant_symbolKonstantní symbol
bank_account_idAktivní bankovní účet posledního dokladu nebo null
due_daysSplatnost ve dnech nebo null
account_codeU nákupu nejčastější účet řádků vystavených nákupních dokladů kontaktu, jinak výchozí účet kontaktu, jinak 518 (daňová evidence V05); u prodeje a interního dokladu null
last_document{ id, number, issue_date, total_payable, currency, prices_include_vat, lines[] } posledního dokladu stejného druhu, nebo null

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/documents/partner_defaults?partner_id=1&kind=invoice_out"

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/partner_defaults?partner_id=1&kind=invoice_out', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "partner_id": 1,
  "based_on": {
    "id": 145,
    "number": "Koncept",
    "kind": "invoice_out",
    "issue_date": "2026-09-28"
  },
  "currency": "CZK",
  "payment_method": "bank",
  "language": "cs",
  "vat_mode": "domestic",
  "rc_code": null,
  "prices_include_vat": false,
  "constant_symbol": null,
  "bank_account_id": 2,
  "due_days": 14,
  "account_code": null,
  "last_document": {
    "id": 145,
    "number": "Koncept",
    "issue_date": "2026-09-28",
    "total_payable": 23958.0,
    "currency": "CZK",
    "prices_include_vat": false,
    "lines": [
      {
        "description": "Návrh úvodní stránky",
        "quantity": 12.0,
        "unit": "hod",
        "unit_price": 1650.0,
        "discount_percent": 0.0,
        "vat_rate": 21.0,
        "vat_kind": "standard",
        "account_code": "602",
        "deduction": "full",
        "asset": false
      }
    ]
  }
}

GET Kontrola duplicity přijatého dokladu

/entities/{entity_id}/documents/duplicates

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Zjistí, zda firma už nemá stejný přijatý doklad. Kontroluje jen nákupní druhy (invoice_in, proforma_in, advance_in, credit_in, cash_out) se známým kontaktem firmy a porovnává s nestornovanými nákupními doklady téhož dodavatele (stejný kontakt nebo stejné IČO): nejdřív shodné číslo dokladu dodavatele (bez ohledu na velikost písmen a mezery na krajích), jinak stejná měna a částka k úhradě (±0,005) s datem vystavení nejvýše 3 dny od zadaného. Vrátí nejstarší takový doklad s větou pro uživatele, jinak null. Ukládání dokladu tuto kontrolu neprovádí; hromadné vystavení ano.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
kinddotaztextneDruh kontrolovaného dokladu; u jiného než nákupního druhu (včetně internal a order_out) je výsledek vždy null Hodnoty: invoice_out, invoice_in, proforma_out, proforma_in, advance_out, advance_in, credit_out, credit_in, cash_in, cash_out, internal, quote_out, order_out, delivery_out. Výchozí invoice_out. Příklad invoice_in.
partner_iddotazcelé čísloneID dodavatele; bez něj (nebo s cizím ID) je výsledek null Příklad 131.
original_numberdotaztextneČíslo dokladu dodavatele Příklad 2026090815.
issue_datedotazdatumneDatum vystavení (pro shodu podle částky) Příklad 2026-09-20.
totaldotazčísloneČástka k úhradě v měně dokladu (pro shodu podle částky; 0 nebo prázdná shodu podle částky vypne) Příklad 17545.
currencydotaztextneKód měny dokladu velkými písmeny (pro shodu podle částky); hodnota se nepřevádí, takže s eur se shoda podle částky nenajde Výchozí CZK. Příklad CZK.
iddotazcelé čísloneID právě upravovaného dokladu, který se má z porovnání vynechat Příklad 1540.

Odpověď

200 application/json Pravděpodobná duplicita nebo null.

PoleVýznam
duplicate_ofnull, nebo { id, number, kind, status, original_number, issue_date, total_payable, currency, partner, reason, message }
duplicate_of.reasonnumber (stejné číslo dokladu dodavatele) nebo amount (stejná částka do 3 dnů)
duplicate_of.messageČeská věta pro uživatele

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/documents/duplicates?kind=invoice_in&partner_id=6&original_number=FA-2026-0815&issue_date=2026-09-20&total=17545&currency=CZK"

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/duplicates?kind=invoice_in&partner_id=6&original_number=FA-2026-0815&issue_date=2026-09-20&total=17545&currency=CZK', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "duplicate_of": null
}

GET Doklady k upomenutí s úroky z prodlení

/entities/{entity_id}/documents/reminders

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Bez ids vrátí vydané faktury (invoice_out) po splatnosti, u nichž od splatnosti i od poslední upomínky uplynulo aspoň tolik dní, kolik je v nastavení automatizace (reminder_days, výchozí 7), seřazené podle splatnosti. S ids vrátí z uvedených dokladů firmy jen vydané faktury a vydané zálohové faktury po splatnosti; ostatní započte do skipped. U každého dokladu spočítá úrok z prodlení k dnešku podle NV č. 351/2013 Sb. (a u kontaktu s IČO náklady uplatnění pohledávky 1 200 Kč). Nic nezaznamenává – upomínku zapíše recordDocumentReminder nebo hromadná akce remind.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idsdotaztextneID dokladů oddělená čárkou (nebo opakovaný parametr ids[]); použije se prvních 100 Příklad 15321533.

Odpověď

200 application/json Doklady s úrokem a pořadím příští upomínky.

PoleVýznam
daysPočet dní po splatnosti z nastavení automatizace (reminder_days)
entityÚdaje firmy pro hlavičku upomínky
skippedS ids počet uvedených ID, které nejsou vydanou fakturou nebo zálohovou fakturou po splatnosti (i cizí ID); bez ids 0
rows[].documentDetail dokladu (bez approval)
rows[].interestVýpočet úroku jako v getDocumentReminder, nebo null, když výpočet nejde
rows[].next_levelPořadí příští upomínky (zaznamenané upomínky + 1)

Chování

Co změní
Nic nezapisuje.
Limity
Nejvýše 100 ID v parametru ids.

Příklad

cURL

curl \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/reminders

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/reminders', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "days": 7,
  "entity": {
    "id": 1,
    "accent_color": null,
    "archived": false,
    "bookkeeping": "double_entry",
    "city": "Praha",
    "company_id": null,
    "country": "CZ",
    "created_at": "2026-09-28T10:00:00.000Z",
    "currency": "CZK",
    "databox": null,
    "default_due_days": 14,
    "dic": "CZ99999994",
    "email": "demo@example.cz",
    "first_name": null,
    "fiscal_year_start": 1,
    "flat_expense_rate": null,
    "house_number": "859",
    "ico": "99999994",
    "invoice_footer": null,
    "last_name": null,
    "legal_form": "sro",
    "locked_until": null,
    "nace": "621000",
    "name": "Ukázková firma s.r.o.",
    "orientation_number": "22",
    "owner_id": 1,
    "phone": "+420 777 000 000",
    "register_note": "Zapsáno v obchodním rejstříku vedeném Městským soudem v Praze, oddíl C, vložka 999999 (ukázková data).",
    "street": "Na Příkopě",
    "tax_office_code": "451",
    "tax_office_workplace": "2001",
    "title": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "vat_registered_on": "2023-01-01",
    "vat_status": "monthly",
    "web": null,
    "zip": "11000",
    "settings": {
      "round_total": "always",
      "invoice_language": "cs",
      "number_format": "{prefix}{yyyy}{nnnn}",
      "reminder_days": [
        3,
        14
      ],
      "show_qr": true,
      "invoice_style": "plain",
      "invoice_font": "auto",
      "invoice_density": "normal",
      "invoice_table": "auto",
      "invoice_corners": "auto",
      "invoice_logo_size": "m",
      "invoice_logo_name": false,
      "invoice_row_numbers": false,
      "invoice_paid_stamp": true,
      "invoice_contacts": true,
      "invoice_credit": true,
      "demo": true,
      "statement_category": "mikro",
      "submitter": {
        "first_name": "Jana",
        "last_name": "Ukázková",
        "relation": "jednatelka"
      },
      "tax_profile": {
        "children": [
          {
            "order": 1,
            "first_name": "Eliška",
            "last_name": "Ukázková",
            "birth_number": "1855120003"
          }
        ],
        "main_activity": true,
        "birth_number": "8001010006"
      },
      "ossz_code": "110",
      "cssz_variable_symbol": "1234567890",
      "jmhz_workplace": {
        "municipality": "Praha",
        "municipality_code": "554782",
        "country": "CZ"
      }
    },
    "has_logo": false,
    "legal_form_label": "s.r.o.",
    "bookkeeping_label": "Podvojné účetnictví",
    "vat_status_label": "Plátce DPH – měsíčně",
    "vat_payer": true,
    "double_entry": true,
    "role": null,
    "can_write": null,
    "can_manage": null,
    "member_user_id": null
  },
  "skipped": 0,
  "rows": []
}

Dlouhé seznamy jsou v ukázce zkrácené na první položky.

POST Hromadná akce s doklady

/entities/{entity_id}/documents/bulk

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Provede jednu akci s každým vybraným dokladem zvlášť – odmítnutí jednoho dokladu nezastaví ostatní a odpověď říká, co se povedlo a proč zbytek ne. issue vystaví koncepty jako issueDocument, ale nikdy neschvaluje (přijatý výdaj, který schválení potřebuje a nemá ho, odmítne) a nevystaví koncept přijatého dokladu, který vypadá jako duplicita (viz findDuplicateDocument). pay zaznamená úhradu zbývající částky k paid_on na bank_account_id (hotově, je-li to pokladna, jinak převodem). remind zaznamená upomínku u vydané faktury nebo zálohové faktury po splatnosti. delete smaže koncepty bez čísla. Parametr se jmenuje operation, protože název action je v Rails vyhrazený.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
operationtextanoHromadná akce Hodnoty: issue, pay, remind, delete.
idspole (celé číslo)anoID dokladů firmy (lze i jeden řetězec s ID oddělenými čárkou); ID jiných firem se tiše vynechají
paid_ondatumneJen pay – datum úhrady (výchozí dnes)
bank_account_idcelé čísloneJen pay – bankovní účet nebo pokladna, na kterou se úhrada zaznamená; ID, které firmě nepatří, vrátí 404 u každé akce

Odpověď

200 application/json Výsledek akce po dokladech.

PoleVýznam
operationProvedená akce
donePočet dokladů, u kterých akce proběhla
failed[]{ id, number, error } – doklady, u kterých akce neproběhla, s důvodem v češtině
documents[]{ id, number, partner } – doklady, u kterých akce proběhla

Chyby této operace

StavKódKdy
422–Neznámá hodnota operation: „Neznámá hromadná akce – použijte issue, pay, remind nebo delete“
422–Žádné z ids nepatří dokladu firmy: „Vyberte alespoň jeden doklad“

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
issue: jako issueDocument u každého úspěšného dokladu (číslo, účetní zápisy, document.issued). pay: úhrada s poznámkou „Hromadně označeno jako zaplacené“, v podvojném účetnictví i její účetní zápis (payment.recorded). remind: počítadlo upomínek +1, datum poslední upomínky dnes, document.reminded. delete: smazání konceptu jako deleteDocument (document.deleted). Každý doklad se zpracuje samostatně; akce nad celou dávkou není atomická.
Limity
Použije prvních 300 ID z ids (další se ignorují); doklady zpracuje v pořadí podle data vystavení.
Opakování
Opakovaná akce issue nebo pay vrátí doklady ve failed („Doklad už je vystavený“, „Doklad je už uhrazený“); remind zaznamená při každém volání další upomínku; delete nenajde smazané doklady.

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"operation":"pay","ids":[143],"paid_on":"2026-09-28","bank_account_id":2}' \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/bulk

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/bulk', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify({
    "operation": "pay",
    "ids": [
      143
    ],
    "paid_on": "2026-09-28",
    "bank_account_id": 2
  })
});
const data = await response.json();
Odpověď 200 OK
{
  "operation": "pay",
  "done": 1,
  "failed": [],
  "documents": [
    {
      "id": 143,
      "number": "FV20260025",
      "partner": "Nordwood Studio s.r.o."
    }
  ]
}

POST Vystavení dokladu

/entities/{entity_id}/documents/{id}/issue

Oprávnění
Vlastník, účetní nebo editor
Pravidlo
Přijatý výdaj (invoice_in, cash_out, credit_in), na který se vztahuje pravidlo schvalování a který není schválený, smí vystavit jen jeho schvalovatel – vystavení se pak zaznamená jako schválení („Schváleno při vystavení“); ostatním vrátí 422.
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Vystaví koncept: ověří, že má aspoň jeden řádek a že faktura, zálohová faktura, dobropis, daňový doklad k záloze a obchodní doklad má kontakt. Přidělí číslo z řady druhu a roku data vystavení (koncept vrácený z vystaveného dokladu si číslo ponechá), u prodeje doplní prázdný variabilní symbol z číslic čísla, u daňových dokladů doplní chybějící DUZP datem vystavení, uloží snímek kontaktu, přepočítá částky a nastaví stav issued. V podvojném účetnictví zaúčtuje předkontaci (prodej MD 311 / D výnosové účty a 343, nákup MD nákladové účty a 343 / D 321, pokladní doklad proti účtu pokladny, daňový doklad k záloze 324/343 nebo 343/314); zálohové faktury, interní a obchodní doklady ani daňová evidence se neúčtují. Pokladní doklad se označí za uhrazený; faktura nebo zálohová faktura vytvořená z nabídky označí nabídku, která ještě nemá výsledek, jako přijatou.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID konceptu Příklad 1540.

Odpověď

200 application/json Detail vystaveného dokladu jako v getDocument (včetně approval).

Chyby této operace

StavKódKdy
422–Doklad není koncept (i stornovaný): „Doklad už je vystavený“
422–Doklad nemá řádky: „Doklad nemá žádnou položku“
422–Chybí kontakt: „Doplňte odběratele nebo dodavatele“
422–Řádek odečítá neexistující nebo nevystavený daňový doklad k záloze: „Odečítaná záloha neexistuje“
422–Daňový doklad k záloze už je odečtený jinde: „Daňový doklad … je už odečtený na dokladu …“
422–Výdaj ve schvalování, volající ho nesmí schválit: „Doklad musí před zaúčtováním schválit … – odešlete ho ke schválení“, „Doklad čeká na schválení – schvaluje …“, „Doklad se po schválení změnil – odešlete ho znovu ke schválení (schvaluje …)“ nebo „Doklad byl vrácen k opravě – upravte ho a odešlete znovu ke schválení“
422–Datum dokladu v uzamčeném období: „Období do … je uzamčeno – doklad nelze měnit“ (tvar { error, errors })

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Přidělí číslo (posune číselnou řadu), uloží stav issued a snímek kontaktu, v podvojném účetnictví vytvoří účetní zápisy, u pokladního dokladu nastaví uhrazenou částku a datum úhrady, u zdrojové nabídky nastaví výsledek accepted, zapíše document.issued (a případně document.approved se záznamem schválení). U přijatého výdaje v cizí měně se při zapnutém schvalování může dotázat kurz ČNB (jen pro posouzení limitu).
Opakování
Druhé volání vrátí 422 „Doklad už je vystavený“.

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/145/issue

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/145/issue', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'POST'
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 145,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "issued",
  "number": "FV20260026",
  "variable_symbol": "20260026",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 0.0,
  "remaining": 23958.0,
  "payment_state": "unpaid",
  "days_overdue": 0,
  "description": "Návrh úvodní stránky",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 146,
      "position": 0,
      "description": "Návrh úvodní stránky",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "approval": null
}

POST Storno dokladu

/entities/{entity_id}/documents/{id}/cancel

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Stornuje doklad: smaže jeho účetní zápisy a nastaví stav cancelled; číslo zůstává obsazené, takže v řadě nevznikne mezera. Nejde, pokud má doklad s úhradou zaznamenané úhrady, pokud k němu existuje vystavený opravný doklad (nejdřív se stornuje ten) nebo pokud je daňový doklad k záloze odečtený na jiném dokladu. Stav se nekontroluje – stornovat lze i koncept. Veřejný odkaz stornovaného dokladu vrací 404. Zpět do konceptu ho vrátí reopenDocument.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Detail stornovaného dokladu jako v getDocument.

Chyby této operace

StavKódKdy
422–Doklad s úhradou má zaznamenané úhrady: „Nejprve zrušte úhrady dokladu“
422–K dokladu existuje vystavený dobropis: „K dokladu je vystavený opravný doklad … – nejdřív stornujte ten“
422–Daňový doklad k záloze je odečtený na jiném dokladu: „Záloha je odečtená na dokladu … – nejdřív upravte ten“
422–Účetní zápisy v uzamčeném období: „Období do … je uzamčeno – zaúčtování nelze změnit“; nebo datum dokladu v uzamčeném období: „Období do … je uzamčeno – doklad 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 účetní zápisy dokladu, nastaví stav cancelled a zapíše document.cancelled.
Opakování
Opakované volání na stornovaný doklad znovu uspěje a zapíše další událost.

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/143/cancel

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/cancel', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'POST'
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 143,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "cancelled",
  "number": "FV20260025",
  "variable_symbol": "20260025",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 0.0,
  "remaining": 23958.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 144,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": {
    "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
    "shared_at": "2026-09-28T10:00:00.000Z",
    "viewed_at": null,
    "views": 0
  },
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "approval": null
}

POST Vrácení dokladu do konceptu

/entities/{entity_id}/documents/{id}/reopen

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Vrátí vystavený (nebo stornovaný) doklad do stavu koncept: smaže jeho účetní zápisy a číslo ponechá. Doklad pak lze upravit a znovu vystavit se stejným číslem; koncept s číslem smazat nelze. Podmínky jsou stejné jako u storna: žádné úhrady, žádný vystavený opravný doklad, daňový doklad k záloze neodečtený jinde a neuzamčené období.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Detail dokladu ve stavu draft jako v getDocument.

Chyby této operace

StavKódKdy
422–Doklad s úhradou má úhrady: „Doklad s úhradami nelze vrátit do konceptu“
422–K dokladu existuje vystavený dobropis: „K dokladu je vystavený opravný doklad … – nejdřív stornujte ten“
422–Daňový doklad k záloze je odečtený jinde: „Záloha je odečtená na dokladu … – nejdřív upravte ten“
422–Uzamčené období: „Období do … je uzamčeno – zaúčtování nelze změnit“ nebo „Období do … je uzamčeno – doklad 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 účetní zápisy dokladu, nastaví stav draft a zapíše document.reopened.
Opakování
Opakované volání na koncept uspěje bez další změny (zapíše další událost).

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/143/reopen

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/reopen', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'POST'
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 143,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "draft",
  "number": "FV20260025",
  "variable_symbol": "20260025",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 0.0,
  "remaining": 23958.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 144,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": {
    "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
    "shared_at": "2026-09-28T10:00:00.000Z",
    "viewed_at": null,
    "views": 0
  },
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "approval": null
}

POST Zaznamenání odeslané upomínky

/entities/{entity_id}/documents/{id}/remind

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Zvýší počítadlo upomínek dokladu o 1 a nastaví datum poslední upomínky na dnešek. Upomínku nikam neposílá – jen zaznamená, že ji firma odeslala (podklady vrací getDocumentReminder). Na rozdíl od hromadné akce remind nekontroluje druh, stav ani splatnost dokladu.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Detail dokladu jako v getDocument, ale bez approval.

Chování

Co změní
Zvýší reminders_sent, nastaví last_reminder_on a zapíše document.reminded.
Opakování
Každé volání zaznamená další upomínku.

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/143/remind

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/remind', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'POST'
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 143,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "issued",
  "number": "FV20260025",
  "variable_symbol": "20260025",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 0.0,
  "remaining": 23958.0,
  "payment_state": "unpaid",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 1,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 144,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": {
    "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
    "shared_at": "2026-09-28T10:00:00.000Z",
    "viewed_at": null,
    "views": 0
  },
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null
}

POST Zúčtování uhrazené zálohy úhradou faktury

/entities/{entity_id}/documents/{id}/settle

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Uhradí fakturu z uhrazené zálohové faktury, ke které není vystavený daňový doklad k záloze (typicky u neplátce DPH): k faktuře zaznamená úhradu způsobem „Uhrazeno zálohou“ ve výši menší z uhrazené zálohy a zbývající částky faktury, s datem vystavení faktury a kurzem, za který byla záloha přijata. Existuje-li daňový doklad k záloze, záloha se místo toho odečte řádkem na konečné faktuře (prepareFinalInvoice). Směr, kontakt ani vazba zálohové faktury na fakturu se neporovnávají.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID vystavené faktury (dokladu s úhradou) Příklad 1532.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
proforma_idcelé čísloanoID zálohové faktury firmy (proforma_out nebo proforma_in); jiný druh vrátí 404

Odpověď

200 application/json Detail faktury s novou úhradou jako v getDocument, ale bez approval.

Chyby této operace

StavKódKdy
422–Zálohová faktura nemá úhradu: „Zálohová faktura zatím není uhrazená“
422–Tato záloha už je na faktuře zúčtovaná: „Záloha už byla vyúčtována“
422–K záloze existuje vystavený daňový doklad: „K záloze je vystavený daňový doklad – odečtěte ji na konečné faktuře“
422–Faktura už odečítá zálohu řádkem: „Záloha je už odečtená v položkách faktury“
422–Na faktuře nic nezbývá: „Faktura už je uhrazená“
422–Faktura není vystavená nebo nemá úhrady: „Doklad není vystavený“, „K tomuto dokladu se úhrady neevidují“
422–Datum vystavení faktury 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í
Vytvoří úhradu faktury (payment_method advance, poznámka = číslo zálohové faktury), v podvojném účetnictví zaúčtuje MD 324 / D 311 (u přijaté faktury MD 321 / D 314) a případný kurzový rozdíl, přepočte uhrazenou částku faktury a zapíše payment.recorded.
Opakování
Druhé volání se stejnou fakturou a zálohou vrátí 422 „Záloha už byla vyúčtována“.

Příklad

Ukázková zálohová faktura je uhrazená a nemá vystavený daňový doklad k záloze, takže se faktura uhradí zálohou (úhrada advance s číslem zálohové faktury v poznámce).

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"proforma_id":147}' \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/143/settle

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/settle', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify({
    "proforma_id": 147
  })
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 143,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "issued",
  "number": "FV20260025",
  "variable_symbol": "20260025",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 23958.0,
  "remaining": 0.0,
  "payment_state": "paid",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": "2026-09-28",
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 144,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": {
    "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
    "shared_at": "2026-09-28T10:00:00.000Z",
    "viewed_at": null,
    "views": 0
  },
  "payments": [
    {
      "id": 126,
      "document_id": 143,
      "bank_transaction_id": null,
      "bank_account_id": null,
      "paid_on": "2026-09-28",
      "amount": 23958.0,
      "amount_czk": 23958.0,
      "exchange_rate": 1.0,
      "payment_method": "advance",
      "note": "ZV20260002"
    }
  ],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null
}

GET Kopie dokladu jako nový koncept

/entities/{entity_id}/documents/{id}/duplicate

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí neuložený koncept stejného druhu: kontakt, měna a kurz (beze změny), režim DPH, kód PDP, ceny s DPH, způsob úhrady, bankovní účet, popis, poznámka, jazyk, středisko, projekt, konstantní symbol a řádky (bez vazby na odečítané zálohy). Datum vystavení a u daňových dokladů DUZP je dnešní, splatnost dnes + splatnost kontaktu (jinak firmy). Částky nejsou přepočítané (součty 0) – dopočítají se při uložení přes createDocument. Připojí number_preview. Nic neukládá.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID kopírovaného dokladu Příklad 1532.

Odpověď

200 application/json Koncept ve tvaru getDocument (id null, bez approval) a navíc number_preview.

PoleVýznam
number_previewNáhled čísla z řady druhu k dnešku

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/documents/143/duplicate

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/duplicate', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "id": null,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "draft",
  "number": null,
  "variable_symbol": null,
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 0.0,
  "total_vat": 0.0,
  "total_payable": 0.0,
  "total_gross_czk": 0.0,
  "paid_amount": 0.0,
  "remaining": 0.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": null,
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 0.0,
  "total_net_czk": 0.0,
  "total_vat_czk": 0.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": null,
  "updated_at": null,
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": null,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null,
  "number_preview": "FV20260026"
}

GET Dobropis k faktuře jako nový koncept

/entities/{entity_id}/documents/{id}/credit_note

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

K faktuře vydané (invoice_out) vrátí koncept opravného daňového dokladu vydaného (credit_out), k faktuře přijaté (invoice_in) koncept přijatého (credit_in): kopii faktury jako v prepareDocumentCopy se zápornými množstvími, vazbou related_document na fakturu a poznámkou „Opravný daňový doklad k dokladu č. … ze dne …“. Stav faktury se nekontroluje. Částky nejsou přepočítané. Nic neukládá.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID faktury Příklad 1532.

Odpověď

200 application/json Koncept dobropisu ve tvaru getDocument (id null, bez approval) a navíc number_preview.

Chyby této operace

StavKódKdy
422–Doklad není invoice_out ani invoice_in: „Dobropis lze vystavit jen k faktuře“

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/documents/143/credit_note

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/credit_note', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "id": null,
  "kind": "credit_out",
  "kind_label": "Opravný daňový doklad vydaný",
  "status": "draft",
  "number": null,
  "variable_symbol": null,
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 0.0,
  "total_vat": 0.0,
  "total_payable": 0.0,
  "total_gross_czk": 0.0,
  "paid_amount": 0.0,
  "remaining": 0.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": 143,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": null,
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 0.0,
  "total_net_czk": 0.0,
  "total_vat_czk": 0.0,
  "note": "Opravný daňový doklad k dokladu č. FV20260025 ze dne 28. 9. 2026.",
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": null,
  "updated_at": null,
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": null,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": -12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": {
    "id": 143,
    "number": "FV20260025",
    "kind": "invoice_out"
  },
  "recurrence": null,
  "number_preview": "OV20260002"
}

GET Konečná faktura k zálohové faktuře jako koncept

/entities/{entity_id}/documents/{id}/final_invoice

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

K zálohové faktuře vrátí koncept konečné faktury (proforma_out → invoice_out, proforma_in → invoice_in): kopii zálohové faktury s vazbou na ni, poznámkou zálohové faktury doplněnou o větu „Vyúčtování zálohové faktury č. …“ a řádkem odpočtu (množství −1, cena s DPH nebo bez podle prices_include_vat) za každý řádek každého vystaveného daňového dokladu k záloze, který ještě není odečtený na nestornovaném dokladu (ani na konceptu). Odpočet jde v podvojném účetnictví na účet 324 (přijaté zálohy) nebo 314 (poskytnuté zálohy), v daňové evidenci do kategorie hlavního řádku zálohové faktury. Částky nejsou přepočítané. Nic neukládá.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID zálohové faktury Příklad 1490.

Odpověď

200 application/json Koncept konečné faktury ve tvaru getDocument (id null, bez approval) a navíc number_preview.

Chyby této operace

StavKódKdy
422–Doklad není zálohová faktura: „Vyúčtovat lze jen zálohovou fakturu“
422–Existuje vystavená konečná faktura a není co dalšího odečíst: „Záloha už je vyúčtovaná dokladem …“

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Nic nezapisuje.

Příklad

Ukázková zálohová faktura je uhrazená, ale nemá vystavený daňový doklad k záloze ani konečnou fakturu, takže koncept neobsahuje řádek odpočtu.

cURL

curl \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/147/final_invoice

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/147/final_invoice', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "id": null,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "draft",
  "number": null,
  "variable_symbol": null,
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 0.0,
  "total_vat": 0.0,
  "total_payable": 0.0,
  "total_gross_czk": 0.0,
  "paid_amount": 0.0,
  "remaining": 0.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Záloha na e-shop",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": 147,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": null,
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 0.0,
  "total_net_czk": 0.0,
  "total_vat_czk": 0.0,
  "note": "Vyúčtování zálohové faktury č. ZV20260002.",
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": null,
  "updated_at": null,
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": null,
      "position": 0,
      "description": "Záloha na e-shop (50 %)",
      "quantity": 1.0,
      "unit": "ks",
      "unit_price": 40000.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": {
    "id": 147,
    "number": "ZV20260002",
    "kind": "proforma_out"
  },
  "recurrence": null,
  "number_preview": "FV20260026"
}

GET Daňový doklad k přijaté platbě zálohy jako koncept

/entities/{entity_id}/documents/{id}/advance_document

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

K uhrazené zálohové faktuře vrátí koncept daňového dokladu k platbě (advance_out u vydané, advance_in u přijaté) na částku zaplacenou a dosud nepokrytou vystavenými daňovými doklady k této záloze. Datum vystavení i DUZP je datum poslední platby zálohy, ceny jsou včetně DPH a částka se rozdělí do sazeb DPH v poměru řádků zálohové faktury (účet 324, resp. 314). Částky nejsou přepočítané. Nic neukládá.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID zálohové faktury Příklad 1490.

Odpověď

200 application/json Koncept daňového dokladu k záloze ve tvaru getDocument (id null, bez approval) a navíc number_preview.

Chyby této operace

StavKódKdy
422–Doklad není zálohová faktura nebo nemá úhradu: „Daňový doklad lze vystavit jen k uhrazené zálohové faktuře“
422–Všechny platby už mají daňový doklad: „Ke všem přijatým platbám zálohy už daňový doklad existuje“

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

Vyžaduje uhrazenou zálohovou fakturu, jejíž platby ještě nemají daňový doklad.

cURL

curl \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/147/advance_document

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/147/advance_document', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "id": null,
  "kind": "advance_out",
  "kind_label": "Daňový doklad k přijaté platbě",
  "status": "draft",
  "number": null,
  "variable_symbol": null,
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-15",
  "taxable_date": "2026-09-15",
  "due_date": null,
  "currency": "CZK",
  "total_net": 0.0,
  "total_vat": 0.0,
  "total_payable": 0.0,
  "total_gross_czk": 0.0,
  "paid_amount": 0.0,
  "remaining": 0.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": null,
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": 147,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": null,
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": true,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": null,
  "rounding": 0.0,
  "total_gross": 0.0,
  "total_net_czk": 0.0,
  "total_vat_czk": 0.0,
  "note": "Daňový doklad k přijaté platbě k zálohové faktuře č. ZV20260002.",
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": null,
  "updated_at": null,
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": null,
      "position": 0,
      "description": "Záloha dle zálohové faktury č. ZV20260002",
      "quantity": 1.0,
      "unit": null,
      "unit_price": 48400.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "324",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "bank_account": null,
  "related_document": {
    "id": 147,
    "number": "ZV20260002",
    "kind": "proforma_out"
  },
  "recurrence": null,
  "number_preview": "DZ20260002"
}

GET Podklady pro upomínku dokladu

/entities/{entity_id}/documents/{id}/reminder

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí doklad, údaje firmy, pořadí příští upomínky a výpočet úroku z prodlení k dnešku ze zbývající částky podle NV č. 351/2013 Sb.: repo sazba ČNB platná první den pololetí, v němž prodlení začalo, + 8 p. b., za dny od dne po splatnosti do dneška; náklady spojené s uplatněním pohledávky 1 200 Kč jen u kontaktu s IČO, a to až po splatnosti. interest je null, když doklad nemá splatnost, nic nezbývá uhradit nebo výpočet nejde (např. splatnost před rokem 2014). Nic nezaznamenává.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Podklady pro upomínku.

PoleVýznam
documentDetail dokladu (bez approval)
entityÚdaje firmy
next_levelPořadí příští upomínky (zaznamenané upomínky + 1)
interest.principalJistina = zbývající částka dokladu
interest.currencyMěna výpočtu – vždy CZK (měna dokladu se nepředává)
interest.delay_fromPrvní den prodlení, nebo null, když prodlení ještě nenastalo
interest.daysPočet dní prodlení
interest.reference_datePrvní den pololetí, podle kterého se bere repo sazba
interest.repo_rateRepo sazba ČNB v %
interest.rateRoční sazba úroku v % (repo + 8)
interest.periods[]{ from, to, days, rate, interest } po kalendářních pololetích
interest.interestÚrok celkem (2 desetinná místa)
interest.recovery_costNáklady uplatnění pohledávky: 1200 u kontaktu s IČO, když prodlení už nastalo, jinak 0
interest.basis[]Právní podklady výpočtu (texty)

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/documents/143/reminder

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/reminder', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "document": {
    "id": 143,
    "kind": "invoice_out",
    "kind_label": "Faktura vydaná",
    "status": "issued",
    "number": "FV20260025",
    "variable_symbol": "20260025",
    "original_number": null,
    "partner_id": 1,
    "partner_name": "Nordwood Studio s.r.o.",
    "partner_ico": "90000013",
    "issue_date": "2026-09-28",
    "taxable_date": "2026-09-28",
    "due_date": "2026-10-12",
    "currency": "CZK",
    "total_net": 19800.0,
    "total_vat": 4158.0,
    "total_payable": 23958.0,
    "total_gross_czk": 23958.0,
    "paid_amount": 0.0,
    "remaining": 23958.0,
    "payment_state": "unpaid",
    "days_overdue": 0,
    "description": "Správa webu – září",
    "vat_mode": "domestic",
    "source": "manual",
    "tags": null,
    "related_document_id": null,
    "reminders_sent": 0,
    "outcome": null,
    "attachments_count": 0,
    "approval_state": null,
    "uuid": null,
    "constant_symbol": null,
    "specific_symbol": null,
    "received_date": null,
    "vat_date": "2026-09-28",
    "exchange_rate": 1.0,
    "rate_date": null,
    "rc_code": null,
    "prices_include_vat": false,
    "simplified": false,
    "regime_44": false,
    "payment_method": "bank",
    "bank_account_id": 2,
    "rounding": 0.0,
    "total_gross": 23958.0,
    "total_net_czk": 19800.0,
    "total_vat_czk": 4158.0,
    "note": null,
    "internal_note": null,
    "language": "cs",
    "kh_section": null,
    "cost_center": null,
    "project": null,
    "paid_on": null,
    "created_at": "2026-09-28T10:00:00.000Z",
    "updated_at": "2026-09-28T10:00:00.000Z",
    "partner": {
      "name": "Nordwood Studio s.r.o.",
      "ico": "90000013",
      "dic": "CZ90000013",
      "street": "Korunní 1208/74",
      "city": "Praha 10",
      "zip": "10100",
      "country": "CZ",
      "email": "fakturace@example.cz",
      "phone": null
    },
    "lines": [
      {
        "id": 144,
        "position": 0,
        "description": "Správa webu – září",
        "quantity": 12.0,
        "unit": "hod",
        "unit_price": 1650.0,
        "discount_percent": 0.0,
        "vat_rate": 21.0,
        "vat_kind": "standard",
        "account_code": "602",
        "asset": false,
        "deduction": "full",
        "advance_document_id": null,
        "net": 19800.0,
        "vat": 4158.0,
        "gross": 23958.0,
        "net_czk": 19800.0,
        "vat_czk": 4158.0
      }
    ],
    "attachments": [],
    "share": {
      "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
      "shared_at": "2026-09-28T10:00:00.000Z",
      "viewed_at": null,
      "views": 0
    },
    "payments": [],
    "vat_recap": [
      {
        "rate": 21.0,
        "net": 19800.0,
        "vat": 4158.0,
        "gross": 23958.0,
        "net_czk": 19800.0,
        "vat_czk": 4158.0
      }
    ],
    "bank_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": null,
      "updated_at": "2026-09-28T10:00:00.000Z",
      "display_number": "2900001227/2010",
      "balance": null,
      "api_connected": false
    },
    "related_document": null,
    "recurrence": null
  },
  "interest": {
    "principal": 23958.0,
    "currency": "CZK",
    "delay_from": null,
    "days": 0,
    "reference_date": "2026-07-01",
    "repo_rate": 3.75,
    "rate": 11.75,
    "periods": [],
    "interest": 0.0,
    "recovery_cost": 0.0,
    "basis": [
      "§ 2 odst. 1 nařízení vlády č. 351/2013 Sb. (repo sazba ČNB platná první den kalendářního pololetí, v němž došlo k prodlení, + 8 p. b., po celou dobu prodlení)",
      "§ 3 nařízení vlády č. 351/2013 Sb. (vzájemný závazek podnikatelů nebo podnikatele a veřejného zadavatele)"
    ]
  },
  "entity": {
    "id": 1,
    "accent_color": null,
    "archived": false,
    "bookkeeping": "double_entry",
    "city": "Praha",
    "company_id": null,
    "country": "CZ",
    "created_at": "2026-09-28T10:00:00.000Z",
    "currency": "CZK",
    "databox": null,
    "default_due_days": 14,
    "dic": "CZ99999994",
    "email": "demo@example.cz",
    "first_name": null,
    "fiscal_year_start": 1,
    "flat_expense_rate": null,
    "house_number": "859",
    "ico": "99999994",
    "invoice_footer": null,
    "last_name": null,
    "legal_form": "sro",
    "locked_until": null,
    "nace": "621000",
    "name": "Ukázková firma s.r.o.",
    "orientation_number": "22",
    "owner_id": 1,
    "phone": "+420 777 000 000",
    "register_note": "Zapsáno v obchodním rejstříku vedeném Městským soudem v Praze, oddíl C, vložka 999999 (ukázková data).",
    "street": "Na Příkopě",
    "tax_office_code": "451",
    "tax_office_workplace": "2001",
    "title": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "vat_registered_on": "2023-01-01",
    "vat_status": "monthly",
    "web": null,
    "zip": "11000",
    "settings": {
      "round_total": "always",
      "invoice_language": "cs",
      "number_format": "{prefix}{yyyy}{nnnn}",
      "reminder_days": [
        3,
        14
      ],
      "show_qr": true,
      "invoice_style": "plain",
      "invoice_font": "auto",
      "invoice_density": "normal",
      "invoice_table": "auto",
      "invoice_corners": "auto",
      "invoice_logo_size": "m",
      "invoice_logo_name": false,
      "invoice_row_numbers": false,
      "invoice_paid_stamp": true,
      "invoice_contacts": true,
      "invoice_credit": true,
      "demo": true,
      "statement_category": "mikro",
      "submitter": {
        "first_name": "Jana",
        "last_name": "Ukázková",
        "relation": "jednatelka"
      },
      "tax_profile": {
        "children": [
          {
            
…

Dlouhé seznamy jsou v ukázce zkrácené na první položky.

GET Řetězec QR Platby k dokladu

/entities/{entity_id}/documents/{id}/qr

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí řetězec QR Platby (SPAYD 1.0) k zaplacení dokladu: účet (IBAN a BIC) bankovního účtu dokladu, u pokladny nebo bez účtu výchozí nebo první aktivní bankovní účet firmy; částka = zbývající částka, a není-li kladná, celková částka k úhradě; dále měna, splatnost, variabilní, konstantní a specifický symbol, jméno firmy a zpráva „druh a číslo dokladu“. Vrátí spayd null, když takto vybraný účet nemá IBAN ani číslo účtu s kódem banky (nebo firma aktivní bankovní účet nemá), měna není CZK ani EUR, nebo částka není kladná (např. dobropis). Stav dokladu se nekontroluje; obrázek QR kódu API nevytváří.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Objekt s řetězcem QR Platby.

PoleVýznam
spaydNapř. SPD*1.0*ACC:CZ…*AM:15972.00*CC:CZK*…, nebo null

Chyby této operace

StavKódKdy
422–Neplatný účet firmy: „Neplatný IBAN: …“ nebo „Neplatný BIC: …“
422–Částka nad limit QR Platby: „Částka pro QR Platbu smí být nejvýše 9 999 999,99“

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/documents/143/qr

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/qr', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "spayd": "SPD*1.0*ACC:CZ3820100000002900001227*AM:23958.00*CC:CZK*RN:Uk%C3%A1zkov%C3%A1 firma s.r.o.*DT:20261012*MSG:Faktura FV20260025*X-VS:20260025"
}

GET Stažení dokladu ve formátu ISDOC

/entities/{entity_id}/documents/{id}/isdoc

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí vydaný doklad (invoice_out, credit_out, proforma_out, advance_out) jako soubor ISDOC (XML) ke stažení s názvem „číslo.isdoc“. Dodavatel je firma, odběratel kontakt dokladu, platební údaje jsou z bankovního účtu dokladu nebo výchozího účtu firmy. Doklad musí mít číslo (tedy být někdy vystaven) a řádky; dobropis musí odkazovat na původní doklad. Doklad bez uloženého UUID (to má jen doklad importovaný z ISDOC) dostane při každém stažení nové náhodné UUID.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/xml Soubor ISDOC (Content-Disposition attachment).

Chyby této operace

StavKódKdy
422–Jiný druh než vydaná faktura, zálohová faktura, dobropis nebo daňový doklad k záloze: „ISDOC lze vytvořit jen pro vydané doklady“
422–Koncept bez čísla: „Doklad nemá číslo“
422–„Doklad nemá žádné položky“, „Dodavatel nemá název“, „Opravný doklad musí odkazovat na původní doklad“, „Doklad v cizí měně musí mít kladný kurz“

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/documents/143/isdoc

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/isdoc', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="http://isdoc.cz/namespace/2013" version="6.0.2">
  <DocumentType>1</DocumentType>
  <ID>FV20260025</ID>
  <UUID>A2EAC2DF-BC15-43F1-A175-992B9ED85EBA</UUID>
  <IssuingSystem>Saldo – TechTools.cz</IssuingSystem>
  <IssueDate>2026-09-28</IssueDate>
  <TaxPointDate>2026-09-28</TaxPointDate>
  <VATApplicable>true</VATApplicable>
  <ElectronicPossibilityAgreementReference/>
  <LocalCurrencyCode>CZK</LocalCurrencyCode>
  <CurrRate>1</CurrRate>
  <RefCurrRate>1</RefCurrRate>
  <AccountingSupplierParty>
    <Party>
      <PartyIdentification>
        <ID>99999994</ID>
      </PartyIdentification>
      <PartyName>
        <Name>Ukázková firma s.r.o.</Name>
      </PartyName>
      <PostalAddress>
        <StreetName>Na Příkopě</StreetName>
        <BuildingNumber>859/22</BuildingNumber>
        <CityName>Praha</CityName>
        <PostalZone>11000</PostalZone>
        <Country>
          <IdentificationCode>CZ</IdentificationCode>
          <Name>Česká republika</Name>
        </Country>
      </PostalAddress>
      <PartyTaxScheme>
        <CompanyID>CZ99999994</CompanyID>
        <TaxScheme>VAT</TaxScheme>
      </PartyTaxScheme>
      <RegisterIdentification>
        <Preformatted>Zapsáno v obchodním rejstříku vedeném Městským soudem v Praze, oddíl C, vložka 999999 (ukázková data).</Preformatted>
      </RegisterIdentification>
      <Contact>
        <Telephone>+420 777 000 000</Telephone>
        <ElectronicMail>demo@example.cz</ElectronicMail>
      </Contact>
    </Party>
  </AccountingSupplierParty>
  <AccountingCustomerParty>
    <Party>
      <PartyIdentification>
        <ID>90000013</ID>
      </PartyIdentification>
      <PartyName>
        <Name>Nordwood Studio s.r.o.</Name>
      </PartyName>
      <PostalAddress>
        <StreetName>Korunní</StreetName>
        <BuildingNumber>1208/74</BuildingNumber>
        <CityName>Praha 10</CityName>
        <PostalZone>10100</PostalZone>
        <Country>
          <IdentificationCode>CZ</IdentificationCode>
          <Name>Česká republika</Name>
        </Country>
      </PostalAddress>
      <PartyTaxScheme>
        <CompanyID>CZ90000013</CompanyID>
        <TaxScheme>VAT</TaxScheme>
      </PartyTaxScheme>
      <Contact>
        <ElectronicMail>fakturace@example.cz</ElectronicMail>
      </Contact>
    </Party>
  </AccountingCustomerParty>
  <InvoiceLines>
    <InvoiceLine>
      <ID>1</ID>
      <InvoicedQuantity unitCode="hod">12</InvoicedQuantity>
      <LineExtensionAmount>19800.00</LineExtensionAmount>
      <LineExtensionAmountTaxInclusive>23958.00</LineExtensionAmountTaxInclusive>
      <LineExtensionTaxAmount>4158.00</LineExtensionTaxAmount>
      <UnitPrice>1650</UnitPrice>
      <UnitPriceTaxInclusive>1996.5</UnitPriceTaxInclusive>
      <ClassifiedTaxCategory>
        <Percent>21</Percent>
        <VATCalculationMethod>0</VATCalculationMethod>
        <VATApplicable>true</VATApplicable>
      </ClassifiedTaxCategory>
      <Item>
  
…

POST Zaznamenání úhrady dokladu

/entities/{entity_id}/documents/{id}/payments

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

K vystavenému dokladu s úhradou (faktura, zálohová faktura, dobropis – vydané i přijaté) zaznamená úhradu v měně dokladu: záporná částka je vratka, nulová se odmítne, přeplatek se nekontroluje. U dokladu v cizí měně lze v amount_czk zadat skutečně připsanou nebo odepsanou částku v Kč; rozdíl proti kurzu dokladu se v podvojném účetnictví zaúčtuje jako kurzový zisk (663) nebo ztráta (563); u zálohové faktury se celá částka v Kč zaúčtuje proti 324/314 bez kurzového rozdílu. Úhrada není spárovaná s bankovním pohybem. Vrátí celý doklad s přepočtenou uhrazenou částkou.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
amountčísloanoČástka v měně dokladu (2 desetinná místa; nečíselná hodnota se bere jako 0)
paid_ondatumneDatum úhrady (výchozí dnes)
payment_methodtextneZpůsob úhrady; výchozí cash, je-li bank_account_id pokladna, jinak bank Hodnoty: bank, cash, card, cod, offset, advance, other.
bank_account_idcelé čísloneBankovní účet nebo pokladna firmy; určuje peněžní účet zápisu (jinak 221, u hotovosti 211)
amount_czkčísloneSkutečná částka v Kč, určená pro doklad v cizí měně; bez ní se přepočte kurzem dokladu. Server ji přijme i u dokladu v Kč – odlišná hodnota se pak v podvojném účetnictví zaúčtuje jako kurzový rozdíl.
notetextnePoznámka k úhradě

Odpověď

201 application/json Detail dokladu jako v getDocument, ale bez approval (úhrada je v payments[]).

Chyby této operace

StavKódKdy
422–Doklad není vystavený: „Doklad není vystavený“
422–Druh bez úhrad (pokladní, interní, obchodní doklad, daňový doklad k záloze): „K tomuto dokladu se úhrady neevidují“
422–Částka je 0 nebo nečíselná: „Částka úhrady nesmí být nulová“
422–Datum úhrady 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í
Vytvoří úhradu, v podvojném účetnictví její účetní zápis (např. MD 221 / D 311, u vydané zálohové faktury D 324, u přijaté faktury MD 321 / D 221) a případný kurzový rozdíl, přepočte uhrazenou částku a datum úhrady dokladu a zapíše payment.recorded.
Opakování
Každé volání zaznamená další úhradu.

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount":1000,"paid_on":"2026-09-28","bank_account_id":2,"note":"Částečná úhrada"}' \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/143/payments

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/payments', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify({
    "amount": 1000,
    "paid_on": "2026-09-28",
    "bank_account_id": 2,
    "note": "Částečná úhrada"
  })
});
const data = await response.json();
Odpověď 201 Created
{
  "id": 143,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "issued",
  "number": "FV20260025",
  "variable_symbol": "20260025",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": "2026-09-28",
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 19800.0,
  "total_vat": 4158.0,
  "total_payable": 23958.0,
  "total_gross_czk": 23958.0,
  "paid_amount": 1000.0,
  "remaining": 22958.0,
  "payment_state": "partial",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-28",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 23958.0,
  "total_net_czk": 19800.0,
  "total_vat_czk": 4158.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 144,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "attachments": [],
  "share": {
    "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
    "shared_at": "2026-09-28T10:00:00.000Z",
    "viewed_at": null,
    "views": 0
  },
  "payments": [
    {
      "id": 126,
      "document_id": 143,
      "bank_transaction_id": null,
      "bank_account_id": 2,
      "paid_on": "2026-09-28",
      "amount": 1000.0,
      "amount_czk": 1000.0,
      "exchange_rate": 1.0,
      "payment_method": "bank",
      "note": "Částečná úhrada"
    }
  ],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 19800.0,
      "vat": 4158.0,
      "gross": 23958.0,
      "net_czk": 19800.0,
      "vat_czk": 4158.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null
}

DELETE Zrušení úhrady dokladu

/entities/{entity_id}/documents/{id}/payments/{payment_id}

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Smaže úhradu dokladu s jejími účetními zápisy a přepočte uhrazenou částku. Vznikla-li úhrada spárováním s bankovním pohybem, pohyb se vrátí mezi nespárované, pokud ho jiné úhrady nepokrývají. Úhradu s datem v uzamčeném období zrušit nelze. Vrátí celý doklad.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.
payment_idcestacelé čísloanoID úhrady tohoto dokladu (jiná vrátí 404) Příklad 884.

Odpověď

200 application/json Detail dokladu jako v getDocument, ale bez approval.

Chyby této operace

StavKódKdy
422–Úhrada 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 úhradu a její účetní zápisy, u spárovaného bankovního pohybu přepočte jeho stav (matched / unmatched), přepočte uhrazenou částku dokladu a zapíše payment.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/documents/1/payments/1

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/1/payments/1', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'DELETE'
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 1,
  "kind": "invoice_out",
  "kind_label": "Faktura vydaná",
  "status": "issued",
  "number": "FV20260001",
  "variable_symbol": "20260001",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-01-04",
  "taxable_date": "2026-01-04",
  "due_date": "2026-01-18",
  "currency": "CZK",
  "total_net": 75900.0,
  "total_vat": 15939.0,
  "total_payable": 91839.0,
  "total_gross_czk": 91839.0,
  "paid_amount": 0.0,
  "remaining": 91839.0,
  "payment_state": "overdue",
  "days_overdue": 253,
  "description": "Návrh a vývoj webové aplikace",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-01-04",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 91839.0,
  "total_net_czk": 75900.0,
  "total_vat_czk": 15939.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": "Praha",
  "project": "Web a e-shop Nordwood",
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 1,
      "position": 0,
      "description": "Návrh a vývoj webové aplikace",
      "quantity": 46.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 75900.0,
      "vat": 15939.0,
      "gross": 91839.0,
      "net_czk": 75900.0,
      "vat_czk": 15939.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 75900.0,
      "vat": 15939.0,
      "gross": 91839.0,
      "net_czk": 75900.0,
      "vat_czk": 15939.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": null,
  "recurrence": null
}

GET Převod dokladu na jiný druh jako koncept

/entities/{entity_id}/documents/{id}/convert

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Z vystaveného dokladu vrátí koncept jiného druhu jako kopii (viz prepareDocumentCopy) s vazbou na zdroj a poznámkou „Dle dokladu … č. …“. Povolené převody: cenová nabídka (quote_out) → faktura vydaná, zálohová faktura vydaná nebo dodací list; objednávka (order_out) → faktura přijatá; faktura vydaná → dodací list; dodací list → faktura vydaná. Když se faktura nebo zálohová faktura vytvořená z nabídky vystaví, nabídka se označí jako přijatá (nemá-li ještě výsledek). Nic neukládá.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID zdrojového dokladu Příklad 1601.
kinddotaztextanoDruh nového dokladu Hodnoty: invoice_out, proforma_out, delivery_out, invoice_in. Příklad invoice_out.

Odpověď

200 application/json Koncept ve tvaru getDocument (id null, bez approval) a navíc number_preview.

Chyby této operace

StavKódKdy
422–Převod mezi druhy není povolen: „Z tohoto dokladu nelze vytvořit zvolený doklad“
422–Zdroj není vystavený: „Vytvořit doklad lze jen z vystaveného dokladu“

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/documents/143/convert?kind=delivery_out"

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/convert?kind=delivery_out', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
{
  "id": null,
  "kind": "delivery_out",
  "kind_label": "Dodací list",
  "status": "draft",
  "number": null,
  "variable_symbol": null,
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-28",
  "taxable_date": null,
  "due_date": "2026-10-12",
  "currency": "CZK",
  "total_net": 0.0,
  "total_vat": 0.0,
  "total_payable": 0.0,
  "total_gross_czk": 0.0,
  "paid_amount": 0.0,
  "remaining": 0.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Správa webu – září",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": 143,
  "reminders_sent": 0,
  "outcome": null,
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": null,
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": 2,
  "rounding": 0.0,
  "total_gross": 0.0,
  "total_net_czk": 0.0,
  "total_vat_czk": 0.0,
  "note": "Dle dokladu faktura vydaná č. FV20260025.",
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": null,
  "updated_at": null,
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": null,
      "position": 0,
      "description": "Správa webu – září",
      "quantity": 12.0,
      "unit": "hod",
      "unit_price": 1650.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 0.0,
      "vat": 0.0,
      "gross": 0.0,
      "net_czk": 0.0,
      "vat_czk": 0.0
    }
  ],
  "bank_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": null,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "display_number": "2900001227/2010",
    "balance": null,
    "api_connected": false
  },
  "related_document": {
    "id": 143,
    "number": "FV20260025",
    "kind": "invoice_out"
  },
  "recurrence": null,
  "number_preview": "DL20260001"
}

POST Výsledek cenové nabídky

/entities/{entity_id}/documents/{id}/outcome

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

U cenové nabídky (quote_out) zaznamená, zda ji zákazník přijal (accepted) nebo odmítl (rejected); prázdná nebo chybějící hodnota výsledek smaže. Stav nabídky se nekontroluje.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID nabídky Příklad 1601.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
outcometextneaccepted = přijato, rejected = odmítnuto, prázdné = bez výsledku Hodnoty: accepted, rejected, "".

Odpověď

200 application/json Detail nabídky jako v getDocument, ale bez approval.

Chyby této operace

StavKódKdy
422–Doklad není nabídka: „Výsledek se eviduje jen u nabídek“
422–Neznámá hodnota: „Neznámý výsledek nabídky“

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Změní výsledek nabídky a zapíše document.outcome.
Opakování
Opakování se stejnou hodnotou nic nezmění, jen zapíše další událost.

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"outcome":"accepted"}' \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/148/outcome

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/148/outcome', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify({
    "outcome": "accepted"
  })
});
const data = await response.json();
Odpověď 200 OK
{
  "id": 148,
  "kind": "quote_out",
  "kind_label": "Cenová nabídka",
  "status": "issued",
  "number": "NA20260001",
  "variable_symbol": "20260001",
  "original_number": null,
  "partner_id": 1,
  "partner_name": "Nordwood Studio s.r.o.",
  "partner_ico": "90000013",
  "issue_date": "2026-09-20",
  "taxable_date": null,
  "due_date": null,
  "currency": "CZK",
  "total_net": 456000.0,
  "total_vat": 95760.0,
  "total_payable": 551760.0,
  "total_gross_czk": 551760.0,
  "paid_amount": 0.0,
  "remaining": 551760.0,
  "payment_state": "na",
  "days_overdue": 0,
  "description": "Nabídka – správa webu na rok 2027",
  "vat_mode": "domestic",
  "source": "manual",
  "tags": null,
  "related_document_id": null,
  "reminders_sent": 0,
  "outcome": "accepted",
  "attachments_count": 0,
  "approval_state": null,
  "uuid": null,
  "constant_symbol": null,
  "specific_symbol": null,
  "received_date": null,
  "vat_date": "2026-09-20",
  "exchange_rate": 1.0,
  "rate_date": null,
  "rc_code": null,
  "prices_include_vat": false,
  "simplified": false,
  "regime_44": false,
  "payment_method": "bank",
  "bank_account_id": null,
  "rounding": 0.0,
  "total_gross": 551760.0,
  "total_net_czk": 456000.0,
  "total_vat_czk": 95760.0,
  "note": null,
  "internal_note": null,
  "language": "cs",
  "kh_section": null,
  "cost_center": null,
  "project": null,
  "paid_on": null,
  "created_at": "2026-09-28T10:00:00.000Z",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "partner": {
    "name": "Nordwood Studio s.r.o.",
    "ico": "90000013",
    "dic": "CZ90000013",
    "street": "Korunní 1208/74",
    "city": "Praha 10",
    "zip": "10100",
    "country": "CZ",
    "email": "fakturace@example.cz",
    "phone": null
  },
  "lines": [
    {
      "id": 149,
      "position": 0,
      "description": "Správa a údržba webu – měsíční paušál",
      "quantity": 12.0,
      "unit": "měs",
      "unit_price": 38000.0,
      "discount_percent": 0.0,
      "vat_rate": 21.0,
      "vat_kind": "standard",
      "account_code": "602",
      "asset": false,
      "deduction": "full",
      "advance_document_id": null,
      "net": 456000.0,
      "vat": 95760.0,
      "gross": 551760.0,
      "net_czk": 456000.0,
      "vat_czk": 95760.0
    }
  ],
  "attachments": [],
  "share": null,
  "payments": [],
  "vat_recap": [
    {
      "rate": 21.0,
      "net": 456000.0,
      "vat": 95760.0,
      "gross": 551760.0,
      "net_czk": 456000.0,
      "vat_czk": 95760.0
    }
  ],
  "bank_account": null,
  "related_document": null,
  "recurrence": null
}

POST Zapnutí veřejného odkazu na doklad

/entities/{entity_id}/documents/{id}/share

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Vytvoří neuhádnutelný token (32 znaků) pro veřejný odkaz na doklad, který lze otevřít bez účtu: zákazník ho vidí na stránce /tools/ucetnictvi/faktura/#<token>, data vrací getSharedDocument (/share/{token}; doklad bez interních údajů, firma, bankovní účet a QR Platba) a ISDOC getSharedDocumentIsdoc (/share/{token}/isdoc). Jen u vystaveného dokladu druhu invoice_out, proforma_out, credit_out nebo advance_out. Token nemá omezenou platnost: platí, dokud se odkaz nezruší; dokud doklad není vystavený (storno, vrácení do konceptu), odkaz vrací 404 a po novém vystavení funguje znovu. Už sdílený doklad si token ponechá.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Stav sdílení.

PoleVýznam
tokenToken veřejného odkazu (32 znaků A–Z, a–z, 0–9, _ a -)
shared_atKdy bylo sdílení zapnuto
viewed_atPrvní zobrazení někým, kdo není členem firmy, nebo null
viewsPočet takových zobrazení

Chyby této operace

StavKódKdy
422–Doklad není vystavený nebo je jiného druhu: „Odkaz lze sdílet jen u vystavené faktury, zálohové faktury nebo dobropisu“

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Při prvním sdílení uloží token a čas; při každém volání zapíše document.shared.
Opakování
Opakované volání vrátí stejný token a zapíše další událost.

Příklad

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/143/share

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/share', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'POST'
});
const data = await response.json();
Odpověď 200 OK
{
  "token": "3bND5_Cv7iT39piyS-wZbFjQ1NizQFVX",
  "shared_at": "2026-09-28T10:00:00.000Z",
  "viewed_at": null,
  "views": 0
}

DELETE Zrušení veřejného odkazu na doklad

/entities/{entity_id}/documents/{id}/share

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Smaže token – veřejná stránka pak vrací 404 – a vynuluje čas sdílení, první zobrazení a počet zobrazení. Funguje u jakéhokoli dokladu firmy, i nesdíleného. Nové sdílení vytvoří jiný token.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID dokladu Příklad 1532.

Odpověď

200 application/json Stav sdílení po zrušení – token, shared_at a viewed_at null, views 0.

PoleVýznam
tokennull
views0

Chování

Co změní
Smaže token a statistiky zobrazení a zapíše document.unshared.
Opakování
Opakované volání vrátí stejnou odpověď a zapíše další událost.

Příklad

cURL

curl \
  -X DELETE \
  -H "X-API-Key: $SALDO_API_KEY" \
  https://techtools.cz/ucetnictvi-api/entities/1/documents/143/share

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/143/share', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'DELETE'
});
const data = await response.json();
Odpověď 200 OK
{
  "token": null,
  "shared_at": null,
  "viewed_at": null,
  "views": 0
}

GET Seznam opakovaných faktur

/entities/{entity_id}/recurrences

Oprávnění
Každý člen firmy včetně role Jen čtení
Klíč jen pro čtení
Stačí

Vrátí všechna pravidla opakování firmy (aktivní i ukončená) seřazená podle data příštího vytvoření. Každé pravidlo nese souhrn vzorového dokladu (template, null, pokud vzor už neexistuje). Odpověď je pole.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.

Odpověď

200 application/json Pole pravidel opakování.

PoleVýznam
[].idID pravidla
[].template_document_idID vzorového dokladu
[].frequencymonthly, quarterly, half_yearly, yearly
[].next_onDatum příštího vytvoření
[].ends_onPoslední možné datum vytvoření, nebo null
[].auto_issueVytvořený doklad rovnou vystavit
[].activePravidlo je aktivní
[].last_generated_onPlánované datum posledního vytvořeného dokladu
[].created_atZaloženo
[].updated_atZměněno
[].templateSouhrn vzorového dokladu jako řádek listDocuments, nebo null

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/recurrences

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/recurrences', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY }
});
const data = await response.json();
Odpověď 200 OK
[
  {
    "id": 1,
    "active": true,
    "auto_issue": false,
    "created_at": "2026-09-28T10:00:00.000Z",
    "ends_on": null,
    "frequency": "monthly",
    "last_generated_on": null,
    "next_on": "2026-10-03",
    "template_document_id": 22,
    "updated_at": "2026-09-28T10:00:00.000Z",
    "template": {
      "id": 22,
      "kind": "invoice_out",
      "kind_label": "Faktura vydaná",
      "status": "issued",
      "number": "FV20260022",
      "variable_symbol": "20260022",
      "original_number": null,
      "partner_id": 2,
      "partner_name": "Kavárna U Zeleného stromu s.r.o.",
      "partner_ico": "90000021",
      "issue_date": "2026-09-15",
      "taxable_date": "2026-09-15",
      "due_date": "2026-09-25",
      "currency": "CZK",
      "total_net": 64000.0,
      "total_vat": 13440.0,
      "total_payable": 77440.0,
      "total_gross_czk": 77440.0,
      "paid_amount": 77440.0,
      "remaining": 0.0,
      "payment_state": "paid",
      "days_overdue": 0,
      "description": "UX audit a doporučení",
      "vat_mode": "domestic",
      "source": "manual",
      "tags": null,
      "related_document_id": null,
      "reminders_sent": 0,
      "outcome": null,
      "attachments_count": 0,
      "approval_state": null
    }
  }
]

POST Založení opakované faktury

/entities/{entity_id}/recurrences

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Nastaví pravidelné vytváření kopie dokladu template_document_id – monthly (měsíčně), quarterly (čtvrtletně), half_yearly (pololetně), yearly (ročně) – poprvé k datu next_on; doklady vytváří runRecurrences a automatizace. Vzorem může být doklad jakéhokoli druhu a stavu. Jeden doklad smí mít jen jedno aktivní pravidlo. Pole jsou na nejvyšší úrovni těla (bez obalu).

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
template_document_idcelé čísloanoID vzorového dokladu firmy (cizí nebo neexistující vrátí 404)
frequencytextneFrekvence (výchozí monthly) Hodnoty: monthly, quarterly, half_yearly, yearly. Výchozí monthly.
next_ondatumanoDatum prvního vytvoření, 1. 1. 2000 – 31. 12. 2100
ends_ondatumnePoslední možné datum vytvoření (stejný rozsah); po jeho překročení se pravidlo ukončí. Nečitelné datum se bez chyby uloží jako prázdné (pravidlo bez konce).
auto_issueano/neneVytvořený doklad rovnou vystavit (výchozí false = koncept) Výchozí false.
activeano/nenePravidlo je aktivní (výchozí true) Výchozí true.

Odpověď

201 application/json Pravidlo ve tvaru listRecurrences včetně template.

Chyby této operace

StavKódKdy
422–Doklad už má aktivní pravidlo: „Tato faktura už má automatické pravidlo – upravte to stávající“ (tvar { error, errors })
422–next_on chybí nebo je neplatné či mimo roky 2000–2100 (i ends_on): „… musí ležet v letech 2000 až 2100“ (tvar { error, errors })

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Vytvoří pravidlo a zapíše recurrence.created; doklad zatím nevytváří.
Opakování
Druhé volání pro stejný doklad vrátí 422, dokud je první pravidlo aktivní.

Příklad

Vzor nesmí mít jiné aktivní pravidlo (ukázková firma už má jedno pro poslední fakturu v Kč).

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"template_document_id":1,"frequency":"monthly","next_on":"2026-11-01","auto_issue":false}' \
  https://techtools.cz/ucetnictvi-api/entities/1/recurrences

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/recurrences', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify({
    "template_document_id": 1,
    "frequency": "monthly",
    "next_on": "2026-11-01",
    "auto_issue": false
  })
});
const data = await response.json();
Odpověď 201 Created
{
  "id": 3,
  "active": true,
  "auto_issue": false,
  "created_at": "2026-09-28T10:00:00.000Z",
  "ends_on": null,
  "frequency": "monthly",
  "last_generated_on": null,
  "next_on": "2026-11-01",
  "template_document_id": 1,
  "updated_at": "2026-09-28T10:00:00.000Z",
  "template": {
    "id": 1,
    "kind": "invoice_out",
    "kind_label": "Faktura vydaná",
    "status": "issued",
    "number": "FV20260001",
    "variable_symbol": "20260001",
    "original_number": null,
    "partner_id": 1,
    "partner_name": "Nordwood Studio s.r.o.",
    "partner_ico": "90000013",
    "issue_date": "2026-01-04",
    "taxable_date": "2026-01-04",
    "due_date": "2026-01-18",
    "currency": "CZK",
    "total_net": 75900.0,
    "total_vat": 15939.0,
    "total_payable": 91839.0,
    "total_gross_czk": 91839.0,
    "paid_amount": 91839.0,
    "remaining": 0.0,
    "payment_state": "paid",
    "days_overdue": 0,
    "description": "Návrh a vývoj webové aplikace",
    "vat_mode": "domestic",
    "source": "manual",
    "tags": null,
    "related_document_id": null,
    "reminders_sent": 0,
    "outcome": null,
    "attachments_count": 0,
    "approval_state": null
  }
}

PATCH Úprava opakované faktury

/entities/{entity_id}/recurrences/{id}

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Změní frekvenci, datum příštího vytvoření, konec, automatické vystavení nebo aktivitu pravidla (vzorový doklad změnit nelze). Znovu aktivované pravidlo nesmí kolidovat s jiným aktivním pravidlem téhož dokladu. Pole jsou na nejvyšší úrovni těla.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID pravidla opakování Příklad 12.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
frequencytextneFrekvence Hodnoty: monthly, quarterly, half_yearly, yearly.
next_ondatumneDatum příštího vytvoření (2000–2100)
ends_ondatumnePoslední možné datum vytvoření, nebo null; nečitelné datum se bez chyby uloží jako null
auto_issueano/neneVytvořený doklad rovnou vystavit
activeano/nenePravidlo je aktivní

Odpověď

200 application/json Pravidlo ve tvaru listRecurrences včetně template.

Chyby této operace

StavKódKdy
422–Aktivace při jiném aktivním pravidle téhož dokladu: „Tato faktura už má automatické pravidlo – upravte to stávající“
422–Datum mimo roky 2000–2100: „… musí ležet v letech 2000 až 2100“

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 pravidla; do historie firmy nic nezapisuje.
Opakování
Opakování se stejným tělem nic dalšího nezmění.

Příklad

cURL

curl \
  -X PATCH \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"frequency":"quarterly","auto_issue":true}' \
  https://techtools.cz/ucetnictvi-api/entities/1/recurrences/1

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/recurrences/1', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'PATCH',
  body: JSON.stringify({
    "frequency": "quarterly",
    "auto_issue": true
  })
});
const data = await response.json();
Odpověď 200 OK
{
  "frequency": "quarterly",
  "auto_issue": true,
  "template_document_id": 22,
  "id": 1,
  "active": true,
  "created_at": "2026-09-28T10:00:00.000Z",
  "ends_on": null,
  "last_generated_on": null,
  "next_on": "2026-10-03",
  "updated_at": "2026-09-28T10:00:00.000Z",
  "template": {
    "id": 22,
    "kind": "invoice_out",
    "kind_label": "Faktura vydaná",
    "status": "issued",
    "number": "FV20260022",
    "variable_symbol": "20260022",
    "original_number": null,
    "partner_id": 2,
    "partner_name": "Kavárna U Zeleného stromu s.r.o.",
    "partner_ico": "90000021",
    "issue_date": "2026-09-15",
    "taxable_date": "2026-09-15",
    "due_date": "2026-09-25",
    "currency": "CZK",
    "total_net": 64000.0,
    "total_vat": 13440.0,
    "total_payable": 77440.0,
    "total_gross_czk": 77440.0,
    "paid_amount": 77440.0,
    "remaining": 0.0,
    "payment_state": "paid",
    "days_overdue": 0,
    "description": "UX audit a doporučení",
    "vat_mode": "domestic",
    "source": "manual",
    "tags": null,
    "related_document_id": null,
    "reminders_sent": 0,
    "outcome": null,
    "attachments_count": 0,
    "approval_state": null
  }
}

DELETE Smazání opakované faktury

/entities/{entity_id}/recurrences/{id}

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Smaže pravidlo opakování. Doklady podle něj už vytvořené zůstanou beze změny.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.
idcestacelé čísloanoID pravidla opakování Příklad 12.

Odpověď

204 Prázdná odpověď.

Chování

Co změní
Smaže pravidlo; do historie firmy nic nezapisuje.
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/recurrences/1

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/recurrences/1', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY },
  method: 'DELETE'
});
const data = await response.json();
Odpověď 204 No Content
soubor, 0 bajtů

POST Vytvoření splatných opakovaných faktur

/entities/{entity_id}/recurrences/run

Oprávnění
Vlastník, účetní nebo editor
Klíč jen pro čtení
Nestačí, vrátí 403 READ_ONLY_KEY

Pro každé aktivní pravidlo s datem příštího vytvoření nejpozději on (výchozí dnes; pozdější datum se zkrátí na dnešek) vytvoří kopii vzorového dokladu (viz prepareDocumentCopy) se zdrojem recurring, datem vystavení (u daňových dokladů i DUZP) = plánované datum a splatností podle kontaktu nebo firmy; u cizí měny načte kurz ČNB k tomuto datu (když není k dispozici, zůstane kurz vzoru). Zmeškaná období dožene, nejvýše 24 dokladů na pravidlo za volání, a posune datum příštího vytvoření; za koncem pravidlo ukončí. S auto_issue doklad hned vystaví, přijatý výdaj, na který se vztahuje schvalování, ale jen odešle ke schválení (běh nikdy neschvaluje); jinak zůstane konceptem.

Parametry

NázevKdeTypPovinnýPopis
entity_idcestacelé čísloanoID účetní jednotky (firmy) Příklad 7.

Tělo požadavku

Formát application/json.

PoleTypPovinnéPopis
ondatumneVytvořit, co je splatné do tohoto dne (výchozí dnes, nejvýše dnes)

Odpověď

200 application/json Vytvořené doklady.

PoleVýznam
created[]Souhrny vytvořených dokladů jako řádky listDocuments
countPočet vytvořených dokladů
failedPřes API vždy prázdné pole – chyba běh zastaví s 422

Chyby této operace

StavKódKdy
422–S auto_issue nejde doklad vystavit (např. „Doklad nemá žádnou položku“, „Doplňte odběratele nebo dodavatele“, uzamčené období); běh se zastaví, dříve vytvořené doklady zůstanou

Společné chyby všech operací (přihlášení, oprávnění, limity) popisuje Chyby a limity.

Chování

Co změní
Vytvoří doklady (document.created, s auto_issue i vystavení a zaúčtování jako issueDocument, nebo odeslání ke schválení) a u pravidel posune next_on, last_generated_on a případně je ukončí. Dotazuje kurzy ČNB u vzorů v cizí měně. Každý vytvořený doklad se ukládá samostatně: při chybě zůstanou doklady vytvořené před ní.
Limity
Nejvýše 24 dokladů na jedno pravidlo za volání.
Opakování
Druhé volání se stejným on nic nevytvoří, protože pravidla už mají příští datum později (jen pravidlo, které narazilo na limit 24 dokladů, pokračuje dalšími zmeškanými obdobími); souběžné běhy si totéž období nezdvojí.

Příklad

Ukázkové pravidlo má příští datum v příštím měsíci, takže odpověď je prázdná (count 0).

cURL

curl \
  -X POST \
  -H "X-API-Key: $SALDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"on":"2026-09-28"}' \
  https://techtools.cz/ucetnictvi-api/entities/1/recurrences/run

JavaScript

const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/recurrences/run', {
  headers: { 'X-API-Key': process.env.SALDO_API_KEY, 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify({
    "on": "2026-09-28"
  })
});
const data = await response.json();
Odpověď 200 OK
{
  "created": [],
  "count": 0,
  "failed": []
}