Authorization is in Authentication. Use synthetic data only
on the initial sandbox. Listing imaging centers, searching or creating practices or
law firms, and submitting an order-form-only referral may be off until Scan enables
them for your account.
If you only have the patient and physician order — no safety answers or preferred
times — use Submit a medical referral instead.
If the referral already exists and you only need to send safety answers, use
Submit medical questions.
If the referral already exists and you only need to send preferred times, use
Submit preferred times.
What you will build. One referral that arrives at Scan ready to schedule: the
patient on file, the physician order attached, the safety questions answered, and
a preferred imaging center with the times that work for the patient.
What Scan does after. We book the appointment from the preference you send,
confirm it with the patient, and file the radiology report back to you. You never
pick a timeslot yourself in this flow.
Terms you will see
- Referral — the request for imaging. Holds one or more visits.
- Visit — one trip to an imaging center, carrying the orders for that trip (modality, body part).
- Order form — the physician’s signed order PDF, sent as
order_form. There is no separate medical-referral object. - Medical safety questions — the intake questionnaire. A yes on a blocking question, metal implants for example, rules some scanners out.
- Preferred center and availability — where and when the patient wants to be seen. We book from this.
1. Tell us who the patient is
Register the person being scanned so the rest of the flow can refer to them. Patients are scoped to your group, so you only ever see your own. If you would rather send everything at once, you can nest these same fields asreferral.patient in the next step instead.
POST /api/v2/patients
id. Hold onto it as patient_id for the next
step.
Full payload: Creates a patient.
2. Send the referral with the physician order
This is the step that creates the imaging request. It carries three things: the patient, the signed physician order, and what is being scanned. The order is the PDF the referring physician signed, sent asorder_form in a
base64 data URL shaped like
data:<content_type>;name=<filename>;base64,<payload>.
What is being scanned lives in visits, and each visit carries its orders. Look
up the exact procedure first with
CPT codes, then send its
id as cpt_code_id. We infer modality, body part, contrast, laterality,
modifier, and number of views from that mapping. Diagnosis IDs come from
ICD-10 codes.
You can still send the legacy
modality and
body-part fields
instead.
POST /api/v2/referrals
id. Every remaining step
is addressed to that id.
Full payload: Creates a referral.
3. Record the patient’s safety answers
These are the screening questions an imaging center asks before an MRI — claustrophobia, metal implants, and similar. Ask them however suits your product, then send the answers here. Do this before you list centers. The answers change which centers can take the patient: claustrophobia points to open scanners, and a yes on a blocking question rules some equipment out entirely. List centers first and you may show the patient somewhere they cannot go. Fetch the questions, which come back with any answers already on file: GET/api/v2/referrals/{referral_id}/medical_questionnaire
id:
PUT /api/v2/referrals/{referral_id}/medical_questionnaire
4. Show the patient nearby imaging centers
Get the centers that can perform this scan, closest first. The search starts from the patient’s address unless you pass a differentaddress, and it already
accounts for the safety answers from the previous step.
These are candidate centers, not appointment times. Availability is not part of
this response.
GET /api/v2/locations?referral_id={id}
id of whichever one the patient picks.
Full payload: Returns nearby imaging centers.
5. Send the center and times the patient wants
Tell us how to book. There are two ways to answer, depending on how particular the patient is. If they are flexible on both place and time, sendanytime_anywhere and nothing
else — we find the soonest good option.
If they are not, send time_preferences with the location_id they picked in the
previous step, plus either the days and times that work (preferred_times) or
asap: true to take the soonest opening at that center.
POST /api/v2/referrals/{referral_id}/scheduling_preferences
preferred_location and
scheduling_mode reflecting what you just sent. The referral is now with our
scheduling team.
Full payload: Submits preferred center and availability.
6. Follow the referral to the report
You have two ways to stay current. Subscribe to the status changed webhook and we push each change to you, or poll the referral when you need a snapshot. GET/api/v2/referrals/{referral_id}
visits[].location and visits[].start_time
tell you where and when the patient is going. The snapshot also carries
answered_medical_questionnaire, preferred_location, and scheduling_mode, so
you can confirm every step above landed.
When the scan is read, pull the radiology report PDF with
GET /api/v2/order_documents/report.
Full payload: Returns a referral by ID.
