REST API: doklady, PDF a ISDOC
Referenční popis cest dokladů: výpis, detail s rekapitulací DPH a stažení PDF a ISDOC, s parametry, poli odpovědi, chybami a ukázkou volání.
Pro účetní software: co bylo vystaveno, komu, kdy a na kolik, i s rekapitulací DPH, PDF a ISDOC.
Cesty odpovídají na GET na doméně vašeho obchodu, například https://muj-eshop.cz/api/v1/…, a klíč se posílá v hlavičce Authorization: Bearer nebo x-api-key. Parametry, pole i chyby na téhle stránce se generují ze smlouvy, podle které API odpovídá, takže platí pro build, na kterém stránka běží. Každá cesta může navíc vrátit chyby společné všem cestám: invalid_api_key, missing_api_key, external_access_disabled, external_access_not_enabled, external_access_suspended, key_surface_mismatch, plan_required, shop_unavailable, shop_not_found, rate_limited a server_error. Co znamenají, popisuje článek Chybové odpovědi, klíč a oprávnění Autentizace a oprávnění a průchod výpisem Stránkování a filtry.
GET /api/v1/documents
Vystavené doklady: druh, číslo, datum vystavení a DUZP, částka a IČO a DIČ odběratele. Doklad se nemění, proto tu updated_since stránkuje podle vzniku dokladu.
- Oprávnění:
documents:read, u klíče „Doklady: metadata, položky a stažení PDF/ISDOC (čtení)“. - Odpověď: stránka výpisu, záznamy jsou v
dataa jak otevřít další stránku, říká seznam Obálka odpovědi. - Synchronizace: s
updated_sincese výpis řadí podle polecreated_atod nejstarší změny, bez něj od nejnovějšího záznamu. Polecreated_at: Kdy doklad vznikl. Vystavený doklad se nemění, podle tohoto času stránkujeupdated_since.
curl -s "https://muj-eshop.cz/api/v1/documents?limit=100" \
-H "Authorization: Bearer $SHOPZI_API_KEY"Parametry dotazu
limit(celé číslo od 1 do 100, výchozí25; nepovinný): Počet řádků na stránku, výchozí 25. Vyšší hodnota se ořízne na 100, nesmysl spadne na výchozí.cursor(text; nepovinný): Hodnotanext_cursorz předchozí stránky, beze změny. Platí jen pro tentýž dotaz.updated_since(čas ISO 8601; nepovinný): ISO 8601 se zónouZnebo s číselným posunem (+02:00). Vrátí záznamy změněné od té chvíle včetně, seřazené od nejstarší změny, a stránkuje stabilně: řádek změněný během průchodu se v něm neopakuje a přijde v příštím. Hodnotanext_updated_sincejde do adresy vložit bez kódování;+z nezakódované adresy se čte jako+.doc_type(jedna z hodnotorder,invoice,credit_note,proforma,pos_receiptaquotation; nepovinný): Druh dokladu.
Obálka odpovědi
data(pole záznamů): Záznamy stránky, jejich pole popisuje seznam Pole záznamu.next_cursor(text nebonull): Kurzor další stránky,null= tohle je poslední stránka.next_updated_since(čas ISO 8601): Hodnotaupdated_sincepro příští průchod: začátek tohoto průchodu mínus 5 minut. Na všech stránkách jednoho průchodu je stejná a do adresy jde vložit bez kódování.
Pole záznamu
id(UUID)doc_type(jedna z hodnotorder,invoice,credit_note,proforma,pos_receiptaquotation)doc_number(text): Evidenční číslo z gapless řady.order_id(UUID nebonull)issued_at(čas ISO 8601)duzp(datum RRRR-MM-DD): Datum uskutečnění zdanitelného plnění,RRRR-MM-DD.total_minor(celé číslo): Celkem s DPH v haléřích, vždy kladně. Dobropis fakturaci snižuje.currency_code(text se vzorem^[A-Z]{3}$): Kód měny podle ISO 4217, dnes vždy CZK.tax_regime(jedna z hodnotstandard,reverse_charge,oss,iossanon_payer):reverse_charge= přenesená daňová povinnost,ossaioss= zvláštní režimy EU,non_payer= dodavatel není plátce DPH.customer_ico(text nebonull)customer_dic(text nebonull)created_at(čas ISO 8601): Kdy doklad vznikl. Vystavený doklad se nemění, podle tohoto času stránkujeupdated_since.
Chyby této cesty
- 400
invalid_query: Parametr dotazu má neplatnou hodnotu: čas v updated_since bez časového posunu, nebo hodnota filtru, kterou výčet nezná. Zpráva jmenuje parametr, u filtru i povolené hodnoty. - 400
invalid_cursor: Kurzor je poškozený, nebo patří k jinému dotazu (jiná cesta, jiný filtr nebo jiné updated_since). Začněte průchod znovu bez cursor. - 403
insufficient_scope: Klíč je platný, ale nemá oprávnění, které cesta vyžaduje. Zpráva vypíše, co klíči chybí a co má.
GET /api/v1/documents/{id}
Faktura, proforma nebo dobropis celý: položky, dodavatel a odběratel s IČO a DIČ a rekapitulace DPH po sazbách v haléřích. Objednávka, cenová nabídka a účtenka daňový detail nemají.
- Oprávnění:
documents:read, u klíče „Doklady: metadata, položky a stažení PDF/ISDOC (čtení)“. - Odpověď: jeden záznam v
data.
curl -s "https://muj-eshop.cz/api/v1/documents/$ID" \
-H "Authorization: Bearer $SHOPZI_API_KEY"Parametry v cestě
id(UUID; povinný): Identifikátor záznamu (UUID) z výpisu.
Obálka odpovědi
data(záznam): Jeho pole popisuje seznam Pole záznamu.
Pole záznamu
id(UUID): Týž identifikátor, jaký vrací výpis dokladů.doc_type(jedna z hodnotinvoice,credit_noteaproforma)doc_number(text)order_id(UUID nebonull)order_number(text nebonull)issued_at(čas ISO 8601)issue_date(datum RRRR-MM-DD): Datum vystavení v českém kalendáři.duzp(datum RRRR-MM-DD nebonull): DUZP. U dobropisunull(ISDOC §A.5).due_date(datum RRRR-MM-DD nebonull)currency_code(text se vzorem^[A-Z]{3}$): Kód měny podle ISO 4217, dnes vždy CZK.tax_regime(jedna z hodnotstandard,reverse_charge,oss,iossanon_payer)is_vat_payer(truenebofalse): Je dodavatel plátcem DPH?payment_method(jedna z hodnotcard_online,apple_pay,google_pay,bank_transfer,codainvoice, nebonull)variable_symbol(text nebonull)is_paid(truenebofalse)supplier(objekt)supplier.name(text)supplier.company(text nebonull)supplier.street(text nebonull)supplier.city(text nebonull)supplier.zip(text nebonull)supplier.country(text): ISO 3166-1 alpha-2.supplier.ico(text nebonull)supplier.dic(text nebonull)customer(objekt)customer.name(text)customer.company(text nebonull)customer.street(text nebonull)customer.city(text nebonull)customer.zip(text nebonull)customer.country(text): ISO 3166-1 alpha-2.customer.ico(text nebonull)customer.dic(text nebonull)lines(pole objektů)lines[].index(celé číslo): Pořadí na dokladu, od 1.lines[].description(text)lines[].quantity(číslo)lines[].unit_code(text)lines[].vat_rate(celé číslo od 0 do 100)lines[].unit_price_gross_minor(celé číslo)lines[].line_gross_minor(celé číslo): Řádek před slevou, s DPH.lines[].line_discount_minor(celé číslo)lines[].line_total_gross_minor(celé číslo): Co se za řádek účtovalo, s DPH.shipping_gross_minor(celé číslo)shipping_vat_rate(celé číslo od 0 do 100)discount_total_minor(celé číslo)rounding_minor(celé číslo): České zaokrouhlení, sazba 0 %. Může být záporné.vat_breakdown(pole objektů): Rekapitulace DPH po sazbách, doslova z neměnné tabulky. Nikdy se nedopočítává z řádků.vat_breakdown[].vat_rate(celé číslo od 0 do 100)vat_breakdown[].base_minor(celé číslo): Základ daně.vat_breakdown[].vat_minor(celé číslo): DPH.vat_breakdown[].gross_minor(celé číslo): Základ + DPH.total_base_minor(celé číslo)total_vat_minor(celé číslo)total_gross_minor(celé číslo)original_doc_number(text nebonull): U dobropisu číslo opravovaného dokladu (§ 45 ZDPH).correction_reason(text nebonull)created_at(čas ISO 8601)
Chyby této cesty
- 403
insufficient_scope: Klíč je platný, ale nemá oprávnění, které cesta vyžaduje. Zpráva vypíše, co klíči chybí a co má. - 404
not_found: Záznam s tímhle identifikátorem v obchodě není. - 422
unsupported_document_type: Doklad existuje, ale daňový není: objednávka, cenová nabídka ani účtenka nemají rozpis DPH, PDF faktury ani ISDOC.
GET /api/v1/documents/{id}/pdf
Doklad jako PDF, týž soubor, jaký stahuje administrace. Neukládá se do žádné sdílené mezipaměti.
- Oprávnění:
documents:read, u klíče „Doklady: metadata, položky a stažení PDF/ISDOC (čtení)“. - Odpověď: soubor typu
application/pdfs příponoupdf.
curl -sSf "https://muj-eshop.cz/api/v1/documents/$ID/pdf" \
-H "Authorization: Bearer $SHOPZI_API_KEY" \
-o soubor.pdfPřepínač -f je tu kvůli chybám: když doklad neexistuje (404), curl skončí s chybou místo toho, aby chybovou odpověď uložil jako soubor. Bez něj by se do souboru zapsal chybový JSON.
Parametry v cestě
id(UUID; povinný): Identifikátor záznamu (UUID) z výpisu.
Chyby této cesty
- 403
insufficient_scope: Klíč je platný, ale nemá oprávnění, které cesta vyžaduje. Zpráva vypíše, co klíči chybí a co má. - 404
not_found: Záznam s tímhle identifikátorem v obchodě není. - 422
unsupported_document_type: Doklad existuje, ale daňový není: objednávka, cenová nabídka ani účtenka nemají rozpis DPH, PDF faktury ani ISDOC. - 502
pdf_unavailable: PDF se teď nepodařilo vyrobit. Nic se nezměnilo, zkuste to s odstupem znovu. - 503
pdf_busy: Obchod právě vyrábí jiná PDF a další vykreslení by čekalo ve frontě. Počkejte tolik sekund, kolik říká hlavička Retry-After, a zkuste to znovu. Doklad, jehož PDF už existuje, tuhle odpověď nedostane.
GET /api/v1/documents/{id}/isdoc
Doklad ve formátu ISDOC 6.0.2 k importu do účetního programu, například do POHODY, Money, ABRY nebo iDokladu.
- Oprávnění:
documents:read, u klíče „Doklady: metadata, položky a stažení PDF/ISDOC (čtení)“. - Odpověď: soubor typu
application/vnd.isdoc+xmls příponouisdoc.
curl -sSf "https://muj-eshop.cz/api/v1/documents/$ID/isdoc" \
-H "Authorization: Bearer $SHOPZI_API_KEY" \
-o soubor.isdocPřepínač -f je tu kvůli chybám: když doklad neexistuje (404), curl skončí s chybou místo toho, aby chybovou odpověď uložil jako soubor. Bez něj by se do souboru zapsal chybový JSON.
Parametry v cestě
id(UUID; povinný): Identifikátor záznamu (UUID) z výpisu.
Chyby této cesty
- 403
insufficient_scope: Klíč je platný, ale nemá oprávnění, které cesta vyžaduje. Zpráva vypíše, co klíči chybí a co má. - 404
not_found: Záznam s tímhle identifikátorem v obchodě není. - 422
unsupported_document_type: Doklad existuje, ale daňový není: objednávka, cenová nabídka ani účtenka nemají rozpis DPH, PDF faktury ani ISDOC. - 422
isdoc_invalid: Doklad by neprošel pravidly ISDOC, typicky dobropis bez čísla opravovaného dokladu. Zpráva říká proč; opakování nepomůže, doklad je potřeba opravit v administraci.