Soubory, importy a opakování
Jak do Salda posílat soubory, kolik a jak velké smějí být, a které operace lze bezpečně zopakovat. Obecný klíč proti zdvojení požadavků API nemá, chování se liší podle operace.
Nahrávání souborů
Soubory se posílají jako multipart/form-data. Název pole uvádí reference u operace, obvykle file pro jeden soubor a files[] pro více souborů (import výpisu přijme vedle file ještě originál v statement_pdf). Ostatní pole stejného požadavku jsou textová pole formuláře.
curl -X POST -H "X-API-Key: $SALDO_API_KEY" \
-F "file=@faktura-coworking.pdf" \
https://techtools.cz/ucetnictvi-api/entities/1/documents/42/attachments
import { readFile } from 'node:fs/promises';
const form = new FormData();
form.append('file', new Blob([await readFile('faktura-coworking.pdf')], { type: 'application/pdf' }), 'faktura-coworking.pdf');
const response = await fetch('https://techtools.cz/ucetnictvi-api/entities/1/documents/42/attachments', {
method: 'POST',
headers: { 'X-API-Key': process.env.SALDO_API_KEY },
body: form
});
Limity souborů
| Operace | Formáty | Limit |
|---|---|---|
| Příloha dokladu | PDF, JPG, PNG, WebP, GIF, HEIC, XML, ZIP, TXT | 15 MB na soubor, 20 příloh na doklad |
| Import faktur ISDOC | ISDOC, ISDOCX, ZIP s ISDOC, PDF s vloženým ISDOC | 15 MB na soubor; zpracuje prvních 50 souborů, další bez upozornění vynechá; po rozbalení ZIP nejvýš 200 faktur celkem |
| Import výpisu | GPC (ABO), camt.053, MT940, CSV; PDF výpis banky | datový soubor 5 MB, PDF 15 MB a 400 stran |
| Import z jiného programu | CSV; POHODA XML (kontakty a doklady); Money S3 XML (kontakty) | 20 MB, z CSV nejvýš 10 000 řádků |
| Odpověď na žádost o podklad | PDF, JPG, PNG, WebP, HEIC, GIF, XML | 5 souborů, 15 MB na soubor, 20 MB na odpověď |
| Doklad o doručení podání | PDF, XML, ZFO | 15 MB, nejvýš 10 nevyřazených souborů na podání |
| Přečtení ISDOC bez přihlášení | ISDOC, ISDOCX, PDF s ISDOC | 10 MB |
Server přijme celý požadavek nejvýš do 21 MB, i když by součet limitů operace dovolil víc; větší odmítne kódem 413. Soubor nad limit operace vrátí podle operace 413 nebo 422, reference to uvádí v tabulce Chyby této operace.
Náhled a dávky
- Import výpisu s
preview=1vrátí období, zůstatky, kontroly a počet nových pohybů a nic neuloží. - Náhled importu z jiného programu přečte soubor, rozpozná sloupce a u každého řádku ukáže, zda vznikne, je duplicitní, přeskočí se, nebo má chybu. Nic neuloží.
- Import po dávkách zpracuje jednu dávku řádků (
offset,limit) pod kódembatchve tvaruIMP-XXXXXXa vrátínext_offset, dokud nenínull. Dávka má nejvýš 500 řádků u kontaktů, 200 u neuhrazených faktur a 100 u dokladů a peněz; předvaha se zpracuje najednou (nejvýš 10 000 řádků). - Vrácení importu smaže, co import vytvořil (kontakty, na které už odkazuje jiný doklad, ponechá), a obnoví počáteční stavy, které přepsal. Odmítne to v uzamčeném období, nebo když na importovaných datech něco navazuje (pozdější úhrada, navazující doklad, odečtená záloha, vzor opakované faktury).
Stahování souborů
Soubory se vracejí s hlavičkou Content-Disposition a názvem souboru. Odpovědi, které nejsou JSON, zpracujte jako binární data (response.blob() nebo response.arrayBuffer()).
| Operace | Formát |
|---|---|
| Balíček pro účetní | ZIP se sestavami, originály, manifest.json a SHA256SUMS |
| Export dokladů | POHODA XML (Windows-1250) nebo Money S3 XML |
| Platební příkaz | ABO pro Kč nebo SEPA pain.001 pro EUR |
| XML podání | XML přiznání a hlášení pro EPO, přehledy OSVČ pro ČSSZ a pojišťovnu |
| Hlášení JMHZ | XML pro ČSSZ |
| ISDOC dokladu | ISDOC |
| Daňový kalendář | JSON nebo iCalendar s format=ics |
| Originály (přílohy, výpisy, doklady o doručení) | soubor tak, jak byl nahrán |
Když požadavek pošlete znovu
API nemá obecnou hlavičku proti zdvojení. Po výpadku spojení proto nejdřív ověřte, zda se zápis provedl (například načtěte seznam), a až potom ho opakujte. Chování jednotlivých operací:
| Operace | Co udělá opakované volání |
|---|---|
| Založení dokladu | Založí další doklad. Se stejným capture_key (UUID, jedinečný ve firmě) vrátí dříve uložený doklad se stavem 200 a tělo ignoruje. |
Založení s issue: true | Není atomické: když vystavení selže, koncept už zůstane uložený. Bez capture_key založí opakování další koncept. |
| Vystavení | Druhé volání vrátí 422 „Doklad už je vystavený“. |
| Úhrada dokladu | Zaznamená další úhradu. |
| Příloha dokladu | Přidá další přílohu, i se stejným obsahem. |
| Import faktur ISDOC | Už nahranou fakturu nezaloží znovu, vrátí duplicate s ID existujícího dokladu. |
| Import výpisu | Pohyby, které účet už má, přeskočí. Stejný datový soubor za stejné období nezaloží druhý archiv. |
| Import po dávkách | Už založené kontakty a doklady vrátí jako duplicate. Předvaha při opakování znovu nahradí všechny počáteční stavy. |
| Automatické párování | Znovu projde všechny nespárované pohyby; už spárované nemění. |
| Platební příkaz | Vytvoří nový soubor. Saldo nehlídá, že faktura už v jiném příkazu byla. |
| Spuštění automatizací | Opakovanou fakturu nezdvojí. Kontrolu nových kontaktů do 10 minut od poslední přeskočí, pokud nepošlete force: true. |
| Doklad o doručení | Soubor se stejným obsahem u téhož podání neuloží znovu a vrátí existující záznam. |
| Balíček pro účetní | Sestaví balíček znovu z aktuálních dat. |