# Produkte API

> Den Katalog Ihres Shops in Emailit pflegen, für Produktraster, Empfehlungen und Bestellpositionen.

Basis-URL: `https://api.emailit.com/v2`. Authentifizieren Sie sich mit `Authorization: Bearer <API key>`.

## Produkt erstellen oder aktualisieren — POST /products

> Fügen Sie Ihrem Katalog ein Produkt hinzu oder aktualisieren Sie es, identifiziert über die Produkt-ID in Ihrem Shop. Alpha: nur für das Emailit-Team zugänglich.

# Produkt erstellen oder aktualisieren

Fügt Ihrem Katalog ein Produkt hinzu oder aktualisiert es, wenn bereits ein Produkt mit derselben `id` existiert. Die `id` ist die Produkt-ID in Ihrem Shop, Sie können dasselbe Produkt also bei jeder Änderung erneut senden. Erfordert einen API-Schlüssel mit dem Scope `full` oder `events`. Bei einem Schlüssel mit dem Scope `events` enthält die Antwort nur `object`, `id` und `external_id`.

> **Commerce ist in der Alpha:** Commerce steht nur dem Emailit-Team offen, solange wir es testen. Andere Anfragen geben `403` mit `error: "commerce_alpha"` zurück. API-Schlüssel funktionieren nur in Workspaces, die dem Emailit-Team gehören. Siehe [Wer Commerce nutzen kann](/de/docs/commerce/#who-can-use-commerce).

`id` ist immer erforderlich, `title` bei einem neuen Produkt. Felder werden nur geschrieben, wenn Sie sie senden: Ein Produkt, das Sie nur mit einem neuen Preis erneut senden, behält Titel, Kategorien, Bild und alles andere. Um viele Produkte auf einmal zu senden, verwenden Sie [Produkte gesammelt erstellen oder aktualisieren](/de/docs/api-reference/products/batch/).

Produktraster, Empfehlungen und Bestellpositionen in E-Mails lesen aus dem Katalog. Siehe [Produkte, Gutscheine und der Warenkorb](/de/docs/campaigns/products-and-coupons/).

`POST /products`

## Anfrage-Body

- `id` (string | number, erforderlich): Die Produkt-ID in Ihrem Shop, bis zu 255 Zeichen. Zahlen werden als Strings gespeichert. Wird als `external_id` gespeichert. Sie können sie auch als `external_id` senden.

- `title` (string): Produktname, bis zu 500 Zeichen. Sie können ihn auch als `name` senden. Erforderlich bei einem neuen Produkt.

- `sku` (string): Artikelnummer (SKU), bis zu 255 Zeichen.

- `description` (string): Produktbeschreibung, bis zu 10.000 Zeichen.

- `url` (string): Produktseite in Ihrem Shop. Eine `http`- oder `https`-URL, bis zu 2.048 Zeichen.

- `image_url` (string): Produktbild. Eine `http`- oder `https`-URL, bis zu 2.048 Zeichen.

- `price` (number | string): Aktueller Preis, als Zahl oder numerischer String wie `"89.00"`. Kann nicht negativ sein. Wird mit bis zu 4 Nachkommastellen gespeichert.

- `compare_at_price` (number | string): Preis vor einem Rabatt, im selben Format wie `price`. Wenn er höher als `price` ist, gilt das Produkt als reduziert.

- `currency` (string): Dreistelliger Code nach ISO 4217, etwa `USD` oder `EUR`. Kleinbuchstaben werden akzeptiert. E-Mails formatieren die Preise des Produkts in dieser Währung oder in USD, wenn sie nicht gesetzt ist.

- `categories` (string[]): Bis zu 50 Kategorienamen mit jeweils bis zu 191 Zeichen. Duplikate werden entfernt.

- `brand` (string): Markenname, bis zu 191 Zeichen.

- `inventory_quantity` (integer | null): Vorrätige Stückzahl. `null` bedeutet, dass Sie den Lagerbestand nicht erfassen. Produktraster in E-Mails lassen Produkte mit `0` aus.

- `status` (string): `active` oder `archived`. Neue Produkte sind `active`. Archivierte Produkte werden in [Produkte auflisten](/de/docs/api-reference/products/list/) standardmäßig ausgeblendet und in Produktrastern ausgelassen.

- `metadata` (object): Ihre eigenen Schlüssel-Wert-Daten, bis zu 16 KB als JSON. Wenn Sie `metadata` senden, wird das gespeicherte Objekt ersetzt.

## Rückgabe

`201 Created` mit dem [Produkt-Objekt](/de/docs/api-reference/products/get/), wenn das Produkt neu ist, oder `200 OK`, wenn ein bestehendes Produkt aktualisiert wurde. Gibt `422` zurück, wenn ein Feld ungültig ist.
**Anfrage** `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"
    ]
  }
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/products/create/

## Produkt abrufen — GET /products/{id}

> Rufen Sie ein Produkt aus Ihrem Katalog über seine Emailit-ID oder über die Produkt-ID in Ihrem Shop ab. Alpha: nur für das Emailit-Team zugänglich.

# Produkt abrufen

Ruft ein Produkt über seine Emailit-ID oder über die Produkt-ID in Ihrem Shop ab. Erfordert einen API-Schlüssel mit dem Scope `full`.

> **Commerce ist in der Alpha:** Commerce steht nur dem Emailit-Team offen, solange wir es testen. Andere Anfragen geben `403` mit `error: "commerce_alpha"` zurück. API-Schlüssel funktionieren nur in Workspaces, die dem Emailit-Team gehören. Siehe [Wer Commerce nutzen kann](/de/docs/commerce/#who-can-use-commerce).

`GET /products/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die Produkt-ID (`prd_...`) oder die Produkt-ID in Ihrem Shop (`external_id`). Shop-IDs mit Sonderzeichen müssen Sie URL-kodieren.

## Das Produkt-Objekt

- `object` (string): Immer `product`.

- `id` (string): Emailit-Produkt-ID (`prd_...`).

- `external_id` (string): Die Produkt-ID in Ihrem Shop: die `id`, die Sie gesendet haben. Artikel in Bestellungen und Warenkörben verweisen über diese ID auf Produkte.

- `sku` (string | null): Artikelnummer (SKU).

- `title` (string): Produktname.

- `description` (string | null): Produktbeschreibung.

- `url` (string | null): Produktseite in Ihrem Shop.

- `image_url` (string | null): Produktbild.

- `price` (number | null): Aktueller Preis.

- `compare_at_price` (number | null): Preis vor einem Rabatt. Ein Produkt ist reduziert, wenn `compare_at_price` höher als `price` ist.

- `currency` (string | null): Dreistelliger Code nach ISO 4217 für die Preise.

- `categories` (string[]): Kategorienamen.

- `brand` (string | null): Markenname.

- `inventory_quantity` (integer | null): Vorrätige Stückzahl. `null` bedeutet, dass der Lagerbestand nicht erfasst wird. Produktraster in E-Mails lassen Produkte mit `0` aus.

- `status` (string): `active` oder `archived`. Produktraster in E-Mails lassen archivierte Produkte aus.

- `metadata` (object): Ihre eigenen Schlüssel-Wert-Daten.

- `created_at` (string): Zeitpunkt, zu dem das Produkt hinzugefügt wurde, im Format ISO 8601 in UTC.

- `updated_at` (string): Zeitpunkt der letzten Änderung des Produkts, im Format ISO 8601 in UTC.

**Anfrage** `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."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/products/get/

## Produkt aktualisieren — POST /products/{id}

> Ändern Sie einzelne Felder eines Produkts in Ihrem Katalog. Alpha: nur für das Emailit-Team zugänglich.

# Produkt aktualisieren

Aktualisiert ein Produkt, das bereits in Ihrem Katalog ist. Nur die Felder, die Sie senden, ändern sich. Die Produkt-ID in Ihrem Shop kann sich nicht ändern: Eine `id` im Body wird ignoriert. Erfordert einen API-Schlüssel mit dem Scope `full` oder `events`. Bei einem Schlüssel mit dem Scope `events` enthält die Antwort nur `object`, `id` und `external_id`.

> **Commerce ist in der Alpha:** Commerce steht nur dem Emailit-Team offen, solange wir es testen. Andere Anfragen geben `403` mit `error: "commerce_alpha"` zurück. API-Schlüssel funktionieren nur in Workspaces, die dem Emailit-Team gehören. Siehe [Wer Commerce nutzen kann](/de/docs/commerce/#who-can-use-commerce).

Um Produkte mit demselben Aufruf zu erstellen und zu aktualisieren, verwenden Sie [Produkt erstellen oder aktualisieren](/de/docs/api-reference/products/create/).

`POST /products/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die Produkt-ID (`prd_...`) oder die Produkt-ID in Ihrem Shop.

## Anfrage-Body

Beliebige Felder von [Produkt erstellen oder aktualisieren](/de/docs/api-reference/products/create/) außer `id`: `title`, `sku`, `description`, `url`, `image_url`, `price`, `compare_at_price`, `currency`, `categories`, `brand`, `inventory_quantity`, `status` und `metadata`. Es gelten dieselben Regeln. `categories` und `metadata` werden vollständig ersetzt.

## Rückgabe

`200 OK` mit dem aktualisierten [Produkt-Objekt](/de/docs/api-reference/products/get/). Gibt `404` zurück, wenn kein Produkt zu `id` passt, und `422`, wenn ein Feld ungültig ist.
**Anfrage** `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"
    ]
  }
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/products/update/

## Produkte auflisten — GET /products

> Listen Sie die Produkte in Ihrem Katalog auf, neueste zuerst, mit Suche und Filtern nach Kategorie und Status. Alpha: nur für das Emailit-Team zugänglich.

# Produkte auflisten

Listet die Produkte in Ihrem Katalog auf, neueste zuerst. Ohne `status` werden nur aktive Produkte aufgelistet. Erfordert einen API-Schlüssel mit dem Scope `full`.

> **Commerce ist in der Alpha:** Commerce steht nur dem Emailit-Team offen, solange wir es testen. Andere Anfragen geben `403` mit `error: "commerce_alpha"` zurück. API-Schlüssel funktionieren nur in Workspaces, die dem Emailit-Team gehören. Siehe [Wer Commerce nutzen kann](/de/docs/commerce/#who-can-use-commerce).

`GET /products`

## Query-Parameter

- `page` (integer): Seitennummer für die Paginierung (Minimum: 1, Standardwert: 1).

- `limit` (integer): Anzahl der zurückgegebenen Produkte (Minimum: 1, Maximum: 100, Standardwert: 25).

- `search` (string): Abgleich mit dem Titel, der Produkt-ID in Ihrem Shop (`external_id`) oder der SKU, ohne Beachtung der Groß-/Kleinschreibung.

- `category` (string): Nur Produkte in dieser Kategorie. Der Name muss exakt übereinstimmen, einschließlich der Groß-/Kleinschreibung.

- `status` (string): `active` (Standardwert), `archived` oder `all`. Verwenden Sie `all`, wenn Sie mit dem Schlüssel `status` unten filtern, denn der Standardwert beschränkt die Liste bereits auf aktive Produkte.

- `ids` (string): Kommagetrennte Liste mit bis zu 100 Produkt-IDs. Jede kann die Emailit-ID (`prd_...`) oder die Produkt-ID in Ihrem Shop sein.

- `match` (string): `all` (Standardwert) verlangt, dass jeder Filter `key.condition` zutrifft. Bei `or` genügt einer davon. Siehe [Filtern und Sortieren](/de/docs/api-reference/filtering/).

- `sort` (string): Sortierschlüssel: `created_at` (Standardwert), `updated_at`, `title` oder `price`.

- `order` (string): Sortierrichtung: `asc` oder `desc` (Standardwert).

## Filter

Filter- und Sortierschlüssel: siehe [Filtern und Sortieren](https://emailit.com/de/docs/api-reference/filtering/).

Bei diesem Endpunkt akzeptiert `order` nur `asc` oder `desc`. Übergeben Sie den Sortierschlüssel in `sort`, zum Beispiel `sort=price&order=asc`.

## Rückgabe

Eine Seite mit [Produkt-Objekten](/de/docs/api-reference/products/get/) in `data`, dazu `total_records`, `next_page_url` und `previous_page_url`. Die Seiten-URLs enthalten nur `page` und `limit`; fügen Sie Ihre Suche und Filter daher erneut hinzu, wenn Sie ihnen folgen.
**Anfrage** `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
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/products/list/

## Produkte gesammelt erstellen oder aktualisieren — POST /products/batch

> Senden Sie bis zu 1.000 Produkte in einer Anfrage. Jedes wird über die Produkt-ID in Ihrem Shop erstellt oder aktualisiert. Alpha: nur für das Emailit-Team zugänglich.

# Produkte gesammelt erstellen oder aktualisieren

Senden Sie bis zu 1.000 Produkte in einer Anfrage, zum Beispiel um Ihren Katalog zu importieren oder ihn regelmäßig zu synchronisieren. Jedes Produkt folgt den Regeln von [Produkt erstellen oder aktualisieren](/de/docs/api-reference/products/create/): Es wird über seine `id` erstellt oder aktualisiert, ein neues Produkt braucht einen `title`, und Felder werden nur geschrieben, wenn Sie sie senden. Erfordert einen API-Schlüssel mit dem Scope `full` oder `events`. Bei einem Schlüssel mit dem Scope `events` enthält die Antwort nur `object`, `id` und `external_id`.

> **Commerce ist in der Alpha:** Commerce steht nur dem Emailit-Team offen, solange wir es testen. Andere Anfragen geben `403` mit `error: "commerce_alpha"` zurück. API-Schlüssel funktionieren nur in Workspaces, die dem Emailit-Team gehören. Siehe [Wer Commerce nutzen kann](/de/docs/commerce/#who-can-use-commerce).

Ungültige Produkte werden übersprungen und in `rejected` aufgeführt; die übrigen werden gespeichert. Die Anfrage gibt trotzdem `200` zurück.

`POST /products/batch`

## Anfrage-Body

- `products` (object[], erforderlich): 1 bis 1.000 Produkte, jeweils mit den Feldern von [Produkt erstellen oder aktualisieren](/de/docs/api-reference/products/create/).

## Rückgabe

- `created` (integer): Anzahl der neuen Produkte.

- `updated` (integer): Anzahl der bestehenden Produkte, die aktualisiert wurden.

- `rejected` (object[]): Produkte, die nicht gespeichert wurden. Jeder Eintrag hat den `index` des Produkts in Ihrem Array `products` und `errors` mit Feldpfaden wie `products.3.price` als Schlüsseln.

Gibt `422` zurück, wenn `products` leer ist oder mehr als 1.000 Einträge hat.
**Anfrage** `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."
    ]
  }
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/products/batch/

## Produktkategorien auflisten — GET /products/categories

> Listen Sie die Kategorien der aktiven Produkte in Ihrem Katalog auf, mit der Anzahl der Produkte in jeder Kategorie. Alpha: nur für das Emailit-Team zugänglich.

# Produktkategorien auflisten

Listet die Kategorien auf, die aktive Produkte verwenden, in alphabetischer Reihenfolge, mit der Anzahl der aktiven Produkte in jeder Kategorie. Archivierte Produkte werden nicht gezählt. Gibt bis zu 1.000 Kategorien zurück und ist nicht paginiert. Erfordert einen API-Schlüssel mit dem Scope `full`.

> **Commerce ist in der Alpha:** Commerce steht nur dem Emailit-Team offen, solange wir es testen. Andere Anfragen geben `403` mit `error: "commerce_alpha"` zurück. API-Schlüssel funktionieren nur in Workspaces, die dem Emailit-Team gehören. Siehe [Wer Commerce nutzen kann](/de/docs/commerce/#who-can-use-commerce).

Die Kategorien stammen aus `categories` der einzelnen Produkte. Verwenden Sie einen Kategorienamen mit dem Parameter `category` von [Produkte auflisten](/de/docs/api-reference/products/list/).

`GET /products/categories`

**Anfrage** `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
    }
  ]
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/products/categories/

## Produkt löschen — DELETE /products/{id}

> Entfernen Sie ein Produkt aus Ihrem Katalog. Alpha: nur für das Emailit-Team zugänglich.

# Produkt löschen

Entfernt ein Produkt aus Ihrem Katalog. Bestellungen, die es enthalten, behalten ihre Artikel, die ihren eigenen Titel, Preis und ihre Produkt-ID speichern. Um ein Produkt auszublenden, ohne es zu löschen, setzen Sie stattdessen seinen `status` auf `archived`. Erfordert einen API-Schlüssel mit dem Scope `full`.

> **Commerce ist in der Alpha:** Commerce steht nur dem Emailit-Team offen, solange wir es testen. Andere Anfragen geben `403` mit `error: "commerce_alpha"` zurück. API-Schlüssel funktionieren nur in Workspaces, die dem Emailit-Team gehören. Siehe [Wer Commerce nutzen kann](/de/docs/commerce/#who-can-use-commerce).

Meldet das [Tracking-Skript](/de/docs/commerce/connect-your-shop/#the-tracking-script) einen Aufruf eines gelöschten Produkts mit seinem Titel, wird das Produkt aus den Seitendaten erneut zum Katalog hinzugefügt.

`DELETE /products/{id}`

## Pfadparameter

- `id` (string, erforderlich): Die Produkt-ID (`prd_...`) oder die Produkt-ID in Ihrem Shop.

**Anfrage** `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."
}
```

---
Quelle: https://emailit.com/de/docs/api-reference/products/delete/
