# REST API: exporty do souboru

> Referenční popis exportů do souboru: objednávky, balíček dokladů pro účetní, katalog a podklad k DPH, malý hned a velký na pozadí, s odkazem ke stažení.

- Sekce: Pro vývojáře
- Stránka: https://shopzi.cz/dokumentace/vyvojari/rest-exporty
- Ověřeno: 2026-09-16

---

Tytéž soubory jako tlačítko Exportovat v administraci: objednávky v CSV, XLSX nebo jako prodejky POHODA (oprávnění `orders:read`), balíček dokladů pro účetní v ISDOC, CSV, XLSX, POHODA nebo Money S3 a měsíční podklad k DPH (`documents:read`) a katalog produktů v CSV (`products:read`). Export je čtení: nechce zápisové oprávnění ani povolený zápis přes REST. Malý export odpoví 200 s podepsaným odkazem ke stažení, který platí 15 minut a nechce klíč; velký odpoví 202 s id exportu, na jehož stav se ptáte cestou stavu exportu níž, dokud nevrátí odkaz. Hotový soubor na pozadí leží 24 hodin.

Cesty odpovídají na `GET`, `POST`, `PUT`, `PATCH` a `DELETE` 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`, `rest_write_disabled`, `rest_write_not_enabled`, `shop_unavailable`, `shop_not_found`, `rate_limited` a `server_error`. Co znamenají, popisuje článek [Chybové odpovědi](/dokumentace/vyvojari/chybove-odpovedi), klíč a oprávnění [Autentizace a oprávnění](/dokumentace/vyvojari/autentizace-a-opravneni) a průchod výpisem [Stránkování a filtry](/dokumentace/vyvojari/strankovani-a-filtry).

## `POST /api/v1/exports` [#post-api-v1-exports]

Export do souboru jako tlačítko Exportovat v administraci: objednávky (CSV, XLSX, POHODA), balíček dokladů pro účetní (ISDOC, CSV, XLSX, POHODA, Money S3), katalog (CSV) a měsíční podklad k DPH. Malý hned s odkazem ke stažení, velký na pozadí.

* **Oprávnění:** žádné, stačí libovolný platný klíč.
* **Odpověď:** stav 200 s hotovým malým exportem, nebo 202 s exportem na pozadí (`Location` vede na `GET /api/v1/exports/{id}`); obojí v `data`.

```bash
curl -s -X POST https://muj-eshop.cz/api/v1/exports \
  -H "Authorization: Bearer $SHOPZI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"orders"}'
```

**Tělo požadavku** (JSON, pole navíc se odmítnou)

* `kind` (jedna z hodnot `orders`, `documents`, `products` a `vat_paper`; povinný): `orders` = objednávky (jako Exportovat v Objednávkách), `documents` = balíček dokladů pro účetní za období podle DUZP, `products` = katalog produktů, `vat_paper` = měsíční podklad k DPH z neměnných řádků DPH.
* `format` (jedna z hodnot `csv`, `xlsx`, `pohoda_xml`, `isdoc`, `pohoda` a `money_s3`; nepovinný): Formát souboru po druzích: orders csv | xlsx | pohoda\_xml (výchozí csv), documents isdoc | csv | xlsx | pohoda | money\_s3 (povinný), products csv, vat\_paper csv.
* `date_from` (datum RRRR-MM-DD; nepovinný): Od data včetně, `RRRR-MM-DD`. U `orders` podle data objednávky, u `documents` podle DUZP (tam povinné).
* `date_to` (datum RRRR-MM-DD; nepovinný): Do data včetně, `RRRR-MM-DD`. U `documents` povinné.
* `status` (jedna z hodnot `pending`, `received`, `confirmed`, `processing`, `shipped`, `delivered`, `completed`, `cancelled` a `rejected`; nepovinný): Jen `orders`: stav objednávky.
* `payment_status` (jedna z hodnot `pending`, `authorized`, `paid`, `failed`, `refunded` a `partially_refunded`; nepovinný): Jen `orders`: stav platby.
* `search` (text, 1 až 120 znaků; nepovinný): Jen `orders`: hledání v čísle, jménu a e-mailu, jako v administraci.
* `is_quotation` (`true` nebo `false`; nepovinný): Jen `orders`: `true` = jen poptávky, `false` = jen objednávky. Vynechané = obojí.
* `returned_only` (`true` nebo `false`; nepovinný): Jen `orders`: `true` = jen objednávky s vratkou.
* `variant` (jedna z hodnot `souhrnny` a `detailni`; nepovinný): Jen `documents` ve formátu csv a xlsx: `souhrnny` (výchozí) = řádek na doklad, `detailni` = řádek na položku.
* `year` (celé číslo od 2000 do 2999; nepovinný): Jen `vat_paper`, povinné: rok.
* `month` (celé číslo od 1 do 12; nepovinný): Jen `vat_paper`, povinné: měsíc 1 až 12.

**Obálka odpovědi**

* `data` (záznam): Export; jeho pole popisuje seznam Pole záznamu.

**Pole záznamu**

* `id` (UUID nebo `null`): Id exportu na pozadí pro `GET /exports/{id}`. `null` u malého exportu, který je hotový hned v odpovědi.
* `kind` (jedna z hodnot `orders`, `documents`, `products` a `vat_paper`)
* `format` (text)
* `status` (jedna z hodnot `ready`, `queued`, `running`, `failed` a `expired`): `ready` = soubor je ke stažení na `download_url`. `queued` a `running` = vyrábí se na pozadí, ptejte se `GET /exports/{id}`. `failed` = nevznikl, důvod je v `error`. `expired` = hotový soubor už byl po 24 hodinách smazán.
* `filename` (text nebo `null`)
* `row_count` (celé číslo nebo `null`): Kolik řádků soubor nese, u běžícího exportu kolik už zpracoval.
* `size_bytes` (celé číslo nebo `null`)
* `download_url` (text nebo `null`): Podepsaný odkaz ke stažení, platí do `download_expires_at` (15 minut) a nechce klíč: smíte ho předat dál, třeba účetní. Adresu berte, jak přišla. Čerstvý odkaz vrátí každé `GET /exports/{id}`; u malého exportu nový `POST /exports`.
* `download_expires_at` (čas ISO 8601 nebo `null`)
* `expires_at` (čas ISO 8601 nebo `null`): Do kdy soubor exportu na pozadí leží (24 hodin od dokončení). U malého exportu `null`: soubor se při stažení vyrobí znovu z aktuálních dat.
* `error` (text nebo `null`): Česky, proč export selhal. Jen u `failed` a `expired`.
* `created_at` (čas ISO 8601 nebo `null`): Kdy export na pozadí vznikl. U malého exportu `null`.

**Chyby této cesty**

* **400** `invalid_body`: Tělo zápisu není platný JSON nebo neodpovídá smlouvě cesty: chybí povinné pole, hodnota má špatný typ, nebo je v těle pole, které cesta nezná. Pole pointer v chybě ukazuje (JSON Pointer) na místo, které neprošlo.
* **409** `export_refused`: Export nejde vyrobit: v období nejsou žádné doklady, některý doklad nejde do zvoleného formátu převést, nebo by soubor byl neúplný. Věta ve zprávě říká proč; zužte období nebo zvolte jiný formát.
* **413** `payload_too_large`: Tělo zápisu je větší, než cesta přijme. Dávku rozdělte na menší požadavky.
* **415** `unsupported_media_type`: Tělo zápisu musí být JSON s hlavičkou Content-Type: application/json.
* **422** `export_refused`: Export nejde vyrobit: v období nejsou žádné doklady, některý doklad nejde do zvoleného formátu převést, nebo by soubor byl neúplný. Věta ve zprávě říká proč; zužte období nebo zvolte jiný formát.

## `GET /api/v1/exports/{id}` [#get-api-v1-exports-id]

Stav exportu na pozadí a po dokončení podepsaný odkaz ke stažení na 15 minut. Hotový soubor leží 24 hodin.

* **Oprávnění:** žádné, stačí libovolný platný klíč.
* **Odpověď:** jeden záznam v `data`.

```bash
curl -s "https://muj-eshop.cz/api/v1/exports/$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 nebo `null`): Id exportu na pozadí pro `GET /exports/{id}`. `null` u malého exportu, který je hotový hned v odpovědi.
* `kind` (jedna z hodnot `orders`, `documents`, `products` a `vat_paper`)
* `format` (text)
* `status` (jedna z hodnot `ready`, `queued`, `running`, `failed` a `expired`): `ready` = soubor je ke stažení na `download_url`. `queued` a `running` = vyrábí se na pozadí, ptejte se `GET /exports/{id}`. `failed` = nevznikl, důvod je v `error`. `expired` = hotový soubor už byl po 24 hodinách smazán.
* `filename` (text nebo `null`)
* `row_count` (celé číslo nebo `null`): Kolik řádků soubor nese, u běžícího exportu kolik už zpracoval.
* `size_bytes` (celé číslo nebo `null`)
* `download_url` (text nebo `null`): Podepsaný odkaz ke stažení, platí do `download_expires_at` (15 minut) a nechce klíč: smíte ho předat dál, třeba účetní. Adresu berte, jak přišla. Čerstvý odkaz vrátí každé `GET /exports/{id}`; u malého exportu nový `POST /exports`.
* `download_expires_at` (čas ISO 8601 nebo `null`)
* `expires_at` (čas ISO 8601 nebo `null`): Do kdy soubor exportu na pozadí leží (24 hodin od dokončení). U malého exportu `null`: soubor se při stažení vyrobí znovu z aktuálních dat.
* `error` (text nebo `null`): Česky, proč export selhal. Jen u `failed` a `expired`.
* `created_at` (čas ISO 8601 nebo `null`): Kdy export na pozadí vznikl. U malého exportu `null`.

**Chyby této cesty**

* **404** `not_found`: Záznam s tímhle identifikátorem v obchodě není.
