The imaging rails for healthcare

One API for outpatient imaging. Order, route, and retrieve.

Search a national network of imaging centers, place a scan order, steer patients to the right site of care, and pull back structured radiology reports. One integration, every payer type.

10 min to first call 2 SDKs, more coming PHI-free sandbox
POST /api/v2/providers/search
curl https://api.sandbox.scan.com/api/v2/providers/search \
-H "Authorization: Bearer $SCAN_KEY" \
-H "Content-Type: application/json" \
-d '{ "modality": "mri", "zip": "30303", "network": "aetna_ppo" }'
200 OK · 142msresponse
{
"data": [
{
"id": "prv_5Kd2",
"name": "Peachtree Imaging - Midtown",
"modality": "mri",
"distance_mi": 2.4,
"in_network": true,
"cash_price_usd": 420,
"hospital_price_usd": 1180
}
]
}
The flow

From provider search to report in three calls

Search a national network, place the order at the right site of care, then receive the structured report. Same three primitives whether you're integrating an EHR, a TPA platform or a workers-comp portal.

  • providers.search: modality, geography, network, price
  • orders.create: bind a patient to a chosen provider
  • orders.report: structured JSON plus signed PDF
# 1. Find an in-network MRI near the patient
curl -X POST https://api.scan.com/v2/providers/search \
-H "Authorization: Bearer $SCAN_KEY" \
-d '{ "modality": "mri", "zip": "30303", "network": "aetna_ppo" }'
# 2. Place the order at the chosen site of care
curl -X POST https://api.scan.com/v2/orders \
-H "Authorization: Bearer $SCAN_KEY" \
-d '{ "provider_id": "prv_5Kd2", "patient_id": "pat_8Jm1", "cpt": "72148" }'
# 3. Pull the structured radiology report when ready
curl https://api.scan.com/v2/orders/ord_Qa7/report \
-H "Authorization: Bearer $SCAN_KEY"
How the API works

One integration, every imaging workflow

api.scan.comlive
IMAGING NETWORK · 3,600+ CENTERS · 50 STATESYour appEHR / EMRCare navigationYOUR SYSTEMSScan.comAPI · v2REST · Webhooks · SDKsGET/v2/providers/searchFind in-network centersPOST/v2/ordersPlace an imaging orderPOST/v2/orders/{id}/scheduleBook the appointmentGET/v2/reports/{id}Structured report + PDFPOST/v2/webhooksLifecycle eventsGET/v2/billing/invoicesClean settlement
requests webhook eventsone API · search · order · schedule · report · bill
Platform

What you can build

Composable primitives. No bespoke EDI, no faxed orders, no per-center contracts.

Network

Network and site-of-care search

Filter by modality, geography, network and price across thousands of imaging centers.

POST /v2/providers/search
Orders

Scan ordering

One call to schedule an outpatient scan, with patient comms and prior auth handled.

POST /v2/orders
Reports

Structured reports

Retrieve specialist reads as machine-readable JSON plus the signed PDF.

GET /v2/orders/:id/report
Pricing

Price and steerage

Surface in-network and cash prices, recommend a high-value in-network site.

POST /v2/estimates
Events

Signed webhooks

HMAC-signed lifecycle events with retries and replay from the dashboard.

order.status_changed
Files

Images and documents

Pull DICOM, signed PDFs and supporting documents through a single document API.

GET /v2/documents/:id
Quickstart

Your first scan order in 10 minutes

  1. 1

    Get a sandbox API key

    Sign up and we'll mint a sandbox key bound to a demo tenant, no card, no PHI.

    .env
    SCAN_KEY=sk_sandbox_3f9a72c1d4e8b06a
  2. 2

    Make your first authenticated call

    Pre-seeded: your demo tenant ships with imaging centers across modalities, a demo patient pat_8Jm1, and orders in every status. Nothing to set up.
    # Authenticated provider search against the sandbox
    curl https://api.sandbox.scan.com/api/v2/providers/search \
    -H "Authorization: Bearer $SCAN_KEY" \
    -d '{ "modality": "ct", "zip": "94110", "radius_mi": 15 }'
  3. 3

    Walk the full flow

    Place a real sandbox order against the seeded patient and pull the report back when it's ready.

    curl -X POST https://api.sandbox.scan.com/api/v2/orders \
    -H "Authorization: Bearer $SCAN_KEY" \
    -d '{
    "provider_id": "prv_5Kd2",
    "patient_id": "pat_8Jm1",
    "body_part": "lumbar_spine",
    "cpt": "72148"
    }'
    # => 201 Created
    # { "id": "ord_Qa7", "status": "scheduled" }
    Test every branch: use magic IDs to force outcomes. ord_report_ready returns a signed report, prv_no_availability returns an empty slot set, pat_invalid triggers a 422.
  4. 4

    Go to production

    We BAA-gate production access and run a short technical review, usually same week. Bring your callback URL and we'll wire it up.

API reference

Search providers

Search the imaging network by modality, geography, payer network and price. Returns freestanding and hospital pricing for site-of-care comparison. Paginated, fully sandboxable.

Request API access →
POSThttps://api.scan.com/api/v2/providers/search

Returns data[] of Provider objects, plus has_more boolean.

Body parameters

  • modalitystring enumRequired

    mri · ct · xray · ultrasound · pet · mammo

  • zipstringRequired

    5-digit US ZIP for the search origin.

  • radius_miintegerOptional

    Search radius in miles. Default 25.

  • networkstringOptional

    Payer slug, e.g. aetna_ppo.

  • limitintegerOptional

    Results per page. Default 20, max 100.

Request
curl -X POST https://api.sandbox.scan.com/api/v2/providers/search \
-H "Authorization: Bearer $SCAN_KEY" \
-H "Content-Type: application/json" \
-d '{
"modality": "mri",
"zip": "30303",
"radius_mi": 25,
"network": "aetna_ppo",
"limit": 20
}'
Example response
{
"data": [
{
"id": "prv_5Kd2",
"name": "Peachtree Imaging - Midtown",
"modality": "mri",
"distance_mi": 2.4,
"in_network": true,
"cash_price_usd": 420,
"hospital_price_usd": 1180
},
{
"id": "prv_9Tb8",
"name": "Atlanta Open MRI",
"modality": "mri",
"distance_mi": 5.1,
"in_network": true,
"cash_price_usd": 395,
"hospital_price_usd": 1090
}
],
"has_more": false
}

Built for healthcare

HIPAA, BAA-gated productionSOC 2 Type IIPHI-free sandbox, synthetic dataScoped API keys and OAuth99.95% uptime, status page
Built for agents

Built for machines as well as developers: clean markdown docs, a full OpenAPI spec, and an MCP server.

Still rare in healthcare APIs.

  • llms.txt and .md on every page
  • Copy for LLM, Open in Claude or ChatGPT
  • MCP server for Cursor, VS Code, Claude

SDKs

TypeScriptnpm i @scan/apiPythonpip install scanGocoming soonPostmanforkable collectionOpenAPIdownload spec

Start building today

Sandbox keys in minutes. Production access after a short technical review.