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

# docnow24-Integration

> Produkt-Feed und Rezeptübermittlung für die Telemedizin-Plattform docnow24

# docnow24-Integration

docnow24 ist eine Telemedizin-Plattform. Diese Endpoints decken die beiden Integrationspunkte für Partner ab, die auf docnow24 laufen: einen **Produkt-Feed**, den Ihr Custom-Sync-Dienst abfragt, um Bestand, Verfügbarkeit und Preis zu spiegeln, sowie die **Rezeptübermittlung**, die nach Abschluss der digitalen (QES-)Signatur durch den Arzt verwendet wird.

## Authentifizierung

Authentifizieren Sie sich mit Ihrem API-Key über den Header `X-API-Key`, `X-RxScale-Authorization` oder `Authorization: Bearer <api-key>`. Details finden Sie unter [Authentifizierung](/de/authentication).

## Produkt-Feed

Rufen Sie den Katalog der SKUs ab, die Ihrem Anbieterkonto in einem Shop zugeordnet sind. Fragen Sie diesen Endpoint aus Ihrem Custom-Sync-Dienst ab, um Bestand, Verfügbarkeit und Preis zu spiegeln.

```bash theme={null}
GET /v2/public-api/products/{shop_identifier}/docnow24
```

<ParamField path="shop_identifier" type="string" required>
  Eindeutiger Bezeichner für den Shop
</ParamField>

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

<ParamField query="limit" type="integer" default="500">
  Ergebnisse pro Seite (max. 5000)
</ParamField>

<ParamField query="search" type="string">
  Zugeordnete Produkte nach Name filtern
</ParamField>

**Erforderliche Berechtigung:** `read_sku_single_telemedicine_provider`

<Note>
  Es werden nur SKUs berücksichtigt, die Ihrem Anbieterkonto zugeordnet und aktuell aktiv sind. Eine deaktivierte oder nicht mehr zugeordnete SKU verschwindet einfach aus dem Feed — sie wird niemals mit `stock: 0` gesendet.
</Note>

### Beispielanfrage

```bash theme={null}
curl -X GET "https://api.rxscale.com/v2/public-api/products/my-shop/docnow24?page=1&limit=500" \
  -H "X-API-Key: your-api-key-here"
```

### Antwort

```json theme={null}
[
  {
    "flowzUrl": "partner-sku-456",
    "stock": 42,
    "price": 1299,
    "productId": "sku-456"
  },
  {
    "flowzUrl": "partner-sku-789",
    "stock": 7,
    "price": 1999,
    "productId": "sku-789"
  }
]
```

Die Antwort ist ein einfaches JSON-Array (keine Paginierungshülle) — eine Zeile pro SKU, die Ihrem Anbieterkonto in diesem Shop zugeordnet ist.

### Antwortfelder

| Feld        | Typ     | Beschreibung                                                                                                                             |
| ----------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `flowzUrl`  | string  | Ihre Produkt-ID für diese SKU. Konfigurieren Sie den `flowzUrl`-Schlüssel Ihres Custom Sync so, dass er diesen Wert liest                |
| `stock`     | integer | Physischer Bestand, aggregiert über alle mit dem Shop verknüpften Apotheken. Bereits gehaltene Reservierungen werden **nicht** abgezogen |
| `price`     | integer | Preis in **Euro-Cent**                                                                                                                   |
| `productId` | string  | RxScale-SKU-UID                                                                                                                          |

<Warning>
  `price` ist eine ganze Zahl in Euro-Cent (zum Beispiel bedeutet `1299` 12,99 €). Die in Ihrem Custom Sync eingebaute Transformation "Cent → Euro (÷100)" muss beim Mapping dieses Feldes angewendet werden — speichern Sie die rohe Ganzzahl nicht als Euro-Betrag.
</Warning>

### Feldzuordnung im Backoffice

Konfigurieren Sie Ihren Custom Sync mit dieser Zuordnung:

| Unser Feld | Ihr Zielfeld           | Transformation     |
| ---------- | ---------------------- | ------------------ |
| `flowzUrl` | `flowzUrl` (Schlüssel) | Keine              |
| `stock`    | `stockCount`           | Ganzzahl, 1:1      |
| `price`    | `priceGross`           | Cent → Euro (÷100) |

Wir senden kein `active`-Feld. Leiten Sie die Verfügbarkeit auf Ihrer Seite aus `stockCount > 0` ab.

### Fehlerantworten

| Statuscode | Beschreibung                                                                                              |
| ---------- | --------------------------------------------------------------------------------------------------------- |
| `400`      | Ungültiger `page`- oder `limit`-Wert, oder der API-Key ist nicht mit einem Telemedizin-Anbieter verknüpft |
| `404`      | Shop nicht gefunden                                                                                       |

## Rezeptübermittlung

Übermitteln Sie ein signiertes Rezept mit den zugehörigen Bestelldaten, nachdem der Arzt die QES-Signatur abgeschlossen hat. RxScale erstellt den Checkout und sendet dem Patienten eine Shopify-Checkout-Anfrage, sofern `prepaid` nicht `1` ist.

```bash theme={null}
POST /v2/public-api/prescriptions/{shop_identifier}/docnow24
```

<ParamField path="shop_identifier" type="string" required>
  Eindeutiger Bezeichner für den Shop
</ParamField>

**Erforderliche Berechtigung:** `create_prescription_checkout`

### Anfragekörper

```json theme={null}
{
  "customer": {
    "firstname": "Max",
    "lastname": "Mustermann",
    "email": "max.mustermann@example.com",
    "phone": "+4917612345678",
    "homeAddress": {
      "streetName": "Hauptstraße",
      "houseNr": "42",
      "postalCode": "10115",
      "city": "Berlin"
    },
    "deliveryAddress": {
      "streetName": "Nebenstraße",
      "houseNr": "7",
      "postalCode": "10115",
      "city": "Berlin"
    }
  },
  "products": [
    {
      "id": "partner-sku-456",
      "name": "Medication X 100mg",
      "quantity": 1,
      "price": 12.99,
      "crushed": false
    }
  ],
  "pharmacy_id": "BF8dMH0ERu3giFJltCAG",
  "doctor": {
    "name": "Schmidt",
    "firstname": "Jane",
    "phone": "+4930987654321",
    "cityOfSignature": "Berlin",
    "dateOfSignature": "2026-09-01"
  },
  "prescriptionURL": "JVBERi0xLjQK...",
  "isThirdPartyPrescription": false,
  "internalOrderId": "ORD123456",
  "deliveryType": "shipping",
  "prepaid": 1
}
```

| Feld                              | Typ     | Erforderlich | Beschreibung                                                                                                                                                                                                    |
| --------------------------------- | ------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `customer`                        | object  | Ja           | Angaben zu Patient/Empfänger                                                                                                                                                                                    |
| `customer.firstname`              | string  | Ja           | Vorname des Kunden                                                                                                                                                                                              |
| `customer.lastname`               | string  | Ja           | Nachname des Kunden                                                                                                                                                                                             |
| `customer.email`                  | string  | Nein         | E-Mail-Adresse des Kunden                                                                                                                                                                                       |
| `customer.phone`                  | string  | Nein         | Telefonnummer des Kunden                                                                                                                                                                                        |
| `customer.homeAddress`            | object  | Nein         | Heimatadresse des Patienten; wird als Rechnungsadresse der Bestellung verwendet                                                                                                                                 |
| `customer.homeAddress.streetName` | string  | Nein         | Straßenname                                                                                                                                                                                                     |
| `customer.homeAddress.houseNr`    | string  | Nein         | Hausnummer                                                                                                                                                                                                      |
| `customer.homeAddress.postalCode` | string  | Nein         | Postleitzahl                                                                                                                                                                                                    |
| `customer.homeAddress.city`       | string  | Nein         | Stadt                                                                                                                                                                                                           |
| `customer.deliveryAddress`        | object  | Nein         | Lieferadresse; wird als Versandadresse der Bestellung verwendet. Fällt auf `homeAddress` zurück, wenn nicht angegeben. Gleicher Aufbau wie `homeAddress`                                                        |
| `products`                        | array   | Ja           | Positionen der Bestellung                                                                                                                                                                                       |
| `products[].id`                   | string  | Ja           | Ihre Produkt-ID — muss demselben Wert entsprechen, den RxScale im [Produkt-Feed](#produkt-feed) als `flowzUrl` zurückgibt                                                                                       |
| `products[].name`                 | string  | Nein         | Produktname. Nur informativ — die RxScale-Bestellposition wird anhand der über `id` aufgelösten Katalog-SKU bepreist und benannt, nicht anhand dieses Felds                                                     |
| `products[].quantity`             | integer | Ja           | Bestellte Menge. Muss mindestens `1` sein                                                                                                                                                                       |
| `products[].price`                | number  | Nein         | Nur informativ — wird nicht zur Bepreisung der Bestellung verwendet                                                                                                                                             |
| `products[].crushed`              | boolean | Nein         | Ob das Medikament zermörsert abgegeben werden soll                                                                                                                                                              |
| `pharmacy_id`                     | string  | Nein         | Ihre Apotheken-ID für diese Bestellung. Wird zu Referenzzwecken gespeichert; wird keinem RxScale-Apothekendatensatz zugeordnet                                                                                  |
| `doctor`                          | object  | Nein         | Angaben zum unterzeichnenden Arzt                                                                                                                                                                               |
| `doctor.name`                     | string  | Nein         | Nachname des Arztes                                                                                                                                                                                             |
| `doctor.firstname`                | string  | Nein         | Vorname des Arztes                                                                                                                                                                                              |
| `doctor.phone`                    | string  | Nein         | Telefonnummer des Arztes                                                                                                                                                                                        |
| `doctor.email`                    | string  | Nein         | E-Mail-Adresse des Arztes                                                                                                                                                                                       |
| `doctor.cityOfSignature`          | string  | Nein         | Stadt, in der das Rezept signiert wurde                                                                                                                                                                         |
| `doctor.dateOfSignature`          | string  | Nein         | Datum, an dem das Rezept signiert wurde                                                                                                                                                                         |
| `prescriptionURL`                 | string  | Ja           | **Trotz des Feldnamens keine URL.** Base64-kodierter Inhalt des signierten Rezept-PDFs                                                                                                                          |
| `isThirdPartyPrescription`        | boolean | Nein         | Ob das Rezept von einem Dritten ausgestellt wurde                                                                                                                                                               |
| `internalOrderId`                 | string  | Ja           | Ihre Bestell-ID. Wird verwendet, um doppelte Übermittlungen zu erkennen — siehe Hinweis unten                                                                                                                   |
| `deliveryType`                    | string  | Nein         | Lieferart für diese Bestellung (zum Beispiel `shipping` oder `pickup`). Wird nur zu Referenzzwecken erfasst                                                                                                     |
| `prepaid`                         | integer | Nein         | `0` (Standard) oder `1`. Bei `1` erstellt RxScale die Bestellung, **ohne** dem Patienten eine Shopify-Checkout-Anfrage zu senden — verwenden Sie dies, wenn der Patient bereits auf Ihrer Plattform bezahlt hat |

<Note>
  Das Rezept-PDF muss digital signiert sein (QES). Unsignierte PDFs werden mit `422` abgelehnt, es sei denn, Ihr Anbieterkonto wurde ausdrücklich so konfiguriert, dass es diese zulässt.
</Note>

<Note>
  `products[].id` wird gegen die Ihrem Anbieterkonto zugeordneten SKUs aufgelöst — dieselbe Zuordnung, die der [Produkt-Feed](#produkt-feed) als `flowzUrl` veröffentlicht. Eine ID, die sich nicht auflösen lässt, wird abgelehnt; siehe Fehlerantworten unten.
</Note>

### Beispielanfrage

```bash theme={null}
curl -X POST "https://api.rxscale.com/v2/public-api/prescriptions/my-shop/docnow24" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "customer": {
      "firstname": "Max",
      "lastname": "Mustermann",
      "email": "max.mustermann@example.com",
      "phone": "+4917612345678",
      "homeAddress": {
        "streetName": "Hauptstraße",
        "houseNr": "42",
        "postalCode": "10115",
        "city": "Berlin"
      }
    },
    "products": [
      {
        "id": "partner-sku-456",
        "name": "Medication X 100mg",
        "quantity": 1,
        "crushed": false
      }
    ],
    "pharmacy_id": "BF8dMH0ERu3giFJltCAG",
    "doctor": {
      "name": "Schmidt",
      "firstname": "Jane",
      "phone": "+4930987654321",
      "cityOfSignature": "Berlin",
      "dateOfSignature": "2026-09-01"
    },
    "prescriptionURL": "JVBERi0xLjQK...",
    "isThirdPartyPrescription": false,
    "internalOrderId": "ORD123456",
    "deliveryType": "shipping",
    "prepaid": 1
  }'
```

### Antwort

```json theme={null}
{
  "status": "success",
  "prescriptions": [
    {
      "id": "ORD123456",
      "prescription_uid": "px-abc123"
    }
  ]
}
```

`prescriptions[].id` gibt Ihre `internalOrderId` zurück. Verwenden Sie `prescription_uid`, um den Bestellstatus über den [Bestellungen-Endpoint](/de/api-reference/public/orders) abzufragen.

### Fehlerantworten

| Statuscode | Beschreibung                                                                                                                                                                                                |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`      | Validierung des Anfragekörpers fehlgeschlagen                                                                                                                                                               |
| `400`      | Der API-Key ist nicht mit einem Telemedizin-Anbieter verknüpft                                                                                                                                              |
| `400`      | Ihr Anbieterkonto hat keine verwendbare Kennung. Dies ist ein Konfigurationsproblem auf unserer Seite — bitte wenden Sie sich an den Support                                                                |
| `400`      | Der Signatur-Validierungsdienst war nicht verfügbar, daher konnte die Rezeptsignatur nicht geprüft werden. Es wird kein Rezept und keine Bestellung erstellt — die Anfrage kann gefahrlos wiederholt werden |
| `404`      | Shop nicht gefunden                                                                                                                                                                                         |
| `404`      | Eine `products[].id` lässt sich nicht auf eine Ihrem Anbieterkonto zugeordnete SKU auflösen                                                                                                                 |
| `409`      | Diese `internalOrderId` wurde bereits erfolgreich übermittelt. Es wird kein neues Rezept, PDF oder keine neue Bestellung erstellt                                                                           |
| `422`      | Das Rezept-PDF ist nicht digital signiert (QES) und unsignierte Rezepte sind für Ihr Anbieterkonto nicht erlaubt                                                                                            |

```json theme={null}
{
  "error": "Product with external ID 'partner-sku-456' not found"
}
```

```json theme={null}
{
  "error": "Duplicate prescription injection: prescription id(s) ['ORD123456'] already submitted by provider docnow24 (existing prescription(s) ['px-abc123']); no order created."
}
```

<Note>
  Eine `internalOrderId` wird erst blockiert, wenn eine Übermittlung mit dieser ID **erfolgreich** akzeptiert wurde. Ist eine frühere Anfrage fehlgeschlagen (zum Beispiel mit einem 4xx/5xx-Status vor Abschluss), wird ein erneutes Senden derselben `internalOrderId` nicht blockiert und normal verarbeitet — die Übermittlung kann daher nach einer fehlgeschlagenen oder unklaren Anfrage gefahrlos wiederholt werden.
</Note>

## Siehe auch

* [Produkte](/de/api-reference/public/products) — der generische, marktübergreifende Produktlisten-Endpoint
* [Rezepte & Behandlungen](/de/api-reference/public/prescriptions) — der generische Checkout-Endpoint
* [Bestellungen](/de/api-reference/public/orders) — Bestellstatus anhand der Rezept-UID abfragen
