REST API: produkty a kategorie
Referenční popis cest katalogu, tedy výpisu a detailu produktu a stromu kategorií: parametry, pole odpovědi, chyby a ukázka volání.
Pro vlastní frontend, srovnávače a mobilní aplikaci: katalog s variantami, cenami, dostupností a stromem kategorií.
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/products
Katalog, bez updated_since od nejnovějšího produktu. Cena je běžná koncová z ceníku pro maloobchod, velkoobchodní ceny se přes API neposílají.
- Oprávnění:
products:read, u klíče „Katalog: produkty, kategorie, dodavatelé (č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 poleupdated_atod nejstarší změny, bez něj od nejnovějšího záznamu. Poleupdated_at: Poslední změna záznamu produktu. Cena, obrázek a zásoba ho neposouvají.
curl -s "https://muj-eshop.cz/api/v1/products?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+.status(jedna z hodnotdraft,activeaarchived; nepovinný): Stav publikace produktu.
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)slug(text)title(text)status(jedna z hodnotdraft,activeaarchived)product_type(jedna z hodnotphysical,digital,service,gift_card,bundleasubscription)brand(text nebonull)price_minor(celé číslo nebonull): Běžná koncová cena z maloobchodního ceníku v okamžiku čtení, v haléřích s DPH.currency_code(text se vzorem^[A-Z]{3}$): Kód měny podle ISO 4217, dnes vždy CZK.image_url(text nebonull)stock(číslo nebonull): Kusy na skladě v okamžiku čtení,null= zásoba se nevede. Zásoby se synchronizují přes/stock.created_at(čas ISO 8601)updated_at(čas ISO 8601): Poslední změna záznamu produktu. Cena, obrázek a zásoba ho neposouvají.
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/products/{id}
Jeden produkt i s variantami, jejich názvy, cenami a dostupností a se zařazením do kategorií.
- Oprávnění:
products:read, u klíče „Katalog: produkty, kategorie, dodavatelé (čtení)“. - Odpověď: jeden záznam v
data.
curl -s "https://muj-eshop.cz/api/v1/products/$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)slug(text)title(text)status(jedna z hodnotdraft,activeaarchived)product_type(jedna z hodnotphysical,digital,service,gift_card,bundleasubscription)brand(text nebonull)price_minor(celé číslo nebonull): Běžná koncová cena z maloobchodního ceníku v okamžiku čtení, v haléřích s DPH.currency_code(text se vzorem^[A-Z]{3}$): Kód měny podle ISO 4217, dnes vždy CZK.image_url(text nebonull)stock(číslo nebonull): Kusy na skladě v okamžiku čtení,null= zásoba se nevede. Zásoby se synchronizují přes/stock.created_at(čas ISO 8601)updated_at(čas ISO 8601): Poslední změna záznamu produktu. Cena, obrázek a zásoba ho neposouvají.subtitle(text nebonull)description(text nebonull)meta_title(text nebonull)meta_description(text nebonull)published_at(čas ISO 8601 nebonull)variants(pole objektů)variants[].id(UUID)variants[].variant(text nebonull): Název varianty z hodnot jejích voleb v pořadí voleb produktu, oddělených lomítkem, napříkladČerná / 42.null, když varianta žádné volby nemá (jednoduchý produkt).variants[].sku(text nebonull)variants[].ean(text nebonull)variants[].is_default(truenebofalse)variants[].price_minor(celé číslo nebonull)variants[].compare_at_minor(celé číslo nebonull)variants[].currency_code(text se vzorem^[A-Z]{3}$): Kód měny podle ISO 4217, dnes vždy CZK.variants[].available(číslo nebonull)categories(pole objektů)categories[].id(UUID)categories[].name(text)categories[].full_slug(text)categories[].is_primary(truenebofalse)primary_category_id(UUID nebonull)
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í.
GET /api/v1/categories
Strom kategorií jako plochý výpis: nadřazená kategorie, hloubka, pořadí, celá cesta ze slugů a to, jestli je kategorie na obchodě vidět.
- Oprávnění:
products:read, u klíče „Katalog: produkty, kategorie, dodavatelé (č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 poleupdated_atod nejstarší změny, bez něj od nejnovějšího záznamu.
curl -s "https://muj-eshop.cz/api/v1/categories?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+.
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)parent_id(UUID nebonull): Nadřazená kategorie,nullu kořene.name(text)slug(text)full_path(text): Celá cesta ze slugů od kořene, napříkladobyvak/sedacky.depth(celé číslo): Hloubka ve stromu, kořen má 0.position(celé číslo): Pořadí mezi sourozenci.is_active(truenebofalse): Kategorie je na obchodě vidět.show_in_menu(truenebofalse): Kategorie je v hlavní nabídce.created_at(čas ISO 8601)updated_at(čas ISO 8601)
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á.