Zum Hauptinhalt springen

Produkte

Rufen Sie eine paginierte Liste der in einem bestimmten Shop verfügbaren Produkte ab, gefiltert nach Markt.

Produkte auflisten

GET /v2/public/products/{shop_identifier}
shop_identifier
string
erforderlich
Eindeutiger Bezeichner für den Shop
market
string
erforderlich
Marktbezeichner (z. B. DE für Deutschland)
Produkte und SKUs nach Name filtern
page
integer
Standard:"0"
Seitennummer (0-basiert)
limit
integer
Standard:"50"
Ergebnisse pro Seite (max. 150)
Erforderliche Berechtigung: product:read

Beispielanfrage

curl -X GET "https://api.rxscale.com/v2/public/products/my-shop?market=DE&page=0&limit=25" \
  -H "X-API-Key: your-api-key-here"

Antwort

{
  "data": [
    {
      "uid": "prod-abc123",
      "display_name": "Medication X",
      "attributes": {
        "category": "Pain Relief"
      },
      "skus": [
        {
          "uid": "sku-456",
          "display_name": "Medication X 100mg",
          "attributes": {
            "package_size": "100mg"
          },
          "availability": "High",
          "telemedicine_provider_data": {
            "external_id": "partner-sku-456"
          },
          "price": 1299,
          "currency": "EUR",
          "unit": "g",
          "standard_selling_unit": 10
        },
        {
          "uid": "sku-789",
          "display_name": "Medication X 200mg",
          "attributes": {
            "package_size": "200mg"
          },
          "availability": "Medium",
          "telemedicine_provider_data": {
            "external_id": "partner-sku-789"
          },
          "price": 1999,
          "currency": "EUR",
          "unit": "g",
          "standard_selling_unit": 20
        }
      ]
    }
  ],
  "totalRegistries": 42,
  "totalPages": 2
}

Antwortfelder

FeldTypBeschreibung
dataarrayListe der Produktobjekte
data[].uidstringProdukt-UID
data[].display_namestringAnzeigename des Produkts
data[].attributesobjectProduktattribute als Schlüssel-Wert-Paare
data[].skusarrayVerfügbare SKUs für dieses Produkt im angegebenen Markt
data[].skus[].uidstringSKU-UID (verwenden Sie diese beim Erstellen von Checkouts)
data[].skus[].display_namestringAnzeigename der SKU
data[].skus[].attributesobjectSKU-Attribute als Schlüssel-Wert-Paare
data[].skus[].availabilitystringVerfügbarkeitsstufe (High, Medium, Low oder Unavailable)
data[].skus[].telemedicine_provider_data.external_idstringExterne SKU-ID des Telemedizin-Anbieters
data[].skus[].priceintegerPreis in Euro-Cent
data[].skus[].currencystringPreiswährung
data[].skus[].unitstringSKU-Einheit
data[].skus[].standard_selling_unitnumberStandard-Verkaufseinheit
totalRegistriesintegerGesamtanzahl der übereinstimmenden Produkte
totalPagesintegerGesamtanzahl der Seiten

Fehlerantworten

StatuscodeBeschreibung
400Fehlender market-Abfrageparameter
404Shop nicht gefunden

Live Stock prüfen

Prüfen Sie vor dem Checkout, ob eine oder mehrere SKUs aktuell in der angefragten Menge verfügbar sind.
POST /v2/public/products/{shop_identifier}/live-stock
shop_identifier
string
erforderlich
Eindeutiger Bezeichner für den Shop
Erforderliche Berechtigung: product:read
Live Stock wird gegen den aktuell verfügbaren Shopify-Bestand der zugeordneten Produktvarianten geprüft. Darin enthalten sind Bestände, die bereits durch Shopify-Bestellungen und Draft-Order-Reservierungen gehalten werden.

Anfragekörper

[
  {
    "sku_uid": "sku-456",
    "quantity": 2
  },
  {
    "sku_uid": "sku-789",
    "quantity": 1
  }
]
FeldTypErforderlichBeschreibung
sku_uidstringJaSKU-UID aus dem Produktkatalog
quantityintegerJaZu prüfende Menge. Muss mindestens 1 sein
Jede sku_uid darf pro Live-Stock-Anfrage nur einmal vorkommen.

Beispielanfrage

curl -X POST "https://api.rxscale.com/v2/public/products/my-shop/live-stock" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "sku_uid": "sku-456",
      "quantity": 2
    }
  ]'

Antwort bei Verfügbarkeit

Wenn alle angefragten Mengen verfügbar sind, gibt der Endpoint 200 OK zurück.
{
  "available": true,
  "lines": [
    {
      "sku_uid": "sku-456",
      "quantity": 2,
      "available": true,
      "available_stock": 12
    }
  ]
}

Antwort bei fehlender Verfügbarkeit

Wenn mindestens eine angefragte Menge nicht verfügbar ist, gibt der Endpoint 409 Conflict zurück.
{
  "available": false,
  "lines": [
    {
      "sku_uid": "sku-456",
      "quantity": 2,
      "available": false,
      "available_stock": 1
    }
  ]
}

Antwortfelder

FeldTypBeschreibung
availablebooleantrue nur, wenn alle angefragten Mengen verfügbar sind
lines[].sku_uidstringAngefragte SKU-UID
lines[].quantityintegerAngefragte Menge
lines[].availablebooleanOb diese SKU ausreichend Bestand hat
lines[].available_stockintegerAktuell verfügbarer Bestand der SKU im Shop

Fehlerantworten

StatuscodeBeschreibung
400Body-Validierung fehlgeschlagen oder doppelte sku_uid-Werte
404Shop oder SKU nicht gefunden
409Mindestens eine angefragte Menge ist nicht verfügbar

Produkte reservieren

Erstellen Sie einen Shopify-Bestellentwurf mit einer Bestandsreservierung für 24 Stunden, bevor Rezepte vorliegen. Verwenden Sie die zurückgegebene Draft-Order-ID später als reserved_draft_order_id, wenn Sie signierte Rezepte hochladen.
POST /v2/public/products/{shop_identifier}/reservation
shop_identifier
string
erforderlich
Eindeutiger Bezeichner für den Shop
Erforderliche Berechtigung: create_prescription_checkout
Die Reservierungsanfrage enthält keine Rezepte und keine Patientendaten. RxScale ergänzt Telemedizin-Anbieter-Attribute automatisch anhand des API-Keys.
Der API-Key muss mit einem Telemedizin-Anbieter verknüpft sein. Anfragen mit einem nicht-telemedizinischen API-Key werden mit 400 Bad Request abgelehnt, bevor Bestand reserviert wird, da der resultierende Bestellentwurf beim späteren Rezept-Upload nicht zugeordnet werden könnte.

Anfragekörper

{
  "external_reservation_id": "caller-reservation-123",
  "lines": [
    {
      "sku_uid": "sku-456",
      "quantity": 1
    }
  ]
}
FeldTypErforderlichBeschreibung
external_reservation_idstringNeinIhre Reservierungs-ID. Wird am Shopify-Bestellentwurf gespeichert und in der Antwort zurückgegeben
linesarrayJaZu reservierende Produkte
lines[].sku_uidstringJaSKU-UID aus dem Produktkatalog
lines[].quantityintegerJaZu reservierende Menge
Jede sku_uid darf pro Reservierungsanfrage nur einmal vorkommen. Doppelte SKU-Zeilen werden abgelehnt, weil der spätere Rezept-Upload jede reservierte Draft-Order-Zeile eindeutig zuordnen muss.

Beispielanfrage

curl -X POST "https://api.rxscale.com/v2/public/products/my-shop/reservation" \
  -H "X-API-Key: your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "external_reservation_id": "caller-reservation-123",
    "lines": [
      {
        "sku_uid": "sku-456",
        "quantity": 1
      }
    ]
  }'

Antwort

{
  "status": "success",
  "external_reservation_id": "caller-reservation-123",
  "draft_order": {
    "id": "123",
    "invoiceUrl": "https://example.myshopify.com/invoice/...",
    "reserve_inventory_until": "2026-05-16T17:20:00Z"
  }
}
draft_order.id ist die Shopify Legacy-DraftOrder-ID, nicht die Shopify-GID. Übergeben Sie diesen Wert nach der Signatur der Rezepte als reserved_draft_order_id an POST /v2/public/prescriptions/{shop_identifier}.

Fehlerantworten

StatuscodeBeschreibung
400API-Key ist nicht mit einem Telemedizin-Anbieter verknüpft, Body-Validierung fehlgeschlagen oder doppelte sku_uid-Werte
404Shop oder SKU nicht gefunden