# Webhook

<figure><img src="https://3195545272-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlRf1QqJGoevCQqGbfI80%2Fuploads%2Fgit-blob-094f1326e4f5b66d3f4de825a63e55cbf0f4ac01%2Fboxhero-add-webhook.png?alt=media" alt=""><figcaption></figcaption></figure>

***

## Registrierung

Sie können einen Webhook registrieren unter <mark style="color:blaue;">**`Einstellungen`**</mark> **>** <mark style="color:blaue;">**`Integrationen & API`**</mark> in Ihrem BoxHero-Team.

## Verhalten bei Zustellung & Wiederholung

Wenn ein Ereignis auftritt, sendet BoxHero eine HTTP- `POST` Anfrage an Ihren registrierten Webhook-Endpunkt. Der Anfrage-Body enthält eine JSON-Nutzlast, die das Ereignis beschreibt.

* Wenn Ihr Server mit **HTTP 200 OK**antwortet, gilt das Ereignis als erfolgreich zugestellt.
* Wenn Ihr Server mit **jedem anderen Statuscode als 200**behandelt BoxHero dies als vorübergehenden Fehler und versucht die Zustellung bis zu 3 Mal erneut.

## Struktur der Webhook-Nutzlast

Alle Webhook-Ereignisse werden im Anfrage-Body mit der folgenden JSON-Struktur zugestellt:

```json
{
  "id": "1234", // Eindeutige ID des Ereignisses
  "topic": "txs/new", // Ereignisthema
  "version": 1, // Version des Nutzlastschemas
  "payload": { // ereignisspezifische Daten
    ...
  },
  "created_time": "2025-08-06T09:20:48.623Z" // Zeitstempel des Ereigniseintritts (ISO 8601)
}
```

***

## Reihenfolge der Ereignisse

BoxHero **garantiert nicht** die Reihenfolge der Ereigniszustellung nicht. Beispielsweise kann ein `item/new` Ereignis nach einem `item/delete` Ereignis für denselben Artikel eintreffen.

Die `created_time` Feld in der Ereignis-Nutzlast stellt die tatsächliche Ereigniszeit dar. Implementieren Sie idempotente und reihenfolgenrobuste Logik in Ihrem Webhook-Handler, um Ereignisse zuverlässig zu verarbeiten.

## Ereignisthemen

{% hint style="info" %}
Wenn Sie Unterstützung für zusätzliche Ereignisthemen benötigen, wenden Sie sich bitte an [den Support](https://www.boxhero.io/docs/documentation/de/ressourcen/contact).
{% endhint %}

### `txs/new`

Wird ausgelöst, wenn eine Lagertransaktion stattfindet (Wareneingang / Warenausgang / Bestand anpassen / Bestand verschieben).

{% hint style="warning" %}
**Hinweis:** Dieses Ereignis *keine* wird ausgelöst für Anpassungen, die durch Massenbearbeitungen oder Importe erstellt wurden (z. B. beim Hinzufügen oder Aktualisieren von Artikeln über Excel).
{% endhint %}

<table><thead><tr><th width="207">Feld</th><th width="100" data-type="checkbox">Erforderlich</th><th>Beschreibung</th><th data-hidden data-type="checkbox">Obligatorisch</th><th data-hidden>Beschreibung</th><th data-hidden>Team-Modus</th></tr></thead><tbody><tr><td>id</td><td>true</td><td>Eindeutige ID der Transaktion</td><td>true</td><td>Eindeutige ID des Verlaufs</td><td>Gesamt</td></tr><tr><td>type</td><td>true</td><td>Transaktionstyp<br>(in, out, adjust, move)</td><td>true</td><td><p>Typ des Verlaufs.</p><ul><li>Wareneingang : in</li><li>Warenausgang : out</li><li>Anpassung : adjust</li><li>Verschieben : move</li></ul></td><td>Gesamt</td></tr><tr><td>Partner</td><td>false</td><td>Partner</td><td>false</td><td></td><td></td></tr><tr><td>partner.id</td><td>false</td><td>Eindeutige ID des Partners</td><td>false</td><td></td><td></td></tr><tr><td>partner.name</td><td>false</td><td>Name des Partners</td><td>false</td><td></td><td></td></tr><tr><td>partner.deleted</td><td>false</td><td>Ob der Partner gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>from_location</td><td>false</td><td>Quellort</td><td>false</td><td></td><td></td></tr><tr><td>from_location.id</td><td>false</td><td>Eindeutige ID des Quellorts</td><td>false</td><td></td><td></td></tr><tr><td>from_location.name</td><td>false</td><td>Name des Quellorts</td><td>false</td><td></td><td></td></tr><tr><td>from_location.deleted</td><td>false</td><td>Ob der Quellort gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>to_location</td><td>true</td><td>Zielort</td><td>false</td><td></td><td></td></tr><tr><td>to_location.id</td><td>true</td><td>Eindeutige ID des Zielorts</td><td>false</td><td></td><td></td></tr><tr><td>to_location.name</td><td>true</td><td>Name des Zielorts</td><td>false</td><td></td><td></td></tr><tr><td>to_location.deleted</td><td>true</td><td>Ob der Zielort gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>items</td><td>true</td><td>Positionen in der Transaktion</td><td>true</td><td>Artikelbezogene Positionen, aus denen der Verlauf besteht</td><td>Alle Modi</td></tr><tr><td>items.id</td><td>true</td><td>Eindeutige ID des Artikels</td><td>true</td><td>Eindeutige ID des Produkts</td><td>Alle Modi</td></tr><tr><td>items.name</td><td>true</td><td>Artikelname</td><td>true</td><td>Name des Produkts</td><td>Alle Modi</td></tr><tr><td>items.quantity</td><td>true</td><td>Bestandsänderung durch Wareneingang/-ausgang/Anpassung/Verschiebung</td><td>true</td><td>Wareneingangs-/Warenausgangs-/Anpassungs-/Verschiebungsmenge des betreffenden Produkts</td><td>Alle Modi</td></tr><tr><td>items.deleted</td><td>true</td><td>Ob der Artikel gelöscht ist</td><td>true</td><td>Ob das Produkt gelöscht ist</td><td></td></tr><tr><td>items.from_location_new_stock_level</td><td>false</td><td>Der Lagerbestand am Quellort nach der Transaktion</td><td>false</td><td></td><td></td></tr><tr><td>items.to_location_new_stock_level</td><td>true</td><td>Der Lagerbestand am Zielort nach der Transaktion</td><td>false</td><td></td><td></td></tr><tr><td>transaction_time</td><td>true</td><td>Zeit der Transaktion (z. B. Zeitpunkt des Warenein-/ausgangs)</td><td>false</td><td></td><td></td></tr><tr><td>created_at</td><td>true</td><td>Der Zeitpunkt, zu dem die Transaktion erstellt wurde</td><td>false</td><td></td><td></td></tr><tr><td>created_by</td><td>true</td><td>Mitglied, das die Transaktion erstellt hat</td><td>false</td><td></td><td></td></tr><tr><td>created_by.id</td><td>true</td><td>Eindeutige ID des Mitglieds</td><td>false</td><td></td><td></td></tr><tr><td>created_by.name</td><td>true</td><td>Name des Mitglieds</td><td>false</td><td></td><td></td></tr><tr><td>created_by.deleted</td><td>true</td><td>Ob das Mitglied gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>count_of_items</td><td>true</td><td>Anzahl der Artikel</td><td>false</td><td></td><td></td></tr><tr><td>total_quantity</td><td>true</td><td>Gesamtmenge der Bestandsänderung</td><td>false</td><td></td><td></td></tr><tr><td>url</td><td>true</td><td>URL-Adresse zum Anzeigen der Transaktionsdetailseite</td><td>false</td><td></td><td></td></tr><tr><td>memo</td><td>false</td><td>Notizen zur Transaktion</td><td>false</td><td></td><td></td></tr></tbody></table>

#### Beispiel für Webhook-Nutzlast – `Wareneingang` Ereignis

```json
{
  "id": 16160911,
  "type": "in",
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
    "deleted": false
  },
  "items": [
    {
      "id": 14277699,
      "name": "belif Cleansing Gel Oil Enriched",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 3
    },
    {
      "id": 14277698,
      "name": "belif Aqua Bomb Jelly Cleanser",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 5
    }
  ],
  "transaction_time": "2023-04-25T05:42:27.545Z",
  "created_at": "2023-08-14T05:14:29.499Z",
  "created_by": {
    "id": 201345,
    "name": "corp",
    "deleted": false
  },
  "count_of_items": 2,
  "total_quantity": 4,
  "url": "https://web.boxhero-app.com/team/149058/mode/0#/tx/16160911"
}
```

#### Beispiel für Webhook-Nutzlast – `Bestand verschieben` Ereignis

<pre class="language-json"><code class="lang-json">{
  "id": 3692714,
  "type": "move",
  "from_location": {
    "id": 52765,
    "name": "Warehouse 2",
    "deleted": false
  },
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
<strong>    "deleted": false
</strong>  },
  "items": [
    {
      "id": 14873303,
      "name": "Auto liner 3.5mm",
      "quantity": 1,
      "deleted": false,
      "from_location_new_stock_level": -1,
      "to_location_new_stock_level": 1
    }
  ],
  "transaction_time": "2025-04-25T05:42:27.545Z",
  "created_at": "2025-04-25T05:42:27.545Z",
  "created_by": {
    "id": 176829,
    "name": "Tony Lee",
    "deleted": false
  },
  "count_of_items": 1,
  "total_quantity": 1,
  "url": "https://web.boxhero-app.com/team/150581/mode/2#/ltx/3692714"
}
</code></pre>

### `txs/edit`

Wird gesendet, wenn eine vorhandene Lagertransaktion (Wareneingang / Warenausgang / Bestand anpassen / Bestand verschieben) **bearbeitet**.

<table><thead><tr><th>Feld</th><th width="100" data-type="checkbox">Erforderlich</th><th>Beschreibung</th><th data-hidden data-type="checkbox">Obligatorisch</th><th data-hidden>Beschreibung</th><th data-hidden>Team-Modus</th></tr></thead><tbody><tr><td>id</td><td>true</td><td>Eindeutige ID der Transaktion</td><td>true</td><td>Eindeutige ID des Verlaufs</td><td>Gesamt</td></tr><tr><td>type</td><td>true</td><td>Transaktionstyp<br>(in, out, adjust, move)</td><td>true</td><td><p>Typ des Verlaufs.</p><ul><li>Wareneingang : in</li><li>Warenausgang : out</li><li>Anpassung : adjust</li><li>Verschieben : move</li></ul></td><td>Gesamt</td></tr><tr><td>Partner</td><td>false</td><td>Partner</td><td>false</td><td></td><td></td></tr><tr><td>partner.id</td><td>false</td><td>Eindeutige ID des Partners</td><td>false</td><td></td><td></td></tr><tr><td>partner.name</td><td>false</td><td>Name des Partners</td><td>false</td><td></td><td></td></tr><tr><td>partner.deleted</td><td>false</td><td>Ob der Partner gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>from_location</td><td>false</td><td>Quellort</td><td>false</td><td></td><td></td></tr><tr><td>from_location.id</td><td>false</td><td>Eindeutige ID des Quellorts</td><td>false</td><td></td><td></td></tr><tr><td>from_location.name</td><td>false</td><td>Name des Quellorts</td><td>false</td><td></td><td></td></tr><tr><td>from_location.deleted</td><td>false</td><td>Ob der Quellort gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>to_location</td><td>true</td><td>Zielort</td><td>false</td><td></td><td></td></tr><tr><td>to_location.id</td><td>true</td><td>Eindeutige ID des Zielorts</td><td>false</td><td></td><td></td></tr><tr><td>to_location.name</td><td>true</td><td>Name des Zielorts</td><td>false</td><td></td><td></td></tr><tr><td>to_location.deleted</td><td>true</td><td>Ob der Zielort gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>items</td><td>true</td><td>Positionen in der Transaktion</td><td>true</td><td>Artikelbezogene Positionen, aus denen der Verlauf besteht</td><td>Alle Modi</td></tr><tr><td>items.id</td><td>true</td><td>Eindeutige ID des Artikels</td><td>true</td><td>Eindeutige ID des Produkts</td><td>Alle Modi</td></tr><tr><td>items.name</td><td>true</td><td>Artikelname</td><td>true</td><td>Name des Produkts</td><td>Alle Modi</td></tr><tr><td>items.quantity</td><td>true</td><td>Mengenänderung aufgrund der Transaktion (in/out/adjust/move)</td><td>true</td><td>Wareneingangs-/Warenausgangs-/Anpassungs-/Verschiebungsmenge des betreffenden Produkts</td><td>Alle Modi</td></tr><tr><td>items.deleted</td><td>true</td><td>Ob der Artikel gelöscht ist</td><td>true</td><td>Ob das Produkt gelöscht ist</td><td></td></tr><tr><td>items.from_location_new_stock_level</td><td>false</td><td>Der Lagerbestand am Quellort nach der Transaktion</td><td>false</td><td></td><td></td></tr><tr><td>items.to_location_new_stock_level</td><td>true</td><td>Der Lagerbestand am Zielort nach der Transaktion</td><td>false</td><td></td><td></td></tr><tr><td>transaction_time</td><td>true</td><td>Zeit der Transaktion (z. B. Zeitpunkt des Warenein-/ausgangs)</td><td>false</td><td></td><td></td></tr><tr><td>created_at</td><td>true</td><td>Der Zeitpunkt, zu dem die Transaktion erstellt wurde</td><td>false</td><td></td><td></td></tr><tr><td>created_by</td><td>true</td><td>Mitglied, das die Transaktion erstellt hat</td><td>false</td><td></td><td></td></tr><tr><td>created_by.id</td><td>true</td><td>Eindeutige ID des Mitglieds</td><td>false</td><td></td><td></td></tr><tr><td>created_by.name</td><td>true</td><td>Name des Mitglieds</td><td>false</td><td></td><td></td></tr><tr><td>created_by.deleted</td><td>true</td><td>Ob das Mitglied gelöscht ist</td><td>false</td><td></td><td></td></tr><tr><td>count_of_items</td><td>true</td><td>Anzahl der Artikel</td><td>false</td><td></td><td></td></tr><tr><td>total_quantity</td><td>true</td><td>Gesamtmenge der Bestandsänderung</td><td>false</td><td></td><td></td></tr><tr><td>url</td><td>true</td><td>URL-Adresse zum Anzeigen der Transaktionsdetailseite</td><td>false</td><td></td><td></td></tr><tr><td>memo</td><td>false</td><td>Notizen zur Transaktion</td><td>false</td><td></td><td></td></tr><tr><td>revision</td><td>true</td><td>Aktuelle Versionsnummer der Transaktion, beginnend bei 1</td><td>false</td><td></td><td></td></tr></tbody></table>

#### Beispiel für Webhook-Nutzlast – Bearbeitet `Wareneingang` Transaktions

```json
{
  "id": 16160911,
  "type": "in",
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
    "deleted": false
  },
  "items": [
    {
      "id": 14277699,
      "name": "belif Cleansing Gel Oil Enriched",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 3
    },
    {
      "id": 14277698,
      "name": "belif Aqua Bomb Jelly Cleanser",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 5
    }
  ],
  "transaction_time": "2023-04-25T05:42:27.545Z",
  "created_at": "2023-08-14T05:14:29.499Z",
  "created_by": {
    "id": 201345,
    "name": "corp",
    "deleted": false
  },
  "count_of_items": 2,
  "total_quantity": 4,
  "url": "https://web.boxhero-app.com/team/149058/mode/0#/tx/16160911"
}

```

#### Beispiel für Webhook-Nutzlast – Bearbeitet `Bestand verschieben` Transaktions

```json
{
  "id": 3692714,
  "type": "move",
  "from_location": {
    "id": 52765,
    "name": "Warehouse 2",
    "deleted": false
  },
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
    "deleted": false
  },
  "items": [
    {
      "id": 14873303,
      "name": "Auto liner 3.5mm",
      "quantity": 1,
      "deleted": false,
      "from_location_new_stock_level": -1,
      "to_location_new_stock_level": 1
    }
  ],
  "transaction_time": "2023-04-25T05:42:27.545Z",
  "created_at": "2023-04-25T05:42:27.545Z",
  "created_by": {
    "id": 176829,
    "name": "Joy Kim",
    "deleted": false
  },
  "count_of_items": 1,
  "total_quantity": 1,
  "url": "https://web.boxhero-app.com/team/150581/mode/2#/ltx/3692714"
}

```

### `txs/delete`

Wird gesendet, wenn eine Lagertransaktion **gelöscht**.

| Feld     | Beschreibung                                             |
| -------- | -------------------------------------------------------- |
| id       | Eindeutige ID der Transaktion                            |
| revision | Aktuelle Versionsnummer der Transaktion, beginnend bei 1 |

#### Beispiel für Webhook-Nutzlast – Gelöschte Transaktion

```json
/{
  "id": 27036740,
  "revision": 2
}
```

### `item/new`

Wird gesendet, wenn ein neuer Artikel zum Lagerbestand des Teams hinzugefügt wird.

{% hint style="warning" %}
**Hinweis**: Dieses Ereignis wird *keine* ausgelöst, wenn die <mark style="color:blaue;">**`Funktion „Artikelvarianten hinzufügen“`**</mark> verwendet wird oder Artikel über <mark style="color:blaue;">**`Excel importieren`**</mark>.
{% endhint %}

<table><thead><tr><th width="318">Feld</th><th>Beschreibung</th><th data-hidden data-type="checkbox">Obligatorisch</th><th data-hidden>Beschreibung</th><th data-hidden>Team-Modus</th></tr></thead><tbody><tr><td>id</td><td>Artikel-ID</td><td>true</td><td>Eindeutige ID des Verlaufs</td><td>Gesamt</td></tr><tr><td>name</td><td>Artikelname</td><td>true</td><td><p>Typ des Verlaufs.</p><ul><li>Wareneingang : in</li><li>Warenausgang : out</li><li>Anpassung : adjust</li><li>Verschieben : move</li></ul></td><td>Gesamt</td></tr><tr><td>sku</td><td>SKU</td><td>false</td><td></td><td></td></tr><tr><td>Barcode</td><td>Barcode</td><td>false</td><td></td><td></td></tr><tr><td>photo_url</td><td>Foto-URL</td><td>false</td><td></td><td></td></tr><tr><td>cost</td><td>Kosten</td><td>false</td><td></td><td></td></tr><tr><td>price</td><td>Preis</td><td>false</td><td></td><td></td></tr><tr><td>attrs</td><td>Attribute</td><td>false</td><td></td><td></td></tr></tbody></table>

#### **Beispiel-Nutzlast – Artikel erstellt**

```json
{
  "id": 26122826,
  "name": "belif Peat Miracle Revital Cream",
  "sku": "SKU-YH2361KI",
  "barcode": "2002074321218",
  "photo_url": "https://d3l9wd8kivvlqy.cloudfront.net/ap-northeast-2/image-up-ap-northeast-2/30b0cc84-601d-493d-87fd-b7e8b5825601",
  "cost": "50000",
  "price": "65000",
  "attrs": [
    {
      "id": 413101,
      "name": "Category",
      "type": "text",
      "value": "Foundation"
    },
    {
      "id": 459264,
      "name": "Expiration date",
      "type": "date",
      "value": "2027-08-07"
    },
    {
      "id": 668272,
      "name": "Safety Stock",
      "type": "number",
      "value": 33
    }
  ]
}
```

### `item/edit`

Wird gesendet, wenn ein vorhandener Artikel bearbeitet wird.

{% hint style="warning" %}
**Hinweis**: Dieses Ereignis wird *keine* ausgelöst *f*ür Massenbearbeitungen über <mark style="color:blaue;">**`Datenzentrale`**</mark>**&#x20;>&#x20;**<mark style="color:blaue;">**`Artikel`**</mark> oder über die <mark style="color:blaue;">**`Excel importieren`**</mark> Funktion.
{% endhint %}

<table><thead><tr><th width="318">Feld</th><th>Beschreibung</th><th data-hidden data-type="checkbox">Obligatorisch</th><th data-hidden>Beschreibung</th><th data-hidden>Team-Modus</th></tr></thead><tbody><tr><td>id</td><td>Artikel-ID</td><td>true</td><td>Eindeutige ID des Verlaufs</td><td>Gesamt</td></tr><tr><td>name</td><td>Artikelname</td><td>true</td><td><p>Typ des Verlaufs.</p><ul><li>Wareneingang : in</li><li>Warenausgang : out</li><li>Anpassung : adjust</li><li>Verschieben : move</li></ul></td><td>Gesamt</td></tr><tr><td>sku</td><td>SKU</td><td>false</td><td></td><td></td></tr><tr><td>Barcode</td><td>Barcode</td><td>false</td><td></td><td></td></tr><tr><td>photo_url</td><td>Foto-URL</td><td>false</td><td></td><td></td></tr><tr><td>cost</td><td>Kosten</td><td>false</td><td></td><td></td></tr><tr><td>price</td><td>Preis</td><td>false</td><td></td><td></td></tr><tr><td>attrs</td><td>Attribute</td><td>false</td><td></td><td></td></tr></tbody></table>

#### **Beispiel-Nutzlast – Artikel aktualisiert**

```json
{
  "id": 26122826,
  "name": "belif Peat Miracle Revital Cream",
  "sku": "SKU-YH2361KI",
  "barcode": "2002074321218",
  "photo_url": "https://d3l9wd8kivvlqy.cloudfront.net/ap-northeast-2/image-up-ap-northeast-2/30b0cc84-601d-493d-87fd-b7e8b5825601",
  "cost": "50000",
  "price": "65000",
  "attrs": [
    {
      "id": 413101,
      "name": "Category",
      "type": "text",
      "value": "Foundation"
    },
    {
      "id": 459264,
      "name": "Expiration date",
      "type": "date",
      "value": "2027-08-07"
    },
    {
      "id": 668272,
      "name": "Safety Stock",
      "type": "number",
      "value": 33
    }
  ]
}
```

### `item/delete`

Wird gesendet, wenn ein Artikel aus dem Lagerbestand des Teams gelöscht wird.

{% hint style="warning" %}
**Hinweis**: Dieses Ereignis wird *keine* ausgelöst für Massenlöschungen über <mark style="color:blaue;">**`Datenzentrale`**</mark>**&#x20;>&#x20;**<mark style="color:blaue;">**`Artikel`**</mark>.
{% endhint %}

<table><thead><tr><th width="318">Feld</th><th>Beschreibung</th><th data-hidden data-type="checkbox">Obligatorisch</th><th data-hidden>Beschreibung</th><th data-hidden>Team-Modus</th></tr></thead><tbody><tr><td>id</td><td>Artikel-ID</td><td>true</td><td>Eindeutige ID des Verlaufs</td><td>Gesamt</td></tr></tbody></table>

#### Beispiel-Nutzlast **– Artikel gelöscht**

```json
{
  "id": 26122826
}
```
