Skip to main content

Pharmacy SKUs

View and update your pharmacy’s product stock levels, pricing, and external system IDs.

List SKUs

integer
default:"0"
Page number (0-indexed)
integer
default:"50"
Items per page. Capped at a maximum of 500 — values above 500 are silently reduced to 500.
string
Required for group-wide API keys

Response

The price field is in euro cents (e.g., 1299 = €12.99).
sku.product_handle is an opaque identifier taken from the organisation’s product catalogue. Its format is not guaranteed — it can be a slug such as medication-x, a number, or null — so do not use it to identify products. Use sku.product_uid for the product and sku.uid or sku.pzn for the SKU.
REST SKU responses deliberately omit markup, priority, and type (platform margin). Those fields may still appear on pharmacy_sku_stock_updated webhooks — treat webhook-only fields as opaque and do not expect them on GET/PATCH pharmacy SKUs.
Hidden SKU types: Your account may be configured to hide SKUs of a particular type (digital or physical). SKUs of a hidden type are automatically excluded from this listing — they will not appear in the data array and are not counted in totalRegistries. This setting is off by default and is configured by your rxscale administrator. If you believe SKUs are missing from your listing, contact rxscale support.

Update SKU

If your account is configured to hide a SKU type, any attempt to update a pharmacy SKU of that hidden type — via PATCH /pharmacy_skus/{uid}, PATCH /pharmacy_skus/{uid}/stock, or PATCH /pharmacy_skus/{uid}/external_id — returns 404 Not Found. Check that the SKU appears in your GET /pharmacy_skus listing before attempting to update it.
Update price, stock, and/or external_id for a pharmacy SKU.

Request Body

All fields are optional — include only the fields you want to update.
integer
Your physical on-hand stock for this SKU, including units that are already reserved for your open RxScale orders. Each request sets an absolute value; it does not add to or subtract from the current stock. See Stock and reservations below.
integer
Your pharmacy’s own price per unit, in euro cents (e.g., 1500 = €15.00). When a new pharmacy order is created, the current price is stored on it as a snapshot (order_items[].pharmacy_sku.price), so a change does not affect existing orders. It does not change the price patients pay in the shop. A request that changes only the price triggers no webhook.
string
Your own reference for this SKU at your pharmacy, for example the article number in your system. Free text, up to 255 characters. It does not have to be unique, and RxScale does not use it to look up SKUs. It is returned to you in order items (order_items[].pharmacy_sku.external_id), in webhooks, and on the picklist in the Pharmacy Portal. To clear it, send an empty string (""); null is rejected with 400.
Stock values may be negative (for example, -40) to represent oversold inventory in your own system.

Stock and reservations

  • stock is your physical on-hand stock. It includes units that are already reserved for your open RxScale orders.
  • reserved_amount is the quantity on your open RxScale orders — orders in any status except completed and cancelled. It is included in the pharmacy_sku_stock_updated webhook, not in the REST SKU responses.
  • Available stock is stock - reserved_amount. Do not send the available quantity as stock, because the reservations would then be subtracted twice.
  • When you complete an order with complete_order, RxScale reduces stock by the ordered amount automatically. If your own system has already deducted the shipped units, send its stock value only after calling complete_order — otherwise the units are deducted twice until your next sync.
  • A pharmacy_sku_stock_updated webhook is sent when the stock changes through this API — including through your own PATCH requests — and when completing an order reduces it. A request that sends the stock value the SKU already has triggers no webhook.

Update Stock Only

A convenience endpoint to update only the stock level.

Update External ID

Link a pharmacy SKU to your external system.
To clear the external ID, send an empty string (""); null is rejected with 400.

Syncing Many SKUs

There is no bulk update endpoint. For a regular sync, for example every night:
  1. Load your SKUs with GET /v1/external_pharmacy_api/pharmacy_skus/?limit=500 (500 is the maximum page size) and page through the results with page.
  2. Compare them with your own system and send a PATCH only for SKUs whose values changed.
  3. Spread the requests over time and stay well below the rate limit.