> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rxscale.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bestellerfassung

> Bestellungen aus Ihrem eigenen Vertriebskanal über die Management API anlegen und verwalten

# Bestellerfassung

Wenn Ihre Organisation nicht über Shopify verkauft, können Sie mit der Bestellerfassung
Bestellungen direkt aus Ihrem eigenen Vertriebskanal in RxScale einspielen -- Ihre eigene Website,
Ihr Kassensystem oder jedes andere führende System. Alles, was danach passiert (Rezepte,
Apotheken-Routing, Fulfillment), funktioniert genau wie bei einer Shopify-Bestellung; nur die Art,
wie die Bestellung in RxScale gelangt, unterscheidet sich.

<Note>
  Dies ist für **Ihre eigene** Integration gedacht, die Bestellungen in **Ihre eigene** Organisation
  einspielt. Wenn Sie als Telemedizin-Anbieter in einen der Shops eines RxScale-Kunden integrieren,
  lesen Sie stattdessen die [Public API](/de/api-reference/public/orders).
</Note>

## Bevor Sie beginnen

* **Erforderliche Berechtigung:** Jeder Endpoint auf dieser Seite erfordert `order:write` auf Ihrem
  API-Schlüssel.
* **Ein Shop muss zuerst existieren.** Bestellungen werden gegen einen `shop_identifier` angelegt,
  den RxScale bei der Einrichtung der Integration für Ihre Organisation konfiguriert. Wenden Sie
  sich an Ihren RxScale-Ansprechpartner, wenn Sie noch keinen haben.
* **Der Bestellstatus für Ihre eigenen Kunden liegt an anderer Stelle.** Diese Seite behandelt nur
  das Einspielen von Bestellungen. Um den Status einer Bestellung während der Rezeptprüfung und der
  Apotheken-Abwicklung zu verfolgen, verwenden Sie
  [`GET /v1/management/orders`](/de/api-reference/management/orders) -- die bereits auf der Seite
  Bestellungen dokumentierten Lese-Endpoints.

## Vier Operationen

| Methode | Endpoint                                                                    | Wirkung                                                                                        |
| ------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `POST`  | `/orders`                                                                   | Bestellung anlegen, einschließlich mindestens eines Fulfillment-Auftrags mit seinen Positionen |
| `POST`  | `/orders/{order_external_id}/fulfillments`                                  | **Neuen** Fulfillment-Auftrag zu einer bestehenden Bestellung hinzufügen                       |
| `PATCH` | `/orders/{order_external_id}`                                               | Positionsfreie Bestellfelder aktualisieren (Adressen, Priorität, Kunden-E-Mail, Versandkosten) |
| `POST`  | `/orders/{order_external_id}/fulfillments/{fulfillment_external_id}/cancel` | Fulfillment-Auftrag stornieren, solange er noch stornierbar ist                                |

**Fulfillment-Aufträge sind unveränderlich.** Es gibt keinen Endpoint, um die Positionen eines
Fulfillment-Auftrags nach dessen Anlage zu ändern. Um zu ändern, was ausgeliefert wird, stornieren
Sie den Fulfillment-Auftrag und legen Sie einen neuen mit den korrigierten Positionen an -- dadurch
wird auch ein neues Rezept für die neuen Positionen angestoßen.

## Bestellung anlegen

```bash theme={null}
POST /v1/management/orders
```

**Erforderliche Berechtigung:** `order:write`

Legt eine Bestellung zusammen mit ihrem ersten Fulfillment-Auftrag an (oder mehreren gleichzeitig).
Die Anlage erfolgt **strikt einmalig pro `external_id`** -- siehe
[Wiederholungen und doppelte Anfragen](#wiederholungen-und-doppelte-anfragen) unten.

### Request Body

| Feld                | Typ                | Erforderlich | Beschreibung                                                                                                                                 |
| ------------------- | ------------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `shop_identifier`   | string             | Ja           | Der Identifier Ihres Shops, wie von RxScale konfiguriert                                                                                     |
| `external_id`       | string             | Ja           | Ihre eigene eindeutige ID für diese Bestellung. Das erneute Anlegen mit derselben `external_id` wird abgelehnt -- siehe unten                |
| `name`              | string             | Nein         | Ein menschenlesbarer Bestellname/-nummer, im RxScale-Backoffice angezeigt. Standardmäßig `external_id`                                       |
| `customer`          | object             | Ja           | Siehe [Customer-Objekt](#customer-objekt)                                                                                                    |
| `delivery_address`  | object             | Ja           | Siehe [Adress-Objekt](#adress-objekt)                                                                                                        |
| `invoice_address`   | object             | Nein         | Siehe [Adress-Objekt](#adress-objekt). Standardmäßig `delivery_address`, wenn ausgelassen                                                    |
| `shipping_cost`     | object             | Nein         | Siehe [Money-Objekt](#money-objekt)                                                                                                          |
| `shipping_methods`  | Array von Strings  | Nein         | Freitext-Versandmethoden-Labels (z. B. `["standard"]`)                                                                                       |
| `priority`          | integer            | Nein         | Ein Prioritäts-Hinweis für die interne Warteschlange                                                                                         |
| `on_hold`           | boolean            | Nein         | Bei `true` wird die Bestellung angehalten angelegt und geht nicht automatisch an einen Arzt oder eine Apotheke weiter. Standardmäßig `false` |
| `hold_comment`      | string             | Nein         | Ein Hinweis, warum die Bestellung angehalten ist. Nur sinnvoll zusammen mit `on_hold: true`                                                  |
| `doctor_uid`        | string             | Nein         | Einen bestimmten RxScale-Arzt für die Prüfung der Rezepte der Bestellung vorab zuweisen                                                      |
| `pharmacy_uid`      | string             | Nein         | Eine bestimmte Apotheke für die gesamte Bestellung vorab zuweisen                                                                            |
| `pharmacy_email`    | string             | Nein         | Eine zusammen mit `pharmacy_uid` zu benachrichtigende E-Mail-Adresse                                                                         |
| `referral_scan_uid` | string             | Nein         | Zuordnungsreferenz für einen Referral-Link-Scan, der zu dieser Bestellung geführt hat                                                        |
| `fulfillments`      | Array von Objekten | Ja           | Mindestens eines. Siehe [Fulfillment-Objekt](#fulfillment-objekt)                                                                            |

#### Customer-Objekt

| Feld    | Typ    | Erforderlich | Beschreibung                                                                                                                         |
| ------- | ------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| `id`    | string | Ja           | Ihre eigene stabile ID für diesen Kunden. Wird über Bestellungen hinweg wiederverwendet, um einen wiederkehrenden Kunden zu erkennen |
| `email` | string | Nein         | Die E-Mail-Adresse des Kunden                                                                                                        |

#### Adress-Objekt

| Feld                 | Typ    | Erforderlich | Beschreibung                            |
| -------------------- | ------ | ------------ | --------------------------------------- |
| `first_name`         | string | Ja           |                                         |
| `last_name`          | string | Ja           |                                         |
| `street`             | string | Ja           |                                         |
| `house_number`       | string | Ja           |                                         |
| `zip_code`           | string | Ja           |                                         |
| `city`               | string | Ja           |                                         |
| `country`            | string | Ja           | 2-stelliger ISO-Ländercode (z. B. `DE`) |
| `additional_address` | string | Nein         | Wohnungsnummer, c/o-Zeile usw.          |
| `province`           | string | Nein         | Bundesland/Region, falls zutreffend     |

#### Money-Objekt

RxScale akzeptiert niemals Dezimal- oder Gleitkommabeträge -- Beträge sind immer **Ganzzahlen in
der kleinsten Währungseinheit** (Cent bei EUR), dieselbe Konvention wie im gesamten System.

| Feld       | Typ     | Erforderlich | Beschreibung                                          |
| ---------- | ------- | ------------ | ----------------------------------------------------- |
| `amount`   | integer | Ja           | Betrag in kleinster Einheit, z. B. `1998` für 19,98 € |
| `currency` | string  | Ja           | 3-stelliger ISO-Währungscode (z. B. `EUR`)            |

#### Fulfillment-Objekt

Ein Fulfillment-Auftrag ist eine Gruppe von Positionen, die gemeinsam versendet und verschrieben
wird. Die meisten Bestellungen haben einen; eine Bestellung mit Positionen aus verschiedenen
Apotheken oder mit unterschiedlichem Bearbeitungsstand (z. B. eine Position versandbereit, eine
noch auf ein Rezept wartend) hat mehrere.

| Feld                       | Typ                | Erforderlich | Beschreibung                                                                                                                                                           |
| -------------------------- | ------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `external_id`              | string             | Ja           | Ihre eigene eindeutige ID für diesen Fulfillment-Auftrag                                                                                                               |
| `items`                    | Array von Objekten | Ja           | Mindestens eines. Siehe [Item-Objekt](#item-objekt)                                                                                                                    |
| `destination_pharmacy_uid` | string             | Nein         | Diesen Fulfillment-Auftrag an eine bestimmte Apotheke leiten, unter Umgehung der automatischen Apothekenauswahl                                                        |
| `location_id`              | string             | Nein         | Eine alternative Möglichkeit, das Apotheken-Routing zu steuern, wenn Ihre Integration auf von RxScale konfigurierte Standorte statt direkt auf Apotheken-UIDs abbildet |
| `prescriptions`            | Array von Objekten | Nein         | Signierte PDFs zum direkten Hochladen. Siehe [Rezept verknüpfen](#rezept-verknüpfen)                                                                                   |

#### Item-Objekt

| Feld                     | Typ     | Erforderlich | Beschreibung                                                                                                                                                                                                                                         |
| ------------------------ | ------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `external_id`            | string  | Ja           | Ihre eigene eindeutige ID für diese Position, eindeutig über die gesamte Bestellung hinweg (nicht nur diesen Fulfillment-Auftrag)                                                                                                                    |
| `sku_reference`          | string  | Ja           | Der Varianten-Identifier der SKU in Ihrem Katalog, wie in RxScale konfiguriert                                                                                                                                                                       |
| `product_reference`      | string  | Nein         | Der Produkt-Identifier in Ihrem Katalog. Erforderlich, wenn `sku_reference` allein kein Produkt in der Konfiguration Ihres Shops eindeutig auflöst -- fragen Sie Ihren RxScale-Ansprechpartner, wenn Sie unsicher sind, ob Ihr Katalog dies benötigt |
| `quantity`               | integer | Ja           | Muss mindestens `1` sein                                                                                                                                                                                                                             |
| `total_paid`             | object  | Ja           | Siehe [Money-Objekt](#money-objekt). Dies ist der vom Kunden für diese Position gezahlte Betrag -- RxScale verwaltet die Produktidentität, Sie die Preiswahrheit                                                                                     |
| `prescription_uid`       | string  | Nein         | Verknüpfung zu einem bestehenden signierten Rezept. Siehe [Rezept verknüpfen](#rezept-verknüpfen)                                                                                                                                                    |
| `prescription_reference` | string  | Nein         | Verknüpfung zu einem direkt in diesem Fulfillment-Auftrag hochgeladenen PDF. Siehe [Rezept verknüpfen](#rezept-verknüpfen)                                                                                                                           |
| `anamnesis_uid`          | string  | Nein         | Verknüpfung zu einer ausgefüllten Fragebogenantwort, zur Prüfung durch einen RxScale-Arzt. Siehe [Rezept verknüpfen](#rezept-verknüpfen)                                                                                                             |
| `fulfillment_method`     | string  | Nein         | Ein Hinweis zur Auswahl der Versandart (z. B. Versand vs. Abholung), wenn Ihr Shop mehr als eine konfiguriert hat                                                                                                                                    |

### Rezept verknüpfen

Eine Position benötigt ein Rezept, sobald ihr Produkt eines erfordert. Es gibt vier Wege, dies zu
erfüllen, und jede Position nutzt genau einen davon:

<AccordionGroup>
  <Accordion title="Freiverkäuflich -- kein Rezept nötig">
    Lassen Sie `prescription_uid`, `prescription_reference` und `anamnesis_uid` alle unbesetzt. Nur
    gültig für Produkte in Ihrem Katalog, die als nicht rezeptpflichtig konfiguriert sind.
  </Accordion>

  <Accordion title="An einen RxScale-Arzt senden">
    Setzen Sie `anamnesis_uid` auf die UID einer für diesen Kunden ausgefüllten Fragebogenantwort.
    Ein RxScale-Arzt prüft sie und stellt das Rezept aus; die Bestellung wechselt bis dahin in den
    Status `waiting for doctor`.
  </Accordion>

  <Accordion title="Ein bereits vorhandenes Rezept referenzieren">
    Setzen Sie `prescription_uid` auf die UID eines bereits **signierten** Rezepts -- zum Beispiel
    eines, das Ihre Integration zuvor über einen anderen RxScale-Ablauf erhalten hat. Das Rezept
    muss bereits Ihrer Organisation gehören.
  </Accordion>

  <Accordion title="Signiertes PDF direkt hochladen">
    Fügen Sie dem eigenen `prescriptions`-Array des Fulfillment-Auftrags einen Eintrag hinzu:
    `{"id": "your-reference", "pdf_base64": "..."}`. Das PDF wird als Teil der Anfrage auf eine
    qualifizierte elektronische Signatur (QES) geprüft -- ein unsigniertes oder ungültiges PDF lehnt
    die gesamte Bestellung ab, nichts wird angelegt. Setzen Sie in der Position
    `prescription_reference` auf dieselbe `id`, die Sie in `prescriptions` verwendet haben. RxScale
    wandelt den Upload automatisch in ein Rezept um und verknüpft es mit der Position; ab diesem
    Zeitpunkt verhält es sich genau wie die vorherige Option.

    ```json theme={null}
    {
      "external_id": "ff-1",
      "items": [
        {
          "external_id": "line-1",
          "sku_reference": "variant-123",
          "product_reference": "prod-123",
          "quantity": 1,
          "total_paid": { "amount": 4500, "currency": "EUR" },
          "prescription_reference": "rx-upload-1"
        }
      ],
      "prescriptions": [
        { "id": "rx-upload-1", "pdf_base64": "JVBERi0xLjQK..." }
      ]
    }
    ```
  </Accordion>
</AccordionGroup>

<Warning>
  Eine Position kann nicht gleichzeitig `prescription_uid` und `prescription_reference` setzen --
  wählen Sie eines. Eine `prescription_reference`, die keinen Eintrag im eigenen
  `prescriptions`-Array dieses Fulfillment-Auftrags benennt, wird abgelehnt, bevor irgendetwas
  angelegt wird.
</Warning>

### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/orders" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "shop_identifier": "my-shop",
    "external_id": "order-10231",
    "customer": {
      "id": "cust-4471",
      "email": "patient@example.com"
    },
    "delivery_address": {
      "first_name": "Ada",
      "last_name": "Lovelace",
      "street": "Hauptstraße",
      "house_number": "1",
      "zip_code": "10115",
      "city": "Berlin",
      "country": "DE"
    },
    "fulfillments": [
      {
        "external_id": "ff-1",
        "items": [
          {
            "external_id": "line-1",
            "sku_reference": "variant-123",
            "product_reference": "prod-123",
            "quantity": 2,
            "total_paid": { "amount": 1998, "currency": "EUR" }
          }
        ]
      }
    ]
  }'
```

### Antwort (201 Created)

```json theme={null}
{
  "order_uid": "ord-abc123",
  "external_id": "order-10231"
}
```

| Feld          | Typ    | Beschreibung                                                                                                                                                                                                 |
| ------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `order_uid`   | string | Die von RxScale vergebene Bestell-UID. Verwenden Sie sie mit [`GET /v1/management/orders/{order_uid}`](/de/api-reference/management/orders#bestelldetails-abrufen), um die Bestellung anschließend zu prüfen |
| `external_id` | string | Spiegelt die von Ihnen gesendete `external_id`                                                                                                                                                               |

### Fehlerantworten

| Status | Code                   | Beschreibung                                                                                                                                                                                                                                                        |
| ------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | `sku_not_found`        | Eine oder mehrere Positionen referenzieren eine `sku_reference`/`product_reference`-Kombination, die nicht in Ihrem Katalog ist. Die Antwort enthält zusätzlich `missing_item_ids`, die `external_id` jeder betroffenen Position. Es wird keine Bestellung angelegt |
| `400`  | *(keiner)*             | Der Request Body hat die Validierung nicht bestanden (fehlendes/ungültiges Feld, ein ungültiges eingebettetes PDF, eine `prescription_reference`, die keinen Upload benennt usw.). Das `error`-Feld der Antwort beschreibt, was fehlgeschlagen ist                  |
| `401`  | *(keiner)*             | Fehlender oder ungültiger API-Schlüssel                                                                                                                                                                                                                             |
| `403`  | *(keiner)*             | Fehlende `order:write`-Berechtigung                                                                                                                                                                                                                                 |
| `404`  | *(keiner)*             | Kein Shop für `shop_identifier` in Ihrer Organisation gefunden                                                                                                                                                                                                      |
| `409`  | `order_already_exists` | Eine Bestellung mit dieser `external_id` existiert bereits. Die Antwort enthält die `order_uid` der bestehenden Bestellung -- siehe [Wiederholungen und doppelte Anfragen](#wiederholungen-und-doppelte-anfragen)                                                   |

<Note>
  Wenn eine Anfrage abgelehnt wird, **wird nichts angelegt** -- weder die Bestellung noch ein Rezept
  aus einem eingebetteten PDF, nichts. Die `external_id` bleibt frei für einen erneuten Versuch mit
  einem korrigierten Request Body.
</Note>

### Wiederholungen und doppelte Anfragen

Die Anlage einer Bestellung erfolgt strikt einmalig pro `external_id`: Ein zweites `POST` mit
derselben `external_id` liefert immer `409` mit `code: "order_already_exists"`, selbst wenn die
Antwort auf die erste Anfrage Sie nie erreicht hat (Timeout, abgebrochene Verbindung). Die `409`-Antwort
enthält die `order_uid` der bestehenden Bestellung, sodass die Wiederherstellung nach einer verlorenen
Antwort keinen weiteren Aufruf braucht -- wiederholen Sie einfach denselben Request Body und lesen Sie
`order_uid` aus der Fehlerantwort:

```json theme={null}
{
  "code": "order_already_exists",
  "error": "Order order-10231 already exists for shop my-shop",
  "order_uid": "ord-abc123"
}
```

Alternativ steht dieselbe Information auch über eine Abfrage zur Verfügung:

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/orders?shop_identifier=my-shop&shop_order_external_id=order-10231" \
  -H "X-API-Key: your-api-key-here"
```

Dies ist derselbe [Bestellungen auflisten](/de/api-reference/management/orders#eine-bestimmte-shop-bestellung-nachschlagen)-Endpoint, der bereits auf der Seite Bestellungen dokumentiert ist, gefiltert auf höchstens ein Ergebnis.

## Fulfillment-Auftrag hinzufügen

```bash theme={null}
POST /v1/management/orders/{order_external_id}/fulfillments
```

<ParamField path="order_external_id" type="string" required>
  Ihre `external_id` für die bestehende Bestellung
</ParamField>

**Erforderliche Berechtigung:** `order:write`

Fügt einer bereits bestehenden Bestellung einen **neuen** Fulfillment-Auftrag (mit seinen
Positionen) hinzu. Der Request Body ist ein einzelnes [Fulfillment-Objekt](#fulfillment-objekt) --
nicht in eine Bestellung eingebettet. Verwenden Sie dies, wenn Positionen derselben Bestellung zu
unterschiedlichen Zeitpunkten verfügbar werden oder auf mehrere Apotheken aufgeteilt werden müssen.

Eine `external_id` eines Fulfillment-Auftrags, die auf dieser Bestellung bereits existiert, wird
abgelehnt: Fulfillment-Aufträge können nach ihrer Anlage nicht geändert, sondern nur storniert und
ersetzt werden.

### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/orders/order-10231/fulfillments" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "ff-2",
    "items": [
      {
        "external_id": "line-2",
        "sku_reference": "variant-456",
        "product_reference": "prod-456",
        "quantity": 1,
        "total_paid": { "amount": 2500, "currency": "EUR" }
      }
    ]
  }'
```

### Antwort (201 Created)

```json theme={null}
{
  "order_uid": "ord-abc123",
  "external_id": "ff-2"
}
```

### Fehlerantworten

| Status | Code                    | Beschreibung                                                                                                                                                                                                                                                                         |
| ------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `400`  | `sku_not_found`         | Eine oder mehrere Positionen referenzieren eine unbekannte SKU. `missing_item_ids` listet die betroffenen `external_id`s                                                                                                                                                             |
| `400`  | *(keiner)*              | Der Request Body hat die Validierung nicht bestanden                                                                                                                                                                                                                                 |
| `401`  | *(keiner)*              | Fehlender oder ungültiger API-Schlüssel                                                                                                                                                                                                                                              |
| `403`  | *(keiner)*              | Fehlende `order:write`-Berechtigung                                                                                                                                                                                                                                                  |
| `404`  | *(keiner)*              | Keine Bestellung für `external_id` in Ihrer Organisation gefunden                                                                                                                                                                                                                    |
| `409`  | `fulfillment_immutable` | Ein Fulfillment-Auftrag mit dieser `external_id` existiert auf der Bestellung bereits                                                                                                                                                                                                |
| `409`  | `order_not_updatable`   | Die Bestellung ist in einem Status, der keine neuen Fulfillment-Aufträge mehr zulässt (z. B. `waiting for pharmacy`). Eine **abgeschlossene** Bestellung ist die Ausnahme: Das Hinzufügen eines Fulfillment-Auftrags öffnet sie automatisch wieder, statt einen Fehler zurückzugeben |

## Bestellung aktualisieren

```bash theme={null}
PATCH /v1/management/orders/{order_external_id}
```

<ParamField path="order_external_id" type="string" required>
  Ihre `external_id` für die bestehende Bestellung
</ParamField>

**Erforderliche Berechtigung:** `order:write`

Aktualisiert bestellebenen-Felder, die nicht an Positionen gebunden sind. **Positionen werden hier
nie akzeptiert** -- sie kommen immer innerhalb eines Fulfillment-Auftrags (siehe
[Fulfillment-Auftrag hinzufügen](#fulfillment-auftrag-hinzufügen)); ein Request Body mit einem
`items`-Schlüssel wird abgelehnt.

### Request Body

Alle Felder sind optional; senden Sie nur, was Sie ändern möchten.

| Feld               | Typ     | Beschreibung                          |
| ------------------ | ------- | ------------------------------------- |
| `delivery_address` | object  | Siehe [Adress-Objekt](#adress-objekt) |
| `invoice_address`  | object  | Siehe [Adress-Objekt](#adress-objekt) |
| `priority`         | integer |                                       |
| `customer_email`   | string  |                                       |
| `shipping_cost`    | object  | Siehe [Money-Objekt](#money-objekt)   |

### Beispielanfrage

```bash theme={null}
curl -X PATCH "https://api.rxscale.com/v1/management/orders/order-10231" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "delivery_address": {
      "first_name": "Ada",
      "last_name": "Lovelace",
      "street": "Hauptstraße",
      "house_number": "2",
      "zip_code": "10115",
      "city": "Berlin",
      "country": "DE"
    }
  }'
```

### Antwort (200 OK)

```json theme={null}
{
  "status": "updated"
}
```

### Fehlerantworten

| Status | Code                  | Beschreibung                                                                                                                                                                                      |
| ------ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | *(keiner)*            | Der Request Body hat die Validierung nicht bestanden oder enthielt einen `items`-Schlüssel                                                                                                        |
| `401`  | *(keiner)*            | Fehlender oder ungültiger API-Schlüssel                                                                                                                                                           |
| `403`  | *(keiner)*            | Fehlende `order:write`-Berechtigung                                                                                                                                                               |
| `404`  | *(keiner)*            | Keine Bestellung für `external_id` in Ihrer Organisation gefunden                                                                                                                                 |
| `409`  | `order_not_updatable` | Die Bestellung ist in einem Status, der keine Aktualisierungen mehr zulässt (z. B. bereits abgeschlossen)                                                                                         |
| `409`  | `address_locked`      | Sie ändern `delivery_address` oder `invoice_address` bei einer Bestellung, die bereits einen aktiven Apothekenauftrag hat. Adressen werden gesperrt, sobald eine Apotheke den Versand vorbereitet |

## Fulfillment-Auftrag stornieren

```bash theme={null}
POST /v1/management/orders/{order_external_id}/fulfillments/{fulfillment_external_id}/cancel
```

<ParamField path="order_external_id" type="string" required>
  Ihre `external_id` für die Bestellung
</ParamField>

<ParamField path="fulfillment_external_id" type="string" required>
  Ihre `external_id` für den zu stornierenden Fulfillment-Auftrag
</ParamField>

**Erforderliche Berechtigung:** `order:write`

Storniert einen Fulfillment-Auftrag. Dies ist der einzige Weg, den Inhalt eines
Fulfillment-Auftrags zu ändern -- stornieren Sie ihn und
[fügen Sie einen neuen Fulfillment-Auftrag hinzu](#fulfillment-auftrag-hinzufügen) mit den
korrigierten Positionen.

<Warning>
  Eine Stornierung ist nur möglich, solange das Rezept des Fulfillment-Auftrags (sofern vorhanden)
  noch keinen endgültigen Status erreicht hat und solange keine Apotheke ihn aktiv bearbeitet. Sobald
  ein Arzt das Rezept signiert oder ablehnt oder eine Apotheke mit der Bearbeitung der Bestellung
  beginnt, wird die Stornierung abgelehnt.
</Warning>

### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/orders/order-10231/fulfillments/ff-2/cancel" \
  -H "X-API-Key: your-api-key-here"
```

### Antwort (200 OK)

```json theme={null}
{
  "status": "cancelled"
}
```

### Fehlerantworten

| Status | Code                                   | Beschreibung                                                                                                     |
| ------ | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `401`  | *(keiner)*                             | Fehlender oder ungültiger API-Schlüssel                                                                          |
| `403`  | *(keiner)*                             | Fehlende `order:write`-Berechtigung                                                                              |
| `404`  | *(keiner)*                             | Keine Bestellung oder kein Fulfillment-Auftrag für die angegebenen `external_id`s in Ihrer Organisation gefunden |
| `409`  | `prescription_already_finished`        | Das Rezept des Fulfillment-Auftrags ist bereits signiert oder abgelehnt und kann nicht mehr storniert werden     |
| `409`  | `fulfillment_locked_by_pharmacy_order` | Eine Apotheke bearbeitet diesen Fulfillment-Auftrag bereits aktiv                                                |

## Wo der Bestellstatus liegt

Diese Seite behandelt das Einspielen von Bestellungen **in** RxScale. Um eine Bestellung danach zu
verfolgen -- ihren Status, welches Rezept angehängt ist, welcher Apothekenauftrag angelegt wurde --
verwenden Sie [`GET /v1/management/orders`](/de/api-reference/management/orders) und
[`GET /v1/management/orders/{order_uid}`](/de/api-reference/management/orders#bestelldetails-abrufen),
bereits auf der Seite Bestellungen dokumentiert. Wenn Sie stattdessen als Telemedizin-Anbieter
Bestellungen verfolgen, die Sie über die Public API aufgegeben haben, liegt der Bestellstatus für
diesen Ablauf in der [Public API](/de/api-reference/public/orders) -- nicht hier.
