# Produkty API

> Udržujte katalog svého obchodu v Emailitu pro mřížky produktů, doporučení a položky objednávek.

Základní URL: `https://api.emailit.com/v2`. Autentizujte se hlavičkou `Authorization: Bearer <API key>`.

## Vytvoření nebo úprava produktu — POST /products

> Přidejte produkt do katalogu, nebo ho upravte, podle ID produktu ve vašem obchodě. Alfaverze: otevřená jen týmu Emailitu.

# Vytvoření nebo úprava produktu

Přidá produkt do katalogu, nebo ho upraví, pokud produkt se stejným `id` už existuje. `id` je ID produktu ve vašem obchodě, takže stejný produkt můžete poslat znovu pokaždé, když se změní. Vyžaduje API klíč s oprávněním `full`, nebo `events`. S klíčem s oprávněním `events` obsahuje odpověď jen `object`, `id` a `external_id`.

> **E-commerce je v alfaverzi:** Dokud E-commerce testujeme, je otevřené jen týmu Emailitu. Ostatní požadavky vracejí `403` s `error: "commerce_alpha"`. API klíče fungují jen ve workspace, které vlastní tým Emailitu. Viz [Kdo může E-commerce používat](/cs/docs/commerce/#who-can-use-commerce).

`id` je vždy povinné a `title` je povinné u nového produktu. Pole se zapisují, jen když je pošlete, takže produkt, který znovu pošlete jen s novou cenou, si ponechá název, kategorie, obrázek a vše ostatní. Pokud chcete poslat mnoho produktů najednou, použijte [Hromadné vytvoření nebo úprava produktů](/cs/docs/api-reference/products/batch/).

Mřížky produktů, doporučení a položky objednávek v e-mailech čtou data z katalogu. Viz [Produkty, kupony a košík](/cs/docs/campaigns/products-and-coupons/).

`POST /products`

## Tělo požadavku

- `id` (string | number, povinné): ID produktu ve vašem obchodě, nejvýše 255 znaků. Čísla se ukládají jako řetězce. Ukládá se jako `external_id`. Můžete ho poslat také jako `external_id`.

- `title` (string): Název produktu, nejvýše 500 znaků. Můžete ho poslat také jako `name`. U nového produktu povinné.

- `sku` (string): Skladové číslo (SKU), nejvýše 255 znaků.

- `description` (string): Popis produktu, nejvýše 10 000 znaků.

- `url` (string): Stránka produktu ve vašem obchodě. URL s `http` nebo `https`, nejvýše 2 048 znaků.

- `image_url` (string): Obrázek produktu. URL s `http` nebo `https`, nejvýše 2 048 znaků.

- `price` (number | string): Aktuální cena jako číslo, nebo číselný řetězec, například `"89.00"`. Nesmí být záporná. Ukládá se s nejvýše 4 desetinnými místy.

- `compare_at_price` (number | string): Cena před slevou ve stejném formátu jako `price`. Když je vyšší než `price`, produkt se počítá jako produkt ve slevě.

- `currency` (string): Třípísmenný kód ISO 4217, například `USD` nebo `EUR`. Přijímají se i malá písmena. E-maily formátují ceny produktu v této měně, nebo v USD, když není nastavená.

- `categories` (string[]): Až 50 názvů kategorií, každý nejvýše 191 znaků. Duplicity se odstraní.

- `brand` (string): Název značky, nejvýše 191 znaků.

- `inventory_quantity` (integer | null): Počet kusů skladem. `null` znamená, že skladovou zásobu nesledujete. Mřížky produktů v e-mailech vynechávají produkty s hodnotou `0`.

- `status` (string): `active`, nebo `archived`. Nové produkty mají stav `active`. Archivované produkty se ve výchozím stavu nezobrazují ve [výpisu produktů](/cs/docs/api-reference/products/list/) a mřížky produktů je vynechávají.

- `metadata` (object): Vaše vlastní data ve tvaru dvojic klíč–hodnota, nejvýše 16 KB jako JSON. Odesláním `metadata` se uložený objekt nahradí.

## Odpověď

`201 Created` s [objektem produktu](/cs/docs/api-reference/products/get/), když je produkt nový, nebo `200 OK`, když se upravil existující produkt. Pokud je některé pole neplatné, vrací `422`.
**Požadavek** `POST /products`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/products \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "8123456789",
    "title": "Trail running shoe",
    "sku": "TRS-BLU-42",
    "url": "https://shop.example.com/products/trail-running-shoe",
    "image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
    "price": 89,
    "compare_at_price": 119,
    "currency": "USD",
    "categories": ["Shoes", "Running"],
    "brand": "Acme Outdoors",
    "inventory_quantity": 34
  }'
```

**201**

```json
{
  "object": "product",
  "id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
  "external_id": "8123456789",
  "sku": "TRS-BLU-42",
  "title": "Trail running shoe",
  "description": null,
  "url": "https://shop.example.com/products/trail-running-shoe",
  "image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
  "price": 89,
  "compare_at_price": 119,
  "currency": "USD",
  "categories": [
    "Shoes",
    "Running"
  ],
  "brand": "Acme Outdoors",
  "inventory_quantity": 34,
  "status": "active",
  "metadata": {},
  "created_at": "2026-10-08T14:21:07.512Z",
  "updated_at": "2026-10-08T14:21:07.512Z"
}
```

**422**

```json
{
  "message": "Validation failed. price: must not be negative",
  "errors": {
    "price": [
      "must not be negative"
    ]
  }
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/products/create/

## Načtení produktu — GET /products/{id}

> Načtěte produkt z katalogu podle jeho ID v Emailitu nebo podle ID produktu ve vašem obchodě. Alfaverze: otevřená jen týmu Emailitu.

# Načtení produktu

Načte produkt podle jeho ID v Emailitu nebo podle ID produktu ve vašem obchodě. Vyžaduje API klíč s oprávněním `full`.

> **E-commerce je v alfaverzi:** Dokud E-commerce testujeme, je otevřené jen týmu Emailitu. Ostatní požadavky vracejí `403` s `error: "commerce_alpha"`. API klíče fungují jen ve workspace, které vlastní tým Emailitu. Viz [Kdo může E-commerce používat](/cs/docs/commerce/#who-can-use-commerce).

`GET /products/{id}`

## Parametry v cestě

- `id` (string, povinné): ID produktu (`prd_...`), nebo ID produktu ve vašem obchodě (`external_id`). ID z obchodu, která obsahují speciální znaky, zakódujte pro URL.

## Objekt produktu

- `object` (string): Vždy `product`.

- `id` (string): ID produktu v Emailitu (`prd_...`).

- `external_id` (string): ID produktu ve vašem obchodě: `id`, které jste poslali. Položky objednávek a košíků odkazují na produkty tímto ID.

- `sku` (string | null): Skladové číslo (SKU).

- `title` (string): Název produktu.

- `description` (string | null): Popis produktu.

- `url` (string | null): Stránka produktu ve vašem obchodě.

- `image_url` (string | null): Obrázek produktu.

- `price` (number | null): Aktuální cena.

- `compare_at_price` (number | null): Cena před slevou. Produkt je ve slevě, když je `compare_at_price` vyšší než `price`.

- `currency` (string | null): Třípísmenný kód ISO 4217 měny cen.

- `categories` (string[]): Názvy kategorií.

- `brand` (string | null): Název značky.

- `inventory_quantity` (integer | null): Počet kusů skladem. `null` znamená, že se skladová zásoba nesleduje. Mřížky produktů v e-mailech vynechávají produkty s hodnotou `0`.

- `status` (string): `active`, nebo `archived`. Mřížky produktů v e-mailech archivované produkty vynechávají.

- `metadata` (object): Vaše vlastní data ve tvaru dvojic klíč–hodnota.

- `created_at` (string): Kdy byl produkt přidán, ve formátu ISO 8601 v UTC.

- `updated_at` (string): Kdy se produkt naposledy změnil, ve formátu ISO 8601 v UTC.

**Požadavek** `GET /products/{id}`

**cURL**

```bash
curl https://api.emailit.com/v2/products/prd_3r6HHUGUSl8yjYDscEA6aYA8wrA \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "object": "product",
  "id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
  "external_id": "8123456789",
  "sku": "TRS-BLU-42",
  "title": "Trail running shoe",
  "description": "Lightweight shoe with a grippy sole for wet trails.",
  "url": "https://shop.example.com/products/trail-running-shoe",
  "image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
  "price": 89,
  "compare_at_price": 119,
  "currency": "USD",
  "categories": [
    "Shoes",
    "Running"
  ],
  "brand": "Acme Outdoors",
  "inventory_quantity": 34,
  "status": "active",
  "metadata": {
    "color": "blue"
  },
  "created_at": "2026-10-02T08:15:22.418Z",
  "updated_at": "2026-10-08T14:21:07.512Z"
}
```

**404**

```json
{
  "error": "Product not found",
  "message": "Product not found."
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/products/get/

## Úprava produktu — POST /products/{id}

> Změňte některá pole produktu v katalogu. Alfaverze: otevřená jen týmu Emailitu.

# Úprava produktu

Upraví produkt, který už je v katalogu. Změní se jen pole, která pošlete. ID produktu ve vašem obchodě se změnit nedá: `id` v těle požadavku se ignoruje. Vyžaduje API klíč s oprávněním `full`, nebo `events`. S klíčem s oprávněním `events` obsahuje odpověď jen `object`, `id` a `external_id`.

> **E-commerce je v alfaverzi:** Dokud E-commerce testujeme, je otevřené jen týmu Emailitu. Ostatní požadavky vracejí `403` s `error: "commerce_alpha"`. API klíče fungují jen ve workspace, které vlastní tým Emailitu. Viz [Kdo může E-commerce používat](/cs/docs/commerce/#who-can-use-commerce).

Pokud chcete produkty vytvářet i upravovat stejným voláním, použijte [Vytvoření nebo úprava produktu](/cs/docs/api-reference/products/create/).

`POST /products/{id}`

## Parametry v cestě

- `id` (string, povinné): ID produktu (`prd_...`), nebo ID produktu ve vašem obchodě.

## Tělo požadavku

Kterékoli z polí endpointu [Vytvoření nebo úprava produktu](/cs/docs/api-reference/products/create/) kromě `id`: `title`, `sku`, `description`, `url`, `image_url`, `price`, `compare_at_price`, `currency`, `categories`, `brand`, `inventory_quantity`, `status` a `metadata`. Platí stejná pravidla. `categories` a `metadata` se nahrazují celé.

## Odpověď

`200 OK` s upraveným [objektem produktu](/cs/docs/api-reference/products/get/). Pokud parametru `id` neodpovídá žádný produkt, vrací `404`, a pokud je některé pole neplatné, vrací `422`.
**Požadavek** `POST /products/{id}`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/products/8123456789 \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "price": 79, "inventory_quantity": 20 }'
```

**200**

```json
{
  "object": "product",
  "id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
  "external_id": "8123456789",
  "sku": "TRS-BLU-42",
  "title": "Trail running shoe",
  "description": "Lightweight shoe with a grippy sole for wet trails.",
  "url": "https://shop.example.com/products/trail-running-shoe",
  "image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
  "price": 79,
  "compare_at_price": 119,
  "currency": "USD",
  "categories": [
    "Shoes",
    "Running"
  ],
  "brand": "Acme Outdoors",
  "inventory_quantity": 20,
  "status": "active",
  "metadata": {
    "color": "blue"
  },
  "created_at": "2026-10-02T08:15:22.418Z",
  "updated_at": "2026-10-09T10:02:41.205Z"
}
```

**404**

```json
{
  "error": "Product not found",
  "message": "Product not found."
}
```

**422**

```json
{
  "message": "Validation failed. image_url: must be an http(s) URL",
  "errors": {
    "image_url": [
      "must be an http(s) URL"
    ]
  }
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/products/update/

## Výpis produktů — GET /products

> Vypište produkty z katalogu od nejnovějších, s vyhledáváním a filtry podle kategorie a stavu. Alfaverze: otevřená jen týmu Emailitu.

# Výpis produktů

Vypíše produkty z katalogu, nejnovější jako první. Bez `status` se vypisují jen aktivní produkty. Vyžaduje API klíč s oprávněním `full`.

> **E-commerce je v alfaverzi:** Dokud E-commerce testujeme, je otevřené jen týmu Emailitu. Ostatní požadavky vracejí `403` s `error: "commerce_alpha"`. API klíče fungují jen ve workspace, které vlastní tým Emailitu. Viz [Kdo může E-commerce používat](/cs/docs/commerce/#who-can-use-commerce).

`GET /products`

## Parametry dotazu

- `page` (integer): Číslo stránky pro stránkování (nejméně 1, výchozí hodnota 1).

- `limit` (integer): Počet produktů, které se vrátí (nejméně 1, nejvýše 100, výchozí hodnota 25).

- `search` (string): Hledá v názvu, v ID produktu ve vašem obchodě (`external_id`) nebo v SKU bez ohledu na velikost písmen.

- `category` (string): Jen produkty v této kategorii. Název musí přesně odpovídat, včetně velikosti písmen.

- `status` (string): `active` (výchozí), `archived` nebo `all`. Když filtrujete podle klíče `status` níže, použijte `all`, protože výchozí hodnota už výpis omezuje na aktivní produkty.

- `ids` (string): Seznam až 100 ID produktů oddělených čárkami. Každé může být ID v Emailitu (`prd_...`), nebo ID produktu ve vašem obchodě.

- `match` (string): `all` (výchozí) vyžaduje shodu všech filtrů `key.condition`. U `or` stačí shoda kteréhokoli z nich. Viz [Filtrování a řazení](/cs/docs/api-reference/filtering/).

- `sort` (string): Klíč řazení: `created_at` (výchozí), `updated_at`, `title` nebo `price`.

- `order` (string): Směr řazení: `asc`, nebo `desc` (výchozí).

## Filtry

Klíče filtrů a řazení: viz [Filtrování](https://emailit.com/cs/docs/api-reference/filtering/).

U tohoto endpointu přijímá `order` jen `asc`, nebo `desc`. Klíč řazení předejte v `sort`, například `sort=price&order=asc`.

## Odpověď

Stránka [objektů produktů](/cs/docs/api-reference/products/get/) v poli `data` a k tomu `total_records`, `next_page_url` a `previous_page_url`. URL stránek nesou jen `page` a `limit`, takže když na ně přejdete, přidejte znovu své vyhledávání a filtry.
**Požadavek** `GET /products`

**cURL**

```bash
curl "https://api.emailit.com/v2/products?category=Running&sort=price&order=asc&limit=25" \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "data": [
    {
      "object": "product",
      "id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
      "external_id": "8123456789",
      "sku": "TRS-BLU-42",
      "title": "Trail running shoe",
      "description": "Lightweight shoe with a grippy sole for wet trails.",
      "url": "https://shop.example.com/products/trail-running-shoe",
      "image_url": "https://shop.example.com/images/trail-running-shoe.jpg",
      "price": 89,
      "compare_at_price": 119,
      "currency": "USD",
      "categories": [
        "Shoes",
        "Running"
      ],
      "brand": "Acme Outdoors",
      "inventory_quantity": 34,
      "status": "active",
      "metadata": {
        "color": "blue"
      },
      "created_at": "2026-10-02T08:15:22.418Z",
      "updated_at": "2026-10-08T14:21:07.512Z"
    }
  ],
  "total_records": 1,
  "next_page_url": null,
  "previous_page_url": null
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/products/list/

## Hromadné vytvoření nebo úprava produktů — POST /products/batch

> Pošlete až 1 000 produktů v jednom požadavku. Každý se vytvoří, nebo upraví podle ID produktu ve vašem obchodě. Alfaverze: otevřená jen týmu Emailitu.

# Hromadné vytvoření nebo úprava produktů

Pošle až 1 000 produktů v jednom požadavku, například při importu katalogu nebo při jeho pravidelné synchronizaci. Každý produkt se řídí pravidly endpointu [Vytvoření nebo úprava produktu](/cs/docs/api-reference/products/create/): vytvoří se, nebo upraví podle svého `id`, nový produkt potřebuje `title` a pole se zapisují, jen když je pošlete. Vyžaduje API klíč s oprávněním `full`, nebo `events`. S klíčem s oprávněním `events` obsahuje odpověď jen `object`, `id` a `external_id`.

> **E-commerce je v alfaverzi:** Dokud E-commerce testujeme, je otevřené jen týmu Emailitu. Ostatní požadavky vracejí `403` s `error: "commerce_alpha"`. API klíče fungují jen ve workspace, které vlastní tým Emailitu. Viz [Kdo může E-commerce používat](/cs/docs/commerce/#who-can-use-commerce).

Neplatné produkty se přeskočí a vypíšou v `rejected`; ostatní se uloží. Požadavek přesto vrátí `200`.

`POST /products/batch`

## Tělo požadavku

- `products` (object[], povinné): 1 až 1 000 produktů, každý s poli endpointu [Vytvoření nebo úprava produktu](/cs/docs/api-reference/products/create/).

## Odpověď

- `created` (integer): Počet nových produktů.

- `updated` (integer): Počet existujících produktů, které se upravily.

- `rejected` (object[]): Produkty, které se neuložily. Každá položka má `index` produktu ve vašem poli `products` a `errors` s klíči podle cesty k poli, například `products.3.price`.

Pokud je `products` prázdné nebo má víc než 1 000 položek, vrací `422`.
**Požadavek** `POST /products/batch`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/products/batch \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "products": [
      { "id": "8123456789", "title": "Trail running shoe", "price": 89, "currency": "USD", "categories": ["Shoes", "Running"] },
      { "id": "8123456790", "title": "Merino running socks", "price": 18, "currency": "USD", "categories": ["Accessories"] },
      { "id": "8123456791", "price": 49, "currency": "USD" }
    ]
  }'
```

**200**

```json
{
  "created": 1,
  "updated": 1,
  "rejected": [
    {
      "index": 2,
      "errors": {
        "products.2.title": [
          "is required"
        ]
      }
    }
  ]
}
```

**422**

```json
{
  "message": "Validation failed. products: Send 1 to 1000 products.",
  "errors": {
    "products": [
      "Send 1 to 1000 products."
    ]
  }
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/products/batch/

## Výpis kategorií produktů — GET /products/categories

> Vypište kategorie aktivních produktů v katalogu s počtem produktů v každé z nich. Alfaverze: otevřená jen týmu Emailitu.

# Výpis kategorií produktů

Vypíše kategorie, které používají aktivní produkty, v abecedním pořadí, s počtem aktivních produktů v každé z nich. Archivované produkty se nepočítají. Vrací až 1 000 kategorií a nestránkuje se. Vyžaduje API klíč s oprávněním `full`.

> **E-commerce je v alfaverzi:** Dokud E-commerce testujeme, je otevřené jen týmu Emailitu. Ostatní požadavky vracejí `403` s `error: "commerce_alpha"`. API klíče fungují jen ve workspace, které vlastní tým Emailitu. Viz [Kdo může E-commerce používat](/cs/docs/commerce/#who-can-use-commerce).

Kategorie pocházejí z `categories` jednotlivých produktů. Název kategorie použijte v parametru `category` endpointu [Výpis produktů](/cs/docs/api-reference/products/list/).

`GET /products/categories`

**Požadavek** `GET /products/categories`

**cURL**

```bash
curl https://api.emailit.com/v2/products/categories \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "data": [
    {
      "name": "Accessories",
      "products": 18
    },
    {
      "name": "Running",
      "products": 12
    },
    {
      "name": "Shoes",
      "products": 27
    }
  ]
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/products/categories/

## Smazání produktu — DELETE /products/{id}

> Odeberte produkt z katalogu. Alfaverze: otevřená jen týmu Emailitu.

# Smazání produktu

Odebere produkt z katalogu. Objednávky, které ho obsahují, si ponechají své položky, protože ty si ukládají vlastní název, cenu a ID produktu. Pokud chcete produkt skrýt, aniž byste ho smazali, nastavte místo toho jeho `status` na `archived`. Vyžaduje API klíč s oprávněním `full`.

> **E-commerce je v alfaverzi:** Dokud E-commerce testujeme, je otevřené jen týmu Emailitu. Ostatní požadavky vracejí `403` s `error: "commerce_alpha"`. API klíče fungují jen ve workspace, které vlastní tým Emailitu. Viz [Kdo může E-commerce používat](/cs/docs/commerce/#who-can-use-commerce).

Pokud [měřicí skript](/cs/docs/commerce/connect-your-shop/#the-tracking-script) nahlásí zobrazení smazaného produktu s jeho názvem, produkt se do katalogu znovu přidá z dat stránky.

`DELETE /products/{id}`

## Parametry v cestě

- `id` (string, povinné): ID produktu (`prd_...`), nebo ID produktu ve vašem obchodě.

**Požadavek** `DELETE /products/{id}`

**cURL**

```bash
curl -X DELETE https://api.emailit.com/v2/products/prd_3r6HHUGUSl8yjYDscEA6aYA8wrA \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "object": "product",
  "id": "prd_3r6HHUGUSl8yjYDscEA6aYA8wrA",
  "deleted": true
}
```

**404**

```json
{
  "error": "Product not found",
  "message": "Product not found."
}
```

---
Zdroj: https://emailit.com/cs/docs/api-reference/products/delete/
