Skip to content
Get started

Viewer

ModelsExpand Collapse
StudyViewerStatus = "incomplete" | "complete"

Viewer completion status for a study. ‘incomplete’ = not yet finished in the viewer, ‘complete’ = finished.

One of the following:
"incomplete"
"complete"

ViewerEphemeral Sessions

Create an ephemeral Viewer session
client.viewer.ephemeralSessions.create(EphemeralSessionCreateParams { retrievalId, hangingProtocol, options } body, RequestOptionsoptions?): EphemeralSessionCreateResponse { url }
POST/v1/viewer/ephemeral-sessions
ModelsExpand Collapse
EphemeralSessionCreateResponse { url }

Tokenized landing URL for an ephemeral Viewer session (30-second token).

url: string

ViewerStudies

Create a new study
client.viewer.studies.create(StudyCreateParams { severity, studyDescription, studyInstanceUid, 3 more } body, RequestOptionsoptions?): StudyCreateResponse { cancelledAt, createdAt, isCancelled, 11 more }
POST/v1/viewer/studies
List studies with pagination
client.viewer.studies.list(StudyListParams { assignedTo, cursor, expressCustomerId, 5 more } query?, RequestOptionsoptions?): CursorStudies<StudyListResponse { cancelledAt, createdAt, isCancelled, 11 more } >
GET/v1/viewer/studies
Retrieve a study by ID
client.viewer.studies.retrieve(stringstudyID, RequestOptionsoptions?): StudyRetrieveResponse { cancelledAt, createdAt, isCancelled, 11 more }
GET/v1/viewer/studies/{studyId}
Update a study
client.viewer.studies.update(stringstudyID, StudyUpdateParams { assignedTo, metadata, severity, 2 more } body?, RequestOptionsoptions?): StudyUpdateResponse { cancelledAt, createdAt, isCancelled, 11 more }
PATCH/v1/viewer/studies/{studyId}
Cancel a study
client.viewer.studies.cancel(StudyCancelParams { studyId, studyInstanceUid } body?, RequestOptionsoptions?): StudyCancelResponse { success, message }
POST/v1/viewer/studies/cancel
Uncancel a study
client.viewer.studies.uncancel(StudyUncancelParams { studyId, studyInstanceUid } body?, RequestOptionsoptions?): StudyUncancelResponse { success, message }
POST/v1/viewer/studies/uncancel
Generate a viewer reroute URL
client.viewer.studies.rerouteURL(StudyRerouteURLParams { studyId, studyInstanceUid } body?, RequestOptionsoptions?): StudyRerouteURLResponse { url }
POST/v1/viewer/studies/reroute-url
Retrieve a study by DICOM UID
client.viewer.studies.retrieveByUid(stringstudyInstanceUid, RequestOptionsoptions?): StudyRetrieveByUidResponse { cancelledAt, createdAt, isCancelled, 11 more }
GET/v1/viewer/studies/by-uid/{studyInstanceUid}
ModelsExpand Collapse
StudyCreateResponse { cancelledAt, createdAt, isCancelled, 11 more }

A study entity in the Viewer system with viewing status

cancelledAt: string | null

Timestamp when the study was cancelled, null if not cancelled

formatdate-time
createdAt: string | null

Timestamp when the study was created

formatdate-time
isCancelled: boolean

Whether the study has been cancelled

severity: Severity

Priority level of a study. ‘normal’ for routine, ‘high’ for urgent, ‘stat’ for immediate attention.

One of the following:
"normal"
"high"
"stat"
studyDescription: string

Description of the study/scan (e.g., ‘Brain MRI with Contrast’, ‘Chest CT’)

minLength1
studyId: string

Unique study identifier. Format: stu_{32-hex-chars}

studyInstanceUid: string

DICOM Study Instance UID. Must be a valid DICOM UID format (e.g., ‘1.2.840.10008.5.1.4.1.1.2’)

minLength1
studyViewerStatus: StudyViewerStatus

Viewer completion status for a study. ‘incomplete’ = not yet finished in the viewer, ‘complete’ = finished.

One of the following:
"incomplete"
"complete"
updatedAt: string | null

Timestamp when the study was last updated

formatdate-time
assignedTo?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

createdByApiKey?: APIKeyReference { apiKeyId, description, isClinicalContextEnrichmentEnabled, isViewerEnabled } | null

A reference to an API key with basic identifying information

apiKeyId: string

Unique API key identifier (UUIDv4 format)

formatuuid
description: string

Human-readable description of the API key

minLength1
isClinicalContextEnrichmentEnabled?: boolean

Whether this API key has a clinical-context enrichment webhook configured

isViewerEnabled?: boolean

Whether this API key has access to the Viewer product

createdByUser?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

expressCustomer?: ExpressCustomerReference { expressCustomerId, expressCustomerName } | null

A reference to an Express customer with basic identifying information

expressCustomerId: string

Unique Express customer identifier. Format: cus_{32-hex-chars}

expressCustomerName: string

Name of the Express customer

minLength1
metadata?: Record<string, string>

Custom key-value metadata for the study. Maximum 50 pairs, keys up to 100 chars, values up to 1000 chars

StudyListResponse { cancelledAt, createdAt, isCancelled, 11 more }

A study entity in the Viewer system with viewing status

cancelledAt: string | null

Timestamp when the study was cancelled, null if not cancelled

formatdate-time
createdAt: string | null

Timestamp when the study was created

formatdate-time
isCancelled: boolean

Whether the study has been cancelled

severity: Severity

Priority level of a study. ‘normal’ for routine, ‘high’ for urgent, ‘stat’ for immediate attention.

One of the following:
"normal"
"high"
"stat"
studyDescription: string

Description of the study/scan (e.g., ‘Brain MRI with Contrast’, ‘Chest CT’)

minLength1
studyId: string

Unique study identifier. Format: stu_{32-hex-chars}

studyInstanceUid: string

DICOM Study Instance UID. Must be a valid DICOM UID format (e.g., ‘1.2.840.10008.5.1.4.1.1.2’)

minLength1
studyViewerStatus: StudyViewerStatus

Viewer completion status for a study. ‘incomplete’ = not yet finished in the viewer, ‘complete’ = finished.

One of the following:
"incomplete"
"complete"
updatedAt: string | null

Timestamp when the study was last updated

formatdate-time
assignedTo?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

createdByApiKey?: APIKeyReference { apiKeyId, description, isClinicalContextEnrichmentEnabled, isViewerEnabled } | null

A reference to an API key with basic identifying information

apiKeyId: string

Unique API key identifier (UUIDv4 format)

formatuuid
description: string

Human-readable description of the API key

minLength1
isClinicalContextEnrichmentEnabled?: boolean

Whether this API key has a clinical-context enrichment webhook configured

isViewerEnabled?: boolean

Whether this API key has access to the Viewer product

createdByUser?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

expressCustomer?: ExpressCustomerReference { expressCustomerId, expressCustomerName } | null

A reference to an Express customer with basic identifying information

expressCustomerId: string

Unique Express customer identifier. Format: cus_{32-hex-chars}

expressCustomerName: string

Name of the Express customer

minLength1
metadata?: Record<string, string>

Custom key-value metadata for the study. Maximum 50 pairs, keys up to 100 chars, values up to 1000 chars

StudyRetrieveResponse { cancelledAt, createdAt, isCancelled, 11 more }

A study entity in the Viewer system with viewing status

cancelledAt: string | null

Timestamp when the study was cancelled, null if not cancelled

formatdate-time
createdAt: string | null

Timestamp when the study was created

formatdate-time
isCancelled: boolean

Whether the study has been cancelled

severity: Severity

Priority level of a study. ‘normal’ for routine, ‘high’ for urgent, ‘stat’ for immediate attention.

One of the following:
"normal"
"high"
"stat"
studyDescription: string

Description of the study/scan (e.g., ‘Brain MRI with Contrast’, ‘Chest CT’)

minLength1
studyId: string

Unique study identifier. Format: stu_{32-hex-chars}

studyInstanceUid: string

DICOM Study Instance UID. Must be a valid DICOM UID format (e.g., ‘1.2.840.10008.5.1.4.1.1.2’)

minLength1
studyViewerStatus: StudyViewerStatus

Viewer completion status for a study. ‘incomplete’ = not yet finished in the viewer, ‘complete’ = finished.

One of the following:
"incomplete"
"complete"
updatedAt: string | null

Timestamp when the study was last updated

formatdate-time
assignedTo?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

createdByApiKey?: APIKeyReference { apiKeyId, description, isClinicalContextEnrichmentEnabled, isViewerEnabled } | null

A reference to an API key with basic identifying information

apiKeyId: string

Unique API key identifier (UUIDv4 format)

formatuuid
description: string

Human-readable description of the API key

minLength1
isClinicalContextEnrichmentEnabled?: boolean

Whether this API key has a clinical-context enrichment webhook configured

isViewerEnabled?: boolean

Whether this API key has access to the Viewer product

createdByUser?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

expressCustomer?: ExpressCustomerReference { expressCustomerId, expressCustomerName } | null

A reference to an Express customer with basic identifying information

expressCustomerId: string

Unique Express customer identifier. Format: cus_{32-hex-chars}

expressCustomerName: string

Name of the Express customer

minLength1
metadata?: Record<string, string>

Custom key-value metadata for the study. Maximum 50 pairs, keys up to 100 chars, values up to 1000 chars

StudyUpdateResponse { cancelledAt, createdAt, isCancelled, 11 more }

A study entity in the Viewer system with viewing status

cancelledAt: string | null

Timestamp when the study was cancelled, null if not cancelled

formatdate-time
createdAt: string | null

Timestamp when the study was created

formatdate-time
isCancelled: boolean

Whether the study has been cancelled

severity: Severity

Priority level of a study. ‘normal’ for routine, ‘high’ for urgent, ‘stat’ for immediate attention.

One of the following:
"normal"
"high"
"stat"
studyDescription: string

Description of the study/scan (e.g., ‘Brain MRI with Contrast’, ‘Chest CT’)

minLength1
studyId: string

Unique study identifier. Format: stu_{32-hex-chars}

studyInstanceUid: string

DICOM Study Instance UID. Must be a valid DICOM UID format (e.g., ‘1.2.840.10008.5.1.4.1.1.2’)

minLength1
studyViewerStatus: StudyViewerStatus

Viewer completion status for a study. ‘incomplete’ = not yet finished in the viewer, ‘complete’ = finished.

One of the following:
"incomplete"
"complete"
updatedAt: string | null

Timestamp when the study was last updated

formatdate-time
assignedTo?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

createdByApiKey?: APIKeyReference { apiKeyId, description, isClinicalContextEnrichmentEnabled, isViewerEnabled } | null

A reference to an API key with basic identifying information

apiKeyId: string

Unique API key identifier (UUIDv4 format)

formatuuid
description: string

Human-readable description of the API key

minLength1
isClinicalContextEnrichmentEnabled?: boolean

Whether this API key has a clinical-context enrichment webhook configured

isViewerEnabled?: boolean

Whether this API key has access to the Viewer product

createdByUser?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

expressCustomer?: ExpressCustomerReference { expressCustomerId, expressCustomerName } | null

A reference to an Express customer with basic identifying information

expressCustomerId: string

Unique Express customer identifier. Format: cus_{32-hex-chars}

expressCustomerName: string

Name of the Express customer

minLength1
metadata?: Record<string, string>

Custom key-value metadata for the study. Maximum 50 pairs, keys up to 100 chars, values up to 1000 chars

StudyCancelResponse { success, message }

Response for cancelling a study in Viewer

success: boolean
message?: string
StudyUncancelResponse { success, message }

Response for uncancelling a study in Viewer

success: boolean
message?: string
StudyRerouteURLResponse { url }

Response containing the generated reroute URL for a study in Viewer

url: string
StudyRetrieveByUidResponse { cancelledAt, createdAt, isCancelled, 11 more }

A study entity in the Viewer system with viewing status

cancelledAt: string | null

Timestamp when the study was cancelled, null if not cancelled

formatdate-time
createdAt: string | null

Timestamp when the study was created

formatdate-time
isCancelled: boolean

Whether the study has been cancelled

severity: Severity

Priority level of a study. ‘normal’ for routine, ‘high’ for urgent, ‘stat’ for immediate attention.

One of the following:
"normal"
"high"
"stat"
studyDescription: string

Description of the study/scan (e.g., ‘Brain MRI with Contrast’, ‘Chest CT’)

minLength1
studyId: string

Unique study identifier. Format: stu_{32-hex-chars}

studyInstanceUid: string

DICOM Study Instance UID. Must be a valid DICOM UID format (e.g., ‘1.2.840.10008.5.1.4.1.1.2’)

minLength1
studyViewerStatus: StudyViewerStatus

Viewer completion status for a study. ‘incomplete’ = not yet finished in the viewer, ‘complete’ = finished.

One of the following:
"incomplete"
"complete"
updatedAt: string | null

Timestamp when the study was last updated

formatdate-time
assignedTo?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

createdByApiKey?: APIKeyReference { apiKeyId, description, isClinicalContextEnrichmentEnabled, isViewerEnabled } | null

A reference to an API key with basic identifying information

apiKeyId: string

Unique API key identifier (UUIDv4 format)

formatuuid
description: string

Human-readable description of the API key

minLength1
isClinicalContextEnrichmentEnabled?: boolean

Whether this API key has a clinical-context enrichment webhook configured

isViewerEnabled?: boolean

Whether this API key has access to the Viewer product

createdByUser?: UserReference { email, userId, firstName, 4 more } | null

A reference to a user with basic identifying information

email: string

User’s email address

userId: string

Unique user identifier. Format: usr_{32-hex-chars}

firstName?: string

User’s first name

lastName?: string

User’s last name

middleName?: string

User’s middle name

suffix1?: string

Name suffix (e.g., ‘MD’, ‘Jr.’)

suffix2?: string

Additional name suffix

expressCustomer?: ExpressCustomerReference { expressCustomerId, expressCustomerName } | null

A reference to an Express customer with basic identifying information

expressCustomerId: string

Unique Express customer identifier. Format: cus_{32-hex-chars}

expressCustomerName: string

Name of the Express customer

minLength1
metadata?: Record<string, string>

Custom key-value metadata for the study. Maximum 50 pairs, keys up to 100 chars, values up to 1000 chars

ViewerUsers

Create and invite a new user
client.viewer.users.invite(UserInviteParams { canManageStudies, clinicRole, email, 8 more } body, RequestOptionsoptions?): UserInviteResponse { canManageStudies, clinicRole, createdAt, 12 more }
POST/v1/viewer/users
List users with pagination
client.viewer.users.list(UserListParams { cursor, email, firstName, 4 more } query?, RequestOptionsoptions?): CursorUsers<UserListResponse { canManageStudies, clinicRole, createdAt, 12 more } >
GET/v1/viewer/users
Retrieve a user by ID
client.viewer.users.retrieve(stringuserID, RequestOptionsoptions?): UserRetrieveResponse { canManageStudies, clinicRole, createdAt, 12 more }
GET/v1/viewer/users/{userId}
Update a user
client.viewer.users.update(stringuserID, UserUpdateParams { canManageStudies, clinicRole, firstName, 7 more } body?, RequestOptionsoptions?): UserUpdateResponse { canManageStudies, clinicRole, createdAt, 12 more }
PATCH/v1/viewer/users/{userId}
Revoke user access
client.viewer.users.revokeAccess(UserRevokeAccessParams { userId } body, RequestOptionsoptions?): UserRevokeAccessResponse { success, message }
POST/v1/viewer/users/revoke-access
Reactivate a user
client.viewer.users.reactivate(UserReactivateParams { userId } body, RequestOptionsoptions?): UserReactivateResponse { success, message }
POST/v1/viewer/users/reactivate
ModelsExpand Collapse
UserInviteResponse { canManageStudies, clinicRole, createdAt, 12 more }

Response for inviting a user to Viewer. Level is restricted to admin/member since owners cannot be invited via API.

canManageStudies: boolean

Whether the user has permission to create, update, and manage studies

clinicRole: ClinicRole

A user’s clinical or organizational role within the clinic.

One of the following:
"Doctor"
"Physician"
"Surgeon"
"Radiologist"
"Cardiologist"
"Neurologist"
"Urologist"
"Gynecologist"
"Endocrinologist"
"Oncologist"
"Radiation Oncologist"
"Hematologist"
"Gastroenterologist"
"Pulmonologist"
"Nephrologist"
"Rheumatologist"
"Dermatologist"
"Ophthalmologist"
"Otolaryngologist"
"Pediatrician"
"Obstetrician"
"Psychiatrist"
"Anesthesiologist"
"Emergency Medicine Physician"
"Family Medicine Physician"
"Internal Medicine Physician"
"Pathologist"
"Nuclear Medicine Physician"
"Pain Management Specialist"
"Infectious Disease Specialist"
"Immunologist"
"Physician Assistant"
"Nurse Practitioner"
"Certified Registered Nurse Anesthetist"
"Psychologist"
"Medical Assistant"
"Scribe"
"Registered Nurse"
"Nurse Manager"
"Patient Care Coordinator"
"Imaging Technologist"
"Laboratory Technician"
"Medical Laboratory Scientist"
"Pathologists' Assistant"
"Phlebotomist"
"Pharmacist"
"Pharmacy Technician"
"Physical Therapist"
"Occupational Therapist"
"Speech-Language Pathologist"
"Respiratory Therapist"
"Nutritionist"
"Front Desk Operator"
"Revenue Cycle Manager"
"Administrative Director"
"Administrative Assistant"
"Legal Administrator"
"IT Administrator"
"IT Support"
"Software Engineer"
"Other"
createdAt: string | null

Timestamp when the user was created

formatdate-time
email: string

User’s email address for login and notifications

firstName: string

User’s first name

minLength1
hasDashboardAccess: boolean

Whether the user can access the dashboard interface. Required for admin users

invitedSource: InvitedSource

How a user/invitation was created - via the dashboard UI (‘dashboard’) or the API (‘api’).

One of the following:
"dashboard"
"api"
lastLoginAt: string | null

Timestamp of user’s last login, null if never logged in

formatdate-time
lastName: string

User’s last name

minLength1

User access level assignable via the API. ‘admin’ can manage users/settings, ‘member’ has standard access. ‘owner’ is dashboard-only and cannot be assigned via the API.

One of the following:
"admin"
"member"
userId: string

Unique user identifier. Format: usr_{32-hex-chars}

middleName?: string

User’s middle name (optional)

minLength1
phoneNumber?: string

User’s phone number (10-15 digits, optional)

suffix1?: string

Name suffix (e.g., ‘Jr.’, ‘Sr.’, ‘III’) - optional

minLength1
suffix2?: string

Additional name suffix (optional)

minLength1
UserListResponse { canManageStudies, clinicRole, createdAt, 12 more }

A user in the Viewer system with study management permissions

canManageStudies: boolean

Whether the user has permission to create, update, and manage studies

clinicRole: ClinicRole

A user’s clinical or organizational role within the clinic.

One of the following:
"Doctor"
"Physician"
"Surgeon"
"Radiologist"
"Cardiologist"
"Neurologist"
"Urologist"
"Gynecologist"
"Endocrinologist"
"Oncologist"
"Radiation Oncologist"
"Hematologist"
"Gastroenterologist"
"Pulmonologist"
"Nephrologist"
"Rheumatologist"
"Dermatologist"
"Ophthalmologist"
"Otolaryngologist"
"Pediatrician"
"Obstetrician"
"Psychiatrist"
"Anesthesiologist"
"Emergency Medicine Physician"
"Family Medicine Physician"
"Internal Medicine Physician"
"Pathologist"
"Nuclear Medicine Physician"
"Pain Management Specialist"
"Infectious Disease Specialist"
"Immunologist"
"Physician Assistant"
"Nurse Practitioner"
"Certified Registered Nurse Anesthetist"
"Psychologist"
"Medical Assistant"
"Scribe"
"Registered Nurse"
"Nurse Manager"
"Patient Care Coordinator"
"Imaging Technologist"
"Laboratory Technician"
"Medical Laboratory Scientist"
"Pathologists' Assistant"
"Phlebotomist"
"Pharmacist"
"Pharmacy Technician"
"Physical Therapist"
"Occupational Therapist"
"Speech-Language Pathologist"
"Respiratory Therapist"
"Nutritionist"
"Front Desk Operator"
"Revenue Cycle Manager"
"Administrative Director"
"Administrative Assistant"
"Legal Administrator"
"IT Administrator"
"IT Support"
"Software Engineer"
"Other"
createdAt: string | null

Timestamp when the user was created

formatdate-time
email: string

User’s email address for login and notifications

firstName: string

User’s first name

minLength1
hasDashboardAccess: boolean

Whether the user can access the dashboard interface. Required for admin users

invitedSource: InvitedSource

How a user/invitation was created - via the dashboard UI (‘dashboard’) or the API (‘api’).

One of the following:
"dashboard"
"api"
lastLoginAt: string | null

Timestamp of user’s last login, null if never logged in

formatdate-time
lastName: string

User’s last name

minLength1
level: UserLevel

User access level. ‘owner’ has full control (dashboard-only, not assignable via API), ‘admin’ can manage users/settings, ‘member’ has standard access.

One of the following:
"owner"
"admin"
"member"
userId: string

Unique user identifier. Format: usr_{32-hex-chars}

middleName?: string

User’s middle name (optional)

minLength1
phoneNumber?: string

User’s phone number (10-15 digits, optional)

suffix1?: string

Name suffix (e.g., ‘Jr.’, ‘Sr.’, ‘III’) - optional

minLength1
suffix2?: string

Additional name suffix (optional)

minLength1
UserRetrieveResponse { canManageStudies, clinicRole, createdAt, 12 more }

A user in the Viewer system with study management permissions

canManageStudies: boolean

Whether the user has permission to create, update, and manage studies

clinicRole: ClinicRole

A user’s clinical or organizational role within the clinic.

One of the following:
"Doctor"
"Physician"
"Surgeon"
"Radiologist"
"Cardiologist"
"Neurologist"
"Urologist"
"Gynecologist"
"Endocrinologist"
"Oncologist"
"Radiation Oncologist"
"Hematologist"
"Gastroenterologist"
"Pulmonologist"
"Nephrologist"
"Rheumatologist"
"Dermatologist"
"Ophthalmologist"
"Otolaryngologist"
"Pediatrician"
"Obstetrician"
"Psychiatrist"
"Anesthesiologist"
"Emergency Medicine Physician"
"Family Medicine Physician"
"Internal Medicine Physician"
"Pathologist"
"Nuclear Medicine Physician"
"Pain Management Specialist"
"Infectious Disease Specialist"
"Immunologist"
"Physician Assistant"
"Nurse Practitioner"
"Certified Registered Nurse Anesthetist"
"Psychologist"
"Medical Assistant"
"Scribe"
"Registered Nurse"
"Nurse Manager"
"Patient Care Coordinator"
"Imaging Technologist"
"Laboratory Technician"
"Medical Laboratory Scientist"
"Pathologists' Assistant"
"Phlebotomist"
"Pharmacist"
"Pharmacy Technician"
"Physical Therapist"
"Occupational Therapist"
"Speech-Language Pathologist"
"Respiratory Therapist"
"Nutritionist"
"Front Desk Operator"
"Revenue Cycle Manager"
"Administrative Director"
"Administrative Assistant"
"Legal Administrator"
"IT Administrator"
"IT Support"
"Software Engineer"
"Other"
createdAt: string | null

Timestamp when the user was created

formatdate-time
email: string

User’s email address for login and notifications

firstName: string

User’s first name

minLength1
hasDashboardAccess: boolean

Whether the user can access the dashboard interface. Required for admin users

invitedSource: InvitedSource

How a user/invitation was created - via the dashboard UI (‘dashboard’) or the API (‘api’).

One of the following:
"dashboard"
"api"
lastLoginAt: string | null

Timestamp of user’s last login, null if never logged in

formatdate-time
lastName: string

User’s last name

minLength1
level: UserLevel

User access level. ‘owner’ has full control (dashboard-only, not assignable via API), ‘admin’ can manage users/settings, ‘member’ has standard access.

One of the following:
"owner"
"admin"
"member"
userId: string

Unique user identifier. Format: usr_{32-hex-chars}

middleName?: string

User’s middle name (optional)

minLength1
phoneNumber?: string

User’s phone number (10-15 digits, optional)

suffix1?: string

Name suffix (e.g., ‘Jr.’, ‘Sr.’, ‘III’) - optional

minLength1
suffix2?: string

Additional name suffix (optional)

minLength1
UserUpdateResponse { canManageStudies, clinicRole, createdAt, 12 more }

A user in the Viewer system with study management permissions

canManageStudies: boolean

Whether the user has permission to create, update, and manage studies

clinicRole: ClinicRole

A user’s clinical or organizational role within the clinic.

One of the following:
"Doctor"
"Physician"
"Surgeon"
"Radiologist"
"Cardiologist"
"Neurologist"
"Urologist"
"Gynecologist"
"Endocrinologist"
"Oncologist"
"Radiation Oncologist"
"Hematologist"
"Gastroenterologist"
"Pulmonologist"
"Nephrologist"
"Rheumatologist"
"Dermatologist"
"Ophthalmologist"
"Otolaryngologist"
"Pediatrician"
"Obstetrician"
"Psychiatrist"
"Anesthesiologist"
"Emergency Medicine Physician"
"Family Medicine Physician"
"Internal Medicine Physician"
"Pathologist"
"Nuclear Medicine Physician"
"Pain Management Specialist"
"Infectious Disease Specialist"
"Immunologist"
"Physician Assistant"
"Nurse Practitioner"
"Certified Registered Nurse Anesthetist"
"Psychologist"
"Medical Assistant"
"Scribe"
"Registered Nurse"
"Nurse Manager"
"Patient Care Coordinator"
"Imaging Technologist"
"Laboratory Technician"
"Medical Laboratory Scientist"
"Pathologists' Assistant"
"Phlebotomist"
"Pharmacist"
"Pharmacy Technician"
"Physical Therapist"
"Occupational Therapist"
"Speech-Language Pathologist"
"Respiratory Therapist"
"Nutritionist"
"Front Desk Operator"
"Revenue Cycle Manager"
"Administrative Director"
"Administrative Assistant"
"Legal Administrator"
"IT Administrator"
"IT Support"
"Software Engineer"
"Other"
createdAt: string | null

Timestamp when the user was created

formatdate-time
email: string

User’s email address for login and notifications

firstName: string

User’s first name

minLength1
hasDashboardAccess: boolean

Whether the user can access the dashboard interface. Required for admin users

invitedSource: InvitedSource

How a user/invitation was created - via the dashboard UI (‘dashboard’) or the API (‘api’).

One of the following:
"dashboard"
"api"
lastLoginAt: string | null

Timestamp of user’s last login, null if never logged in

formatdate-time
lastName: string

User’s last name

minLength1
level: UserLevel

User access level. ‘owner’ has full control (dashboard-only, not assignable via API), ‘admin’ can manage users/settings, ‘member’ has standard access.

One of the following:
"owner"
"admin"
"member"
userId: string

Unique user identifier. Format: usr_{32-hex-chars}

middleName?: string

User’s middle name (optional)

minLength1
phoneNumber?: string

User’s phone number (10-15 digits, optional)

suffix1?: string

Name suffix (e.g., ‘Jr.’, ‘Sr.’, ‘III’) - optional

minLength1
suffix2?: string

Additional name suffix (optional)

minLength1
UserRevokeAccessResponse { success, message }

Response for revoking user access in Viewer

success: boolean
message?: string
UserReactivateResponse { success, message }

Response for reactivating a user in Viewer

success: boolean
message?: string

ViewerUsersInvitations

List user invitations
client.viewer.users.invitations.list(InvitationListParams { cursor, endDate, expired, 4 more } query?, RequestOptionsoptions?): CursorInvitations<InvitationListResponse { canManageStudies, clinicId, clinicRole, 18 more } >
GET/v1/viewer/users/invitations
Retrieve an invitation by ID
client.viewer.users.invitations.retrieve(stringinvitationID, RequestOptionsoptions?): InvitationRetrieveResponse { canManageStudies, clinicId, clinicRole, 18 more }
GET/v1/viewer/users/invitations/{invitationId}
Update an invitation
client.viewer.users.invitations.update(stringinvitationID, InvitationUpdateParams { canManageStudies, clinicRole, firstName, 7 more } body?, RequestOptionsoptions?): InvitationUpdateResponse { canManageStudies, clinicId, clinicRole, 18 more }
PATCH/v1/viewer/users/invitations/{invitationId}
Revoke an invitation
client.viewer.users.invitations.revoke(InvitationRevokeParams { invitationId, userId } body?, RequestOptionsoptions?): InvitationRevokeResponse { success, message }
POST/v1/viewer/users/invitations/revoke
ModelsExpand Collapse
InvitationListResponse { canManageStudies, clinicId, clinicRole, 18 more }

A pending user invitation in the Viewer system

canManageStudies: boolean

Whether the invited user will have permission to manage studies

clinicId: string

UUID of the clinic this invitation belongs to

formatuuid
clinicRole: ClinicRole

A user’s clinical or organizational role within the clinic.

One of the following:
"Doctor"
"Physician"
"Surgeon"
"Radiologist"
"Cardiologist"
"Neurologist"
"Urologist"
"Gynecologist"
"Endocrinologist"
"Oncologist"
"Radiation Oncologist"
"Hematologist"
"Gastroenterologist"
"Pulmonologist"
"Nephrologist"
"Rheumatologist"
"Dermatologist"
"Ophthalmologist"
"Otolaryngologist"
"Pediatrician"
"Obstetrician"
"Psychiatrist"
"Anesthesiologist"
"Emergency Medicine Physician"
"Family Medicine Physician"
"Internal Medicine Physician"
"Pathologist"
"Nuclear Medicine Physician"
"Pain Management Specialist"
"Infectious Disease Specialist"
"Immunologist"
"Physician Assistant"
"Nurse Practitioner"
"Certified Registered Nurse Anesthetist"
"Psychologist"
"Medical Assistant"
"Scribe"
"Registered Nurse"
"Nurse Manager"
"Patient Care Coordinator"
"Imaging Technologist"
"Laboratory Technician"
"Medical Laboratory Scientist"
"Pathologists' Assistant"
"Phlebotomist"
"Pharmacist"
"Pharmacy Technician"
"Physical Therapist"
"Occupational Therapist"
"Speech-Language Pathologist"
"Respiratory Therapist"
"Nutritionist"
"Front Desk Operator"
"Revenue Cycle Manager"
"Administrative Director"
"Administrative Assistant"
"Legal Administrator"
"IT Administrator"
"IT Support"
"Software Engineer"
"Other"
createdAt: string | null

Timestamp when the invitation was created

formatdate-time
email: string

Email address the invitation was sent to

expiry: string | null

When the invitation expires, null if no expiration

formatdate-time
firstName: string

Invited user’s first name

minLength1
hasDashboardAccess: boolean

Whether the invited user will have dashboard access

invitationId: string

Unique invitation identifier. Format: inv_{32-hex-chars}

invitedSource: InvitedSource

How a user/invitation was created - via the dashboard UI (‘dashboard’) or the API (‘api’).

One of the following:
"dashboard"
"api"
inviterId: string

User ID of the person who sent the invitation. Format: usr_{32-hex-chars}. Null if invited via API

lastName: string

Invited user’s last name

minLength1
level: UserLevel

User access level. ‘owner’ has full control (dashboard-only, not assignable via API), ‘admin’ can manage users/settings, ‘member’ has standard access.

One of the following:
"owner"
"admin"
"member"

Lifecycle status of an invitation: ‘sent’, ‘accepted’, ‘rejected’, or ‘revoked’.

One of the following:
"sent"
"accepted"
"rejected"
"revoked"
updatedAt: string | null

Timestamp when the invitation was last updated

formatdate-time
userId: string

Pre-generated user ID for this invitation. Format: usr_{32-hex-chars}. This ID is assigned at invitation creation and will become the user’s permanent ID upon acceptance

invitedByApiKeyId?: string

UUID of the API key used to send this invitation. Null if sent via dashboard

formatuuid
middleName?: string | null

Invited user’s middle name (optional)

minLength1
phoneNumber?: string | null

Invited user’s phone number (optional)

suffix1?: string | null

Name suffix (e.g., ‘Jr.’, ‘MD’) - optional

minLength1
suffix2?: string | null

Additional name suffix - optional

minLength1
InvitationRetrieveResponse { canManageStudies, clinicId, clinicRole, 18 more }

A pending user invitation in the Viewer system

canManageStudies: boolean

Whether the invited user will have permission to manage studies

clinicId: string

UUID of the clinic this invitation belongs to

formatuuid
clinicRole: ClinicRole

A user’s clinical or organizational role within the clinic.

One of the following:
"Doctor"
"Physician"
"Surgeon"
"Radiologist"
"Cardiologist"
"Neurologist"
"Urologist"
"Gynecologist"
"Endocrinologist"
"Oncologist"
"Radiation Oncologist"
"Hematologist"
"Gastroenterologist"
"Pulmonologist"
"Nephrologist"
"Rheumatologist"
"Dermatologist"
"Ophthalmologist"
"Otolaryngologist"
"Pediatrician"
"Obstetrician"
"Psychiatrist"
"Anesthesiologist"
"Emergency Medicine Physician"
"Family Medicine Physician"
"Internal Medicine Physician"
"Pathologist"
"Nuclear Medicine Physician"
"Pain Management Specialist"
"Infectious Disease Specialist"
"Immunologist"
"Physician Assistant"
"Nurse Practitioner"
"Certified Registered Nurse Anesthetist"
"Psychologist"
"Medical Assistant"
"Scribe"
"Registered Nurse"
"Nurse Manager"
"Patient Care Coordinator"
"Imaging Technologist"
"Laboratory Technician"
"Medical Laboratory Scientist"
"Pathologists' Assistant"
"Phlebotomist"
"Pharmacist"
"Pharmacy Technician"
"Physical Therapist"
"Occupational Therapist"
"Speech-Language Pathologist"
"Respiratory Therapist"
"Nutritionist"
"Front Desk Operator"
"Revenue Cycle Manager"
"Administrative Director"
"Administrative Assistant"
"Legal Administrator"
"IT Administrator"
"IT Support"
"Software Engineer"
"Other"
createdAt: string | null

Timestamp when the invitation was created

formatdate-time
email: string

Email address the invitation was sent to

expiry: string | null

When the invitation expires, null if no expiration

formatdate-time
firstName: string

Invited user’s first name

minLength1
hasDashboardAccess: boolean

Whether the invited user will have dashboard access

invitationId: string

Unique invitation identifier. Format: inv_{32-hex-chars}

invitedSource: InvitedSource

How a user/invitation was created - via the dashboard UI (‘dashboard’) or the API (‘api’).

One of the following:
"dashboard"
"api"
inviterId: string

User ID of the person who sent the invitation. Format: usr_{32-hex-chars}. Null if invited via API

lastName: string

Invited user’s last name

minLength1
level: UserLevel

User access level. ‘owner’ has full control (dashboard-only, not assignable via API), ‘admin’ can manage users/settings, ‘member’ has standard access.

One of the following:
"owner"
"admin"
"member"

Lifecycle status of an invitation: ‘sent’, ‘accepted’, ‘rejected’, or ‘revoked’.

One of the following:
"sent"
"accepted"
"rejected"
"revoked"
updatedAt: string | null

Timestamp when the invitation was last updated

formatdate-time
userId: string

Pre-generated user ID for this invitation. Format: usr_{32-hex-chars}. This ID is assigned at invitation creation and will become the user’s permanent ID upon acceptance

invitedByApiKeyId?: string

UUID of the API key used to send this invitation. Null if sent via dashboard

formatuuid
middleName?: string | null

Invited user’s middle name (optional)

minLength1
phoneNumber?: string | null

Invited user’s phone number (optional)

suffix1?: string | null

Name suffix (e.g., ‘Jr.’, ‘MD’) - optional

minLength1
suffix2?: string | null

Additional name suffix - optional

minLength1
InvitationUpdateResponse { canManageStudies, clinicId, clinicRole, 18 more }

A pending user invitation in the Viewer system

canManageStudies: boolean

Whether the invited user will have permission to manage studies

clinicId: string

UUID of the clinic this invitation belongs to

formatuuid
clinicRole: ClinicRole

A user’s clinical or organizational role within the clinic.

One of the following:
"Doctor"
"Physician"
"Surgeon"
"Radiologist"
"Cardiologist"
"Neurologist"
"Urologist"
"Gynecologist"
"Endocrinologist"
"Oncologist"
"Radiation Oncologist"
"Hematologist"
"Gastroenterologist"
"Pulmonologist"
"Nephrologist"
"Rheumatologist"
"Dermatologist"
"Ophthalmologist"
"Otolaryngologist"
"Pediatrician"
"Obstetrician"
"Psychiatrist"
"Anesthesiologist"
"Emergency Medicine Physician"
"Family Medicine Physician"
"Internal Medicine Physician"
"Pathologist"
"Nuclear Medicine Physician"
"Pain Management Specialist"
"Infectious Disease Specialist"
"Immunologist"
"Physician Assistant"
"Nurse Practitioner"
"Certified Registered Nurse Anesthetist"
"Psychologist"
"Medical Assistant"
"Scribe"
"Registered Nurse"
"Nurse Manager"
"Patient Care Coordinator"
"Imaging Technologist"
"Laboratory Technician"
"Medical Laboratory Scientist"
"Pathologists' Assistant"
"Phlebotomist"
"Pharmacist"
"Pharmacy Technician"
"Physical Therapist"
"Occupational Therapist"
"Speech-Language Pathologist"
"Respiratory Therapist"
"Nutritionist"
"Front Desk Operator"
"Revenue Cycle Manager"
"Administrative Director"
"Administrative Assistant"
"Legal Administrator"
"IT Administrator"
"IT Support"
"Software Engineer"
"Other"
createdAt: string | null

Timestamp when the invitation was created

formatdate-time
email: string

Email address the invitation was sent to

expiry: string | null

When the invitation expires, null if no expiration

formatdate-time
firstName: string

Invited user’s first name

minLength1
hasDashboardAccess: boolean

Whether the invited user will have dashboard access

invitationId: string

Unique invitation identifier. Format: inv_{32-hex-chars}

invitedSource: InvitedSource

How a user/invitation was created - via the dashboard UI (‘dashboard’) or the API (‘api’).

One of the following:
"dashboard"
"api"
inviterId: string

User ID of the person who sent the invitation. Format: usr_{32-hex-chars}. Null if invited via API

lastName: string

Invited user’s last name

minLength1
level: UserLevel

User access level. ‘owner’ has full control (dashboard-only, not assignable via API), ‘admin’ can manage users/settings, ‘member’ has standard access.

One of the following:
"owner"
"admin"
"member"

Lifecycle status of an invitation: ‘sent’, ‘accepted’, ‘rejected’, or ‘revoked’.

One of the following:
"sent"
"accepted"
"rejected"
"revoked"
updatedAt: string | null

Timestamp when the invitation was last updated

formatdate-time
userId: string

Pre-generated user ID for this invitation. Format: usr_{32-hex-chars}. This ID is assigned at invitation creation and will become the user’s permanent ID upon acceptance

invitedByApiKeyId?: string

UUID of the API key used to send this invitation. Null if sent via dashboard

formatuuid
middleName?: string | null

Invited user’s middle name (optional)

minLength1
phoneNumber?: string | null

Invited user’s phone number (optional)

suffix1?: string | null

Name suffix (e.g., ‘Jr.’, ‘MD’) - optional

minLength1
suffix2?: string | null

Additional name suffix - optional

minLength1
InvitationRevokeResponse { success, message }

Response for revoking an invitation in Viewer

success: boolean
message?: string