Page cover

Basic Iframe Integration Guide

This guide provides instructions for embedding RADPAIR within your application using the simplified iframe integration. This integration is designed for new partners who want to get started quickly with minimal complexity.

circle-info

This guide covers basic, single-author workflows only. For multi-author workflows, advanced event handling, or complex organizational structures, please refer to the Advanced Integration Guide.

Overview

The Basic Integration is designed to:

  • Minimize complexity — Reports flow in via HL7 integration, then open them by MRN and accession number

  • Use industry-standard identifiers — MRN and accession number ensure report uniqueness (no internal report IDs needed)

  • Handle user management internally — RADPAIR manages user metadata, roles, and authentication

  • Provide essential status updates — Five core events: opened, closed, saved, discarded, and signed

Integration Workflow (Summary)

1

HL7 Integration (Handled by Interoperability Partner)

Reports are created and pre-cached via HL7/DICOM before users need them.

2

Embed Iframe

Add RADPAIR iframe to your application to render the reader UI.

3

Authenticate

  • Wait for the app_ready event from the iframe.

  • Send the access token.

  • Wait for sign_in_successful.

4

Open Report

Send the MRN, accession number and site id to open the pre-cached report in the iframe.

5

Listen for Events

Handle core reporting events (opened, saved, signed, discarded, closed).


Environments & URLs

RADPAIR operates separate environments with independent databases. API keys, users, and reports are not shared across environments. Use the URLs that match the environment your organization is provisioned on.

Step 1: HL7 Integration (Handled by Interoperability Partner)

Report data flows into RADPAIR through our HL7/DICOM interoperability partner. This integration handles the creation and pre-caching of reports before users access them, ensuring instant load times and proper metadata association.

circle-info

You do not need to implement this step directly. Your RADPAIR representative will coordinate the HL7 integration setup with your interoperability partner.

Report Delivery

When reports are signed, RADPAIR sends report events to the interoperability partner, who transforms them into HL7 ORU (Observation Result) messages for delivery to your downstream systems (PACS, EMR). This includes support for:

  • Standard reports — Delivered upon signature (or after recall window if enabled)

  • Linked reports — Multiple studies can be linked to a single report; when signed, events are sent for all linked studies

Data Flow Overview

Endpoint:

Headers:

Request Body:

Required Fields:

Field
Type
Description

mrn

string

Medical Record Number — patient identifier

accession_number

string

Accession number — unique study identifier

site_id

string

Site identifier — used in multi-site organizations to ensure the report is routed to the correct site

circle-info

Together, MRN and accession number ensure report uniqueness within a site. For multi-site organizations, use the site_id parameter to specify which site the report belongs to.

Optional Metadata Fields

Field
Type
Description

studyDescription

string

Description of the imaging study

clinical_notes

string

Clinical history or reason for exam

laterality

string

Side of body (e.g., "Left", "Right", "Bilateral")

views

string

Imaging views obtained

comparison

string

Prior studies available for comparison

symptom

string

Patient's presenting symptoms

modality

string

Imaging modality (e.g., "CT", "MR", "XR", "US")

contrast

string

Contrast administration details

patient_age

string

Patient's age

patient_gender

string

Patient's gender

pre_findings

string

DICOM SR data or AI-detected findings

findings

string

Pre-populated findings text


Organization Hierarchy in RADPAIR

RADPAIR uses a parent-child organization structure to support multi-site deployments. This is particularly important for healthcare systems with multiple facilities that may have different EMR/HIS systems.

Site ID Purpose and Requirements

The site_id field serves as a critical identifier that:

  • Maps to HL7 MSH.4 field — Ensures consistency between your HIS/EMR and RADPAIR

  • Ensures report uniqueness — Prevents duplicate MRN+Accession combinations across sites

  • Routes reports correctly — Directs reports to the appropriate sub-organization

circle-exclamation

Multi-Site Example

Consider a regional health system with multiple campuses, each running different EMR systems:

Parent Organization: Regional Health System API Key: Issued to parent organization Sub-Organizations:

  • East Campus (site_id: EAST_MAIN_CAMPUS)

  • West Campus (site_id: WEST_SATELLITE)

  • Downtown Clinic (site_id: DOWNTOWN_URGENT)

When sending reports via HL7 integration:

This ensures that even if two different campuses have a patient with the same MRN and coincidentally the same accession number, they'll be treated as separate, unique reports.

Setting Up Sub-Organizations

1

Step 1

Navigate to your parent organization's settings in RADPAIR.

2

Step 2

Create sub-organizations for each site that will send reports.

3

Step 3

Name each sub-organization exactly as it appears in your HL7 MSH.4 field.

4

Step 4

Use these same values as the site_id in all API calls.

5

Step 5

Required Org Setting: Enable Sub-Organization Report Access

For users to access reports routed to sub-organizations via `site_id`, an admin must enable "Enable Sub-Organization Report Access" in the parent org's Integration settings.

Navigate to Org Settings → Integration → Enable Sub-Organization Report Access and toggle it on.

circle-info

Single-Site Organizations: If you're operating a single facility, you can use your parent organization directly as the site_id, or optionally create a sub-organization with an identifier like "MAIN" or your facility code.


Step 2: Embed the Iframe

Add the RADPAIR iframe to your application:

Iframe Attributes

Attribute
Purpose

allow="microphone; hid"

Required for dictation and hardware devices (e.g., SpeechMike)

credentialless

Isolates session storage to prevent conflicts with multiple instances

?headless=true

Hides RADPAIR navigation UI for embedded use

circle-info

Advanced Workflow Control: The Basic Integration covers standard report opening and event listening. For fine-grained control of the RADPAIR interface—such as programmatically controlling dictation recording, signing reports, managing report state (save/discard/close), adding addendums, customizing UI visibility, or configuring notifications—see Further Iframe Interactions during Reportingarrow-up-right in the Advanced Integration Guide.


Step 3: Authentication

Obtaining an API Key

  1. Navigate to your organization's settings page in RADPAIR

  2. Click the options menu (⋮) and select "API Keys"

  3. Click "Create New API Key"

  4. Copy and securely store the generated key — it will only be shown once

Creating an Access Token

Endpoint:

Headers:

Request Body:

Parameter
Type
Required
Description

user_email

string

Email of the user

first_name

string

User's first name

last_name

string

User's last name

Response:

circle-exclamation

Authenticating the Iframe


Step 4: Open Reports

Once authenticated, open a report by sending the MRN, accession number, and site id. If the report does not already exist in RADPAIR, it will be created automatically — making this an upsert operation.

You can also include optional metadata fields to provide clinical context, just as you would with the report creation endpoint. If the report already exists, the metadata will be updated with the provided values.

Example: Open with Metadata

Field
Type
Description

studyDescription

string

Description of the imaging study

clinical_notes

string

Clinical history or reason for exam

laterality

string

Side of body (e.g., "Left", "Right", "Bilateral")

views

string

Imaging views obtained

comparison

string

Prior studies available for comparison

symptom

string

Patient's presenting symptoms

modality

string

Imaging modality (e.g., "CT", "MR", "XR", "US")

contrast

string

Contrast administration details

patient_age

string

Patient's age

patient_gender

string

Patient's gender

pre_findings

string

DICOM SR data or AI-detected findings

findings

string

Pre-populated findings text

The metadata object supports the same fields as the report creation endpoint:

Optional Metadata Fields

circle-info

Ensuring Report Uniqueness: MRN and accession number together uniquely identify the report within a site. For multi-site organizations where these identifiers may overlap, you can provide the site_id parameter to specify which site the report belongs to.

circle-info

Upsert Behavior: If a report matching the given MRN, accession number, and site ID already exists, it will be opened. If no matching report exists, one will be created automatically with the provided metadata.

Required Fields:

Field
Type
Description

mrn

string

Medical Record Number — patient identifier

accession_number

string

Accession number — unique study identifier

site_id

string

Site identifier — used in multi-site organizations to ensure the report is routed to the correct site

Example:

Closing Reports

To close the currently open report:


Step 4a: Linking Multiple Reports (Coming Soon)

RADPAIR supports linking multiple studies from the same patient into a single combined report. This is useful when a radiologist needs to read and report on multiple related studies together (e.g., multiple body parts from the same examination, or comparison studies).

How Report Linking Works

To link multiple reports, send the same MRN with multiple accession numbers. RADPAIR will automatically link these studies together in the system, allowing the radiologist to view and report on them as a unified report.

As with single reports, this is an upsert operation — any reports that do not already exist will be created automatically. You can provide per-report metadata using the metadata_by_accession field.

circle-info

Persistent Linking: Once reports are linked, opening any individual report in the group will always open the full combined report. Linked reports cannot be unlinked by re-opening a single accession number.

Opening and Linking Multiple Reports

Required Fields for Linked Reports:

Field
Type
Description

mrn

string

Medical Record Number — must be the same for all linked reports

accession_numbers

string[]

Array of accession numbers to link together

site_id

string

Site identifier — used in multi-site organizations to ensure the report is routed to the correct site

Optional Fields:

Field
Type
Description

metadata_by_accession

object

Per-report metadata keyed by accession number. Each value supports the same metadata fields as the report creation endpoint (see Optional Metadata Fields in Step 4).

circle-info

Important: All reports being linked must belong to the same patient (same MRN). If any of the reports do not already exist, they will be created automatically. When the radiologist signs the combined report, events will be sent for all linked accession numbers.

Example: Linking Three Studies

Events for Linked Reports

When a linked report is signed, RADPAIR will send separate report.signed events for each linked accession number. Your application should handle these events individually:


Step 5: Listen for Events

RADPAIR sends events to notify your application of report state changes. For basic integrations, you only need to handle five core events.

Core Events

Event
Description
When It Fires

report.opened

Report was opened

User opens a report

report.closed

Report was closed

User closes or navigates away from report

report.saved

Report saved as draft

User saves work in progress

report.discarded_completely

Report was discarded

User discards the report (unassigns it, making it available for others)

report.signed

Report was signed

User signs the report (triggers downstream delivery)

circle-info

Note on report.published: A report.published event also exists, but you can ignore it — report delivery to downstream systems (PACS, EMR) is handled automatically by our HL7 interoperability partner.

circle-info

Note on Report Recall: If Report Recall is enabled, you will receive a report.signed event at the beginning of the recall period, and then again when the recall window has elapsed (or if the user clicks "Sign Now"). If a user recalls a report during that time, you will receive a report.opened event with a report status of draft.

Event Listener Example

Event Payload Structure

All events include both MRN, accession number and site id for identification:

Key Payload Fields:

Field
Description

mrn

The Medical Record Number

accession_number

The accession number

report_status

Signature type: preliminary, signed, or addendum

user_info

Information about the user who signed

timestamp

Unix timestamp of the event

site_id

The site id

Report.signed — Sign Type Values

The report.signed event fires for all signing actions. Use payload.data.sign_context.sign_type to determine which type of signing occurred:

sign_type Value

Description

Resulting report_status

sign

Final signing

signed

sign_prelim

Preliminary signing

prelim_signed

sign_addendum

Addendum final signing

addendum_signed

sign_addendum_prelim

Addendum preliminary signing

addendum_prelim_signed

circle-info

Events return the same mrn , accession_number and site_id from the HL7 integration. You do not need to track internal report IDs.


Complete Integration Example


Report Status Values

Events include a report_status field indicating the current state:

Status
Description

unread

Report is unread

draft

Report is being worked on, not yet signed

prelim_signed

Preliminary read (resident/trainee signature)

signed

Final signature by attending radiologist

addendum_signed

Addendum added to a signed report

addendum_prelim_signed

Prelim Addendum added to a signed report


Additional Features

Critical Results Labeling

Critical Results Labeling allows radiologists to flag reports with critical findings directly from the reporting interface. When enabled, a dropdown appears in the report sidebar where users can select from organization-defined critical result options before or during signing.

Enabling Critical Results Labeling

This feature requires integration to be enabled. To configure it:

1

Navigate to Org Settings → General → Critical Results Labeling.

2

Enable the feature

Toggle the feature on.

3

Add critical result options

Add one or more critical result options, each with:

  • Name — Display label shown to users (e.g., "Stroke Alert", "Pulmonary Embolism")

  • Value — Unique identifier included in event payloads (e.g., "stroke", "pe")

circle-info

Option names and values must each be unique within the organization. You can define options before enabling the feature.

User Experience

When enabled, a Critical Result accordion appears in the report sidebar with a warning icon. The radiologist can:

  • Select a critical result option from the dropdown before or at the time of signing

  • Clear the selection if no critical finding applies

  • See both the display name and value for each option

The selected critical result is saved to the report immediately upon selection.

Critical Result in Event Payloads

When a report has a critical result selected, the critical_result field is included in all event payloads (iframe events and webhooks). If no critical result is selected, the field is null.

Iframe event payload example:

Critical Result Field:

Field
Type
Description

critical_result

object / null

The selected critical result, or null if none

critical_result.name

string

Display name of the critical result option

critical_result.value

string

Unique identifier for the critical result option

circle-info

The critical_result field appears consistently across all event types — including report.signed, report.saved, and report.updated — as well as in webhook payloads and public API responses.

Handling Critical Results in Your Integration

Troubleshooting

circle-info

Use the expandable items below to view common troubleshooting scenarios.

chevron-right"App not ready" errorshashtag

Wait for the app_ready event before sending authentication.

chevron-right"Not authenticated" errorshashtag
  • Verify the access token is valid (tokens expire after 24 hours)

  • Ensure you received sign_in_successful before opening reports

chevron-rightReport not openinghashtag
  • Verify the report exists (was received via HL7 integration)

  • Check that both MRN and accession number match exactly

  • Ensure the user belongs to the organization where the report was created

  • In rare cases with complex multi-site organizations, verify the org_path is correct

  • For linked reports, ensure all accession numbers have been pre-cached and belong to the same MRN

chevron-rightEvents not receivedhashtag
  • Confirm event listener is checking the correct origin

  • Ensure iframe is loaded before adding the listener

chevron-rightLinked reports not workinghashtag
  • Verify all accession numbers belong to the same patient (same MRN)

  • Ensure all studies have been pre-cached via HL7 integration

  • Check that you're using the accession_numbers array (plural) for linked reports


Support

For integration support, contact your RADPAIR representative or email [email protected].

Last updated