> ## 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.

# Listing-Anfragen

> Listing-Anfragen von Apotheken über die Management API auflisten, anzeigen, annehmen und ablehnen

# Listing-Anfragen

Apotheken können einen Shop bitten, ein Produkt aufzunehmen, das sie bereits
führen. Die Management API stellt den organisationsweiten Posteingang für diese
Anfragen bereit: auflisten, eingereichte Felder einsehen und eine Annahme oder
Ablehnung festhalten.

Annahme und Ablehnung **halten nur die Entscheidung fest**. Sie legen keine
Katalogzeilen an (`Product`, `SKU`, `ShopProduct`) und stoßen nichts an Shopify
oder WooCommerce an.

Alle Endpoints sind auf die Organisation beschränkt, der der API-Schlüssel
gehört. UIDs einer anderen Organisation werden als nicht gefunden behandelt.

Welche Felder eine Apotheke liefern muss, konfigurieren Sie in der
Admin-Oberfläche, nicht über diese API.

## Berechtigungen

Listing-Anfrage-Endpoints werden durch zwei Berechtigungen gesteuert:

* `listing_request:read` — erforderlich für alle Lese-Endpoints (`GET`).
* `listing_request:write` — erforderlich zum Annehmen oder Ablehnen.

Ein Schlüssel mit `listing_request:write` erhält nicht automatisch
`listing_request:read`; fügen Sie beide hinzu, wenn Sie lesen und schreiben
müssen. Kontaktieren Sie Ihren RxScale-Kundenbetreuer, um Berechtigungen
anzupassen.

Alle Anfragen authentifizieren sich mit dem Header `X-API-Key`. Siehe
[Authentifizierung](/de/authentication) für Details.

## Form der Anfrage

Es gibt **kein Top-Level-Feld `pzn`**. PZN ist ein gewöhnlicher Extras-Schlüssel:
ein Shop muss eine `pzn`-Extras-Anforderung konfigurieren, bevor eine Apotheke
eine PZN senden kann. Der Wert erscheint dann unter `extras.pzn` in der Antwort.

`price_indication` ist eine Ganzzahl in **Kleinsteinheiten** (Cent), analog zu
Apotheken-SKU-Preisen.

<Note>
  Attributfilter (`attr.*`) und PZN-Filter sind in v1 auf der Management API
  **nicht** verfügbar. Sie sind nur in der Admin-Oberfläche vorhanden. Filtern
  Sie hier nur mit `shop_uid`, `pharmacy_uid` und `status`.
</Note>

## Listing-Anfragen auflisten

```bash theme={null}
GET /v1/management/listing-requests
```

Gibt eine paginierte Liste der Listing-Anfragen der Organisation zurück.

**Erforderliche Berechtigung:** `listing_request:read`

<ParamField query="page" type="integer" default="0">
  Seitennummer (0-basiert)
</ParamField>

<ParamField query="limit" type="integer" default="50">
  Anzahl der Listing-Anfragen pro Seite
</ParamField>

<ParamField query="shop_uid" type="string">
  Nach Shop-UID filtern. Unbekannte Shops dieser Organisation liefern 404.
</ParamField>

<ParamField query="pharmacy_uid" type="string">
  Nach Apotheken-UID filtern
</ParamField>

<ParamField query="status" type="string">
  Nach Status filtern. Einer von `PENDING`, `ACCEPTED`, `DECLINED` oder
  `WITHDRAWN`.
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/listing-requests?page=0&limit=25&status=PENDING" \
  -H "X-API-Key: your-api-key-here"
```

#### Antwort

```json theme={null}
{
  "data": [
    {
      "uid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "shop_uid": "a8c829ca-de1a-4b5e-9f6d-c1957d28aa4a",
      "pharmacy_uid": "22c49130-90aa-4384-aff2-4551f227cab4",
      "product_name": "Ibuprofen 400mg",
      "price_indication": 1250,
      "additional_notes": null,
      "status": "PENDING",
      "decision_note": null,
      "decided_at": null,
      "decided_by_user_uid": null,
      "decided_by_identifier": null,
      "extras": {
        "pzn": {
          "value": "01234567",
          "value_normalized": "01234567",
          "field_requirement_uid": "3f17e567-77c2-49e1-9eb2-2d8d901a4bb7",
          "display_name": "PZN",
          "field_type": "TEXT"
        }
      }
    }
  ],
  "totalRegistries": 1,
  "totalPages": 1
}
```

## Listing-Anfrage abrufen

```bash theme={null}
GET /v1/management/listing-requests/{listing_request_uid}
```

**Erforderliche Berechtigung:** `listing_request:read`

<ParamField path="listing_request_uid" type="string" required>
  UID der Listing-Anfrage
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v1/management/listing-requests/7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -H "X-API-Key: your-api-key-here"
```

Eine fehlende UID oder eine UID einer anderen Organisation liefert `404`.

## Listing-Anfrage annehmen

```bash theme={null}
POST /v1/management/listing-requests/{listing_request_uid}/accept
```

Hält eine Annahme fest. Legt **keine** Katalogprodukte an und stößt nichts an
einen Storefront an.

**Erforderliche Berechtigung:** `listing_request:write`

<ParamField path="listing_request_uid" type="string" required>
  UID der Listing-Anfrage
</ParamField>

<ParamField body="decision_note" type="string">
  Optionale Notiz zur Entscheidung
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/listing-requests/7c9e6679-7425-40de-944b-e07fc1f90ae7/accept" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{"decision_note": "Wird intern gelistet"}'
```

Nur Anfragen mit Status `PENDING` können angenommen werden. Eine bereits
entschiedene Anfrage liefert `400`.

## Listing-Anfrage ablehnen

```bash theme={null}
POST /v1/management/listing-requests/{listing_request_uid}/decline
```

Hält eine Ablehnung fest.

**Erforderliche Berechtigung:** `listing_request:write`

<ParamField path="listing_request_uid" type="string" required>
  UID der Listing-Anfrage
</ParamField>

<ParamField body="decision_note" type="string">
  Optionale Notiz zur Entscheidung
</ParamField>

#### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v1/management/listing-requests/7c9e6679-7425-40de-944b-e07fc1f90ae7/decline" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{"decision_note": "Bereits unter einer anderen SKU gelistet"}'
```

Nur Anfragen mit Status `PENDING` können abgelehnt werden. Eine bereits
entschiedene Anfrage liefert `400`.
