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

> Product feed and prescription injection for the docnow24 telemedicine platform

# docnow24 Integration

docnow24 is a telemedicine platform. These endpoints support the two integration points used by partners running on docnow24: a **product feed** that your Custom Sync service polls to mirror stock, availability and price, and **prescription injection**, used after a doctor completes the digital (QES) signature on a prescription.

## Authentication

Authenticate with your API key via the `X-API-Key`, `X-RxScale-Authorization`, or `Authorization: Bearer <api-key>` header. See [Authentication](/authentication) for details.

## Product Feed

Retrieve the catalogue of SKUs mapped to your provider account in a shop. Poll this endpoint from your Custom Sync service to mirror stock, availability and price.

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

<ParamField path="shop_identifier" type="string" required>
  Unique identifier for the shop
</ParamField>

<ParamField query="page" type="integer" default="1">
  Page number (1-indexed)
</ParamField>

<ParamField query="limit" type="integer" default="500">
  Results per page (max 5000)
</ParamField>

<ParamField query="search" type="string">
  Filter mapped products by name
</ParamField>

**Required permission:** `read_sku_single_telemedicine_provider`

<Note>
  Only SKUs mapped to your provider account and currently active are included. A SKU that is deactivated or unmapped simply stops appearing in the feed — it is never emitted with `stock: 0`.
</Note>

### Example Request

```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"
```

### Response

```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"
  }
]
```

The response is a plain JSON array (no pagination envelope) — one row per SKU mapped to your provider account in this shop.

### Response Fields

| Field       | Type    | Description                                                                                                                              |
| ----------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `flowzUrl`  | string  | Your product identifier for this SKU. Configure your Custom Sync's `flowzUrl` key to read this value                                     |
| `stock`     | integer | Physical stock, aggregated across every pharmacy linked to the shop. Reservations already held against that stock are **not** subtracted |
| `price`     | integer | Price in **euro cents**                                                                                                                  |
| `productId` | string  | RxScale SKU UID                                                                                                                          |

<Warning>
  `price` is an integer number of euro cents (for example `1299` means €12.99). Your Custom Sync's built-in "Cent → Euro (÷100)" transform must be applied when mapping this field — do not store the raw integer as a euro amount.
</Warning>

### Backoffice Field Mapping

Configure your Custom Sync with this mapping:

| Our field  | Your target field | Transformation     |
| ---------- | ----------------- | ------------------ |
| `flowzUrl` | `flowzUrl` (key)  | None               |
| `stock`    | `stockCount`      | Integer, 1:1       |
| `price`    | `priceGross`      | Cent → Euro (÷100) |

We do not send an `active` field. Derive availability on your side from `stockCount > 0`.

### Error Responses

| Status Code | Description                                                                        |
| ----------- | ---------------------------------------------------------------------------------- |
| `400`       | Invalid `page` or `limit`, or the API key is not linked to a telemedicine provider |
| `404`       | Shop not found                                                                     |

## Prescription Injection

Submit a signed prescription and its order details after a doctor completes the QES signature. RxScale creates the checkout and, unless `prepaid` is `1`, sends the patient a Shopify checkout request.

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

<ParamField path="shop_identifier" type="string" required>
  Unique identifier for the shop
</ParamField>

**Required permission:** `create_prescription_checkout`

### Request Body

```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
}
```

| Field                             | Type    | Required | Description                                                                                                                                                                        |
| --------------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `customer`                        | object  | Yes      | Patient / recipient details                                                                                                                                                        |
| `customer.firstname`              | string  | Yes      | Customer first name                                                                                                                                                                |
| `customer.lastname`               | string  | Yes      | Customer last name                                                                                                                                                                 |
| `customer.email`                  | string  | No       | Customer email address                                                                                                                                                             |
| `customer.phone`                  | string  | No       | Customer phone number                                                                                                                                                              |
| `customer.homeAddress`            | object  | No       | Patient's home address, used as the order's billing address                                                                                                                        |
| `customer.homeAddress.streetName` | string  | No       | Street name                                                                                                                                                                        |
| `customer.homeAddress.houseNr`    | string  | No       | House number                                                                                                                                                                       |
| `customer.homeAddress.postalCode` | string  | No       | Postal code                                                                                                                                                                        |
| `customer.homeAddress.city`       | string  | No       | City                                                                                                                                                                               |
| `customer.deliveryAddress`        | object  | No       | Delivery address, used as the order's shipping address. Falls back to `homeAddress` when omitted. Same shape as `homeAddress`                                                      |
| `products`                        | array   | Yes      | Order line items                                                                                                                                                                   |
| `products[].id`                   | string  | Yes      | Your product identifier — must be the same value RxScale returns as `flowzUrl` in the [product feed](#product-feed)                                                                |
| `products[].name`                 | string  | No       | Product name. Informational only — the RxScale order line is priced and named from the catalog SKU resolved via `id`, not from this field                                          |
| `products[].quantity`             | integer | Yes      | Quantity ordered. Must be at least `1`                                                                                                                                             |
| `products[].price`                | number  | No       | Informational only — not used to price the order                                                                                                                                   |
| `products[].crushed`              | boolean | No       | Whether the medication should be dispensed crushed                                                                                                                                 |
| `pharmacy_id`                     | string  | No       | Your pharmacy identifier for this order. Stored for reference; not matched against an RxScale pharmacy record                                                                      |
| `doctor`                          | object  | No       | Signing doctor's details                                                                                                                                                           |
| `doctor.name`                     | string  | No       | Doctor's last name                                                                                                                                                                 |
| `doctor.firstname`                | string  | No       | Doctor's first name                                                                                                                                                                |
| `doctor.phone`                    | string  | No       | Doctor's phone number                                                                                                                                                              |
| `doctor.email`                    | string  | No       | Doctor's email address                                                                                                                                                             |
| `doctor.cityOfSignature`          | string  | No       | City where the prescription was signed                                                                                                                                             |
| `doctor.dateOfSignature`          | string  | No       | Date the prescription was signed                                                                                                                                                   |
| `prescriptionURL`                 | string  | Yes      | **Despite the field name, this is not a URL.** Base64-encoded content of the signed prescription PDF                                                                               |
| `isThirdPartyPrescription`        | boolean | No       | Whether the prescription was issued by a third party                                                                                                                               |
| `internalOrderId`                 | string  | Yes      | Your order identifier. Used to detect duplicate submissions — see the note below                                                                                                   |
| `deliveryType`                    | string  | No       | Delivery type for this order (for example `shipping` or `pickup`). Recorded for reference only                                                                                     |
| `prepaid`                         | integer | No       | `0` (default) or `1`. When `1`, RxScale creates the order **without** sending the patient a Shopify checkout request — use this when the patient has already paid on your platform |

<Note>
  The prescription PDF must be digitally signed (QES). Unsigned PDFs are rejected with `422` unless your provider account has been explicitly configured to allow them.
</Note>

<Note>
  `products[].id` is resolved against SKUs mapped to your provider account — the same mapping the [product feed](#product-feed) publishes as `flowzUrl`. An id that does not resolve is rejected; see Error Responses below.
</Note>

### Example Request

```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
  }'
```

### Response

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

`prescriptions[].id` echoes your `internalOrderId`. Use `prescription_uid` to query order status via the [Orders endpoint](/api-reference/public/orders).

### Error Responses

| Status Code | Description                                                                                                                                                 |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | Request body validation failed                                                                                                                              |
| `400`       | The API key is not linked to a telemedicine provider                                                                                                        |
| `400`       | Your provider account has no usable identifier. This is a configuration problem on our side — contact support                                               |
| `400`       | The signature-validation service was unavailable, so the prescription signature could not be validated. No prescription or order is created — safe to retry |
| `404`       | Shop not found                                                                                                                                              |
| `404`       | A `products[].id` does not resolve to a SKU mapped to your provider account                                                                                 |
| `409`       | This `internalOrderId` was already successfully submitted. No new prescription, PDF, or order is created                                                    |
| `422`       | The prescription PDF is not digitally signed (QES) and unsigned prescriptions are not allowed for your provider account                                     |

```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>
  `internalOrderId` is only blocked once a submission with that id has been **successfully** accepted. If an earlier request failed (for example, it returned a 4xx/5xx before completing), resubmitting the same `internalOrderId` is not blocked and is processed normally — safe to retry after a failed or uncertain request.
</Note>

## See Also

* [Products](/api-reference/public/products) — the generic multi-market product listing endpoint
* [Prescriptions & Treatments](/api-reference/public/prescriptions) — the generic checkout endpoint
* [Orders](/api-reference/public/orders) — query order status by prescription UID
