Review Requests
A review request asks one of your organisation’s doctors to look at a patient again, without the patient ordering prescription products first. The typical case is a repurchase: the patient fills in a short follow-up questionnaire and pays a prescription fee in your shop, and a doctor decides what happens next. You send the patient’s new anamnesis with the request. The doctor finds it in a separate Review requests list in the Anamnesis Center and answers in one of three ways:- Create the treatment. The doctor creates a draft order in your shop. The patient pays it, and the prescription follows the normal review and signing flow.
- Request a video appointment. The doctor sends the patient a booking link for an appointment with them.
- Decline, with a reason.
review_request_updated
webhook, and can read the current state at any time.
All endpoints are scoped to the organisation that owns the API key. A review request, shop,
patient or anamnesis of another organisation is treated as not found.
How it fits together
1
The patient submits the questionnaire
The anamnesis must reach RxScale before you request the review. Submit it through the
Anamnesis API and keep the anamnesis
UID RxScale returns: the review request addresses the anamnesis by this UID only.
2
The patient pays the prescription fee
For example in your Shopify shop.
3
You create the review request
Call
POST /v1/management/review-requests, for example from Shopify Flow once the
fee order is paid.4
The doctor decides
You receive
review_request_updated with the doctor’s decision.5
You act on the decision
Send the patient the booking link (
video_requested), send the invoice of the draft order
(draft_created), or refund the fee if your terms say so (declined).6
The patient pays the draft order
RxScale links the paid order to the request and you receive
completed.RxScale bills nothing for review requests on your shops. A booking link the doctor creates
for one of your shops carries no price in RxScale: you decide whether and how the patient pays
for the video appointment. If the doctor declines, RxScale only reports
declined. Whether you
refund the prescription fee is your decision, and you make the refund in your shop.Make sure the prescription-fee order does not reach a pharmacy. Mark the fee product’s SKU with
skip_for_pharmacy_orders: true (see SKUs).Who receives the request
The request is assigned to the doctor who signed the patient’s most recent prescription in your organisation. If the patient has no signed prescription, or that doctor’s account is archived, the request arrives unassigned and any doctor of your organisation can take it. The doctor can forward the request to a colleague, and your admins can assign or reassign it in the admin portal. Every change of doctor sendsassigned. A request stays with its doctor
until they act on it: nothing releases it after a time limit.
Whether an asynchronous review is allowed
RxScale does not decide whether a patient may be reviewed without a consultation, for example whether a video consultation is due first or whether the last one was within a year. You decide that before you send the request. The doctor sees the date of the patient’s last video appointment and can request a video appointment instead of creating the treatment.Permissions
review_request:write— required to create and to cancel a review request.review_request:read— required to read a review request.
review_request:write is not automatically granted review_request:read; add both
if you need to write and read. To receive the webhook, you also need the
notification_subscription permissions (see Webhooks).
Contact your RxScale account manager to adjust permissions.
All requests authenticate with the X-API-Key header. See
Authentication for details.
Create a Review Request
review_request:write
Request Body
string
required
Your ID for this request, 1 to 255 characters. It must be unique within your organisation and
makes the call safe to repeat: see Repeating a request.
string
required
The kind of review. Currently only
repurchase.string
required
Identifier of the shop the patient is a customer of. The shop must belong to your organisation.
string
required
Your shop’s ID for the customer.
string
required
UID of the anamnesis in RxScale, as RxScale returned it when the anamnesis was submitted. The
only way to address the anamnesis (see below).
string
Your shop’s ID of the prescription-fee order, 1 to 255 characters. Use the same ID as the
shop_order_external_id filter of Orders, for Shopify the
order ID. Stored as you send it, for traceability, and returned in reads and webhooks. RxScale
does not need to know the order yet: Shopify Flow can be faster than the order reaching
RxScale.400.
Identifying the patient and the anamnesis
- The patient by
shop_identifierandshop_customer_id. - The anamnesis by
anamnesis_uid, its UID in RxScale. The anamnesis has to be submitted to RxScale first, for example with Submit Anamnesis, whose response carries this UID.
external_submission_uid,
external_identifier and provider_identifier are refused with 400 as unknown fields. The UID
that Submit External Anamnesis
returns is the submission’s UID, not an anamnesis UID, and is answered with 404.
If the anamnesis is not yet connected to a patient, the review request connects it to this
patient, just as the patient-connection endpoint does: the answers fill the patient’s profile
fields, and the anamnesis appears on the patient in RxScale. If the anamnesis is already
connected to a different patient, the request is refused with 409 and nothing is created.
Example Request
Response (201 Created)
The response does not name the doctor. Read the request to see
doctor_uid.
Repeating a request
A call with an
external_id you have already used creates nothing. It answers 200 OK instead
of 201 and returns the existing request in its current state, even when the rest of the body
differs. A Shopify Flow retry, or a call whose response you did not receive, is therefore
harmless.To ask for a new review, for example after a request was declined or cancelled, send a new
external_id.Error Responses
Nothing is stored when a request is refused.
A
400 names the fields at fault:
404 carries one fixed message per resource. The message is the same whether the record does
not exist or belongs to another organisation, so it never confirms that a record is real. The
shop is checked first, then the anamnesis, then the patient.
409:
Get a Review Request
review_request_updated webhook, plus the timestamps, so you can use it whenever you missed a
webhook.
Required permission: review_request:read
string
required
The
uid returned when you created the requestExample Request
Response (200 OK)
Unlike the webhook, which carries
booking only with video_requested, this response always
includes the current booking link when there is one. If the doctor created a new link, it is the
newest one.When the patient books through the link, you receive
review_request_updated with
change: "appointment_booked" and the appointment’s meeting_uid in appointment. From then on,
appointment is filled in this response and in every later review_request_updated. The booking
is also announced by the patient_doctor_meeting_updated
webhook, which reports every later change to the appointment.Error Responses
Cancel a Review Request
review_request:write
string
required
The
uid returned when you created the requeststring
Why the request is cancelled, at most 2000 characters. Recorded in the request’s history,
which your admins see in the admin portal.
What cancelling does
- The status becomes
cancelled,closed_atis set, and you receivereview_request_updatedwithchange: "cancelled". - The request leaves the doctor’s list. A doctor who still has it open is told, on their next action, that the shop cancelled it.
- A booking link the patient has not used yet stops working at once.
- An appointment the patient already booked stays in place. Take its
meeting_uidfrom theappointment_bookedwebhook or fromappointment.meeting_uidwhen you read the request, then cancel it withPOST /v1/management/scheduling/appointments/{meeting_uid}/cancel, which applies that endpoint’s refund rules. - A draft order the doctor already created stays in your shop. Delete it in Shopify. If the
patient pays it anyway, RxScale processes the order as usual, and the request stays
cancelled.
completed, declined or cancelled) changes
nothing and sends no webhook: it returns the request unchanged with 200 OK. A repeated cancel
is therefore harmless.
Example Request
Response (200 OK)
status is cancelled, or the final status
the request already had.
Error Responses
Status Lifecycle
- A final status never changes again.
- An open request can be declined or cancelled from any open status. Declining also ends an unused booking link.
- Taking or forwarding a request changes its doctor, not its status.
- When the patient books through the link, the status does not change either. You receive
appointment_bookedwith the appointment. - The doctor can request a video appointment after creating the draft order. The status then
stays
draft_created, and you receivevideo_requestedwith the link. - A request has at most one booking link that can be used. The doctor can request a new link
only once the current one expired unused, or once the appointment booked through it no longer
stands (cancelled, expired, a no-show, or completed). You then receive another
video_requestedwith the new link, which replaces the old one. The status does not change.
Completing the Request with the Paid Order
When the doctor creates the treatment, the draft order in your shop carries the order attribute_rxscale_review_request_uid with the request’s uid. When the patient pays the draft order and
the order reaches RxScale, RxScale links it to the request, sets completed, and sends
review_request_updated with change: "completed" and the order’s ID in
shop_order_external_id. A booking link the patient has not used stops working. The
prescription then follows the normal review and signing flow.
A request is completed by one order. If a further paid order carries the same
_rxscale_review_request_uid, RxScale processes that order as usual, but the request keeps the
first order and no webhook is sent.
RxScale only accepts the attribute for a request of your organisation and of the same patient.
Any other value is ignored, and the order is processed without the link.
Related Topics
review_request_updatedwebhook — The payload and everychangevalue.- Anamnesis — The patient-connection endpoint and its addressing modes.
- Scheduling — Cancel an appointment the patient booked.
- Review Requests for doctors — What the doctor sees and does.