Skip to content

Zápis katalógu ​

Catalog API beží na https://catalog.api.metty.eu a autentifikuje sa secret kľúčom v hlavičke Authorization.

metódacestasprávanie
PUT/catalog/productsvytvorí produkt alebo ho úplne nahradí — neuvedené pole sa zmaže
PATCH/catalog/productszmení iba uvedené polia; neexistujúci produkt je chyba, nie vytvorenie
DELETE/catalog/productsodstráni produkty z databázy aj z indexu

Telom PUT a PATCH je pole produktov bez obálky. Jedna dávka obsahuje najviac 100 produktov.

Príklad ​

bash
curl -X PUT https://catalog.api.metty.eu/catalog/products \
  -H "Authorization: Bearer <SECRET_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "id": "sku-1",
      "name": "Príklepová vŕtačka Bosch",
      "url": "https://eshop.sk/vrtacka",
      "price": 129.9,
      "list_price": 159.9,
      "currency": "EUR",
      "in_stock": true,
      "brand": "Bosch",
      "category": "Náradie > Vŕtačky",
      "description": "Príklepová vŕtačka s reguláciou otáčok.",
      "image": "https://eshop.sk/media/vrtacka.jpg",
      "params": { "farba": "modrá", "príkon": "800 W" }
    }
  ]'

id je váš vlastný identifikátor produktu a jediné povinné pole pre PATCH aj DELETE. Pri PUT sú povinné aj name a url.

Polia ​

poletyplimitvýznam
idstring1–255identita produktu (vaše SKU)
namestring255názov produktu
urlstring2048https URL detailu produktu
pricenumber—cena ako JSON number, nie ako string
list_pricenumber / null—cena pred zľavou; hodnota nižšia alebo rovná price sa ignoruje
currencystring8mena katalógu (napríklad EUR) — vlastnosť katalógu, nie produktu
in_stockboolean / null—dostupnosť
brandstring / null255značka
categorystring / null512cesta kategórie, úrovne oddelené >
descriptionstring / null65 535popis
imagestring / null2048https URL obrázka
paramsobjekt / nullnázov 128, hodnota 2048vlastné atribúty — váš zdroj facetov

Dlhší text orežeme na uvedený limit. Výnimkou sú url a image: musia byť https URL (schému porovnávame bez ohľadu na veľkosť písmen) do 2048 znakov, inak položku odmietneme ako invalid_url / invalid_image — URL neorezávame. Rovnako názov v params dlhší než 128 znakov odmietneme ako invalid_params.

params je mapa názov → skalárna hodnota ({"farba": "modrá"}). Podľa nej následne filtrujete v Search API parametrom filter[farba][]=modrá a widget z nej zostavuje filtre v šablónach Pro a Max. Boolean prevedieme na "true" / "false"; null ani vnorený objekt neprijímame.

Do params patrí všetko, podľa čoho sa má filtrovať

Facety vznikajú z params. Ak potrebujete filter podľa značky alebo iného vlastného poľa, pošlite ho aj ako parameter — samotné pole brand filtrovateľné nie je.

Nad rámec toho, čo pošlete, vie Metty doplniť facety odvodené z textov produktov a jednotlivé facety vypnúť pre konkrétnu kategóriu. Táto vrstva sa nastavuje u nás a vaše dáta nemení: export vráti presne tie params, ktoré ste zapísali, kým hľadanie môže ponúkať polí viac. To isté platí pre image: export vráti URL, ktorú ste nám poslali.

category je úplná cesta od koreňa; chýbajúce úrovne vytvoríme. Ako oddeľovač akceptujeme > aj |.

Originálne obrázky hostujete vy; my si každý raz stiahneme, necháme si 500 px WebP kópiu a servírujeme šírku, ktorú si vyhľadávanie vypýta. Sťahovanie beží na pozadí, takže PUT naň nečaká a image vo výsledkoch vyhľadávania je krátko po prvom zápise null.

Mazanie ​

bash
curl -X DELETE https://catalog.api.metty.eu/catalog/products \
  -H "Authorization: Bearer <SECRET_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["sku-1", "sku-2"]}'

Limit 100 položiek na dávku platí aj tu.

Odpoveď ​

Dávka vráti 200 a stav každého produktu samostatne. Jeden chybný produkt neovplyvní ostatné a produkt, ktorý neprešiel validáciou, sa do databázy nezapíše ani čiastočne.

json
{
  "results": [
    { "id": "sku-1", "status": "ok" },
    { "id": "sku-2", "status": "error", "error": "missing_name", "message": "The field \"name\" is required." }
  ]
}

Pole results kontrolujte vždy — stavový kód 200 neznamená, že prešli všetky produkty.

Celá dávka zlyhá (chyba bez results) iba pri nesprávnom kľúči, nevalidnom JSON, prekročení limitu 100 produktov, nesprávnom režime katalógu, neznámom (404 not_found) alebo už commitnutom (409 generation_committed) sync pri zápise s ?sync=, zaneprázdnenom indexe (503 index_busy) alebo prekročenom rate limite. Zoznam kódov nájdete v sekcii Chyby a limity.

Opakované odoslanie ​

Všetky tri operácie zapisujú podľa id, takže opakované odoslanie tej istej dávky je bezpečné: PUT znova prepíše rovnaké hodnoty, PATCH znova nastaví rovnaké polia. Idempotency kľúč nepotrebujete. Jediný rozdiel nastáva pri DELETE — opakovanie vráti not_found pri produktoch, ktoré odstránil už prvý pokus.

Hromadná zmena ​

Samostatný endpoint na hromadnú zmenu neexistuje. Zmenu viacerých produktov pošlite ako dávku PATCH; ak ich identifikátory nepoznáte, získate ich z exportu alebo zo Search API s rovnakým filtrom.

Kompletný synchronizačný skript nájdete v príkladoch.

Dokumentácia Metty