openapi: 3.0.0
info:
version: 2.0.0
title: Rest-Service
x-logo:
url: >-
https://lumahealth-assets.s3.us-west-2.amazonaws.com/new_luma_logo_black.png
backgroundColor: '#FFFFFF'
altText: Luma Health
description: >-
OpenAPI [Basic
Structure](https://swagger.io/docs/specification/basic-structure/)
servers:
- url: https://api.lumahealth.io/api/v2
components:
securitySchemes:
Bearer:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
idParam:
in: query
name: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
required: false
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: Luma's internal ID of an object.
userParam:
in: query
name: user
required: false
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: The ID of the root account user.
deletedParam:
in: query
name: deleted
required: false
type: number
enum:
- 0
- 1
schema:
type: number
enum:
- 0
- 1
description: Flag for logical deletion where 1 means deleted.
createdByParam:
in: query
name: createdBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
required: false
description: The ID of the user who created this object.
updatedByParam:
in: query
name: updatedBy
required: false
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: The ID of the user who updated this object.
createdAtParam:
in: query
name: createdAt
type: string
format: date-time
schema:
type: string
format: date-time
required: false
description: The date/time when this object was created.
updatedAtParam:
in: query
name: updatedAt
type: string
format: date-time
schema:
type: string
format: date-time
required: false
description: The date/time when this object was updated.
ExternalId:
type: object
properties:
source:
description: externalId.source
type: string
enum:
- gcalendar
- successehs
- drchrono
- dentrix
- webpt
- theraoffice
- mi7
- practicefusion
- advancedmd
- acomrapidpm
- kareo
- nextech
- mwtherapy
- clinicient
- carecloud
- eclinicalmobile
- duxware
- labretriever
- optimispt
- referral
- recall
- allscriptspm
- lytec
- brightree
- fullslate
- nuemd
- centricityps
- officeally
- greenwayintergy
- compulink
- adspm
- dsnpm
- lumamock
- medicalmastermind
- meditouch
- healthnautica
- ezemrx
- hl7
- amazingcharts
- greenwayprimesuite
- raintree
- athenahealth
- revflow
- eclinicalworks10e
- hl7pickup
- mindbody
- eclinicalworkssql
- nextgen
- practiceperfect
- avimark
- clinix
- keymedical
- mdoffice
- webedoctor
- emapm
- medinformatix
- imsgo
- emds
- allscriptsunity
- medevolve
- caretracker
- clearpractice
- valant
- micromd
- systemedx
- medicalmaster
- athenamdp
- gmed
- roche
- onetouch
- somnoware
- managementplus
- lumacare
- nextechfhir
- curemd
- epic
- phoenixortho
- ezderm
- ggastromobile
- epicconfirmationpickup
- cerner
- allmeds
- oncoemrfilepickup
- imedicware
- modmedfhir
- clinux
- acuityscheduling
- medstreaming
- isalus
- meditechexpanse
- openemr
- genericfhir
- nextechpracticeplus
- sms
- voice
- email
- none
value:
description: externalId.value
type: string
AppointmentTypeResponse:
type: object
description: >-
An Appointment Type defines a category of visit that a provider or
facility offers, such as a routine office visit or a telehealth consult,
along with its default duration, visibility, and optional patient intake
forms (checklist). It can also declare dependent appointment types and
matching rules used to determine facility or availability logic when a
related follow-up appointment needs to be scheduled.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
alternativeName:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
duration:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
externalId:
$ref: '#/components/schemas/ExternalId'
visible:
type: integer
format: int32
default: 15
dependents:
type: array
items:
type: object
properties:
appointmentType:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
rules:
type: object
properties:
findAvailabilityAfter:
type: object
properties:
enabled:
type: boolean
default: true
maxMinutes:
type: number
default: 30
minMinutes:
type: number
facilityMatch:
type: object
properties:
criteria:
type: string
enum:
- _id
- postcode
AppointmentTypeRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
alternativeName:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
duration:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
externalId:
$ref: '#/components/schemas/ExternalId'
visible:
type: integer
format: int32
default: 15
dependents:
type: array
items:
type: object
properties:
appointmentType:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
rules:
type: object
properties:
findAvailabilityAfter:
type: object
properties:
enabled:
type: boolean
default: true
maxMinutes:
type: number
default: 30
minMinutes:
type: number
facilityMatch:
type: object
properties:
criteria:
type: string
enum:
- _id
- postcode
AppointmentTypeRequestCreate:
type: object
required:
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
alternativeName:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
duration:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
externalId:
$ref: '#/components/schemas/ExternalId'
visible:
type: integer
format: int32
default: 15
dependents:
type: array
items:
type: object
properties:
appointmentType:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
rules:
type: object
properties:
findAvailabilityAfter:
type: object
properties:
enabled:
type: boolean
default: true
maxMinutes:
type: number
default: 30
minMinutes:
type: number
facilityMatch:
type: object
properties:
criteria:
type: string
enum:
- _id
- postcode
Error:
type: object
required:
- code
- message
properties:
code:
type: integer
format: int32
message:
type: string
Appointment:
type: object
description: >-
An Appointment represents a scheduled visit between a patient and a
provider at a facility, including the date, duration, appointment type,
and status (unconfirmed, confirmed, or cancelled). It tracks how the
appointment was created or updated, for example through an EHR
integration sync, the scheduling UI, telehealth, or a patient
rescheduling via text, and is the core object driving Luma Health's
scheduling, reminders, and check-in workflows.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
patient:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facility:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
type: string
format: date-time
duration:
type: integer
format: int32
default: 15
source:
type: string
enum:
- integrator
- reminder
- ui
- waitlist
- reschedule
- telehealth
status:
type: string
enum:
- unconfirmed
- confirmed
- cancelled
AssistantTransferRulesBulkRequest:
type: object
required:
- entries
properties:
entries:
type: array
description: Array of transfer rule entries to create
minItems: 1
items:
type: object
required:
- assistants
- name
- transferNumber
- type
properties:
assistants:
type: array
description: Array of assistant IDs for this entry
minItems: 1
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
name:
type: string
description: Name of the transfer rule (used for intent routing)
minLength: 1
metadata:
type: object
description: Additional metadata
properties:
city:
type: string
description: City where the department is located
state:
type: string
description: State where the department is located
zip:
type: string
description: ZIP code for the department location
address:
type: string
description: Street address of the department
suiteBuildingRoom:
type: string
description: Suite, building, or room number
specialty:
type: string
description: Medical specialty of the department
action:
type: string
description: Action associated with the department
enabled:
type: boolean
description: Whether the transfer rule is enabled
default: false
type:
type: string
description: Type of transfer rule
enum:
- intent_routing
- rule_based
assistantNumbers:
type: array
description: Array of outbound number IDs
items:
type: string
transferNumber:
type: string
description: Phone number to transfer calls to
transferMessage:
type: string
description: Message played when transferring
transferFailedMessage:
type: string
description: Message played when transfer fails
afterHoursEndCallMessage:
type: string
description: Message played when office is closed
timezone:
type: string
description: Timezone for working hours (e.g., America/Los_Angeles)
textPatientBackInHub:
type: object
description: Configuration for texting patient back
properties:
enabled:
type: boolean
description: Whether text-back feature is enabled
minutesBeforeClosingTime:
type: integer
description: Minutes before closing to offer text-back option
minimum: 0
textPatientBackConfirmationSentMessage:
type: string
description: Confirmation message sent when text-back is requested
hubSmsTextPatientBackConfirmationSentMessage:
type: string
description: SMS confirmation message sent via hub
offerToTransferMessage:
type: string
description: Message offering to transfer the caller
offerToTextBackOrTransferMessage:
type: string
description: Message offering text-back or transfer options
offerToTextBackOrEndCallMessage:
type: string
description: Message offering text-back or end call options
officeClosedTransferNotAvailableOfferToTextBackMessage:
type: string
description: Message when office is closed and transfer unavailable
officeNearClosingTimeTransferNotAdvisedOfferToTextBackMessage:
type: string
description: Message when office is near closing time
workingHours:
type: array
description: Working hours configuration for each day of the week
items:
type: object
required:
- earliest
- latest
- dayOfWeek
properties:
earliest:
type: object
description: Start time for the day
required:
- hour
- minute
properties:
hour:
type: integer
minimum: 0
maximum: 23
minute:
type: integer
minimum: 0
maximum: 59
latest:
type: object
description: End time for the day
required:
- hour
- minute
properties:
hour:
type: integer
minimum: 0
maximum: 23
minute:
type: integer
minimum: 0
maximum: 59
dayOfWeek:
type: integer
description: Day of week (0=Sunday, 6=Saturday)
minimum: 0
maximum: 6
replaceAll:
type: boolean
description: Whether to replace all existing entries in the intent routing table
default: false
AssistantTransferRulesResponse:
type: object
description: >-
Represents the call routing configuration for a Navigator AI assistant,
defining which assistant or phone numbers it applies to, the number and
message to use when transferring a caller to staff, and business hours
used to decide whether to offer a transfer, an SMS follow up, or an
after-hours message instead. It drives how an automated phone assistant
decides when and where to hand a call off to a human.
properties:
_id:
type: string
description: Unique identifier in Luma's database
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
user:
type: string
description: Organization ID
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
deleted:
type: integer
description: Soft delete timestamp (0 if not deleted)
default: 0
createdBy:
type: string
description: ID of user who created this record
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
updatedBy:
type: string
description: ID of user who last updated this record
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
createdAt:
type: string
format: date-time
description: Timestamp when record was created
updatedAt:
type: string
format: date-time
description: Timestamp when record was last updated
name:
type: string
description: Name of the transfer rule (used for intent routing)
metadata:
type: object
description: Additional metadata
properties:
city:
type: string
description: City where the department is located
state:
type: string
description: State where the department is located
zip:
type: string
description: ZIP code for the department location
address:
type: string
description: Street address of the department
suiteBuildingRoom:
type: string
description: Suite, building, or room number
specialty:
type: string
description: Medical specialty of the department
action:
type: string
description: Action associated with the department
enabled:
type: boolean
description: Whether the transfer rule is enabled
default: false
type:
type: string
description: Type of transfer rule
enum:
- intent_routing
- rule_based
assistants:
type: array
description: Array of assistant IDs
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
assistantNumbers:
type: array
description: Array of outbound number IDs
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
transferNumber:
type: string
description: Phone number to transfer calls to
transferMessage:
type: string
description: Message played when transferring
default: Transferring you to a staff.
transferFailedMessage:
type: string
description: Message played when transfer fails
default: >-
Unfortunately the transfer has failed. Sorry please try calling
again.
afterHoursEndCallMessage:
type: string
description: Message played when office is closed
default: >-
Unfortunately, the office is closed. Please call back during normal
business hours. Goodbye
timezone:
type: string
description: Timezone for working hours
default: America/Los_Angeles
textPatientBackInHub:
type: object
description: Configuration for texting patient back
properties:
enabled:
type: boolean
description: Whether text-back feature is enabled
default: false
minutesBeforeClosingTime:
type: integer
description: Minutes before closing to offer text-back option
default: 30
textPatientBackConfirmationSentMessage:
type: string
description: Confirmation message sent when text-back is requested
default: >-
I've sent you an SMS confirming this request. Our team will text you
back via the number you have provided.
hubSmsTextPatientBackConfirmationSentMessage:
type: string
description: SMS confirmation message sent via hub
default: >-
Thank you for your message. We will get back to you as soon as
possible.
offerToTransferMessage:
type: string
description: Message offering to transfer the caller
default: Would you like to be transferred to a staff member?
offerToTextBackOrTransferMessage:
type: string
description: Message offering text-back or transfer options
default: >-
Would you like to receive a text message or be transferred to a
staff member?
offerToTextBackOrEndCallMessage:
type: string
description: Message offering text-back or end call options
default: Would you like to receive a text message or end the call?
officeClosedTransferNotAvailableOfferToTextBackMessage:
type: string
description: Message when office is closed and transfer unavailable
default: >-
Unfortunately, the office is closed. Would you like to leave a
message and a staff member will reach back in the next business day?
officeNearClosingTimeTransferNotAdvisedOfferToTextBackMessage:
type: string
description: Message when office is near closing time
default: >-
The office is closing soon. If you choose to be transferred to a
Staff, there is a chance that your call won't be answered. Would you
like to leave a message and a staff member will reach you as soon as
possible?
workingHours:
type: array
description: Working hours configuration for each day of the week
items:
type: object
properties:
earliest:
type: object
description: Start time for the day
properties:
hour:
type: integer
minimum: 0
maximum: 23
minute:
type: integer
minimum: 0
maximum: 59
latest:
type: object
description: End time for the day
properties:
hour:
type: integer
minimum: 0
maximum: 23
minute:
type: integer
minimum: 0
maximum: 59
dayOfWeek:
type: integer
description: Day of week (0=Sunday, 6=Saturday)
minimum: 0
maximum: 6
AssistantInstanceResponse:
type: object
description: >-
An AssistantInstance represents a single conversation between Luma's
Navigator AI assistant and a patient (or staff member), spanning one or
more channels such as a voice call, SMS, or chat. It tracks the
lifecycle of that conversation as it moves from idle to in-progress to a
terminal success or failure status, whether the patient's identity was
verified, which entry points were used, and reporting data about the
call's outcome and detected intents. AssistantActions attach to an
AssistantInstance as the individual tool calls made during the
conversation.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
release:
type: string
description: Which release track of the assistant handled this conversation.
default: current
enum:
- current
- next
- preProd
patient:
type: string
description: ID of the patient in this conversation.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
verified:
type: boolean
description: Whether the patient's identity has been confirmed.
default: false
onBehalfOf:
type: string
description: >-
ID of the patient being discussed, when different from `patient`
(for example, a guardian calling about a dependent).
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
type: string
description: Lifecycle status of the conversation.
default: idle
enum:
- idle
- in-progress
- failure
- success
statusUpdatedAt:
type: string
format: date-time
description: When `status` was last updated.
statusReason:
type: string
description: Why the conversation reached its terminal status.
enum:
- success-by-assistant
- success-by-transfer
- success-by-patient
- success-by-staff
- success-by-assistant-timeout
- failure-by-assistant
- failure-by-patient
- failure-by-staff
- incomplete-success-criteria
- timed-out
- no-new-messages
- maximum-retries
assistant:
type: string
description: ID of the Assistant configuration driving this conversation.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
entryPoints:
type: array
description: The channels used to reach the assistant during this conversation.
items:
type: object
properties:
channel:
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
- rcs
- lumabot
- internal
lastMessageAt:
type: string
format: date-time
direction:
type: string
enum:
- inbound
- outbound
startedAt:
type: string
format: date-time
finishedAt:
type: string
format: date-time
duration:
type: number
description: Duration of the conversation, in seconds.
reporting:
type: object
description: Structured reporting/QA data collected about this conversation.
properties:
callOutcome:
type: string
enum:
- transferred
- assistant-ended
- patient-ended
- timed-out
intents:
type: array
description: The intents detected during the conversation.
items:
type: object
properties:
intent:
type: string
inScope:
type: boolean
handled:
type: boolean
evidence:
type: string
description: ID of the message that evidences this intent.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
summary:
type: string
callTransferAttempt:
type: boolean
transferWasAfterHours:
type: boolean
AssistantInstanceRequestCreate:
type: object
required:
- assistant
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
release:
type: string
description: Which release track of the assistant handled this conversation.
default: current
enum:
- current
- next
- preProd
patient:
type: string
description: ID of the patient in this conversation.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
verified:
type: boolean
description: Whether the patient's identity has been confirmed.
default: false
onBehalfOf:
type: string
description: >-
ID of the patient being discussed, when different from `patient`
(for example, a guardian calling about a dependent).
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
type: string
description: Lifecycle status of the conversation.
default: idle
enum:
- idle
- in-progress
- failure
- success
statusUpdatedAt:
type: string
format: date-time
description: When `status` was last updated.
statusReason:
type: string
description: Why the conversation reached its terminal status.
enum:
- success-by-assistant
- success-by-transfer
- success-by-patient
- success-by-staff
- success-by-assistant-timeout
- failure-by-assistant
- failure-by-patient
- failure-by-staff
- incomplete-success-criteria
- timed-out
- no-new-messages
- maximum-retries
assistant:
type: string
description: ID of the Assistant configuration driving this conversation.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
entryPoints:
type: array
description: The channels used to reach the assistant during this conversation.
items:
type: object
properties:
channel:
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
- rcs
- lumabot
- internal
lastMessageAt:
type: string
format: date-time
direction:
type: string
enum:
- inbound
- outbound
startedAt:
type: string
format: date-time
finishedAt:
type: string
format: date-time
duration:
type: number
description: Duration of the conversation, in seconds.
reporting:
type: object
description: Structured reporting/QA data collected about this conversation.
properties:
callOutcome:
type: string
enum:
- transferred
- assistant-ended
- patient-ended
- timed-out
intents:
type: array
description: The intents detected during the conversation.
items:
type: object
properties:
intent:
type: string
inScope:
type: boolean
handled:
type: boolean
evidence:
type: string
description: ID of the message that evidences this intent.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
summary:
type: string
callTransferAttempt:
type: boolean
transferWasAfterHours:
type: boolean
AssistantInstanceRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
release:
type: string
description: Which release track of the assistant handled this conversation.
default: current
enum:
- current
- next
- preProd
patient:
type: string
description: ID of the patient in this conversation.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
verified:
type: boolean
description: Whether the patient's identity has been confirmed.
default: false
onBehalfOf:
type: string
description: >-
ID of the patient being discussed, when different from `patient`
(for example, a guardian calling about a dependent).
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
type: string
description: Lifecycle status of the conversation.
default: idle
enum:
- idle
- in-progress
- failure
- success
statusUpdatedAt:
type: string
format: date-time
description: When `status` was last updated.
statusReason:
type: string
description: Why the conversation reached its terminal status.
enum:
- success-by-assistant
- success-by-transfer
- success-by-patient
- success-by-staff
- success-by-assistant-timeout
- failure-by-assistant
- failure-by-patient
- failure-by-staff
- incomplete-success-criteria
- timed-out
- no-new-messages
- maximum-retries
assistant:
type: string
description: ID of the Assistant configuration driving this conversation.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
entryPoints:
type: array
description: The channels used to reach the assistant during this conversation.
items:
type: object
properties:
channel:
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
- rcs
- lumabot
- internal
lastMessageAt:
type: string
format: date-time
direction:
type: string
enum:
- inbound
- outbound
startedAt:
type: string
format: date-time
finishedAt:
type: string
format: date-time
duration:
type: number
description: Duration of the conversation, in seconds.
reporting:
type: object
description: Structured reporting/QA data collected about this conversation.
properties:
callOutcome:
type: string
enum:
- transferred
- assistant-ended
- patient-ended
- timed-out
intents:
type: array
description: The intents detected during the conversation.
items:
type: object
properties:
intent:
type: string
inScope:
type: boolean
handled:
type: boolean
evidence:
type: string
description: ID of the message that evidences this intent.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
summary:
type: string
callTransferAttempt:
type: boolean
transferWasAfterHours:
type: boolean
AssistantActionResponse:
type: object
description: >-
An AssistantAction is an audit-log record of a single tool or function
call made by the Navigator AI assistant during a conversation, such as
listing appointments, canceling an appointment, or confirming an
appointment. It captures the function name, the parameters passed in,
the raw response, and whether the call succeeded, failed, or is still
pending, and is linked to the parent AssistantInstance conversation it
occurred during.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
description:
type: string
description: Free-form description of the action taken.
status:
type: string
description: Outcome of the underlying API call this action made.
enum:
- success
- failure
- pending
functionName:
type: string
description: >-
Name of the tool/function called, for example `cancelAppointment` or
`listAvailabilities`.
parameters:
description: The parameters passed to the underlying API call.
response:
description: The raw response returned by the underlying API call.
assistantInstance:
type: string
description: >-
ID of the AssistantInstance (conversation) this action was taken
during.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
AssistantActionRequestCreate:
type: object
required:
- description
- status
- functionName
- parameters
- response
- assistantInstance
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
description:
type: string
description: Free-form description of the action taken.
status:
type: string
description: Outcome of the underlying API call this action made.
enum:
- success
- failure
- pending
functionName:
type: string
description: >-
Name of the tool/function called, for example `cancelAppointment` or
`listAvailabilities`.
parameters:
description: The parameters passed to the underlying API call.
response:
description: The raw response returned by the underlying API call.
assistantInstance:
type: string
description: >-
ID of the AssistantInstance (conversation) this action was taken
during.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
AssistantActionRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
description:
type: string
description: Free-form description of the action taken.
status:
type: string
description: Outcome of the underlying API call this action made.
enum:
- success
- failure
- pending
functionName:
type: string
description: >-
Name of the tool/function called, for example `cancelAppointment` or
`listAvailabilities`.
parameters:
description: The parameters passed to the underlying API call.
response:
description: The raw response returned by the underlying API call.
assistantInstance:
type: string
description: >-
ID of the AssistantInstance (conversation) this action was taken
during.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
ErrorSchema:
type: object
required:
- message
properties:
message:
type: string
Filters:
type: object
description: >-
Object containing the filters with appointmentTypes, facilities,
providers
required: []
properties:
appointmentTypes:
type: array
description: List of appointmentTypes' IDs
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facilities:
type: array
description: List of facilities' IDs
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
providers:
type: array
description: List of providers' IDs
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
AvailabilitySchedulerResponse:
type: object
description: >-
An Availability represents an open time slot for a provider, facility,
or appointment type that a patient can book through Luma's
self-scheduling pages. It tracks the slot's date, duration, and status
(such as available, offered, booked-pending, or booked) as it moves
through the offer and booking workflow, and links to related records
like the provider, facility, appointment type, and any resulting offer
or appointment.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
filters:
$ref: '#/components/schemas/Filters'
provider:
description: >
Either the ID or a populated object referring to the provider/doctor
for whom this scheduler availability is.
Depending on the queryParameter `populate`, the ID might become an
object containing: `{ _id, name, lastname, firstname }`, all
strings.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facility:
description: >
Either the ID or a populated object referring to the place/facility
where a scheduler availability should take place.
Depending on the queryParameter `populate`, the ID might become an
object containing: `{ _id, name, address, city, state, postcode,
phone }`, all strings.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
description: >-
The ID of an `appointmentType` describing the kind of appointment
that might be scheduled for this availability.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: >
The exact *start* date/time of the availability, in ISO format,
including timezone information. Example:
`2022-09-09T23:59:59-03:00`.
type: string
format: date-time
duration:
description: >-
The duration of the availability, in minutes. Added to the `date`,
you reach the `endDate`.
type: integer
format: int32
default: 15
endDate:
description: >
The exact *end* date/time of the availability, in ISO format,
including timezone information. Example:
`2022-09-09T23:59:59-03:00`.
Calculated by adding the `duration` (in minutes) to the start
`date`.
type: string
format: date-time
externalId:
$ref: '#/components/schemas/ExternalId'
status:
type: object
description: The status of the availability.
enum:
- available
- booked-pending
- offered
- booked
- booked-by-integrator
- booked-by-offer
- expired
offer:
description: >
The ID of an `offer` made to a patient to schedule an appointment at
an available date/time.
If the patient scheduled the appointment themselves, through a
scheduler page on the web, then
the `availability` is marked as `booked-pending`. An `offer` is
created behind the scenes
as the bridge between Luma and the clinic's EHR system. It serves as
a pre-scheduling request.
Once the EHR confirms that such date/time is available, then the
`appointment` is confirmed/booked,
the `availability` is marked as booked, and the `offer` ID is stored
on the availability.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
locked:
description: >
If `true`, then the availability cannot be booked by patients. It is
still available for the clinic to book it.
This is useful for the clinic to reserve a date/time for a patient
who is not yet registered on Luma.
type: boolean
default: false
AvailabilityRequestUpdate:
type: object
properties:
booked:
type: boolean
description: |
Determines if the availability is being booked or not.
If it is set to true, the system will book the availability.
filters:
$ref: '#/components/schemas/Filters'
provider:
description: >
Either the ID or a populated object referring to the provider/doctor
for whom this scheduler availability is.
Depending on the queryParameter `populate`, the ID might become an
object containing: `{ _id, name, lastname, firstname }`, all
strings.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facility:
description: >
Either the ID or a populated object referring to the place/facility
where a scheduler availability should take place.
Depending on the queryParameter `populate`, the ID might become an
object containing: `{ _id, name, address, city, state, postcode,
phone }`, all strings.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
description: >-
The ID of an `appointmentType` describing the kind of appointment
that might be scheduled for this availability.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: >
The exact *start* date/time of the availability, in ISO format,
including timezone information. Example:
`2022-09-09T23:59:59-03:00`.
type: string
format: date-time
duration:
description: >-
The duration of the availability, in minutes. Added to the `date`,
you reach the `endDate`.
type: integer
format: int32
default: 15
endDate:
description: >
The exact *end* date/time of the availability, in ISO format,
including timezone information. Example:
`2022-09-09T23:59:59-03:00`.
Calculated by adding the `duration` (in minutes) to the start
`date`.
type: string
format: date-time
externalId:
$ref: '#/components/schemas/ExternalId'
status:
type: object
description: The status of the availability.
enum:
- available
- booked-pending
- offered
- booked
- booked-by-integrator
- booked-by-offer
- expired
offer:
description: >
The ID of an `offer` made to a patient to schedule an appointment at
an available date/time.
If the patient scheduled the appointment themselves, through a
scheduler page on the web, then
the `availability` is marked as `booked-pending`. An `offer` is
created behind the scenes
as the bridge between Luma and the clinic's EHR system. It serves as
a pre-scheduling request.
Once the EHR confirms that such date/time is available, then the
`appointment` is confirmed/booked,
the `availability` is marked as booked, and the `offer` ID is stored
on the availability.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
locked:
description: >
If `true`, then the availability cannot be booked by patients. It is
still available for the clinic to book it.
This is useful for the clinic to reserve a date/time for a patient
who is not yet registered on Luma.
type: boolean
default: false
BillingChargeResponse:
type: object
description: >-
Represents a single financial charge tracked against a patient, such as
a copay, patient balance, custom appointment fee, or convenience fee. A
billing charge moves through a status lifecycle (planned, billable,
billed, or aborted) and a separate payment status (pending, paid,
partially paid, refunded) as it is billed and collected, and can be
linked to an appointment, patient, insurance verification, and one or
more billing transactions.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
amount:
type: number
description: The charge amount.
currency:
type: string
description: Currency code for the charge.
default: USD
status:
type: string
description: >-
Lifecycle status of the charge. `planned` = planned but not yet
billed, `billable` = confirmed by staff and ready to bill, `billed`
= sent to the patient for collection, `aborted` = wrongfully added
or aborted.
enum:
- planned
- billable
- billed
- aborted
lastStatusUpdatedAt:
type: string
format: date-time
description: When `status` was last changed.
lastStatusUpdatedBy:
type: string
description: ID of the user who last changed `status`.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
type: string
description: >-
The kind of charge. `copay` = copay amount for the appointment,
`balance` = patient balance tied to the appointment,
`custom-appointment-charge` = custom value added by staff,
`convenience-fee` = a convenience fee charge.
enum:
- copay
- balance
- custom-appointment-charge
- convenience-fee
source:
type: string
description: >-
Where the charge originated from. `manual` = added by staff,
`integrator` = from the EHR, `insurance-verification` = from the
insurance verification process, `fixedAmount` = created from a fixed
copay rule.
enum:
- manual
- integrator
- insurance-verification
- fixedAmount
description:
type: string
description: Public description of the charge, visible to the patient.
reason:
type: string
description: >-
Internal, staff-only note about the charge. Omitted from
patient-facing responses.
appointment:
type: string
description: ID of the appointment associated with this charge.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
type: string
description: ID of the patient associated with this charge.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
insuranceVerification:
type: string
description: >-
ID of the insurance verification this charge's copay was derived
from, if any.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
insurance:
type: string
description: >-
ID of the patient's insurance saved alongside the insurance
verification.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
paymentStatus:
type: string
description: How much of the charge has been collected.
enum:
- pending
- not-paid
- paid
- partially-paid
- refunded
amountPaid:
type: number
description: The amount paid toward this charge so far.
billingTransactions:
type: array
description: IDs of the billing transactions associated with this charge.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
isCreatedByAI:
type: boolean
description: Indicates whether this charge was created or suggested by AI.
BillingChargesUpsertRequest:
type: object
required:
- appointmentId
- charges
properties:
appointmentId:
type: string
description: ID of the appointment these charges belong to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
charges:
type: array
description: >-
Charges to upsert for this appointment. Include `_id` to update an
existing charge, or omit it to create a new one. Only one `copay`
type charge is allowed per appointment. Any existing
custom-appointment-charge not present in this array will be aborted.
minItems: 1
items:
type: object
properties:
_id:
type: string
description: >-
ID of an existing charge to update. Omit to create a new
charge.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
amount:
type: number
description: The charge amount.
type:
type: string
description: The kind of charge.
enum:
- copay
- balance
- custom-appointment-charge
- convenience-fee
description:
type: string
description: Public description of the charge, visible to the patient.
BillingChargeBalanceRequestCreate:
type: object
required:
- patient
- amount
properties:
patient:
type: string
description: ID of the patient this balance charge is for.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
amount:
type: number
description: The balance amount to charge. Must be a positive number.
currency:
type: string
description: >-
Currency code for the charge. Defaults to the account's payment
localization currency, or USD.
appointment:
type: string
description: ID of an appointment to associate with this balance charge, if any.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
deletedByParam:
in: query
name: deletedBy
required: false
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: The ID of the user who deleted this object.
deletedAtParam:
in: query
name: deletedAt
type: string
format: date-time
schema:
type: string
format: date-time
required: false
description: The date/time when this object was deleted.
BillingCopaysResponse:
type: object
properties:
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
source:
type: string
enum:
- system
- ehr
- manual
type:
type: string
enum:
- balance
- behavioral
- copay
- custom
- dental
- medical
model:
type: string
enum:
- appointment
- patient
- offer
calculation:
type: string
name:
type: string
amount:
type: number
currency:
type: string
pattern: ^[A-Z]{3}$
visible:
type: boolean
appointment:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
patient:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
preAuthorization:
type: boolean
BillingCopaysCreate:
type: object
required:
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
source:
type: string
enum:
- system
- ehr
- manual
type:
type: string
enum:
- balance
- behavioral
- copay
- custom
- dental
- medical
model:
type: string
enum:
- appointment
- patient
- offer
calculation:
type: string
name:
type: string
amount:
type: number
currency:
type: string
pattern: ^[A-Z]{3}$
visible:
type: boolean
appointment:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
patient:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
preAuthorization:
type: boolean
BillingCopaysUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
source:
type: string
enum:
- system
- ehr
- manual
type:
type: string
enum:
- balance
- behavioral
- copay
- custom
- dental
- medical
model:
type: string
enum:
- appointment
- patient
- offer
calculation:
type: string
name:
type: string
amount:
type: number
currency:
type: string
pattern: ^[A-Z]{3}$
visible:
type: boolean
appointment:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
patient:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
preAuthorization:
type: boolean
BroadcastEvent:
type: object
description: >-
A BroadcastEvent records a single unit of work within a Luma broadcast
flow, a bulk outbound messaging campaign sent to many patients at once
(for example a recall or announcement uploaded as a spreadsheet). Each
event tracks either a review action taken on the flow or the processing
of one row or patient, including its current step (message queued, sent,
failed, or skipped), any error encountered, and links to the associated
patient and appointment.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
broadcastFlow:
$ref: '#/components/schemas/idParam'
required: true
patient:
$ref: '#/components/schemas/idParam'
statuses:
type: array
items:
type: object
properties:
step:
type: string
required: true
enum:
- RowProcess
- MessageProcess
status:
type: string
required: true
enum:
- in-progress
- success
- failure
- skipped
stepCreatedAt:
type: string
format: date-time
required: true
stepUpdatedAt:
type: string
format: date-time
required: true
patient:
$ref: '#/components/schemas/idParam'
retryCount:
type: integer
row:
type: integer
rowRecord:
type: object
additionalProperties:
type: string
BroadcastFlow:
type: object
description: >-
A BroadcastFlow represents a bulk patient outreach campaign that sends
the same message via SMS, email, or voice to a batch of patients, either
from an uploaded contact file, an SFTP feed, or a filtered set of
appointments. It tracks the full lifecycle of that campaign including
upload and column mapping, optional approval review, scheduling, batched
message sending, and per-row success and failure statistics, and can be
organized into parent and child flows for large batches, commonly used
for patient recall and other mass communications.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
title:
type: string
required: true
type:
type: string
required: true
enum:
- scheduled
- uploaded
- sftp
parentBroadcastFlow:
$ref: '#/components/schemas/idParam'
campaign:
$ref: '#/components/schemas/idParam'
broadcastTemplate:
$ref: '#/components/schemas/idParam'
patientMessageTemplate:
$ref: '#/components/schemas/idParam'
review:
type: object
properties:
user:
$ref: '#/components/schemas/idParam'
status:
type: string
enum:
- approved
- declined
declinedReason:
type: string
message:
type: string
required: true
messageOverrides:
type: array
items:
type: object
properties:
text:
type: string
language:
type: string
channel:
type: string
subject:
type: string
patientMessageTemplate:
$ref: '#/components/schemas/idParam'
secureChat:
type: boolean
sendAt:
type: string
format: date-time
sentAt:
type: string
format: date-time
configuration:
type: object
properties:
secureChat:
type: boolean
default: false
contactPreference:
type: string
required: true
enum:
- all-contacts
- primary-contact-only
- uploaded-contact-only
simulate:
type: boolean
shouldReprocessFilters:
type: boolean
default: false
processingStatus:
type: string
enum:
- pre-processing
- processing-upload
- rows-processed
- sending-messages
- success
- failure
upload:
$ref: '#/components/schemas/idParam'
fileUpload:
$ref: '#/components/schemas/idParam'
mapping:
$ref: '#/components/schemas/idParam'
rowCount:
type: integer
stats:
type: object
properties:
totalMessagesSent:
type: integer
messagesSuccess:
type: integer
messagesFailed:
type: integer
messagesSkipped:
type: integer
BroadcastTemplate:
type: object
description: >-
Represents a reusable template for a bulk broadcast messaging campaign,
capturing message content per channel and language, throttling and
batching settings, and audience filters used to send mass communications
to patients such as reminders or announcements via SMS, email, or voice.
Templates move through a draft or complete lifecycle and are consumed by
the broadcast builder flow to generate an actual broadcast run.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
status:
type: string
description: |
Lifecycle marker for the multi-step builder flow. `draft` is
a work-in-progress; `complete` (or unset, for pre-feature rows)
is consumable by the SFTP filename-driven flow. Defaults to
`complete` on programmatic creates.
enum:
- draft
- complete
default: complete
title:
type: string
description: 'Title of the broadcast template (optional while `status: draft`)'
message:
type: string
description: >
Legacy single-message body (used by the legacy Broadcast flow).
For the broadcast-redesign (BroadcastFlow), use the `messages`
array.
patientMessageTemplate:
type: string
description: Template for patient-specific messages
messageOverrides:
type: array
description: |
Legacy per-language/per-channel overrides paired with `message`.
Used by the legacy Broadcast flow.
items:
type: object
properties:
text:
type: string
language:
type: string
channel:
type: string
subject:
type: string
patientMessageTemplate:
$ref: '#/components/schemas/idParam'
secureChat:
type: boolean
messages:
type: array
description: |
BroadcastFlow-shaped message array. Used by the broadcast-redesign
SFTP path to populate a BroadcastFlow from this template (one entry
per language × channel combination). Coexists with the legacy
`message` + `messageOverrides[]` fields.
items:
type: object
properties:
enabled:
type: boolean
default: true
text:
type: string
language:
type: string
description: Language code or `default`
channel:
type: array
items:
type: string
enum:
- sms
- email
- voice
secureChat:
type: boolean
default: false
subject:
type: string
description: Email subject (when `channel` includes `email`)
patientMessageTemplate:
$ref: '#/components/schemas/idParam'
campaign:
type: string
description: Associated campaign identifier
mapping:
type: object
description: FileMapping reference for the broadcast
secureChat:
type: boolean
description: >
Legacy template-level secure chat flag (used by the legacy Broadcast
flow).
For the new flow, secureChat is per-message under
`messages[].secureChat`.
shouldUseUploadedContacts:
type: boolean
description: >
Legacy boolean (used by the legacy Broadcast flow). For the new
flow,
use `configuration.contactPreference` (enum).
shouldUsePrimaryContactOnly:
type: boolean
description: >
Legacy boolean (used by the legacy Broadcast flow). For the new
flow,
use `configuration.contactPreference: primary-contact-only`.
sendAt:
type: string
format: date-time
description: |
Legacy scheduled send time (used by the legacy Broadcast flow). For
the new flow, use `configuration.scheduledAt`.
configuration:
type: object
description: |
Combined configuration. Legacy `throttling` is for the legacy
Broadcast flow; all other sub-fields are BroadcastFlow-shaped and
consumed by the broadcast-redesign SFTP path.
properties:
throttling:
type: object
description: Legacy throttling (rate-limit sends).
properties:
enabled:
type: boolean
value:
type: number
interval:
type: object
properties:
value:
type: number
unit:
type: string
enum:
- minutes
- hours
batching:
type: object
description: |
BroadcastFlow batching — splits large flows into child flows of
`batchSize` rows, sent every `batchInterval` `batchUnit`(s).
properties:
enabled:
type: boolean
batchSize:
type: integer
batchInterval:
type: integer
minimum: 1
batchUnit:
type: string
enum:
- minutes
- hours
contactPreference:
type: string
description: BroadcastFlow contact preference enum.
enum:
- all-contacts
- active-contact-only
- primary-contact-only
- uploaded-contact-only
messagesPerPatient:
type: string
enum:
- one-message-per-patient
- multiple-messages-per-patient
disabledChannels:
type: array
description: Channels suppressed for this flow.
items:
type: string
enum:
- sms
- email
- voice
scheduledAt:
type: string
format: date-time
nullable: true
description: >-
BroadcastFlow scheduled send time (preferred over legacy
`sendAt`).
filters:
type: object
description: Appointment-based filters (facilities, providers, types, dates).
properties:
estimatedAppointmentCount:
type: integer
facilities:
type: array
items:
$ref: '#/components/schemas/idParam'
providers:
type: array
items:
$ref: '#/components/schemas/idParam'
appointmentTypes:
type: array
items:
$ref: '#/components/schemas/idParam'
appointmentStatus:
type: array
items:
type: string
appointmentDate:
type: object
properties:
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
dateFilterType:
type: string
enum:
- custom-range
- specific-date
- after-specific-date
appointments:
type: object
description: Appointment include/exclude lists.
properties:
include:
type: array
items:
$ref: '#/components/schemas/idParam'
exclude:
type: array
items:
$ref: '#/components/schemas/idParam'
responseHandling:
type: object
description: How to route patient responses.
properties:
onResponse:
type: string
enum:
- ignore-response
- send-to-hub
assignee:
type: string
description: Group ObjectId or the literal string `unassigned`.
rowProcessingRange:
type: object
description: Inclusive CSV row range (used by batched child flows).
properties:
from:
type: integer
to:
type: integer
allowedSquigglies:
type: array
items:
type: string
description: >-
List of allowed template variables resolvable for this template's
mapping.
fileUpload:
$ref: '#/components/schemas/idParam'
required: []
Campaign:
type: object
description: >-
Represents an outreach campaign that targets a specific resource, such
as a patient, facility, or user, and defines which contact channels like
SMS, email, or voice should be attempted and in what order. It tracks
whether the campaign is active, who last updated it, and optional
external identifiers for syncing with third-party systems, and is used
to drive automated patient engagement workflows like recall or referral
outreach.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
ref:
type: string
enum:
- patient
- facility
- user
refId:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
name:
type: string
channels:
type: array
items:
type: string
enum:
- sms
- voice
- email
type:
type: string
enum:
- inbound
- outbound
lastUpdatedBy:
type: string
enum:
- patient
- integrator
active:
schema:
type: boolean
ChecklistResponse:
type: object
description: >-
A Checklist is a per-appointment, per-patient instance of required
pre-visit tasks (forms, insurance, consent, payment) generated at build
time from a ChecklistTemplate. It is a materialized, point-in-time
snapshot: editing the source template does not retroactively change
existing checklists.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the checklist.
template:
type: string
description: ID of the ChecklistTemplate this checklist was generated from.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of the appointment this checklist belongs to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
type: string
description: ID of the patient this checklist belongs to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
type: string
description: Overall status of the checklist.
enum:
- empty
- pending
- sent
- in-progress
- completed
source:
type: string
description: How this checklist was created.
enum:
- appointment
- message
- manual
items:
type: array
description: The individual pre-visit tasks that make up this checklist.
items:
type: object
properties:
name:
type: object
description: Localized name of this item, keyed by language code.
additionalProperties:
type: string
category:
type: string
description: The category this item belongs to.
enum:
- intake
- demographics
- consent
- insurance
- payment
status:
type: string
description: Status of this individual item.
default: pending
enum:
- not-ready
- pending
- in-progress
- skipped
- completed
ref:
type: string
description: Type of resource this item's `refId` points to.
enum:
- patient-form
- insurance
- payment
refId:
type: string
description: ID of the resource (of type `ref`) that satisfies this item.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
templateItemRef:
type: string
description: ID of the ChecklistTemplateItem this item was generated from.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
visible:
type: boolean
description: Whether this item is visible to the patient.
default: false
expiresAt:
type: string
format: date-time
description: When this item expires.
completedAt:
type: string
format: date-time
description: When this item was completed.
completedAt:
type: string
format: date-time
description: When the entire checklist was completed.
ChecklistRequestCreate:
type: object
required:
- name
- template
- appointment
- patient
- source
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the checklist.
template:
type: string
description: ID of the ChecklistTemplate this checklist was generated from.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of the appointment this checklist belongs to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
type: string
description: ID of the patient this checklist belongs to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
type: string
description: Overall status of the checklist.
enum:
- empty
- pending
- sent
- in-progress
- completed
source:
type: string
description: How this checklist was created.
enum:
- appointment
- message
- manual
items:
type: array
description: The individual pre-visit tasks that make up this checklist.
items:
type: object
properties:
name:
type: object
description: Localized name of this item, keyed by language code.
additionalProperties:
type: string
category:
type: string
description: The category this item belongs to.
enum:
- intake
- demographics
- consent
- insurance
- payment
status:
type: string
description: Status of this individual item.
default: pending
enum:
- not-ready
- pending
- in-progress
- skipped
- completed
ref:
type: string
description: Type of resource this item's `refId` points to.
enum:
- patient-form
- insurance
- payment
refId:
type: string
description: ID of the resource (of type `ref`) that satisfies this item.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
templateItemRef:
type: string
description: ID of the ChecklistTemplateItem this item was generated from.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
visible:
type: boolean
description: Whether this item is visible to the patient.
default: false
expiresAt:
type: string
format: date-time
description: When this item expires.
completedAt:
type: string
format: date-time
description: When this item was completed.
completedAt:
type: string
format: date-time
description: When the entire checklist was completed.
ChecklistRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the checklist.
template:
type: string
description: ID of the ChecklistTemplate this checklist was generated from.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of the appointment this checklist belongs to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
type: string
description: ID of the patient this checklist belongs to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
type: string
description: Overall status of the checklist.
enum:
- empty
- pending
- sent
- in-progress
- completed
source:
type: string
description: How this checklist was created.
enum:
- appointment
- message
- manual
items:
type: array
description: The individual pre-visit tasks that make up this checklist.
items:
type: object
properties:
name:
type: object
description: Localized name of this item, keyed by language code.
additionalProperties:
type: string
category:
type: string
description: The category this item belongs to.
enum:
- intake
- demographics
- consent
- insurance
- payment
status:
type: string
description: Status of this individual item.
default: pending
enum:
- not-ready
- pending
- in-progress
- skipped
- completed
ref:
type: string
description: Type of resource this item's `refId` points to.
enum:
- patient-form
- insurance
- payment
refId:
type: string
description: ID of the resource (of type `ref`) that satisfies this item.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
templateItemRef:
type: string
description: ID of the ChecklistTemplateItem this item was generated from.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
visible:
type: boolean
description: Whether this item is visible to the patient.
default: false
expiresAt:
type: string
format: date-time
description: When this item expires.
completedAt:
type: string
format: date-time
description: When this item was completed.
completedAt:
type: string
format: date-time
description: When the entire checklist was completed.
checklistTemplateFilter:
type: object
properties:
path:
type: string
description: >-
The field path being compared, for example a facility, provider, or
appointment type identifier.
value:
type: string
description: The value to compare the field at `path` against.
comparision:
type: string
description: How `path` and `value` are compared.
default: eq
enum:
- eq
- gt
- gte
- lt
- lte
- ne
- regex
- js
options:
type: string
description: Additional options for the comparison, such as regex flags.
ChecklistTemplateResponse:
type: object
description: >-
A ChecklistTemplate is the reusable, staff-configured blueprint defining
required pre-visit tasks, their category and expiration rules, and the
conditions under which they apply (such as a specific appointment type,
facility, or provider). Checklists are built from a template, but the
resulting checklist is a snapshot copy; changes to the template require
an explicit recreation job to resync already-created checklists.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the checklist template.
enabled:
type: boolean
description: Whether this template is active and usable to build new checklists.
default: true
type:
type: string
description: The kind of template.
default: appointment
enum:
- appointment
tag:
type: string
description: >-
Merge-tag identifier for this template, auto-generated if not
provided.
items:
type: array
description: The tasks generated checklists will include.
items:
type: object
properties:
name:
type: object
description: Localized name of this item, keyed by language code.
additionalProperties:
type: string
ref:
type: string
description: Type of resource this item's `refId` points to.
default: patient-form-template
enum:
- patient-form-template
refId:
type: string
description: ID of the PatientFormTemplate that fulfills this item.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
category:
type: string
description: >-
The category this item belongs to. Kept in sync with the
linked PatientFormTemplate's category.
default: intake
enum:
- intake
- demographics
- consent
- insurance
- payment
expiration:
type: object
description: >-
When items generated from this template item expire. Either
`value`+`unit`, or `cron`, but not both.
properties:
value:
type: integer
unit:
type: string
enum:
- days
- weeks
- months
- years
cron:
type: string
filters:
type: array
description: Item-level conditions controlling when this item is included.
items:
$ref: '#/components/schemas/checklistTemplateFilter'
defaultStatus:
type: string
description: >-
Default status assigned to items generated from this template
item.
default: pending
enum:
- not-ready
- pending
- in-progress
- skipped
- completed
filters:
type: array
description: >-
Template-level conditions controlling when this template applies,
such as specific appointment types, facilities, or providers.
items:
$ref: '#/components/schemas/checklistTemplateFilter'
checklistTemplateFilter:
type: object
properties:
path:
type: string
description: >-
The field path being compared, for example a facility, provider,
or appointment type identifier.
value:
type: string
description: The value to compare the field at `path` against.
comparision:
type: string
description: How `path` and `value` are compared.
default: eq
enum:
- eq
- gt
- gte
- lt
- lte
- ne
- regex
- js
options:
type: string
description: Additional options for the comparison, such as regex flags.
ChecklistTemplateRequestCreate:
type: object
required:
- name
- items
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the checklist template.
enabled:
type: boolean
description: Whether this template is active and usable to build new checklists.
default: true
type:
type: string
description: The kind of template.
default: appointment
enum:
- appointment
tag:
type: string
description: >-
Merge-tag identifier for this template, auto-generated if not
provided.
items:
type: array
description: The tasks generated checklists will include.
items:
type: object
properties:
name:
type: object
description: Localized name of this item, keyed by language code.
additionalProperties:
type: string
ref:
type: string
description: Type of resource this item's `refId` points to.
default: patient-form-template
enum:
- patient-form-template
refId:
type: string
description: ID of the PatientFormTemplate that fulfills this item.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
category:
type: string
description: >-
The category this item belongs to. Kept in sync with the
linked PatientFormTemplate's category.
default: intake
enum:
- intake
- demographics
- consent
- insurance
- payment
expiration:
type: object
description: >-
When items generated from this template item expire. Either
`value`+`unit`, or `cron`, but not both.
properties:
value:
type: integer
unit:
type: string
enum:
- days
- weeks
- months
- years
cron:
type: string
filters:
type: array
description: Item-level conditions controlling when this item is included.
items:
$ref: '#/components/schemas/checklistTemplateFilter'
defaultStatus:
type: string
description: >-
Default status assigned to items generated from this template
item.
default: pending
enum:
- not-ready
- pending
- in-progress
- skipped
- completed
filters:
type: array
description: >-
Template-level conditions controlling when this template applies,
such as specific appointment types, facilities, or providers.
items:
$ref: '#/components/schemas/checklistTemplateFilter'
checklistTemplateFilter:
type: object
properties:
path:
type: string
description: >-
The field path being compared, for example a facility, provider,
or appointment type identifier.
value:
type: string
description: The value to compare the field at `path` against.
comparision:
type: string
description: How `path` and `value` are compared.
default: eq
enum:
- eq
- gt
- gte
- lt
- lte
- ne
- regex
- js
options:
type: string
description: Additional options for the comparison, such as regex flags.
ChecklistTemplateRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the checklist template.
enabled:
type: boolean
description: Whether this template is active and usable to build new checklists.
default: true
type:
type: string
description: The kind of template.
default: appointment
enum:
- appointment
tag:
type: string
description: >-
Merge-tag identifier for this template, auto-generated if not
provided.
items:
type: array
description: The tasks generated checklists will include.
items:
type: object
properties:
name:
type: object
description: Localized name of this item, keyed by language code.
additionalProperties:
type: string
ref:
type: string
description: Type of resource this item's `refId` points to.
default: patient-form-template
enum:
- patient-form-template
refId:
type: string
description: ID of the PatientFormTemplate that fulfills this item.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
category:
type: string
description: >-
The category this item belongs to. Kept in sync with the
linked PatientFormTemplate's category.
default: intake
enum:
- intake
- demographics
- consent
- insurance
- payment
expiration:
type: object
description: >-
When items generated from this template item expire. Either
`value`+`unit`, or `cron`, but not both.
properties:
value:
type: integer
unit:
type: string
enum:
- days
- weeks
- months
- years
cron:
type: string
filters:
type: array
description: Item-level conditions controlling when this item is included.
items:
$ref: '#/components/schemas/checklistTemplateFilter'
defaultStatus:
type: string
description: >-
Default status assigned to items generated from this template
item.
default: pending
enum:
- not-ready
- pending
- in-progress
- skipped
- completed
filters:
type: array
description: >-
Template-level conditions controlling when this template applies,
such as specific appointment types, facilities, or providers.
items:
$ref: '#/components/schemas/checklistTemplateFilter'
checklistTemplateFilter:
type: object
properties:
path:
type: string
description: >-
The field path being compared, for example a facility, provider,
or appointment type identifier.
value:
type: string
description: The value to compare the field at `path` against.
comparision:
type: string
description: How `path` and `value` are compared.
default: eq
enum:
- eq
- gt
- gte
- lt
- lte
- ne
- regex
- js
options:
type: string
description: Additional options for the comparison, such as regex flags.
ChatActivityResponse:
type: object
description: >-
A ChatActivity represents an active conversation thread between a
patient and staff in Luma Health's messaging hub, tracking assignment to
an individual user or a group, its status such as unassigned, assigned,
or closed, and details like the last message sent and any linked
facilities. It records why a conversation was closed and flags whether
the latest activity resulted from an automated message such as an
appointment reminder or from a genuine unexpected reply needing
attention. This resource underlies how staff triage, prioritize, and
manage incoming patient messages across the organization.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
patient:
description: Patient
type: object
additionalProperties: false
properties:
_id:
description: The ID of patient.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
isOnline:
description: Patient is online or not.
type: boolean
isOnTelehealthSession:
description: Patient is on telehealth session or not.
type: boolean
lastMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
description: status
type: string
default: unassigned
enum:
- closed
- assigned
- unassigned
assignee:
description: Assignee
type: object
additionalProperties: false
properties:
_id:
description: The ID of user.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
isOnline:
description: User is online or not.
type: boolean
isOnTelehealthSession:
description: User is on telehealth session or not.
type: boolean
groupAssignee:
description: ID of Group
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
previousAssignee:
description: ID of User
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
previousGroupAssignee:
description: ID of Group
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
statusReason:
description: ID of a ChatActivityStatusReason, only used when status is "closed"
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description:
description: >-
Additional description of the statusReason. Some
ChatActivityStatusReasons require a description.
type: string
facilities:
description: >-
List of facilities where the patient linked to this chatActivity has
appointments.
type: array
items:
description: ID of a facility
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
priorityUpdatedAt:
description: >-
This date/time changes only when the chat is assigned or the patient
gets a messsage. It can be used to sort the chatActivities on
screen.
type: string
format: date-time
lastIrregularAt:
description: >-
Indicates the last time an unexpected message was sent in the chat.
An example is when patient gets an automated appointment reminder
requesting to answer YES to confirm or NO to cancel, and patient
replies with a completely different message.
type: string
format: date-time
automated:
description: >-
Indicates if this chatActivity was created as a consequence of an
automated message being sent out, such as an appointment reminder.
type: boolean
ChatActivityUnreadResponse:
type: object
description: >-
Represents a summary count of unread chat activities for a user, rather
than a full chat activity record. It is used to power unread message
badges or indicators showing how many chat conversations still need
attention.
properties:
count:
description: Count of unread chat activities
type: number
ChatActivityPut:
type: object
required:
- status
properties:
status:
description: status
type: array
items:
type: string
enum:
- assigned
- closed
assignee:
description: >-
ID of a Staff user or provider to whom the chat will be assigned. If
status is "assigned", there must be either an "assignee" or a
"groupAssignee"
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groupAssignee:
description: >-
ID of a Group to whom the chat will be assigned. If status is
"assigned", there must be either an "assignee" or a "groupAssignee"
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
statusReason:
description: >-
ID of a ChatActivityStatusReason to specify why a chat was closed.
When status is closed, this field is mandatory, and sometimes the
"description" is also mandatory.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description:
description: >-
Description associated with a ChatActivityStatusReason to specify
why a chat was closed. Some ChatActivitiesStatusReasons require a
description.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
ChatActivityReasonResponse:
type: object
description: >-
A ChatActivityReason represents a predefined reason or category that
staff can attach to a chat activity or conversation, such as why it was
closed or flagged. It stores both the original text and a normalized
version for consistent matching, plus a flag indicating whether an
additional free text description is allowed alongside the selected
reason. This is used to standardize and report on why patient chat
conversations occur or end.
required:
- text
- allowDescription
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
text:
description: >-
Both the original and the lower-case space-free normalized version
of the reason to close a chat
type: object
required:
- original
- normalized
properties:
original:
description: The original text of the reason to close a chat
type: string
normalized:
description: >-
The lower-case space-free normalized version of the reason to
close a chat
allowDescription:
description: >-
Indicator if this reason requires an extra description or not. The
extra description lives in the chatActivity itself, not here.
type: boolean
ChatActivityReasonRequestCreate:
type: object
required:
- text
- allowDescription
properties:
text:
description: >-
Both the original and the lower-case space-free normalized version
of the reason to close a chat
type: object
required:
- original
- normalized
properties:
original:
description: The original text of the reason to close a chat
type: string
normalized:
description: >-
The lower-case space-free normalized version of the reason to
close a chat
allowDescription:
description: >-
Indicator if this reason requires an extra description or not. The
extra description lives in the chatActivity itself, not here.
type: boolean
ChatActivityReasonRequestUpdate:
type: object
properties:
text:
description: >-
Both the original and the lower-case space-free normalized version
of the reason to close a chat
type: object
required:
- original
- normalized
properties:
original:
description: The original text of the reason to close a chat
type: string
normalized:
description: >-
The lower-case space-free normalized version of the reason to
close a chat
allowDescription:
description: >-
Indicator if this reason requires an extra description or not. The
extra description lives in the chatActivity itself, not here.
type: boolean
ChatAuditResponse:
type: object
description: >-
A ChatAudit record tracks which messages a given staff user has read
within a patient chat, linking a reader, a patient, and the last message
read along with the timestamp it was read at. It exists purely to
support read receipt and unread message tracking so the product can show
staff which patient conversations still need attention. This underpins
inbox style unread counts and message triage across the chat feature.
required:
- _id
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
reader:
description: The message reader ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
description: The patient ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
lastMessage:
description: The last message ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
readAt:
description: When the message was read
type: string
format: date-time
ChatAuditRequestCreate:
type: object
required:
- reader
- patient
properties:
reader:
description: The message reader ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
description: The patient ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
lastMessage:
description: The last message ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
readAt:
description: When the message was read
type: string
format: date-time
ChatAuditRequestUpdate:
type: object
properties:
reader:
description: The message reader ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
description: The patient ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
lastMessage:
description: The last message ID
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
readAt:
description: When the message was read
type: string
format: date-time
CustomWebStyleResponse:
type: object
description: >-
Represents the custom branding and visual theme a healthcare
organization applies to its patient-facing web experience, including
uploaded logo files and theme settings such as color palette and text
styles. It lets a practice visually customize its scheduling and patient
portal pages to match its brand.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
description:
description: customWebStyle
type: string
url:
description: >-
DEPRECATED. Use uploads[i].url instead. The URL of the uploaded logo
file.
type: string
uploads:
description: uploads
type: array
items:
type: object
additionalProperties: false
required:
- uploadName
properties:
uploadName:
description: A friendly description of the uploaded file
type: string
fileName:
description: The file name in case the uploaded file gets downloaded.
type: string
pattern: ^[0-9a-zA-Z_.-]+$
minLength: 5
maxLength: 256
extension:
description: the file extension related to its format
type: string
enum:
- jpg
- jpeg
- png
- gif
- svg
- heic
fileBase64:
description: the binary data of the file being uploaded in Base64 format.
type: string
url:
description: the URL of the uploaded file.
type: string
scope:
description: scope
type: array
styles:
description: styles
type: object
required:
- theme
properties:
theme:
type: object
published:
description: published
type: boolean
publishedAt:
description: publishedAt
type: string
format: date-time
publishedBy:
description: ID of User
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
CustomWebStylePost:
type: object
required:
- scope
properties:
uploads:
description: >-
Binary artifacts. Each item of the array must EITHER have the
properties uploadName+fileName+extensin+fileBase64 OR
uploadName+fileUpload+url. The first case requires the file data in
Base64 to be uploaded. The second case requires you to only pass the
fileUpload ID, a descriptive uploadName and the URL to access the
fileUpload.
type: array
items:
type: object
additionalProperties: false
required:
- uploadName
properties:
uploadName:
type: string
fileName:
type: string
pattern: ^[0-9a-zA-Z_.-]+$
minLength: 5
maxLength: 256
extension:
type: string
enum:
- jpg
- jpeg
- png
- gif
- svg
- heic
fileBase64:
type: string
url:
type: string
scope:
description: scope
type: array
styles:
description: styles
type: object
required:
- theme
properties:
theme:
type: object
CustomWebStylePut:
type: object
required:
- published
properties:
published:
description: published
type: boolean
EngagementResponse:
type: object
description: >-
An Engagement represents a single interaction or conversation session
between the system and a recipient, such as a patient, staff member,
doctor, or the system itself, for example an inbound or outbound call,
SMS thread, chat, or email exchange, driven by one or more AI agents. It
tracks lifecycle state as the conversation moves from in-progress to a
terminal success, failure, or escalation-required status, the channel
and context of the conversation, and optionally links to a reusable
EngagementSetting that supplies voice and language presets.
EngagementEvents reference an Engagement to form an event-sourcing style
history of everything that happened during it.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
recipient:
type: string
description: ID of the user this engagement is directed at.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recipientType:
type: string
description: The kind of user `recipient` is.
enum:
- doctor
- staff
- patient
- system
patient:
type: string
description: DEPRECATED. Use `recipient` and `recipientType` instead.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
expiresAt:
type: string
format: date-time
topic:
type: string
agents:
type: array
description: IDs of the AI agents involved in this engagement.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
mainAgent:
type: string
description: ID of the primary AI agent driving this engagement.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
engagementSetting:
type: string
description: >-
ID of the EngagementSetting (voice/language preset) used for this
engagement.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
context:
type: object
description: >-
Initial context provided to the engagement, used for outbound flows.
Keys must correspond to AgentContextVariable names, and values must
conform to that variable's schema.
metadata:
type: object
description: >-
Metadata about the engagement's inactivity tracking and routing
decisions.
properties:
inactivityPolicy:
type: object
properties:
anchor:
type: string
inactiveAfterMs:
type: number
closeAfterIdleMs:
type: number
timeoutAt:
type: string
format: date-time
inactivityState:
type: object
properties:
lastRelevantActivityAt:
type: string
format: date-time
firstBecameInactiveAt:
type: string
format: date-time
lastInactiveEventAt:
type: string
format: date-time
sourceService:
type: string
routingDecision:
type: object
properties:
agentId:
type: string
completedAt:
type: string
format: date-time
type:
type: string
default: conversational
enum:
- conversational
- other
status:
type: string
description: >-
Lifecycle status of the engagement. Transitions from `in-progress`
to `success`, `failed`, or `escalation_required`.
enum:
- in-progress
- failed
- success
- escalation_required
- idle
statusReason:
type: string
enum:
- expired
- systemic_failure
EngagementRequestCreate:
type: object
required:
- recipient
- recipientType
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
recipient:
type: string
description: ID of the user this engagement is directed at.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recipientType:
type: string
description: The kind of user `recipient` is.
enum:
- doctor
- staff
- patient
- system
patient:
type: string
description: DEPRECATED. Use `recipient` and `recipientType` instead.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
expiresAt:
type: string
format: date-time
topic:
type: string
agents:
type: array
description: IDs of the AI agents involved in this engagement.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
mainAgent:
type: string
description: ID of the primary AI agent driving this engagement.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
engagementSetting:
type: string
description: >-
ID of the EngagementSetting (voice/language preset) used for this
engagement.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
context:
type: object
description: >-
Initial context provided to the engagement, used for outbound flows.
Keys must correspond to AgentContextVariable names, and values must
conform to that variable's schema.
metadata:
type: object
description: >-
Metadata about the engagement's inactivity tracking and routing
decisions.
properties:
inactivityPolicy:
type: object
properties:
anchor:
type: string
inactiveAfterMs:
type: number
closeAfterIdleMs:
type: number
timeoutAt:
type: string
format: date-time
inactivityState:
type: object
properties:
lastRelevantActivityAt:
type: string
format: date-time
firstBecameInactiveAt:
type: string
format: date-time
lastInactiveEventAt:
type: string
format: date-time
sourceService:
type: string
routingDecision:
type: object
properties:
agentId:
type: string
completedAt:
type: string
format: date-time
type:
type: string
default: conversational
enum:
- conversational
- other
status:
type: string
description: >-
Lifecycle status of the engagement. Transitions from `in-progress`
to `success`, `failed`, or `escalation_required`.
enum:
- in-progress
- failed
- success
- escalation_required
- idle
statusReason:
type: string
enum:
- expired
- systemic_failure
EngagementRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
recipient:
type: string
description: ID of the user this engagement is directed at.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recipientType:
type: string
description: The kind of user `recipient` is.
enum:
- doctor
- staff
- patient
- system
patient:
type: string
description: DEPRECATED. Use `recipient` and `recipientType` instead.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
expiresAt:
type: string
format: date-time
topic:
type: string
agents:
type: array
description: IDs of the AI agents involved in this engagement.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
mainAgent:
type: string
description: ID of the primary AI agent driving this engagement.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
engagementSetting:
type: string
description: >-
ID of the EngagementSetting (voice/language preset) used for this
engagement.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
context:
type: object
description: >-
Initial context provided to the engagement, used for outbound flows.
Keys must correspond to AgentContextVariable names, and values must
conform to that variable's schema.
metadata:
type: object
description: >-
Metadata about the engagement's inactivity tracking and routing
decisions.
properties:
inactivityPolicy:
type: object
properties:
anchor:
type: string
inactiveAfterMs:
type: number
closeAfterIdleMs:
type: number
timeoutAt:
type: string
format: date-time
inactivityState:
type: object
properties:
lastRelevantActivityAt:
type: string
format: date-time
firstBecameInactiveAt:
type: string
format: date-time
lastInactiveEventAt:
type: string
format: date-time
sourceService:
type: string
routingDecision:
type: object
properties:
agentId:
type: string
completedAt:
type: string
format: date-time
type:
type: string
default: conversational
enum:
- conversational
- other
status:
type: string
description: >-
Lifecycle status of the engagement. Transitions from `in-progress`
to `success`, `failed`, or `escalation_required`.
enum:
- in-progress
- failed
- success
- escalation_required
- idle
statusReason:
type: string
enum:
- expired
- systemic_failure
EngagementEventResponse:
type: object
description: >-
An EngagementEvent is an immutable, append-only log record of something
that happened during an Engagement, such as an agent being assigned, a
message being sent or received, a voice call starting or ending, or a
lifecycle transition. Each event belongs to exactly one Engagement, and
the ordered set of events for an engagement forms its event-sourcing
history.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
engagement:
type: string
description: ID of the parent Engagement this event occurred during.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recipient:
type: string
description: ID of the user this event is about, if applicable.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
payload:
type: object
description: The event's contents.
properties:
name:
type: string
description: >-
The kind of event, for example `AgentAssigned`, `MessageSent`,
`VoiceCallStarted`, `EngagementCompleted`.
body:
type: object
description: Event-specific data, shape depends on `name`.
metadata:
type: object
properties:
source:
type: object
properties:
service:
type: string
agent:
type: string
operation:
type: string
update:
type: array
items:
type: object
properties:
fromEvent:
type: string
toEngagement:
type: string
op:
type: string
default: $set
enum:
- $set
- $push
- $pull
- $addToSet
EngagementSettingResponse:
type: object
description: >-
An EngagementSetting is a small, reusable, named preset, made up of a
language and a voice, that can be attached to an Engagement to configure
how a voice or conversational engagement should sound and speak.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of this engagement setting preset.
language:
type: string
description: >-
The language the assistant should use for engagements using this
preset.
enum:
- en-US
- es-US
- es-ES
voice:
type: string
description: >-
The voice the assistant should use for engagements using this
preset.
EngagementSettingRequestCreate:
type: object
required:
- name
- language
- voice
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of this engagement setting preset.
language:
type: string
description: >-
The language the assistant should use for engagements using this
preset.
enum:
- en-US
- es-US
- es-ES
voice:
type: string
description: >-
The voice the assistant should use for engagements using this
preset.
EngagementSettingRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of this engagement setting preset.
language:
type: string
description: >-
The language the assistant should use for engagements using this
preset.
enum:
- en-US
- es-US
- es-ES
voice:
type: string
description: >-
The voice the assistant should use for engagements using this
preset.
EstimateResponse:
type: object
description: >-
Represents a cost estimate generated for a patient ahead of a date of
service, showing the total amount owed in cents, whether and when the
patient has read it, and which party is billed first. Estimates are
typically produced by a third-party provider, linked to a patient, an
appointment, and an uploaded file, and a visibility flag controls
whether the patient can see it.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
date:
type: string
format: date-time
description: The date of service.
totalPatientAmountInCents:
type: number
description: The total amount for the patient.
readAt:
type: string
format: date-time
description: The time that the estimate was read.
payCode:
type: object
description: The paycode from estimate.
properties:
source:
type: string
enum:
- change-healthcare
value:
type: string
patient:
type: string
description: ID of a patient.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of an appointment.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
fileUpload:
type: string
description: ID of a file upload.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
message:
type: string
description: ID of a message.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
visible:
type: boolean
description: Flag that indicates if estimate is visible or not to the patient.
source:
type: string
enum:
- change-healthcare
searchIds:
type: array
description: Search ID index.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
EstimateRequestCreate:
type: object
required:
- date
- totalPatientAmountInCents
- patient
- fileUpload
- visible
- source
- searchIds
properties:
date:
type: string
format: date-time
description: The date of service.
totalPatientAmountInCents:
type: number
description: The total amount for the patient.
readAt:
type: string
format: date-time
description: The time that the estimate was read.
payCode:
type: object
description: The paycode from estimate.
properties:
source:
type: string
enum:
- change-healthcare
value:
type: string
patient:
type: string
description: ID of a patient.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of an appointment.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
fileUpload:
type: string
description: ID of a file upload.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
message:
type: string
description: ID of a message.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
visible:
type: boolean
description: Flag that indicates if estimate is visible or not to the patient.
source:
type: string
enum:
- change-healthcare
searchIds:
type: array
description: Search ID index.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
EstimateRequestUpdate:
type: object
properties:
date:
type: string
format: date-time
description: The date of service.
totalPatientAmountInCents:
type: number
description: The total amount for the patient.
readAt:
type: string
format: date-time
description: The time that the estimate was read.
payCode:
type: object
description: The paycode from estimate.
properties:
source:
type: string
enum:
- change-healthcare
value:
type: string
patient:
type: string
description: ID of a patient.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of an appointment.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
fileUpload:
type: string
description: ID of a file upload.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
message:
type: string
description: ID of a message.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
visible:
type: boolean
description: Flag that indicates if estimate is visible or not to the patient.
source:
type: string
enum:
- change-healthcare
searchIds:
type: array
description: Search ID index.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
SettingProperty:
type: object
properties:
session:
type: object
properties:
logoutTimeout:
description: settings.session.logoutTimeout
type: number
default: 30
welcome:
type: object
properties:
currentStep:
description: settings.welcome.currentStep
type: number
termsAgreementDate:
description: settings.welcome.termsAgreementDate
type: string
format: date-time
telehealth:
type: object
properties:
enabled:
description: settings.telehealth.enabled
type: boolean
sessionReminderMinutes:
description: settings.telehealth.sessionReminderMinutes
type: number
default: 30
sessionFinalReminderMinutes:
description: settings.telehealth.sessionFinalReminderMinutes
type: number
default: 5
maximumNoShowMinutes:
description: settings.telehealth.maximumNoShowMinutes
type: number
default: 240
vendor:
description: settings.telehealth.vendor
type: string
default: twilio
enum:
- twilio
- zoom
vendors:
type: object
properties:
zoom:
type: object
properties:
apiKey:
description: settings.telehealth.vendors.zoom.apiKey
type: string
apiSecret:
description: settings.telehealth.vendors.zoom.apiSecret
type: string
type:
description: settings.telehealth.vendors.zoom.type
type: string
default: free
enum:
- free
- pro
- business
showTimer:
description: settings.telehealth.showTimer
type: boolean
requireProviderLogin:
description: settings.telehealth.requireProviderLogin
type: boolean
telehealthGroup:
type: object
properties:
createDefaultGroup:
type: object
properties:
enabled:
description: >-
settings.telehealth.telehealthGroup.createDefaultGroup.enabled
type: boolean
default: true
addProviderToDefaultGroup:
type: object
properties:
enabled:
description: >-
settings.telehealth.telehealthGroup.addProviderToDefaultGroup.enabled
type: boolean
default: true
labs:
type: object
properties:
enabled:
description: settings.labs.enabled
type: boolean
lumabot:
type: object
properties:
enabled:
description: settings.lumabot.enabled
type: boolean
default: true
includePoweredByLuma:
description: settings.lumabot.includePoweredByLuma
type: boolean
default: true
placement:
description: settings.lumabot.placement
type: string
default: right
name:
description: settings.lumabot.name
type: string
default: LumaBot
header:
description: settings.lumabot.header
type: string
default: Virtual Assistant
prompt:
description: settings.lumabot.prompt
type: string
default: Hello! How can I help you today?
avatar:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
theme:
type: object
properties:
palette:
type: object
properties:
primary:
type: object
properties:
light:
description: settings.lumabot.theme.palette.primary.light
type: string
main:
description: settings.lumabot.theme.palette.primary.main
type: string
dark:
description: settings.lumabot.theme.palette.primary.dark
type: string
contrastText:
description: settings.lumabot.theme.palette.primary.contrastText
type: string
secondary:
type: object
properties:
light:
description: settings.lumabot.theme.palette.secondary.light
type: string
main:
description: settings.lumabot.theme.palette.secondary.main
type: string
dark:
description: settings.lumabot.theme.palette.secondary.dark
type: string
contrastText:
description: >-
settings.lumabot.theme.palette.secondary.contrastText
type: string
tertiary:
type: object
properties:
light:
description: settings.lumabot.theme.palette.tertiary.light
type: string
main:
description: settings.lumabot.theme.palette.tertiary.main
type: string
dark:
description: settings.lumabot.theme.palette.tertiary.dark
type: string
contrastText:
description: settings.lumabot.theme.palette.tertiary.contrastText
type: string
background:
type: object
properties:
default:
description: settings.lumabot.theme.palette.background.default
type: string
paper:
description: settings.lumabot.theme.palette.background.paper
type: string
communication:
type: object
properties:
defaultChatVisibility:
description: settings.communication.defaultChatVisibility
type: string
default: internal
enum:
- public
- internal
defaultChatCommunicationSecurity:
type: object
properties:
level:
description: >-
settings.communication.defaultChatCommunicationSecurity.level
type: string
default: secure
enum:
- secure
- insecure
acknowledgedBy:
description: ID of User
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
acknowledgedAt:
description: >-
settings.communication.defaultChatCommunicationSecurity.acknowledgedAt
type: string
format: date-time
useFacilityPhoneAsFromNumber:
description: settings.communication.useFacilityPhoneAsFromNumber
type: boolean
useFacilityAlternativePhoneAsFromNumber:
description: settings.communication.useFacilityAlternativePhoneAsFromNumber
type: boolean
useFacilityNumberFallback:
type: object
properties:
enabled:
description: settings.communication.useFacilityNumberFallback.enabled
type: boolean
phone:
description: settings.communication.useFacilityNumberFallback.phone
type: string
unsubscribedMessages:
description: settings.communication.unsubscribedMessages
type: array
default:
- email.providerPatientCancelled
- sms.providerPatientCancelled
- email.providerNewInboundChatActivity
- inapp.providerNewInboundChatActivity
- email.providerPatientDoNotContact
- inapp.patientIntakeFormCompleted
- email.patientIntakeFormCompleted
- inapp.providerPatientInsuranceUpload
- email.providerPatientInsuranceUpload
- inapp.providerReferralCalled
- email.providerReferralCalled
- inapp.providerReferralIncomplete
- inapp.providerOutreachCalled
- email.providerOutreachCalled
- inapp.providerOutreachIncomplete
- email.provider:Incomplete
- inapp.providerOutboundReferralIncomplete
- email.providerOutboundReferralIncomplete
- inapp.providerReferralExpired
- email.providerReferralExpired
- inapp.providerReferralCalledLate
- email.providerReferralCalledLate
- inapp.providerOutreachExpired
- email.providerOutreachExpired
- inapp.providerOutreachCalledLate
- email.providerOutreachCalledLate
- inapp.providerOutboundReferralCalledLate
- email.providerOutboundReferralCalledLate
- inapp.patientAddedToWaitlist
- inapp.providerApptOfferSearchStarted
- email.providerApptOfferSearchStarted
- inapp.providerFailedToFind
- email.providerFailedToFind
- inapp.providerOfferSearchCancelled
- email.providerOfferSearchCancelled
- inapp.providerPatientCancelled
- email.providerPatientCancelled
- email.newReferralCreated
- inapp.patientAutoRemovedWaitlist
- email.patientAutoRemovedWaitlist
- email.broadcastFailed
- email.staffLumabotQuestionAnswered
blockedContacts:
description: settings.communication.blockedContacts
type: array
default: []
limitedContacts:
description: settings.communication.limitedContacts
type: array
default: []
expirePatientData:
type: object
properties:
enabled:
description: settings.communication.expirePatientData.enabled
type: boolean
maxAgeInDays:
description: settings.communication.expirePatientData.maxAgeInDays
type: number
default: 14
urlReplacers:
description: settings.communication.urlReplacers
type: array
items:
type: object
properties:
find:
description: find
type: string
replace:
description: replace
type: string
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
disableAutomaticLinkShortening:
description: settings.communication.disableAutomaticLinkShortening
type: boolean
filterPatientMessageHistory:
description: settings.communication.filterPatientMessageHistory
type: array
staffDisabledChannels:
description: settings.communication.staffDisabledChannels
type: array
items:
type: string
enum:
- sms
- voice
- email
- fax
- whatsapp
default: []
reopenChatsForUnclassifiedReplies:
description: settings.communication.reopenChatsForUnclassifiedReplies
type: boolean
default: true
minLengthToReopenChat:
description: settings.communication.minLengthToReopenChat
type: number
default: 15
minLengthToReopenChatPerTemplate:
description: settings.communication.minLengthToReopenChatPerTemplate
type: mixed
reopenChatsWithStatusUnassigned:
description: settings.communication.reopenChatsWithStatusUnassigned
type: boolean
default: true
sendAfterHoursMessageForInboundChats:
description: settings.communication.sendAfterHoursMessageForInboundChats
type: boolean
default: true
broadcastSkipPatientLookup:
description: settings.communication.broadcastSkipPatientLookup
type: boolean
officeHoursPerDay:
description: settings.communication.officeHoursPerDay
type: array
items:
type: object
properties:
weekDay:
description: weekDay
type: number
beginAt:
description: beginAt
type: number
endAt:
description: endAt
type: number
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
default:
- beginAt: 500
endAt: 1600
weekDay: 0
- beginAt: 500
endAt: 1600
weekDay: 1
- beginAt: 500
endAt: 1600
weekDay: 2
- beginAt: 500
endAt: 1600
weekDay: 3
- beginAt: 500
endAt: 1600
weekDay: 4
- beginAt: 500
endAt: 1600
weekDay: 5
- beginAt: 500
endAt: 1600
weekDay: 6
customHolidays:
description: settings.communication.customHolidays
type: object
properties:
dates:
description: settings.communication.customHolidays.dates
type: array
items:
type: object
properties:
date:
description: date
type: string
format: date-time
description:
description: description
type: string
closed:
description: closed
type: boolean
sendAppointmentReminders:
description: sendAppointmentReminders
type: string
enum:
- before
- as-scheduled
sendReferralReminders:
description: sendReferralReminders
type: string
enum:
- after
- as-scheduled
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
officeHours:
type: object
properties:
beginAt:
description: settings.communication.officeHours.beginAt
type: number
default: 5
endAt:
description: settings.communication.officeHours.endAt
type: number
default: 16
numberMasking:
type: object
properties:
enabled:
description: settings.communication.numberMasking.enabled
type: boolean
emailMasking:
type: object
properties:
enabled:
description: settings.communication.emailMasking.enabled
type: boolean
fromName:
description: settings.communication.emailMasking.fromName
type: string
fromEmail:
description: settings.communication.emailMasking.fromEmail
type: string
contactVerification:
type: object
properties:
enabled:
description: settings.communication.contactVerification.enabled
type: boolean
default: true
patientInitiatedTexting:
type: object
properties:
enabled:
description: settings.communication.patientInitiatedTexting.enabled
type: boolean
lookupCallerId:
description: >-
settings.communication.patientInitiatedTexting.lookupCallerId
type: boolean
useRandomNumbersAsGeneratedName:
description: >-
settings.communication.patientInitiatedTexting.useRandomNumbersAsGeneratedName
type: boolean
searchByToAndFrom:
description: settings.communication.searchByToAndFrom
type: boolean
systemMessagesExpiration:
type: object
properties:
enabled:
description: settings.communication.systemMessagesExpiration.enabled
type: boolean
value:
description: settings.communication.systemMessagesExpiration.value
type: number
unit:
description: settings.communication.systemMessagesExpiration.unit
type: string
enum:
- years
- months
- weeks
- days
- hours
inboundMessageReplies:
type: object
properties:
length:
description: settings.communication.inboundMessageReplies.length
type: number
default: 16
keys:
description: settings.communication.inboundMessageReplies.keys
type: array
default:
- broadcastMessage
outboundMessages:
type: object
properties:
allowRetries:
description: settings.communication.outboundMessages.allowRetries
type: boolean
default: true
skipSmsToLandline:
description: settings.communication.outboundMessages.skipSmsToLandline
type: boolean
allowSmsOverLongCode:
type: object
properties:
enabled:
description: >-
settings.communication.outboundMessages.allowSmsOverLongCode.enabled
type: boolean
multiChannelRetries:
type: object
properties:
enabled:
description: >-
settings.communication.outboundMessages.multiChannelRetries.enabled
type: boolean
shouldSmsNumberBeRetriedAsVoice:
type: object
properties:
enabled:
description: >-
settings.communication.outboundMessages.multiChannelRetries.shouldSmsNumberBeRetriedAsVoice.enabled
type: boolean
channels:
description: >-
settings.communication.outboundMessages.multiChannelRetries.channels
type: array
items:
type: string
enum:
- sms
- voice
- email
- fax
- whatsapp
failuresToIgnoreByChannel:
description: >-
settings.communication.outboundMessages.multiChannelRetries.failuresToIgnoreByChannel
type: array
items:
type: string
enum:
- sms
- voice
- email
- fax
- whatsapp
default: []
refs:
description: >-
settings.communication.outboundMessages.multiChannelRetries.refs
type: array
number:
description: >-
settings.communication.outboundMessages.multiChannelRetries.number
type: number
default: 1
filterChatsByGroupsFacilities:
description: settings.communication.filterChatsByGroupsFacilities
type: boolean
suppressMessagesByProvisioning:
description: settings.communication.suppressMessagesByProvisioning
type: boolean
sortMessagesBy:
description: settings.communication.sortMessagesBy
type: string
default: unreadMessages
enum:
- unreadMessages
- priorityUpdatedAt
chatAssignmentOnHubSend:
description: settings.communication.chatAssignmentOnHubSend
type: string
default: reassign
enum:
- reassign
- keepAssignee
chatAssignmentOnProfileSend:
description: settings.communication.chatAssignmentOnProfileSend
type: string
default: reassign
enum:
- reassign
- keepAssignee
useFixedNumber:
type: object
properties:
enabled:
description: settings.communication.useFixedNumber.enabled
type: boolean
vendor:
description: settings.communication.useFixedNumber.vendor
type: string
default: twilio
enum:
- twilio
- bandwidth
number:
description: settings.communication.useFixedNumber.number
type: string
allowAutoReplacement:
description: settings.communication.useFixedNumber.allowAutoReplacement
type: boolean
default: true
numbers:
description: settings.communication.useFixedNumber.numbers
type: array
items:
type: object
properties:
enabled:
description: enabled
type: boolean
default:
description: default
type: boolean
vendor:
description: vendor
type: string
default: twilio
enum:
- twilio
- bandwidth
number:
description: number
type: string
allowAutoReplacement:
description: allowAutoReplacement
type: boolean
default: true
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
default: []
enableInboundCallForwardingToFacilityPhone:
description: >-
settings.communication.enableInboundCallForwardingToFacilityPhone
type: boolean
enableInboundCallForwardingToFacilityAlternativePhone:
description: >-
settings.communication.enableInboundCallForwardingToFacilityAlternativePhone
type: boolean
useExistentLumaContactOnBroadcastsWithEmptyValues:
description: >-
settings.communication.useExistentLumaContactOnBroadcastsWithEmptyValues
type: boolean
broadcast:
type: object
properties:
patientsBatchLimit:
type: object
properties:
enabled:
description: >-
settings.communication.broadcast.patientsBatchLimit.enabled
type: boolean
value:
description: >-
settings.communication.broadcast.patientsBatchLimit.value
type: number
default: 500
interval:
type: object
properties:
value:
description: >-
settings.communication.broadcast.patientsBatchLimit.interval.value
type: number
default: 1
unit:
description: >-
settings.communication.broadcast.patientsBatchLimit.interval.unit
type: string
default: hours
enum:
- minutes
- hours
rolesToBeNotifiedOnRequiredAction:
type: object
properties:
shouldNotifyByGroup:
description: >-
settings.communication.broadcast.rolesToBeNotifiedOnRequiredAction.shouldNotifyByGroup
type: boolean
roles:
description: >-
settings.communication.broadcast.rolesToBeNotifiedOnRequiredAction.roles
type: array
items:
type: string
enum:
- admin
- manager
default:
- admin
messagesOverrides:
type: object
properties:
enabled:
description: >-
settings.communication.broadcast.messagesOverrides.enabled
type: boolean
uploadMapper:
type: object
properties:
enabled:
description: settings.communication.broadcast.uploadMapper.enabled
type: boolean
statusChangesNotifications:
type: object
properties:
enabled:
description: >-
settings.communication.broadcast.statusChangesNotifications.enabled
type: boolean
ignoreInactiveContactsToSendMessage:
type: object
properties:
enabled:
description: >-
settings.communication.ignoreInactiveContactsToSendMessage.enabled
type: boolean
timezone:
description: settings.timezone
type: string
required: true
default: America/Los_Angeles
useTimezoneFrom:
description: settings.useTimezoneFrom
type: string
default: user
enum:
- user
- facility
localization:
description: settings.localization
type: string
default: en-US
enum:
- en-US
- pt-BR
scheduler:
type: object
properties:
enabled:
description: settings.scheduler.enabled
type: boolean
alwaysHideToolbar:
description: settings.scheduler.alwaysHideToolbar
type: boolean
zipcodeMaxDistance:
description: settings.scheduler.zipcodeMaxDistance
type: number
default: 50
daysAheadToShowAvailability:
description: settings.scheduler.daysAheadToShowAvailability
type: number
hoursAheadToShowAvailability:
description: settings.scheduler.hoursAheadToShowAvailability
type: number
default: 2
maxDaysToShow:
description: settings.scheduler.maxDaysToShow
type: number
default: 30
skipResettingAvailabilities:
description: settings.scheduler.skipResettingAvailabilities
type: boolean
skipTwoFactorAuthentication:
description: settings.scheduler.skipTwoFactorAuthentication
type: boolean
skipHeatMap:
description: settings.scheduler.skipHeatMap
type: boolean
requireForm:
description: settings.scheduler.requireForm
type: boolean
confirmationQrcode:
type: object
properties:
enabled:
description: settings.scheduler.confirmationQrcode.enabled
type: boolean
value:
description: settings.scheduler.confirmationQrcode.value
type: string
providerAvailabilityFilter:
description: settings.scheduler.providerAvailabilityFilter
type: array
items:
type: object
properties:
dayOfMonth:
description: dayOfMonth
type: number
dayOfWeek:
description: dayOfWeek
type: number
startTime:
description: startTime
type: string
format: date-time
endTime:
description: endTime
type: string
format: date-time
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
default: []
availabilityBlocks:
description: settings.scheduler.availabilityBlocks
type: array
items:
type: object
properties:
dayOfWeek:
description: dayOfWeek
type: number
startTime:
description: startTime
type: number
endTime:
description: endTime
type: number
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
default: []
maxAvailablitiesToRender:
description: settings.scheduler.maxAvailablitiesToRender
type: number
default: 4
patientAddress:
type: object
properties:
required:
description: settings.scheduler.patientAddress.required
type: boolean
visible:
description: settings.scheduler.patientAddress.visible
type: boolean
required: true
patientEmailAddress:
type: object
properties:
required:
description: settings.scheduler.patientEmailAddress.required
type: boolean
reschedulerRespectsSchedulerRules:
description: settings.scheduler.reschedulerRespectsSchedulerRules
type: boolean
createPatientOnLookupFailure:
description: settings.scheduler.createPatientOnLookupFailure
type: boolean
default: true
minimumIntervalRequiredForBooking:
description: settings.scheduler.minimumIntervalRequiredForBooking
type: number
forceAppointmentTypeDuration:
description: settings.scheduler.forceAppointmentTypeDuration
type: boolean
ignoreDurationOnAvailabilityLookup:
description: settings.scheduler.ignoreDurationOnAvailabilityLookup
type: boolean
useAppointmentDurationOnAvailabilityCoalescing:
description: >-
settings.scheduler.useAppointmentDurationOnAvailabilityCoalescing
type: boolean
botResponses:
type: object
properties:
enabled:
description: settings.scheduler.botResponses.enabled
type: boolean
showChatOnCompletion:
description: settings.scheduler.showChatOnCompletion
type: boolean
default: true
preQualificationFormTemplate:
description: ID of PatientFormTemplate
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
allowMultiLinkedAppointments:
description: settings.scheduler.allowMultiLinkedAppointments
type: boolean
hideProviderDetails:
description: settings.scheduler.hideProviderDetails
type: boolean
queryRealtimeAvailaiblitiesFromIntegration:
description: settings.scheduler.queryRealtimeAvailaiblitiesFromIntegration
type: boolean
sampleAvailabilityQuery:
description: settings.scheduler.sampleAvailabilityQuery
type: boolean
embeddedWidgetHtml:
description: settings.scheduler.embeddedWidgetHtml
type: string
useDependentProviderOnAnchorAvailability:
description: settings.scheduler.useDependentProviderOnAnchorAvailability
type: boolean
singleUseSchedulerLink:
type: object
properties:
enabled:
description: settings.scheduler.singleUseSchedulerLink.enabled
type: boolean
onlyNotifyStaffOnAnchorApptBooking:
description: settings.scheduler.onlyNotifyStaffOnAnchorApptBooking
type: boolean
minimumDaysFromLastAppointment:
type: object
properties:
enabled:
description: settings.scheduler.minimumDaysFromLastAppointment.enabled
type: boolean
amount:
description: settings.scheduler.minimumDaysFromLastAppointment.amount
type: number
status:
description: settings.scheduler.minimumDaysFromLastAppointment.status
type: array
items:
type: string
enum:
- confirmed
- unconfirmed
- cancelled
default:
- confirmed
outboundReferral:
type: object
properties:
enabled:
description: settings.outboundReferral.enabled
type: boolean
attempts:
description: settings.outboundReferral.attempts
type: number
default: 3
interval:
description: settings.outboundReferral.interval
type: number
default: 7
sendReferralFax:
description: settings.outboundReferral.sendReferralFax
type: boolean
sendReferralFaxCoversheet:
description: settings.outboundReferral.sendReferralFaxCoversheet
type: boolean
botResponses:
type: object
properties:
enabled:
description: settings.outboundReferral.botResponses.enabled
type: boolean
displayVisitReasonDropdown:
description: settings.outboundReferral.displayVisitReasonDropdown
type: boolean
referral:
type: object
properties:
enabled:
description: settings.referral.enabled
type: boolean
attempts:
description: settings.referral.attempts
type: number
default: 5
useOutreachExperience:
type: object
properties:
enabled:
description: settings.referral.useOutreachExperience.enabled
type: boolean
interval:
description: settings.referral.interval
type: number
default: 3
schedulableWindow:
type: object
properties:
earliest:
description: settings.referral.schedulableWindow.earliest
type: number
default: 10
latest:
description: settings.referral.schedulableWindow.latest
type: number
default: 15
sendReferralFax:
description: settings.referral.sendReferralFax
type: boolean
default: true
sendReferralFaxCoversheet:
description: settings.referral.sendReferralFaxCoversheet
type: boolean
sendReferralFaxStatus:
type: object
properties:
scheduled:
description: settings.referral.sendReferralFaxStatus.scheduled
type: boolean
default: true
cancelled:
description: settings.referral.sendReferralFaxStatus.cancelled
type: boolean
default: true
incomplete:
description: settings.referral.sendReferralFaxStatus.incomplete
type: boolean
default: true
sendReferralEmail:
description: settings.referral.sendReferralEmail
type: boolean
requireFullMatchForAutoSchedule:
description: settings.referral.requireFullMatchForAutoSchedule
type: boolean
requireSpecificMatchForAutoSchedule:
description: settings.referral.requireSpecificMatchForAutoSchedule
type: boolean
skipAutoSchedule:
description: settings.referral.skipAutoSchedule
type: boolean
requireMaxHoursApartFromAppointmentForAutoSchedule:
description: >-
settings.referral.requireMaxHoursApartFromAppointmentForAutoSchedule
type: number
default: 72
includeInternalMessagingInFollowupFax:
description: settings.referral.includeInternalMessagingInFollowupFax
type: boolean
formLink:
description: settings.referral.formLink
type: string
botResponses:
type: object
properties:
enabled:
description: settings.referral.botResponses.enabled
type: boolean
recommendations:
type: object
properties:
timingPreferences:
type: object
properties:
enabled:
description: >-
settings.referral.recommendations.timingPreferences.enabled
type: boolean
markReferralsIncompleteAfterLastOutreachInHours:
description: >-
settings.referral.markReferralsIncompleteAfterLastOutreachInHours
type: number
default: 2
useFacilityAlternativeNumber:
description: settings.referral.useFacilityAlternativeNumber
type: boolean
suppressExpiration:
type: object
properties:
enabled:
description: settings.referral.suppressExpiration.enabled
type: boolean
reminder:
type: object
properties:
multipleRemindersPerDay:
description: settings.reminder.multipleRemindersPerDay
type: string
default: onlySendEarliest
enum:
- onlySendEarliest
- multipleRemindersPerDay
onlySendEarliestForApptTypesWithRemindersEnabled:
description: >-
settings.reminder.onlySendEarliestForApptTypesWithRemindersEnabled
type: boolean
multipleRemindersPerDayShouldOnlyConsiderResourcesWithRemindersEnabledInSquiggly:
description: >-
settings.reminder.multipleRemindersPerDayShouldOnlyConsiderResourcesWithRemindersEnabledInSquiggly
type: boolean
default: true
multipleRemindersPerDayRepliesOverride:
description: settings.reminder.multipleRemindersPerDayRepliesOverride
type: string
default: disabled
enum:
- disabled
- allowed
- confirmationOnly
- none
schedule:
description: settings.reminder.schedule
type: array
default:
- 168
- 96
- 48
enabled:
description: settings.reminder.enabled
type: boolean
onConfirmation:
description: settings.reminder.onConfirmation
type: string
default: keepLastReminder
enum:
- skipFurtherReminders
- keepLastReminder
repliesForLastReminder:
description: settings.reminder.repliesForLastReminder
type: string
required: true
default: none
enum:
- allowed
- confirmationOnly
- none
replies:
description: settings.reminder.replies
type: string
required: true
default: allowed
enum:
- allowed
- confirmationOnly
- none
enabledChannels:
description: settings.reminder.enabledChannels
type: array
items:
type: string
enum:
- sms
- voice
- email
- fax
- whatsapp
default:
- sms
- voice
- email
- fax
- whatsapp
treatCancellationsAsNoShows:
description: settings.reminder.treatCancellationsAsNoShows
type: number
required: true
offerToJoinWaitlistOnCancellation:
description: settings.reminder.offerToJoinWaitlistOnCancellation
type: string
required: true
default: from-both
enum:
- disabled
- from-reminder
- from-integrator
- from-both
schedulableWindow:
type: object
properties:
earliest:
description: settings.reminder.schedulableWindow.earliest
type: number
default: 8
latest:
description: settings.reminder.schedulableWindow.latest
type: number
default: 20
allowSelfSchedule:
description: settings.reminder.allowSelfSchedule
type: boolean
allowSelfReschedule:
description: settings.reminder.allowSelfReschedule
type: boolean
default: true
allowSelfRescheduleAvailabilityFilter:
description: settings.reminder.allowSelfRescheduleAvailabilityFilter
type: array
items:
type: string
enum:
- appointment-cancellation
- ui
- referral
- integrator
default: []
allowSelfRescheduleExpiry:
description: settings.reminder.allowSelfRescheduleExpiry
type: number
default: 1440
rescheduleSundayToSaturday:
description: settings.reminder.rescheduleSundayToSaturday
type: boolean
forceVoiceCallsForSmsNonResponders:
description: settings.reminder.forceVoiceCallsForSmsNonResponders
type: boolean
cancelOrConfirmAllAppointmentsInDay:
description: settings.reminder.cancelOrConfirmAllAppointmentsInDay
type: boolean
default: true
cancelOrConfirmAppointmentsInDayOnlyIfTypeVisible:
description: >-
settings.reminder.cancelOrConfirmAppointmentsInDayOnlyIfTypeVisible
type: boolean
shouldRespectCancelOrConfirmAllAppointmentsInDay:
description: >-
settings.reminder.shouldRespectCancelOrConfirmAllAppointmentsInDay
type: boolean
default: true
allowConfirmAfterCancel:
description: settings.reminder.allowConfirmAfterCancel
type: boolean
default: true
allowCancelAfterConfirm:
description: settings.reminder.allowCancelAfterConfirm
type: boolean
allowCancelAfterAppointmentStart:
description: settings.reminder.allowCancelAfterAppointmentStart
type: boolean
strictConfirmCancelTextHandling:
description: settings.reminder.strictConfirmCancelTextHandling
type: boolean
disableCatchupReminders:
description: settings.reminder.disableCatchupReminders
type: boolean
botResponses:
type: object
properties:
enabled:
description: settings.reminder.botResponses.enabled
type: boolean
forceMessageTime:
type: object
properties:
enabled:
description: settings.reminder.forceMessageTime.enabled
type: boolean
until:
description: settings.reminder.forceMessageTime.until
type: string
default: '1800'
sendReminderOnHolidays:
type: object
properties:
enabled:
description: settings.reminder.sendReminderOnHolidays.enabled
type: boolean
cancellation:
type: object
properties:
enabled:
description: settings.cancellation.enabled
type: boolean
expiration:
description: settings.cancellation.expiration
type: number
default: 30
processAppointmentTypes:
description: settings.cancellation.processAppointmentTypes
type: boolean
default: true
requireFrontOfficeAcceptance:
description: settings.cancellation.requireFrontOfficeAcceptance
type: boolean
shadowAppointment:
type: object
properties:
enabled:
description: settings.cancellation.shadowAppointment.enabled
type: boolean
allowDoubleBooks:
description: settings.cancellation.allowDoubleBooks
type: boolean
skipAvailabilityCreateFromCancellationStatusSources:
description: >-
settings.cancellation.skipAvailabilityCreateFromCancellationStatusSources
type: array
default: []
maxDaysAheadsToProcessCancellation:
description: settings.cancellation.maxDaysAheadsToProcessCancellation
type: number
default: 7
minMinutesAheadsToProcessCancellation:
description: settings.cancellation.minMinutesAheadsToProcessCancellation
type: number
default: 120
minMinutesAheadsToProcessCancellationProviderOverridePolicy:
description: >-
settings.cancellation.minMinutesAheadsToProcessCancellationProviderOverridePolicy
type: string
default: min
enum:
- min
- max
spotsDiscovery:
type: object
properties:
enabled:
description: settings.cancellation.spotsDiscovery.enabled
type: boolean
default: true
maxSpots:
description: settings.cancellation.spotsDiscovery.maxSpots
type: number
default: 2
hoursAhead:
description: settings.cancellation.spotsDiscovery.hoursAhead
type: number
default: 48
includeWhitespace:
description: settings.cancellation.spotsDiscovery.includeWhitespace
type: boolean
autoAddToWaitlist:
type: object
properties:
enabled:
description: settings.cancellation.autoAddToWaitlist.enabled
type: boolean
daysAhead:
description: settings.cancellation.autoAddToWaitlist.daysAhead
type: number
default: 14
maxDaysAhead:
description: settings.cancellation.autoAddToWaitlist.maxDaysAhead
type: number
minDaysFromLastAcceptedOfferToJoinWaitlist:
description: >-
settings.cancellation.autoAddToWaitlist.minDaysFromLastAcceptedOfferToJoinWaitlist
type: number
default: 7
waitlistOfferFlexibility:
description: settings.cancellation.waitlistOfferFlexibility
type: string
default: strict
enum:
- strict
- facility-match
- provider-match
- any
waitlistOfferSortOrder:
description: settings.cancellation.waitlistOfferSortOrder
type: string
default: longest-waiting
enum:
- longest-waiting
- most-recent-added
sendYouveBeenAddedMessage:
description: settings.cancellation.sendYouveBeenAddedMessage
type: boolean
default: true
skipOfferBasedOnLastSentOffer:
description: settings.cancellation.skipOfferBasedOnLastSentOffer
type: boolean
default: true
maxOffersPerWaitlist:
description: settings.cancellation.maxOffersPerWaitlist
type: number
default: 10
protocol:
description: settings.cancellation.protocol
type: string
default: parallel
enum:
- serial
- parallel
offerToJoinDuration:
description: settings.cancellation.offerToJoinDuration
type: number
default: 30
autoCreateWaitlists:
description: settings.cancellation.autoCreateWaitlists
type: boolean
required: true
delayOffers:
type: object
properties:
enabled:
description: settings.cancellation.delayOffers.enabled
type: boolean
until:
description: settings.cancellation.delayOffers.until
type: string
default: '1700'
delayOn:
description: settings.cancellation.delayOffers.delayOn
type: string
default: weekdays
enum:
- weekdays
- all-days
weekdaysDelay:
type: object
properties:
enabled:
description: settings.cancellation.delayOffers.weekdaysDelay.enabled
type: boolean
until:
description: settings.cancellation.delayOffers.weekdaysDelay.until
type: string
default: '1700'
weekendsDelay:
type: object
properties:
enabled:
description: settings.cancellation.delayOffers.weekendsDelay.enabled
type: boolean
until:
description: settings.cancellation.delayOffers.weekendsDelay.until
type: string
default: '1700'
disableOnWeekends:
description: settings.cancellation.disableOnWeekends
type: boolean
cancelFutureAppointment:
description: settings.cancellation.cancelFutureAppointment
type: boolean
default: true
requireFutureAppointment:
description: settings.cancellation.requireFutureAppointment
type: boolean
botResponses:
type: object
properties:
enabled:
description: settings.cancellation.botResponses.enabled
type: boolean
appointment:
type: object
properties:
duration:
description: settings.appointment.duration
type: number
default: 15
recommendations:
type: object
properties:
timingPreferences:
type: object
properties:
enabled:
description: >-
settings.appointment.recommendations.timingPreferences.enabled
type: boolean
validateUpdatedAtTimestamp:
description: settings.appointment.validateUpdatedAtTimestamp
type: boolean
feedback:
type: object
properties:
multipleRemindersPerDay:
description: settings.feedback.multipleRemindersPerDay
type: string
default: multipleRemindersPerDay
enum:
- onlySendEarliest
- multipleRemindersPerDay
enabled:
description: settings.feedback.enabled
type: boolean
promoter:
type: object
properties:
type:
description: settings.feedback.promoter.type
type: string
enum:
- facebook
- yelp
- patientfusion
- betterdoctor
- zocdoc
- google
- generic
- healthgrades
- ratemds
url:
description: settings.feedback.promoter.url
type: string
promoterUrls:
description: settings.feedback.promoterUrls
type: array
items:
type: object
properties:
type:
description: type
type: string
enum:
- facebook
- yelp
- patientfusion
- betterdoctor
- zocdoc
- google
- generic
- healthgrades
- ratemds
url:
description: url
type: string
enabled:
description: enabled
type: boolean
default: true
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
detractor:
type: object
properties:
type:
description: settings.feedback.detractor.type
type: string
enum:
- google
- luma
url:
description: settings.feedback.detractor.url
type: string
detractorUrls:
description: settings.feedback.detractorUrls
type: array
items:
type: object
properties:
type:
description: type
type: string
enum:
- google
- surveymonkey
- luma
url:
description: url
type: string
enabled:
description: enabled
type: boolean
default: true
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schedule:
description: settings.feedback.schedule
type: number
default: 120
interval:
type: object
properties:
enabled:
description: settings.feedback.interval.enabled
type: boolean
default: true
value:
description: settings.feedback.interval.value
type: number
default: 2
limit:
type: object
properties:
enabled:
description: settings.feedback.limit.enabled
type: boolean
default: true
value:
description: settings.feedback.limit.value
type: number
default: 3
allowFeedbackForPastAppointments:
description: settings.feedback.allowFeedbackForPastAppointments
type: boolean
required: true
forceMessageTime:
type: object
properties:
enabled:
description: settings.feedback.forceMessageTime.enabled
type: boolean
until:
description: settings.feedback.forceMessageTime.until
type: string
default: '1830'
botResponses:
type: object
properties:
enabled:
description: settings.feedback.botResponses.enabled
type: boolean
recommendations:
type: object
properties:
timingPreferences:
type: object
properties:
enabled:
description: >-
settings.feedback.recommendations.timingPreferences.enabled
type: boolean
forceSkipBlackoutRules:
description: settings.feedback.forceSkipBlackoutRules
type: boolean
followup:
type: object
properties:
enabled:
description: settings.followup.enabled
type: boolean
default: true
recommendations:
type: object
properties:
timingPreferences:
type: object
properties:
enabled:
description: >-
settings.followup.recommendations.timingPreferences.enabled
type: boolean
sendMessageForceTimeUsingTimezone:
description: settings.followup.sendMessageForceTimeUsingTimezone
type: boolean
default: true
ignoreCustomActionOperationsModelsFields:
type: object
properties:
operations:
description: >-
settings.followup.ignoreCustomActionOperationsModelsFields.operations
type: array
default: []
models:
description: >-
settings.followup.ignoreCustomActionOperationsModelsFields.models
type: array
default: []
fields:
description: >-
settings.followup.ignoreCustomActionOperationsModelsFields.fields
type: array
items:
type: string
enum:
- user
- _id
- deleted
- createdAt
- updatedAt
- createdBy
- updatedBy
- deletedBy
- deletedAt
- provider
- facility
- type
- patient
- source
- statusSource
- status
- statusReason
- notes
- date
- endDate
- duration
- stats
- cancelledAt
- confirmedAt
- arrivedAt
- createdFromReferral
- externalRawSource
- customerRawSource
- telehealth
- externalId.source
- externalId.value
- secondaryExternalId.source
- secondaryExternalId.value
- integratorUpdateResults.status
- integratorUpdateResults.error
- __v
default: []
sendImmediatelyWithPastSendAt:
description: settings.followup.sendImmediatelyWithPastSendAt
type: boolean
triggerCustomActionForDeletion:
description: Determines if database deletions should trigger custom actions
type: boolean
default: false
integrator:
type: object
properties:
requireLock:
description: settings.integrator.requireLock
type: boolean
lockExpiryInMinutes:
description: settings.integrator.lockExpiryInMinutes
type: number
default: 10
syncWindow:
type: object
properties:
earliest:
description: settings.integrator.syncWindow.earliest
type: number
required: true
default: 6
latest:
description: settings.integrator.syncWindow.latest
type: number
required: true
default: 20
days:
description: settings.integrator.syncWindow.days
type: number
default: 180
currentWeekSyncPastDataInDays:
description: settings.integrator.syncWindow.currentWeekSyncPastDataInDays
type: number
default: 1
writeDataToIntegrator:
type: object
properties:
createAppointments:
description: settings.integrator.writeDataToIntegrator.createAppointments
type: boolean
default: true
createAppointmentsMaxRetries:
description: >-
settings.integrator.writeDataToIntegrator.createAppointmentsMaxRetries
type: number
default: 10
updateAvailabilityExternalIdOnCreateAppointmentSuccess:
description: >-
settings.integrator.writeDataToIntegrator.updateAvailabilityExternalIdOnCreateAppointmentSuccess
type: boolean
updateStatus:
description: settings.integrator.writeDataToIntegrator.updateStatus
type: boolean
default: true
updatePatientDemographics:
description: >-
settings.integrator.writeDataToIntegrator.updatePatientDemographics
type: boolean
updatePatientDemographicsName:
description: >-
settings.integrator.writeDataToIntegrator.updatePatientDemographicsName
type: boolean
updatePatientDemographicsDateOfBirth:
description: >-
settings.integrator.writeDataToIntegrator.updatePatientDemographicsDateOfBirth
type: boolean
flushPatientMessageHistory:
description: >-
settings.integrator.writeDataToIntegrator.flushPatientMessageHistory
type: boolean
flushPatientMessageHistoryDelay:
description: >-
settings.integrator.writeDataToIntegrator.flushPatientMessageHistoryDelay
type: number
flushPatientMessageHistoryDayOfWeek:
description: >-
settings.integrator.writeDataToIntegrator.flushPatientMessageHistoryDayOfWeek
type: number
default: -1
updateAppointmentNotesWithTelehealthLink:
description: >-
settings.integrator.writeDataToIntegrator.updateAppointmentNotesWithTelehealthLink
type: boolean
updateAppointmentWithReminderSentStatus:
description: >-
settings.integrator.writeDataToIntegrator.updateAppointmentWithReminderSentStatus
type: boolean
createOutboundHl7MessageOn:
description: >-
settings.integrator.writeDataToIntegrator.createOutboundHl7MessageOn
type: array
items:
type: string
enum:
- cancelled
- confirmed
- created
default: []
createPatient:
description: settings.integrator.writeDataToIntegrator.createPatient
type: boolean
cacheDeletedAppointments:
description: >-
settings.integrator.writeDataToIntegrator.cacheDeletedAppointments
type: boolean
frequency:
description: settings.integrator.frequency
type: number
required: true
default: 15
enforceProviderDeltaCheck:
description: settings.integrator.enforceProviderDeltaCheck
type: boolean
default: true
enforceAppointmentDeltaCheck:
description: settings.integrator.enforceAppointmentDeltaCheck
type: boolean
default: true
syncProcedures:
description: settings.integrator.syncProcedures
type: boolean
syncDiagnoses:
description: settings.integrator.syncDiagnoses
type: boolean
syncReferrals:
description: settings.integrator.syncReferrals
type: boolean
syncRecalls:
description: settings.integrator.syncRecalls
type: boolean
default: true
syncInsurances:
description: settings.integrator.syncInsurances
type: boolean
syncOrders:
description: settings.integrator.syncOrders
type: boolean
verifySlotIsOpenBeforeAppointmentCreation:
description: settings.integrator.verifySlotIsOpenBeforeAppointmentCreation
type: boolean
default: true
verifyWhitespaceIsOpenBeforeAppointmentCreation:
description: >-
settings.integrator.verifyWhitespaceIsOpenBeforeAppointmentCreation
type: boolean
requireValueAndTypeMatchOnDemographicsUpdate:
description: settings.integrator.requireValueAndTypeMatchOnDemographicsUpdate
type: boolean
skipGetProvider:
description: settings.integrator.skipGetProvider
type: boolean
syncAppointmentExternalRawSource:
description: settings.integrator.syncAppointmentExternalRawSource
type: boolean
syncProviderUpdates:
type: object
properties:
enabled:
description: settings.integrator.syncProviderUpdates.enabled
type: boolean
syncPatientExternalRawSource:
description: settings.integrator.syncPatientExternalRawSource
type: boolean
syncAdditionalDemographicFields:
description: settings.integrator.syncAdditionalDemographicFields
type: boolean
externalCustomResourceOverrides:
description: settings.integrator.externalCustomResourceOverrides
type: array
items:
type: object
properties:
resource:
description: resource
type: string
enum:
- provider
- appointment-type
- facility
override:
description: override
type: array
items:
type: string
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
syncNewResourcesAs:
type: object
properties:
hiddenAfterDays:
description: settings.integrator.syncNewResourcesAs.hiddenAfterDays
type: number
default: 10
hiddenResources:
description: settings.integrator.syncNewResourcesAs.hiddenResources
type: array
items:
type: string
enum:
- provider
- appointment-type
- facility
default:
- provider
- appointment-type
- facility
disabledAfterDays:
description: settings.integrator.syncNewResourcesAs.disabledAfterDays
type: number
default: 10
disabledResources:
description: settings.integrator.syncNewResourcesAs.disabledResources
type: array
items:
type: string
enum:
- provider
- appointment-type
- facility
default:
- provider
- appointment-type
- facility
historicDataLoader:
type: object
properties:
daysToLoad:
description: settings.integrator.historicDataLoader.daysToLoad
type: number
default: 485
daysPerLoad:
description: settings.integrator.historicDataLoader.daysPerLoad
type: number
default: 15
disableDedupeIncomingPatientData:
description: settings.integrator.disableDedupeIncomingPatientData
type: boolean
disablePatientsGetByExternalTypeAndComponents:
description: >-
settings.integrator.disablePatientsGetByExternalTypeAndComponents
type: boolean
sftpConfirmationRangeInHours:
description: settings.integrator.sftpConfirmationRangeInHours
type: number
default: 6
syncReferralsDisableExpiryForMissingReferrals:
description: >-
settings.integrator.syncReferralsDisableExpiryForMissingReferrals
type: boolean
uploadReferralsPerformCompleteDeltaCheck:
description: settings.integrator.uploadReferralsPerformCompleteDeltaCheck
type: boolean
syncAppointmentsInParallel:
description: settings.integrator.syncAppointmentsInParallel
type: boolean
updateReferralsWithExternalRawSource:
description: settings.integrator.updateReferralsWithExternalRawSource
type: boolean
patients:
type: object
properties:
maxTokenAge:
description: settings.patients.maxTokenAge
type: number
default: 7
loginLookupInIntegrator:
description: settings.patients.loginLookupInIntegrator
type: boolean
loginRequireActiveContactMatch:
description: settings.patients.loginRequireActiveContactMatch
type: boolean
default: true
requireCaptcha:
description: settings.patients.requireCaptcha
type: boolean
default: true
useAtlasSearch:
description: settings.patients.useAtlasSearch
type: boolean
appointmentManagement:
type: object
properties:
enabled:
description: settings.patients.appointmentManagement.enabled
type: boolean
default: false
reporting:
type: object
properties:
eventTracking:
type: object
properties:
enabled:
description: settings.reporting.eventTracking.enabled
type: boolean
trackingModel:
description: settings.reporting.eventTracking.trackingModel
type: string
default: user
enum:
- patient
- user
- user-and-patient
vendors:
description: settings.reporting.eventTracking.vendors
type: array
items:
type: string
useUserTimezoneInReports:
description: settings.reporting.useUserTimezoneInReports
type: boolean
waitingRoom:
type: object
properties:
enabled:
description: settings.waitingRoom.enabled
type: boolean
settingsToOverrideFrom:
type: object
properties:
facilities:
description: settings.settingsToOverrideFrom.facilities
type: array
default: []
providers:
description: settings.settingsToOverrideFrom.providers
type: array
default: []
appointmentTypes:
description: settings.settingsToOverrideFrom.appointmentTypes
type: array
default: []
users:
description: settings.settingsToOverrideFrom.users
type: array
default: []
billing:
type: object
properties:
vendors:
type: object
properties:
paypal:
type: object
properties:
enabled:
description: settings.billing.vendors.paypal.enabled
type: boolean
default: true
instamed:
type: object
properties:
enabled:
description: settings.billing.vendors.instamed.enabled
type: boolean
salucro:
type: object
properties:
enabled:
description: settings.billing.vendors.salucro.enabled
type: boolean
contactNumber:
description: settings.billing.contactNumber
type: string
contactEmail:
description: settings.billing.contactEmail
type: string
format: email
patientForms:
type: object
properties:
filterPatientFormsByFacility:
description: settings.patientForms.filterPatientFormsByFacility
type: boolean
preventRefillingCompletedForms:
description: settings.patientForms.preventRefillingCompletedForms
type: boolean
showMessageOnFormEnd:
description: settings.patientForms.showMessageOnFormEnd
type: boolean
default: true
sendDirectMessageForCcdaForms:
type: object
properties:
enabled:
description: settings.patientForms.sendDirectMessageForCcdaForms.enabled
type: boolean
vendor:
description: settings.patientForms.sendDirectMessageForCcdaForms.vendor
type: string
default: datamotion
enum:
- datamotion
minutesAheadsToLookForAppointments:
description: >-
settings.patientForms.sendDirectMessageForCcdaForms.minutesAheadsToLookForAppointments
type: number
default: 120
directMessagingEmail:
description: >-
settings.patientForms.sendDirectMessageForCcdaForms.directMessagingEmail
type: string
allowWidgetUserToUploadFile:
description: settings.patientForms.allowWidgetUserToUploadFile
type: boolean
hideProgressBarOnFormsWithJump:
description: settings.patientForms.hideProgressBarOnFormsWithJump
type: boolean
insuranceFormTemplate:
description: ID of PatientFormTemplate
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
insurance:
type: object
properties:
verification:
type: object
properties:
enabled:
description: settings.insurance.verification.enabled
type: boolean
hoursAheadToVerifyInsurance:
description: settings.insurance.verification.hoursAheadToVerifyInsurance
type: number
default: 24
branding:
type: object
properties:
themes:
type: array
items:
description: settings.branding.themes
type: object
required:
- scope
properties:
enabled:
description: settings.branding.themes[i].enabled
type: boolean
default: false
scope:
description: settings.branding.themes[i].scope
type: string
estimate:
type: object
properties:
updateFileUploadPatient:
description: >-
Determines if the file upload document linked to an estimate
document must be updated with the patient ID and the estimate
ID.
type: boolean
default: false
FacilityResponse:
type: object
description: >-
Represents a physical facility or location belonging to a healthcare
organization, including its name, alternative and phonetic names,
address, phone, alternative phone, and fax numbers normalized to
international format, plus visibility and integration settings.
Facilities provide the location context for scheduling appointments and
routing patient communications, and can be linked to external systems
such as an EHR.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
settings:
$ref: '#/components/schemas/SettingProperty'
name:
description: name
type: string
alternativeName:
description: alternativeName
type: string
phonetic:
description: phonetic
type: string
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
phone:
description: phone
type: string
fax:
description: fax
type: string
alternativePhone:
description: alternativePhone
type: string
visible:
description: visible
type: boolean
default: true
specialInstructions:
description: specialInstructions
type: string
integrator:
description: integrator
type: string
enum:
- gcalendar
- successehs
- drchrono
- dentrix
- webpt
- theraoffice
- mi7
- practicefusion
- advancedmd
- acomrapidpm
- kareo
- nextech
- mwtherapy
- clinicient
- carecloud
- eclinicalmobile
- duxware
- labretriever
- optimispt
- referral
- recall
- allscriptspm
- lytec
- brightree
- fullslate
- nuemd
- centricityps
- officeally
- greenwayintergy
- compulink
- adspm
- dsnpm
- lumamock
- medicalmastermind
- meditouch
- healthnautica
- ezemrx
- hl7
- amazingcharts
- greenwayprimesuite
- raintree
- athenahealth
- revflow
- eclinicalworks10e
- hl7pickup
- mindbody
- eclinicalworkssql
- nextgen
- practiceperfect
- avimark
- clinix
- keymedical
- mdoffice
- webedoctor
- emapm
- medinformatix
- imsgo
- emds
- allscriptsunity
- medevolve
- caretracker
- clearpractice
- valant
- micromd
- systemedx
- medicalmaster
- athenamdp
- gmed
- roche
- onetouch
- somnoware
- managementplus
- lumacare
- nextechfhir
- curemd
- epic
- phoenixortho
- ezderm
- ggastromobile
- epicconfirmationpickup
- cerner
- allmeds
- oncoemrfilepickup
- imedicware
- modmedfhir
- clinux
- acuityscheduling
- medstreaming
- isalus
- meditechexpanse
- openemr
- genericfhir
- nextechpracticeplus
externalId:
$ref: '#/components/schemas/ExternalId'
externalRawSource:
description: externalRawSource
type: object
setting:
description: ID of Setting
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
FacilityRequestCreate:
type: object
required:
- name
- city
- address
- state
- country
- postcode
- visible
properties:
name:
description: name
type: string
alternativeName:
description: alternativeName
type: string
phonetic:
description: phonetic
type: string
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
phone:
description: phone
type: string
fax:
description: fax
type: string
alternativePhone:
description: alternativePhone
type: string
visible:
description: visible
type: boolean
default: true
specialInstructions:
description: specialInstructions
type: string
integrator:
description: integrator
type: string
enum:
- gcalendar
- successehs
- drchrono
- dentrix
- webpt
- theraoffice
- mi7
- practicefusion
- advancedmd
- acomrapidpm
- kareo
- nextech
- mwtherapy
- clinicient
- carecloud
- eclinicalmobile
- duxware
- labretriever
- optimispt
- referral
- recall
- allscriptspm
- lytec
- brightree
- fullslate
- nuemd
- centricityps
- officeally
- greenwayintergy
- compulink
- adspm
- dsnpm
- lumamock
- medicalmastermind
- meditouch
- healthnautica
- ezemrx
- hl7
- amazingcharts
- greenwayprimesuite
- raintree
- athenahealth
- revflow
- eclinicalworks10e
- hl7pickup
- mindbody
- eclinicalworkssql
- nextgen
- practiceperfect
- avimark
- clinix
- keymedical
- mdoffice
- webedoctor
- emapm
- medinformatix
- imsgo
- emds
- allscriptsunity
- medevolve
- caretracker
- clearpractice
- valant
- micromd
- systemedx
- medicalmaster
- athenamdp
- gmed
- roche
- onetouch
- somnoware
- managementplus
- lumacare
- nextechfhir
- curemd
- epic
- phoenixortho
- ezderm
- ggastromobile
- epicconfirmationpickup
- cerner
- allmeds
- oncoemrfilepickup
- imedicware
- modmedfhir
- clinux
- acuityscheduling
- medstreaming
- isalus
- meditechexpanse
- openemr
- genericfhir
- nextechpracticeplus
externalId:
$ref: '#/components/schemas/ExternalId'
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
FacilityRequestUpdate:
type: object
properties:
name:
description: name
type: string
alternativeName:
description: alternativeName
type: string
phonetic:
description: phonetic
type: string
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
phone:
description: phone
type: string
fax:
description: fax
type: string
alternativePhone:
description: alternativePhone
type: string
visible:
description: visible
type: boolean
default: true
specialInstructions:
description: specialInstructions
type: string
integrator:
description: integrator
type: string
enum:
- gcalendar
- successehs
- drchrono
- dentrix
- webpt
- theraoffice
- mi7
- practicefusion
- advancedmd
- acomrapidpm
- kareo
- nextech
- mwtherapy
- clinicient
- carecloud
- eclinicalmobile
- duxware
- labretriever
- optimispt
- referral
- recall
- allscriptspm
- lytec
- brightree
- fullslate
- nuemd
- centricityps
- officeally
- greenwayintergy
- compulink
- adspm
- dsnpm
- lumamock
- medicalmastermind
- meditouch
- healthnautica
- ezemrx
- hl7
- amazingcharts
- greenwayprimesuite
- raintree
- athenahealth
- revflow
- eclinicalworks10e
- hl7pickup
- mindbody
- eclinicalworkssql
- nextgen
- practiceperfect
- avimark
- clinix
- keymedical
- mdoffice
- webedoctor
- emapm
- medinformatix
- imsgo
- emds
- allscriptsunity
- medevolve
- caretracker
- clearpractice
- valant
- micromd
- systemedx
- medicalmaster
- athenamdp
- gmed
- roche
- onetouch
- somnoware
- managementplus
- lumacare
- nextechfhir
- curemd
- epic
- phoenixortho
- ezderm
- ggastromobile
- epicconfirmationpickup
- cerner
- allmeds
- oncoemrfilepickup
- imedicware
- modmedfhir
- clinux
- acuityscheduling
- medstreaming
- isalus
- meditechexpanse
- openemr
- genericfhir
- nextechpracticeplus
externalId:
$ref: '#/components/schemas/ExternalId'
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
FileUploadResponse:
type: object
description: >-
A FileUpload represents a file uploaded to the Luma Health platform,
such as a patient insurance card image, a referral fax, a form
attachment, a chat attachment, or a provider headshot. It stores
metadata about the file including its storage location, name, extension,
content type, upload type, and processing status, and it can link back
to related records like a patient, insurance, referral, patient form,
message, or estimate. Staff and integrations use this resource to check
on an uploaded file's metadata and confirm whether processing completed
successfully or failed.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
bucket:
type: string
description: AWS Bucket S3 name.
aswId:
type: string
description: Asw Id.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
name:
type: string
description: Name of file.
extension:
type: string
description: Extension of file.
contentType:
type: string
description: Content Type/MIME of file.
type:
type: string
description: Type of the uploaded file.
enum:
- patient-insurance-image
- patient-message
- patient-referral-fax
- patient-referral
- patient-form
- provider-headshot
- avatar
- custom-web-style-logo
- generic
- integration-archive
- patient-pdf
- patient-ccda
- bulk-patients-insurance
- bulk-patients-form
- do-not-contact-patients-list
- archived-contacts-list
- bulk-users-update
- bulk-users-create
- upload
- lumabot-html-preview
base64:
type: string
description: base64 representation of the binary file.
patient:
type: string
description: ID of a Patient.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
insurance:
type: string
description: ID of an Insurance.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
type: string
description: ID of a Referral.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
outboundReferral:
type: string
description: ID of an Outbound Referral.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientForm:
type: string
description: ID of a Patient Form.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
message:
type: string
description: ID of a Message.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
broadcast:
type: string
description: ID of a Broadcast.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
website:
type: string
description: ID of a Website.
status:
type: string
description: >-
Status of the file upload. Processing = File-upload was created, but
still being processed, Completed = File-upload was completed
successfully, Failed = File-upload has failed.
enum:
- processing
- completed
- failed
estimate:
type: string
description: Estimate Id.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
FileUploadRequest:
type: object
required:
- name
- extension
- contentType
- type
- base64
properties:
bucket:
type: string
description: AWS Bucket S3 name.
aswId:
type: string
description: Asw Id.
name:
type: string
description: Name of file.
extension:
type: string
description: Extension of file.
contentType:
type: string
description: Content Type/MIME of file.
type:
type: string
description: Type of the uploaded file
enum:
- patient-insurance-image
- patient-message
- patient-referral-fax
- patient-referral
- patient-form
- provider-headshot
- avatar
- custom-web-style-logo
- generic
- integration-archive
- patient-pdf
- patient-ccda
- bulk-patients-insurance
- bulk-patients-form
- do-not-contact-patients-list
- archived-contacts-list
- bulk-users-update
- bulk-users-create
- upload
- lumabot-html-preview
base64:
type: string
description: base64 representation of the binary file.
patient:
type: string
description: ID of a Patient.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
insurance:
type: string
description: ID of an Insurance.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
type: string
description: ID of a Referral.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
outboundReferral:
type: string
description: ID of an Outbound Referral.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientForm:
type: string
description: ID of a Patient Form.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
message:
type: string
description: ID of a Message.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
broadcast:
type: string
description: ID of a Broadcast.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
website:
type: string
description: Website.
status:
type: string
description: >-
Status of the file upload. Processing = File-upload was created, but
still being processed, Completed = File-upload was completed
successfully, Failed = File-upload has failed.
enum:
- processing
- completed
- failed
estimate:
type: string
description: ID of an estimate.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
InsuranceResponse:
type: object
description: >-
Represents a patient's insurance coverage record, including subscriber
and member details, the insurance card images, plan and payor
information, and the current verification, integrator-sync, and
staff-review status. An Insurance is always linked to a Patient and may
optionally reference a known InsurancePayor for writeback validation.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
planName:
type: string
description: Name of the insurance plan.
memberName:
type: string
description: The person's name as printed on the insurance card.
memberNumber:
type: string
description: The subscriber's ID number on the insurance card.
subscriber:
type: object
description: The subscriber of the insurance plan, if different from the patient.
properties:
firstname:
type: string
lastname:
type: string
dateOfBirth:
type: object
properties:
year:
type: integer
month:
type: integer
day:
type: integer
insuranceGroupName:
type: string
description: Group name or code printed on the insurance card.
url:
type: string
description: URL of the front-of-card image.
urlBack:
type: string
description: URL of the back-of-card image.
fileUpload:
type: string
description: ID of the FileUpload for the front-of-card image.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
fileUploadBack:
type: string
description: ID of the FileUpload for the back-of-card image.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
active:
type: boolean
description: Whether this insurance is currently active for the patient.
default: true
status:
type: string
description: >-
Lifecycle status of the insurance record, aligned with the HL7 FHIR
fm-status value set.
default: draft
enum:
- archived
- active
- cancelled
- draft
- entered-in-error
patient:
type: string
description: ID of the patient this insurance belongs to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
relationshipToSubscriber:
type: object
description: >-
The patient's relationship to the subscriber, per the HL7 subscriber
relationship code set.
properties:
code:
type: string
label:
type: string
externalId:
type: object
description: External identifier for this insurance in an integrated EHR.
properties:
source:
type: string
value:
type: string
payerId:
type: string
description: >-
The payer identifier, as required by third-party
eligibility/verification APIs.
payerName:
type: string
description: The payer's display name.
payor:
type: string
description: ID of the InsurancePayor this insurance's payer is matched to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
dependentId:
type: string
description: >-
The patient's dependent identification string, if the patient is a
dependent of the subscriber.
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
primary:
type: boolean
description: >-
Whether this is the patient's primary insurance. Only one insurance
per patient can be primary.
default: false
integratorStatus:
type: string
description: Status of writing this insurance back to the EHR integrator.
enum:
- success
- pending
- failed
- skipped
integratorResults:
type: object
description: The results of the last writeback attempt to the integrator.
properties:
message:
type: string
lastAttemptedAt:
type: string
format: date-time
lastSuccess:
type: string
format: date-time
source:
type: string
description: How this insurance was created.
enum:
- sync
- patient
- staff
staffReview:
type: object
description: >-
Staff review status for this insurance, used before writing it back
to the integrator.
properties:
reviewedBy:
type: string
reviewedAt:
type: string
format: date-time
reviewStatus:
type: string
enum:
- ignored
- pending
- approved
lastSyncedAt:
type: string
format: date-time
description: When this insurance was last synced from the integrator.
verification:
type: object
description: The most recent eligibility verification result for this insurance.
properties:
status:
type: string
default: unknown
enum:
- unknown
- active
- inactive
- failed
updatedAt:
type: string
format: date-time
requestedBy:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
refId:
type: string
description: ID of the related InsuranceVerification record.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
errorReason:
type: string
InsurancePayorResponse:
type: object
description: >-
Represents an insurance payor/carrier maintained in Luma's payor
directory: its name, address, and phone, plus one or more external
identifiers used to match and write back claims and eligibility data to
third-party clearinghouses or the practice's EHR. Payors can be marked
as integrator-managed or manually managed, and optionally hidden from
patient-facing payor search.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: The payor's legal/system name.
friendlyName:
type: string
description: Patient-facing display name, preferred over `name` when present.
externalId:
type: object
description: The payor's identifier in the practice's EHR.
properties:
source:
type: string
value:
type: string
externalIdentifiers:
type: array
description: >-
Identifiers used to match and write back claims and eligibility data
to third-party clearinghouses, such as NextGen Transaction Hub,
Change Healthcare, or Waystar.
items:
type: object
properties:
source:
type: string
description: The clearinghouse or vendor this identifier is for.
enum:
- nextgentransactionhub
- changehealthcare
- waystar
value:
type: string
description: The opaque identifier value used by that vendor.
status:
type: string
enum:
- inactive
- testing
- live
pin:
type: string
description: Waystar-specific identifier for this payor.
address:
type: string
address2:
type: string
city:
type: string
state:
type: string
country:
type: string
postcode:
type: string
phone:
type: string
source:
type: string
description: >-
Who owns this payor's fields. If `integrator`, the integrator owns
all fields and overwrites Luma edits on every sync. If `manual`, the
integrator only owns `name` and `externalId`; `friendlyName` and
`externalIdentifiers` can be freely edited in Luma.
enum:
- integrator
- manual
isHiddenFromPatients:
type: boolean
description: Whether this payor is excluded from patient-facing payor search.
default: false
InsurancePayorRequestCreate:
type: object
required:
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: The payor's legal/system name.
friendlyName:
type: string
description: Patient-facing display name, preferred over `name` when present.
externalId:
type: object
description: The payor's identifier in the practice's EHR.
properties:
source:
type: string
value:
type: string
externalIdentifiers:
type: array
description: >-
Identifiers used to match and write back claims and eligibility data
to third-party clearinghouses, such as NextGen Transaction Hub,
Change Healthcare, or Waystar.
items:
type: object
properties:
source:
type: string
description: The clearinghouse or vendor this identifier is for.
enum:
- nextgentransactionhub
- changehealthcare
- waystar
value:
type: string
description: The opaque identifier value used by that vendor.
status:
type: string
enum:
- inactive
- testing
- live
pin:
type: string
description: Waystar-specific identifier for this payor.
address:
type: string
address2:
type: string
city:
type: string
state:
type: string
country:
type: string
postcode:
type: string
phone:
type: string
source:
type: string
description: >-
Who owns this payor's fields. If `integrator`, the integrator owns
all fields and overwrites Luma edits on every sync. If `manual`, the
integrator only owns `name` and `externalId`; `friendlyName` and
`externalIdentifiers` can be freely edited in Luma.
enum:
- integrator
- manual
isHiddenFromPatients:
type: boolean
description: Whether this payor is excluded from patient-facing payor search.
default: false
InsurancePayorRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: The payor's legal/system name.
friendlyName:
type: string
description: Patient-facing display name, preferred over `name` when present.
externalId:
type: object
description: The payor's identifier in the practice's EHR.
properties:
source:
type: string
value:
type: string
externalIdentifiers:
type: array
description: >-
Identifiers used to match and write back claims and eligibility data
to third-party clearinghouses, such as NextGen Transaction Hub,
Change Healthcare, or Waystar.
items:
type: object
properties:
source:
type: string
description: The clearinghouse or vendor this identifier is for.
enum:
- nextgentransactionhub
- changehealthcare
- waystar
value:
type: string
description: The opaque identifier value used by that vendor.
status:
type: string
enum:
- inactive
- testing
- live
pin:
type: string
description: Waystar-specific identifier for this payor.
address:
type: string
address2:
type: string
city:
type: string
state:
type: string
country:
type: string
postcode:
type: string
phone:
type: string
source:
type: string
description: >-
Who owns this payor's fields. If `integrator`, the integrator owns
all fields and overwrites Luma edits on every sync. If `manual`, the
integrator only owns `name` and `externalId`; `friendlyName` and
`externalIdentifiers` can be freely edited in Luma.
enum:
- integrator
- manual
isHiddenFromPatients:
type: boolean
description: Whether this payor is excluded from patient-facing payor search.
default: false
GroupResponse:
type: object
description: >-
A Group is a named collection of users and/or facilities within a Luma
Health account, used to organize staff for tasks like routing and
assignment. Groups can be created manually by an admin or generated
automatically by the system, and each one can be scoped to all
facilities or a specific subset. Other resources, such as chat
activities, reference a Group when work needs to be routed to a whole
team rather than a single staff member.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
facilities:
type: array
description: The IDs of the facilities associated with this group.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
users:
type: array
description: >-
DEPRECATED. Do not use this field. See the User resource and its
"groups" property instead.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
type: string
enum:
- user
- system
description: Indicates if a group was created by users or by the system.
name:
type: string
description: >-
Descriptive label of a group. This is the only way to link a group
in Luma with another in an external service, as the group doesn't
have an "externalId" field.
GroupRequestCreate:
type: object
required:
- name
- facilities
properties:
facilities:
type: array
description: The IDs of the facilities associated with this group.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
users:
type: array
description: >-
DEPRECATED. Do not use this field. See the "User" resource and use
its "groups" array instead.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
name:
type: string
description: >-
Descriptive label of a group. This is the only way to link a group
in Luma with another in an external service, as the group doesn't
have an "externalId" field.
type:
type: string
default: user
enum:
- user
- system
description: Indicates if a group was created by users or by the system.
GroupRequestUpdate:
type: object
properties:
facilities:
type: array
description: The IDs of the facilities associated with this group.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
users:
type: array
description: >-
DEPRECATED. Do not use this field. See the "User" resource and use
its "groups" array instead.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
name:
type: string
description: >-
Descriptive label of a group. This is the only way to link a group
in Luma with another in an external service, as the group doesn't
have an "externalId" field.
type:
type: string
default: user
enum:
- user
- system
description: Indicates if a group was created by users or by the system.
KnowledgeBaseQuestionAnswer:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
knowledgeBase:
$ref: '#/components/schemas/idParam'
question:
type: string
answer:
type: string
category:
type: string
required:
- knowledgeBase
- question
- answer
- category
LumabotFlowResponse:
type: object
description: >-
A LumabotFlow represents a single running or completed instance of a
Lumabot conversational flow that a patient goes through, such as an
intake form, appointment related questionnaire, or screening flow,
generated from a LumabotFlowTemplate. It tracks the patient, the
questions asked and answers given, current progress, completion status,
and links to related records like appointments, offers, or
availabilities produced as a result of the flow. It also supports
chaining flows together and lets staff track a separate processing
status for follow up after the patient completes the automated
interaction.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
patient:
description: the ID of the patient who filled out the answers for this form.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
description: >
The completion status of the lumabot flow under the patient's
perspective, knowingly:
- `started`: when the patient started answering at least one
question, but hasn't finished the form yet;
- `completed`: the patient has finished answering all the questions
and cannot edit the form anymore.
type: string
default: started
enum:
- started
- completed
flowType:
description: type of the lumabot flow template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- error
- no-availabilities
- regular
completedAt:
description: >-
the date/time when the patient finished all the responses of this
form.
type: string
format: date-time
processingStatus:
description: >
The internal staff's management status for a completed flow, serving
the purpose of organizing which answers were analysed by a staff
member or not.
- `open`: the flow was completed by a patient but not seen by any
staff member yet;
- `in-progress`: a staff user is analysing the answers;
- `closed`: the flow has been completely analysed by a member of the
staff team.
type: string
default: open
enum:
- open
- in-progress
- closed
processingStatusUpdatedBy:
description: >-
the ID of a staff `user` who analysed the responses of this
completed flow and changed its `processingStatus`.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
processingStatusUpdatedAt:
description: >-
the date/time when a staff `user` analysed the responses of this
completed flow and changed its `processingStatus`.
type: string
format: date-time
appointment:
description: the ID of an appointment related to this form.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
url:
description: >
deprecated: custom lumabot flow url, basically to identify any
patient in survey monkey,
an external forms service that's not being used anymore by Luma.
type: string
currentItemId:
description: >
The code of the current question the patient was last shown, before
answering it.
Such a code must be the content of any
`responses.page[0].questions[x].id`, or `success`.
Usually this will contain each id, in sequence, but patients can go
back and forth.
Also, forms can have jump logic, and some questions might not be
displayed to the patient.
When the form is completed, this is updated to `success`.
type: string
lumabotFlowTemplate:
description: >-
the ID of the template of questions that was displayed for the
patient.
type: string
pattern: '[0-9a-f]'
required: true
minLength: 24
maxLength: 24
lumabotFlowTemplateName:
description: >-
the name of the template of questions used as a basis for these form
answers. See `lumabotFlowTemplates`.
type: string
language:
description: The language in which the form was answered by the patient.
type: string
enum:
- en
- es
- pt
accessedFrom:
description: IP address of the patient who filled out the form.
type: string
previousLumabotFlow:
description: >
PreviousLumabotFlow and nextLumabotFlow will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
lumabotFlow and set
the previous form ID on its `previousLumabotFlow` property.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
nextLumabotFlow:
description: >
PreviousLumabotFlow and nextLumabotFlow will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
lumabotFlow and set
the new form ID on the first form's `nextLumabotFlow` property.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
questions:
description: >-
Contains information about the questions and answers given by the
patient.
type: array
items:
type: object
properties:
answer:
type: object
properties:
id:
type: string
text:
type: string
createdAt:
type: date-time
details:
type: object
askedAt:
type: date-time
id:
type: string
type:
type: string
squiggly:
type: string
title:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
template:
type: string
availabilities:
description: availabilities
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facilities:
description: facilities
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
LumabotFlowRequest:
type: object
properties:
patient:
description: the ID of the patient who filled out the answers for this form.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
description: >
The completion status of the lumabot flow under the patient's
perspective, knowingly:
- `started`: when the patient started answering at least one
question, but hasn't finished the form yet;
- `completed`: the patient has finished answering all the questions
and cannot edit the form anymore.
type: string
default: started
enum:
- started
- completed
flowType:
description: type of the lumabot flow template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- error
- no-availabilities
- regular
completedAt:
description: >-
the date/time when the patient finished all the responses of this
form.
type: string
format: date-time
processingStatus:
description: >
The internal staff's management status for a completed flow, serving
the purpose of organizing which answers were analysed by a staff
member or not.
- `open`: the flow was completed by a patient but not seen by any
staff member yet;
- `in-progress`: a staff user is analysing the answers;
- `closed`: the flow has been completely analysed by a member of the
staff team.
type: string
default: open
enum:
- open
- in-progress
- closed
processingStatusUpdatedBy:
description: >-
the ID of a staff `user` who analysed the responses of this
completed flow and changed its `processingStatus`.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
processingStatusUpdatedAt:
description: >-
the date/time when a staff `user` analysed the responses of this
completed flow and changed its `processingStatus`.
type: string
format: date-time
appointment:
description: the ID of an appointment related to this form.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
url:
description: >
deprecated: custom lumabot flow url, basically to identify any
patient in survey monkey,
an external forms service that's not being used anymore by Luma.
type: string
currentItemId:
description: >
The code of the current question the patient was last shown, before
answering it.
Such a code must be the content of any
`responses.page[0].questions[x].id`, or `success`.
Usually this will contain each id, in sequence, but patients can go
back and forth.
Also, forms can have jump logic, and some questions might not be
displayed to the patient.
When the form is completed, this is updated to `success`.
type: string
lumabotFlowTemplate:
description: >-
the ID of the template of questions that was displayed for the
patient.
type: string
pattern: '[0-9a-f]'
required: true
minLength: 24
maxLength: 24
lumabotFlowTemplateName:
description: >-
the name of the template of questions used as a basis for these form
answers. See `lumabotFlowTemplates`.
type: string
language:
description: The language in which the form was answered by the patient.
type: string
enum:
- en
- es
- pt
accessedFrom:
description: IP address of the patient who filled out the form.
type: string
previousLumabotFlow:
description: >
PreviousLumabotFlow and nextLumabotFlow will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
lumabotFlow and set
the previous form ID on its `previousLumabotFlow` property.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
nextLumabotFlow:
description: >
PreviousLumabotFlow and nextLumabotFlow will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
lumabotFlow and set
the new form ID on the first form's `nextLumabotFlow` property.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
questions:
description: >-
Contains information about the questions and answers given by the
patient.
type: array
items:
type: object
properties:
answer:
type: object
properties:
id:
type: string
text:
type: string
createdAt:
type: date-time
details:
type: object
askedAt:
type: date-time
id:
type: string
type:
type: string
squiggly:
type: string
title:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
template:
type: string
availabilities:
description: availabilities
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facilities:
description: facilities
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
LumabotFlowQuestionResponse:
type: object
description: >-
This resource represents a single question within a Lumabot
conversational flow, including its type such as text, date, multiple
choice, phone number, or scheduler, along with its title, validation
rules, answer options, and redirect logic that determines what question
comes next. It also carries Spanish and Portuguese translations for the
question text so the chatbot can present questions in the patient's
preferred language. It is used to define and render one interactive step
in an automated patient facing conversation such as an intake form or
screening questionnaire.
properties:
id:
description: null
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
type: string
enum:
- 2FA
- address
- availability_details
- date
- email
- jump
- manage_appointment
- medication_search
- multiple_choice
- pharmacy_search
- phone_number
- scheduler
- template_welcome
- template
- text
- yes_no
- zipcode
squiggly:
type: string
title:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
template:
type: string
visibility:
type: string
answers:
type: object
properties:
id:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
label:
type: string
locales:
description: >-
A map-object whose keys may be any of these language codes
`es` or `pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of the question
into spanish
type: string
title:
description: >-
the translation of the title of the question into
spanish
type: string
properties:
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of the question
into portuguese
type: string
title:
description: >-
the translation of the title of the question into
portuguese
type: string
properties:
type: object
disable:
type: boolean
properties:
type: object
properties:
params:
type: object
locales:
description: >-
A map-object whose keys may be any of these language codes `es` or
`pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of the question into
spanish
type: string
title:
description: the translation of the title of the question into spanish
type: string
properties:
description: >-
same structure as
`responses.pages[0].questions[i].properties`.
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of the question into
portuguese
type: string
title:
description: the translation of the title of the question into portuguese
type: string
properties:
description: same structure as `responses.pages[0].properties`.
type: object
lumabotFlowId:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
LumabotFlowResponsesResponse:
type: object
description: >-
This resource captures a single question and answer pair that a patient
submitted while completing a Lumabot flow, recording the question text,
the patient's answer, the question type, and the order in which it was
answered. Each record links back to the parent flow and its template, so
a full set of these responses reconstructs everything a patient said
during one chatbot interaction. It is used to review or report on
patient answers collected through automated intake, reminder, or
screening conversations.
properties:
lumabotFlowId:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
id:
type: string
squiggly:
type: string
question:
type: string
askedAt:
type: string
format: date-time
repliedAt:
type: string
format: date-time
answer:
type: string
LumabotFlowSnapshotResponse:
type: object
description: >-
This resource is a read only, point in time snapshot of a completed or
in progress Lumabot conversation, presented as a simple transcript of
messages exchanged between the patient and the chatbot along with when
the conversation started and ended. Unlike the editable flow template or
the live flow object, this snapshot is a fixed record meant for display
or auditing rather than further modification. It is used to let staff or
systems review exactly what was said during a specific patient
interaction such as an intake or screening session.
properties:
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
title:
type: string
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
messages:
type: array
items:
type: object
properties:
text:
type: string
createdAt:
type: string
format: date-time
source:
type: string
enum:
- patient
- lumabot
LumabotFlowAnswerRequest:
type: object
properties:
id:
description: itemId of the answer if selecting a multiple-choice option
type: string
text:
description: >-
Simple text answer or a summary of the answer (in case of complex
answers) to show on reports and hub
type: string
details:
description: >-
Complex object containing details of a complex answer, like
appointment details or address, for example
type: object
LumabotFlowTemplateResponse:
type: object
description: >-
A Lumabot flow template is a reusable definition for a conversational
chatbot flow made up of ordered question and answer items such as text,
dropdown, scheduler, or medication search steps. Templates can be system
provided or created by a user and are cloned or referenced to build
actual Lumabot flows shown to patients, supporting features like
scoring, staff notifications, scheduler request and response
interception, and mapping collected answers into a format that EHR or
scheduling integrators can consume. This response schema returns the
stored template record including its ownership, audit fields such as
createdBy and updatedBy, and its active status, in addition to the
template body itself.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
source:
description: source of the lumabot flow template
type: string
enum:
- system
- user
title:
description: title of the lumabot flow template
type: string
description:
description: description of the lumabot flow template
type: string
active:
description: describes if the lumabot flow template is active
type: boolean
url:
description: url of the lumabot flow template
type: string
tag:
description: tag of the lumabot flow template which is used to build the squiggly
type: string
template:
description: template of the lumabot flow template
type: object
properties:
items:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
enum:
- 2FA
- address
- availability_details
- date
- dropdown
- email
- jump
- manage_appointment
- medication_search
- multiple_choice
- pharmacy_search
- phone_number
- scheduler
- ssn
- template_welcome
- template
- text
- yes_no
- zipcode
squiggly:
type: string
title:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
template:
type: string
visibility:
type: string
notifyStaff:
description: notify staff when a question is answered
type: boolean
sendToHub:
description: send the answers to hub when a question is answered
type: boolean
scoringEnabled:
type: boolean
params:
type: object
answers:
type: object
properties:
id:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
label:
type: string
score:
type: number
locales:
description: >-
A map-object whose keys may be any of these
language codes `es` or `pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of the
question into spanish
type: string
title:
description: >-
the translation of the title of the
question into spanish
type: string
properties:
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of the
question into portuguese
type: string
title:
description: >-
the translation of the title of the
question into portuguese
type: string
properties:
type: object
disable:
type: boolean
properties:
type: object
properties:
params:
type: object
schedulerRequestInterceptor:
description: schedulerRequestInterceptor of the lumabot flow template
type: string
schedulerResponseInterceptor:
description: schedulerResponseInterceptor of the lumabot flow template
type: string
flowType:
description: type of the lumabot flow template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- error
- no-availabilities
- regular
facilities:
description: list of facility ids the flow template is associated with
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
LumabotFlowTemplateRequestCreate:
type: object
required:
- source
properties:
source:
description: source of the lumabot flow template
type: string
enum:
- system
- user
title:
description: title of the lumabot flow template
type: string
description:
description: description of the lumabot flow template
type: string
active:
description: describes if the lumabot flow template is active
type: boolean
url:
description: url of the lumabot flow template
type: string
tag:
description: tag of the lumabot flow template which is used to build the squiggly
type: string
template:
description: template of the lumabot flow template
type: object
properties:
items:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
enum:
- 2FA
- address
- availability_details
- date
- dropdown
- email
- jump
- manage_appointment
- medication_search
- multiple_choice
- pharmacy_search
- phone_number
- scheduler
- ssn
- template_welcome
- template
- text
- yes_no
- zipcode
squiggly:
type: string
title:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
template:
type: string
visibility:
type: string
notifyStaff:
description: notify staff when a question is answered
type: boolean
sendToHub:
description: send the answers to hub when a question is answered
type: boolean
scoringEnabled:
type: boolean
params:
type: object
answers:
type: object
properties:
id:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
label:
type: string
score:
type: number
locales:
description: >-
A map-object whose keys may be any of these
language codes `es` or `pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of the
question into spanish
type: string
title:
description: >-
the translation of the title of the
question into spanish
type: string
properties:
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of the
question into portuguese
type: string
title:
description: >-
the translation of the title of the
question into portuguese
type: string
properties:
type: object
disable:
type: boolean
properties:
type: object
properties:
params:
type: object
schedulerRequestInterceptor:
description: schedulerRequestInterceptor of the lumabot flow template
type: string
schedulerResponseInterceptor:
description: schedulerResponseInterceptor of the lumabot flow template
type: string
flowType:
description: type of the lumabot flow template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- error
- no-availabilities
- regular
facilities:
description: list of facility ids the flow template is associated with
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
LumabotFlowTemplateRequestUpdate:
type: object
properties:
source:
description: source of the lumabot flow template
type: string
enum:
- system
- user
title:
description: title of the lumabot flow template
type: string
description:
description: description of the lumabot flow template
type: string
active:
description: describes if the lumabot flow template is active
type: boolean
url:
description: url of the lumabot flow template
type: string
tag:
description: tag of the lumabot flow template which is used to build the squiggly
type: string
template:
description: template of the lumabot flow template
type: object
properties:
items:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
enum:
- 2FA
- address
- availability_details
- date
- dropdown
- email
- jump
- manage_appointment
- medication_search
- multiple_choice
- pharmacy_search
- phone_number
- scheduler
- ssn
- template_welcome
- template
- text
- yes_no
- zipcode
squiggly:
type: string
title:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
template:
type: string
visibility:
type: string
notifyStaff:
description: notify staff when a question is answered
type: boolean
sendToHub:
description: send the answers to hub when a question is answered
type: boolean
scoringEnabled:
type: boolean
params:
type: object
answers:
type: object
properties:
id:
type: string
redirectType:
type: string
enum:
- none
- goTo
- goToFlow
- goToPrevious
- isFinal
- externalUrl
- scheduler
redirectValue:
type: string
label:
type: string
score:
type: number
locales:
description: >-
A map-object whose keys may be any of these
language codes `es` or `pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of the
question into spanish
type: string
title:
description: >-
the translation of the title of the
question into spanish
type: string
properties:
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of the
question into portuguese
type: string
title:
description: >-
the translation of the title of the
question into portuguese
type: string
properties:
type: object
disable:
type: boolean
properties:
type: object
properties:
params:
type: object
schedulerRequestInterceptor:
description: schedulerRequestInterceptor of the lumabot flow template
type: string
schedulerResponseInterceptor:
description: schedulerResponseInterceptor of the lumabot flow template
type: string
flowType:
description: type of the lumabot flow template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- error
- no-availabilities
- regular
facilities:
description: list of facility ids the flow template is associated with
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
Ref:
description: >
Indicates what this is about. Depending on this value, you also know
what the parameter `refId` refers to.
- reminder (`refId` will be the ID of a `Reminder`)
- referral-reminder (`refId` will be the ID of a `Reminder`)
- feedback-reminder (`refId` will be the ID of a `Reminder`)
- followup (`refId` will be the ID of a `Reminder`)
- outbound-referral-reminder (`refId` will be the ID of a
`Reminder`)
- form-reminder (`refId` will be the ID of a `Reminder`)
- reschedule (`refId` will be the ID of a `Reminder`)
- waitlist (`refId` will be the ID of a `Waitlist`)
- appointment-offer (`refId` will be the ID of a `Offer`)
- chat-notification (`refId` will be the ID of a `Message`)
- pin-verification (`refId` will be the ID of a `Message`)
- chat (`refId` will be the ID of a `ChatActivity`)
- chat-audit (`refId` will be the ID of a `ChatActivity`)
- chat-audit-tz (`refId` will be the ID of a `ChatActivity`)
- feedback (`refId` will be the ID of a `Feedback` request)
- waitlist-offer (`refId` will be the ID of an `Appointment`)
- referral-followup (`refId` will be the ID of a `Referral`)
- outbound-referral-outreach (`refId` will be the ID of a
`Referral`)
- referral-redirect (`refId` will be the ID of a `Referral`)
- broadcast (`refId` will be the ID of a `Broadcast`)
- generic (`refId` will refer to the same object of the previous message
to this same patient)
- stop (`refId` will refer to the same object of the previous message to
this same patient)
- bot:followup (`refId` will be the ID of a `Patient`)
- telehealth (`refId` will be the ID of a `Telehealth` object)
- waiting-room-patient (`refId` will be the ID of a `WaitingRoomPatient`
object)
type: string
enum:
- reminder
- referral-reminder
- feedback-reminder
- followup
- outbound-referral-reminder
- form-reminder
- reschedule
- waitlist
- appointment-offer
- chat-notification
- pin-verification
- chat
- chat-audit
- chat-audit-tz
- feedback
- waitlist-offer
- referral-followup
- outbound-referral-outreach
- referral-redirect
- broadcast
- generic
- stop
- bot:followup
- telehealth
- waiting-room-patient
Language:
description: Language
type: string
enum:
- ar
- bn
- cn
- de
- en
- es
- fa
- fl
- fr
- gr
- gu
- hi
- ht
- hy
- it
- ja
- km
- ko
- mr
- my
- pa
- pl
- pt
- ru
- so
- th
- ti
- ur
- vi
- zh-t
- zh
MessageResponse:
type: object
description: >-
A Message represents a single communication sent or received between
Luma Health and a patient, or between staff members, across channels
such as SMS, email, voice, fax, WhatsApp, and in-app chat. It tracks
delivery status from the messaging vendor (sent, delivered, opened,
undelivered, etc), links back to related records like the appointment,
provider, referral, or recall that triggered it, and captures the
classification of patient replies such as positive, negative, or
unrecognized. It also distinguishes public patient-facing messages from
private staff notifications and internal staff-to-staff conversations.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
patient:
description: The ID of the patient linked to this message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
key:
description: >
The MessageTemplate name. There are only 2 templates available
through the RESTful API.
The secure template means that the patient only gets a generic
message with a link to open the patient web app
and then read the real message. In that case, there are 2 messages,
one with that generic message,
and one with the real message. This parameter is set automatically
on the message,
depending on the `secure` parameter which was chosen when the
message was created.
type: string
from:
description: >-
the phone number or e-mail address from whom this message was
received. It depends on the value of the parameter `channel`.
type: string
to:
description: >-
the phone number or e-mail address to whom this message was sent. It
depends on the value of the parameter `channel`.
type: string
type:
description: >-
Indicates if a message was sent from Luma to an external person, or
the other way around.
type: string
enum:
- inbound
- outbound
voiceAnsweredBy:
description: voiceAnsweredBy
type: string
enum:
- human
- fax
- unknown
- machine-start
- machine-end-beep
- machine-end-silence
- machine-end-other
ref:
$ref: '#/components/schemas/Ref'
refId:
description: The ID of the object referenced by the `ref` parameter.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientMessageTemplate:
description: >-
The ID of a Hub Message Template (or `PatientMessageTemplate`).
These are custom messages, created by users, to make their typing
experience easier.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
outboundMessage:
description: >
This field is only present on a patient's reply (aka `messages`
whose `type` are `inbound`)
so as to link it to the original outbound `message` that was sent to
them.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
description: >
The deliverability status, provided by Luma's external vendors.
Messages are initially created as `sent`, and later updated to some
other status.
- Sent = vendor has acknowledged receipt of request
- Pending = vendor has sent non-terminating status update
- Delivered = vendor has confirmed a delivered message
- Undelivered = vendor has confirmed an undelivered message
- Opened = vendor has confirmed an opened message
- Skipped = system skipped sending the message
type: string
default: sent
enum:
- sent
- pending
- delivered
- undelivered
- opened
- skipped
skippedStatusReason:
description: >
This field is only present on messages whose `status` is `skipped`.
It contains the reason why Luma decided to skip sending the message
out.
type: string
language:
$ref: '#/components/schemas/Language'
externalStatus:
description: Delivery status codes and messages provided by external vendors.
type: object
properties:
code:
type: string
description: Status code provided by vendor
reason:
type: string
description: Status message provided by vendor
channel:
description: >
The channel used to send this message.
On our RESTful API, you may search for multiple channels, but only
POST `chat` messages.
Two of them deserve an explanation:
- `chat` will check the recipient's contact and pick the channel
automatically.
- `inapp` are meant for internal messages, when a staff user
`@mentions` another staff user on Hub.
The mentioned person only gets a notification on their browser
window,
by fetching from the `notifications` API.
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
notifyTo:
description: >-
Messages with channel=chat may specify in this field where the
message notification must be sent.
type: array
items:
type: object
properties:
channel:
description: channel
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
to:
description: to
type: string
shouldForceContactWithNotifyTo:
description: >
When the patient has the patient web app open, we detect that and
only send messages through the web interface.
This is to avoid having the patient receive the same message both on
the web and also by SMS.
But if this flag is set to TRUE, then we will send to the contact
specified in the `notifyTo` field, regardless of the patient's
online presence.
type: boolean
text:
description: >
The content of the message.
If the channel was `chat`, then the text was manually provided when
the message was created.
For all other channels, the `key` was used to fetch a
`messageTemplate` and determine the `text`
based on that template.
type: string
classification:
description: >
The classification of patient replies (inbound messages) interpreted
by our
NLP (Natural Language Processing) service.
- `positive` indicates a yes-type answer (e.g. "sounds good", "yes",
or "ok")
- `negative` indicates a no-type answer (e.g. "no way", "negative",
"no good")
- `irregular` indicates classification attempt was not able to
classify the text as positive or negative
- `recognized-keywords` indicates that an expected keyword was
identified (e.g. "waitlist")
- `unclassified` indicates no classification attempted - yet
type: string
default: unclassified
enum:
- positive
- negative
- irregular
- recognized-keywords
- unclassified
externalId:
$ref: '#/components/schemas/ExternalId'
secure:
description: >
Indicates how a message with channel `chat` will be delivered.
Secure messages are created on the database but not really sent to
patients. Instead, we create another unsecure message whose content
is the messageTemplate `chatRequestInsecure`, which basically
instructs the patient to click on a link to open patient-web-app to
log in and then read the secure message.
Insecure messages are sent directly to patients. Their text should
not contain any PHI or sensitive information.
type: boolean
automated:
description: >-
Indicates if a message was created by users (chat) or by the system
(reminders, recalls, etc).
type: boolean
default: true
visibility:
description: >
Helps determine where a certain message should be displayed.
- `public` = manual and automated messages sent to patients, visible
to patients logged into our patient web app;
- `private` = automated messages sent to staff, only visible to one
recipient staff user;
- `internal` = manual messages sent from staff to staff, visible to
both staff users involved in a conversation, whenever one @mentined
the other, both logged into our internal web app, and usually on Hub
rather than any notification areas.
type: string
default: public
enum:
- public
- private
- internal
file:
description: |
The ID of a `FileUpload`, in case this message has any attachment,
sent via the `FileUpload` RESTful API.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
media:
description: >-
Any recorded media (voice recording, fax image, etc) that represents
this message. URL should be the location from which to retreive it
type: object
properties:
url:
type: string
contentType:
type: string
stats:
description: stats
type: object
properties:
timers:
type: object
properties:
elapsedReplyTime:
description: How long it took for a user to reply to a message in seconds
type: number
default: 0
pricing:
type: object
properties:
segments:
type: number
carrierFee:
type: number
default: 0
baseRate:
type: number
default: 0
pricing:
type: string
retry:
description: >-
Information about additional messages that were created in an
attempt to retry sending messages that failed to be delivered.
type: object
properties:
originalMessage:
description: ID of the original Message that had an undelivered status
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
count:
description: Sequential number of attempts
type: number
default: 0
terminatingStateAt:
description: >-
The time that we recognize a terminal state of a message updated
based on the vendor status callbacks.
type: string
format: date-time
mentions:
description: >-
Array of IDs of either users or groups that have been `@mentioned`
inside messages, usually messages with visibility `internal`.
type: array
items:
type: object
properties:
ref:
description: >-
Describes if the `@mention` refers to a `User` ID or a `Group`
ID. Determines the meaning of the `refId` field.
type: string
enum:
- user
- group
refId:
description: >-
The ID of either a user or a group that was @mentioned, based
on the `ref` value.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
mention:
description: >-
Literally the string `@SomeOnesName` or `@GroupName` that was
used.
type: string
recipient:
description: >-
The ID of the User receiving the message. Usually, for messages
`type outbound`, the recipient is the ID of a patient.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recipientType:
description: The type of the user in the field `recipient`
type: string
enum:
- doctor
- staff
- patient
appointment:
description: ID of Appointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
description: ID of AppointmentType
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
followup:
description: ID of Followup or Custom Action
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recall:
description: ID of Recall
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
description: ID of Referral
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
messageFailure:
description: ID of MessageFailure
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
MessageRequest:
type: object
required:
- patient
- type
- ref
- channel
- text
- secure
properties:
patient:
description: The ID of the patient linked to this message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
key:
description: >
The MessageTemplate name. There are only 2 templates available
through the RESTful API.
The secure template means that the patient only gets a generic
message with a link to open the patient web app
and then read the real message. In that case, there are 2 messages,
one with that generic message,
and one with the real message. This parameter is set automatically
on the message,
depending on the `secure` parameter which was chosen when the
message was created.
type: string
enum:
- chatRequest
- chatRequestInsecure
type:
description: >-
Indicates if a message was sent from Luma to an external person, or
the other way around.
type: string
enum:
- inbound
- outbound
voiceAnsweredBy:
description: voiceAnsweredBy
type: string
enum:
- human
- fax
- unknown
- machine-start
- machine-end-beep
- machine-end-silence
- machine-end-other
ref:
description: >
On our RESTful API, you can only create messages with ref `chat`,
but you may see these other refs when fetching messages.
Indicates what this message is about. Depending on this value, you
also know what the parameter `refId` refers to.
- chat (`refId` will be the ID of a `ChatActivity`)
type: string
enum:
- chat
refId:
description: The ID of the object referenced by the `ref` parameter.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientMessageTemplate:
description: >-
The ID of a Hub Message Template (or `PatientMessageTemplate`).
These are custom messages, created by users, to make their typing
experience easier.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
language:
$ref: '#/components/schemas/Language'
channel:
description: >
description: |
The channel used to send this message.
On our RESTful API, you may search for multiple channels, but only
POST `chat` messages.
Check the response format to see other possible channels.
Two of them deserve an explanation:
- `chat` will check the recipient's contact and pick the channel
automatically.
- `inapp` are meant for internal messages, when a staff user
`@mentions` another staff user on Hub.
The mentioned person only gets a notification on their browser
window,
by fetching from the `notifications` API.
type: string
enum:
- chat
notifyTo:
description: >-
Messages with channel=chat may specify in this field where the
message notification must be sent.
type: array
items:
type: object
required:
- channel
properties:
channel:
description: channel
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
to:
description: to
type: string
shouldForceContactWithNotifyTo:
description: >
When the patient has the patient web app open, we detect that and
only send messages through the web interface.
This is to avoid having the patient receive the same message both on
the web and also by SMS.
But if this flag is set to TRUE, then we will send to the contact
specified in the `notifyTo` field, regardless of the patient's
online presence.
type: boolean
text:
description: >
The content of the message.
On our RESTful API, you can only POST messages with channel `chat`,
and you must provide a `text`.
Just as an information for when fetching messages (not creating
them),
all the other channels determine the `text` automatically, based on
the `key`.
The key is the name of a messageTemplate, which is fetched then
parsed (for squigglies)
to generate the final `text` automatically.
type: string
externalId:
$ref: '#/components/schemas/ExternalId'
secure:
description: >
Indicates how a message with channel `chat` will be delivered.
Secure messages are created on the database but not really sent to
patients. Instead, we create another unsecure message whose content
is the messageTemplate `chatRequestInsecure`, which basically
instructs the patient to click on a link to open patient-web-app to
log in and then read the secure message.
Insecure messages are sent directly to patients. Their text should
not contain any PHI or sensitive information.
type: boolean
automated:
description: >-
Indicates if a message was created by users (chat) or by the system
(reminders, recalls, etc).
type: boolean
default: true
visibility:
description: >
Helps determine where a certain message should be displayed.
- `public` = manual and automated messages sent to patients, visible
to patients logged into our patient web app;
- `private` = automated messages sent to staff, only visible to one
recipient staff user;
- `internal` = manual messages sent from staff to staff, visible to
both staff users involved in a conversation, whenever one @mentined
the other, both logged into our internal web app, and usually on Hub
rather than any notification areas.
type: string
default: public
enum:
- public
- private
- internal
file:
description: |
The ID of a `FileUpload`, in case this message has any attachment,
sent via the `FileUpload` RESTful API.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
media:
description: >-
Any recorded media (voice recording, fax image, etc) that represents
this message. URL should be the location from which to retreive it
type: object
properties:
url:
type: string
contentType:
type: string
mentions:
description: >-
Array of IDs of either users or groups that have been `@mentioned`
inside messages, usually messages with visibility `internal`.
type: array
items:
type: object
properties:
ref:
description: >-
Describes if the `@mention` refers to a `User` ID or a `Group`
ID. Determines the meaning of the `refId` field.
type: string
enum:
- user
- group
refId:
description: >-
The ID of either a user or a group that was @mentioned, based
on the `ref` value.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
mention:
description: >-
Literally the string `@SomeOnesName` or `@GroupName` that was
used.
type: string
recipient:
description: >-
The ID of the User receiving the message. Usually, for messages
`type outbound`, the recipient is the ID of a patient.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recipientType:
description: The type of the user in the field `recipient`
type: string
enum:
- doctor
- staff
- patient
appointment:
description: ID of Appointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
description: ID of AppointmentType
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
followup:
description: ID of Followup or Custom Action
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recall:
description: ID of Recall
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
description: ID of Referral
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
messageFailure:
description: ID of MessageFailure
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
MessagesUpdateVisibilityRequest:
type: object
properties:
markMessageAs:
type: string
default: public
enum:
- public
- private
- internal
MessageTemplatePartialsResponse:
type: object
properties:
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
name:
type: string
template:
type: string
type:
type: string
enum:
- campaign
- digital-call-deflection
- generic
subType:
type: string
enum:
- digital-call-deflection-appointment-management
- digital-call-deflection-initiated-text
- digital-call-deflection-error
- digital-call-deflection-luma-bot
- digital-call-deflection-main-menu
- digital-call-deflection-other
- digital-call-deflection-patient-verification
- digital-call-deflection-redirect
- digital-call-deflection-scheduling
- digital-call-deflection-sub-menu
- digital-call-deflection-third-party-link
MessageTemplatePartialsCreate:
type: object
required:
- template
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
name:
type: string
template:
type: string
type:
type: string
enum:
- campaign
- digital-call-deflection
- generic
subType:
type: string
enum:
- digital-call-deflection-appointment-management
- digital-call-deflection-initiated-text
- digital-call-deflection-error
- digital-call-deflection-luma-bot
- digital-call-deflection-main-menu
- digital-call-deflection-other
- digital-call-deflection-patient-verification
- digital-call-deflection-redirect
- digital-call-deflection-scheduling
- digital-call-deflection-sub-menu
- digital-call-deflection-third-party-link
MessageTemplatePartialsUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
name:
type: string
template:
type: string
type:
type: string
enum:
- campaign
- digital-call-deflection
- generic
subType:
type: string
enum:
- digital-call-deflection-appointment-management
- digital-call-deflection-initiated-text
- digital-call-deflection-error
- digital-call-deflection-luma-bot
- digital-call-deflection-main-menu
- digital-call-deflection-other
- digital-call-deflection-patient-verification
- digital-call-deflection-redirect
- digital-call-deflection-scheduling
- digital-call-deflection-sub-menu
- digital-call-deflection-third-party-link
OutboundReferralsResponse:
type: object
description: >-
An Outbound Referral represents a referral sent from a practice to an
outside provider or facility on behalf of a patient, for example when a
primary care office refers a patient to a specialist. It tracks the
referring and rendering providers, the receiving facility, the
associated diagnoses and appointment type, and how the referral entered
the system such as by upload, manual entry, or integration. It also
tracks the outreach lifecycle including attempts to contact the patient,
expiration, and status values like active, called, scheduled, or closed.
properties:
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
facility:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
renderingProvider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
source:
type: string
enum:
- upload
- ui
- integrator
status:
type: string
enum:
- active
- called
- scheduled
- incomplete
- cancelled
- expired
- closed
diagnoses:
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
attempt:
type: int32
startOn:
type: string
format: date-time
expireAt:
type: string
format: date-time
lastAttemptAt:
type: string
format: date-time
calledAt:
type: string
format: date-time
notes:
type: string
reason:
type: string
processedReferallOutreach:
type: string
enum:
- pending
- skipped
- failed
- success
faxUpload:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
externalId:
$ref: '#/components/schemas/ExternalId'
OutboundReferralsCreate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
facility:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
renderingProvider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
source:
type: string
enum:
- upload
- ui
- integrator
status:
type: string
enum:
- active
- called
- scheduled
- incomplete
- cancelled
- expired
- closed
diagnoses:
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
attempt:
type: int32
startOn:
type: string
format: date-time
expireAt:
type: string
format: date-time
lastAttemptAt:
type: string
format: date-time
calledAt:
type: string
format: date-time
notes:
type: string
reason:
type: string
processedReferallOutreach:
type: string
enum:
- pending
- skipped
- failed
- success
faxUpload:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
externalId:
$ref: '#/components/schemas/ExternalId'
OutboundReferralsUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
facility:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
renderingProvider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
source:
type: string
enum:
- upload
- ui
- integrator
status:
type: string
enum:
- active
- called
- scheduled
- incomplete
- cancelled
- expired
- closed
diagnoses:
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
attempt:
type: int32
startOn:
type: string
format: date-time
expireAt:
type: string
format: date-time
lastAttemptAt:
type: string
format: date-time
calledAt:
type: string
format: date-time
notes:
type: string
reason:
type: string
processedReferallOutreach:
type: string
enum:
- pending
- skipped
- failed
- success
faxUpload:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
externalId:
$ref: '#/components/schemas/ExternalId'
RolesByUser:
type: object
description: >-
Object containing 2 keys, referringProvider and renderingProvider. The
value for each key is an array. The content of the array should be the
root account ids under the same organization, where this user has the
role with the same name of the key.
required: []
properties:
referringProvider:
type: array
description: >-
List of root account IDs under an organization where the user has
the role referringProvider
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
renderingProvider:
type: array
description: >-
List of root account IDs under an organization where the user has
the role renderingProvider
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
SalesforceData:
type: object
description: Salesforce internal meta data for this account.
required:
- respectProvisioning
properties:
customerSuccessManager:
type: object
properties:
name:
type: string
email:
type: string
phone:
type: string
provisioning:
type: array
items:
type: string
enum:
- reminder
- waitlist
- feedback
- followup
- referral
- outbound-referral
- chat
- scheduler
- recall
- insurance
- broadcast
- form
- intake-form
- prequal-form
- branding
- upload
- telehealth
- waiting-room
- luma-pay
- insurance-verification
respectProvisioning:
type: boolean
default: true
lifeline:
type: string
enum:
- trial
- converted
- active
- churn
mrr:
type: number
arr:
type: number
renewalDate:
type: string
format: date-time
providers:
type: number
specialty:
type: string
referralTrialLimit:
type: number
recordType:
type: string
domesticAccessRequired:
type: boolean
goLiveAt:
type: string
format: date-time
fullyImplementedAt:
type: string
format: date-time
contractSignedAt:
type: string
format: date-time
contractLength:
type: number
healthStatus:
type: string
default: green
enum:
- green
- yellow
- red
- poor fit
- Healthy
- Neutral
- Churn Risk
- Advocate
boardSegment:
type: string
default: Unknown
enum:
- Reseller
- Strategic
- Majors
- Core
- Sub 20
- Unknown
onboardingState:
type: string
default: Customer Success Introduction
enum:
- Customer Success Introduction
- Kickoff
- Integration
- Discovery Call
- Customization
- Testing
- Staff Training
- Ready To Launch
- Go-Live
- Fully Implemented
accountLifeline:
type: string
default: Active
enum:
- Unassigned
- Assigned
- Sales Accepted
- Working
- Sales Qualified
- Open Opportunity
- Nurture
- Disqualified
- Trial
- Converted
- Active
- Churned
- Partnered
- Trial Ended (No Conversion)
PatientResponse:
type: object
description: >-
A Patient represents an individual receiving care through a Luma Health
customer's practice. It stores demographic and contact information,
communication preferences and history, EHR sync identifiers, billing
balances, and engagement stats used to power scheduling, messaging, and
referral workflows.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
culture:
description: culture
type: string
enum:
- cn
- hk
birthSex:
description: birthSex
type: string
enum:
- M
- F
- UNK
race:
description: race
type: string
enum:
- american-indian-or-alaska-native
- asian
- black-or-african-american
- native-hawaiian-or-other-pacific-islander
- white
- other-race
ethnicityGroup:
description: ethnicityGroup
type: string
enum:
- hispanic-or-latino
- not-hispanic-or-latino
suffix:
description: suffix
type: string
enum:
- II
- III
- IV
- Jr.
- Sr.
previousAddress:
description: previousAddress
type: string
stats:
type: object
properties:
counters:
type: object
properties:
messagesSentToPatient:
description: stats.counters.messagesSentToPatient
type: number
confirmedAppointments:
description: stats.counters.confirmedAppointments
type: number
cancelledAppointments:
description: stats.counters.cancelledAppointments
type: number
offersSent:
description: stats.counters.offersSent
type: number
offersAccepted:
description: stats.counters.offersAccepted
type: number
appointmentOffersReplied:
description: stats.counters.appointmentOffersReplied
type: number
average:
type: object
properties:
appointmentOfferReplyTime:
description: stats.average.appointmentOfferReplyTime
type: number
metadata:
type: object
properties:
lastAppointmentAt:
description: stats.metadata.lastAppointmentAt
type: string
format: date-time
oldestAppointment:
description: stats.oldestAppointment
type: string
format: date-time
lastProcessedAt:
description: lastProcessedAt
type: string
format: date-time
default: '2022-03-31T12:01:59.227Z'
source:
description: source
type: string
enum:
- widget
- integrator
- ui
- referring-provider
- hub
widget:
description: widget
type: string
enum:
- lumabot
mergedInto:
description: ID of Patient
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
subscribers:
description: subscribers
type: array
items:
type: object
properties:
subscribed:
description: subscribed
type: boolean
user:
description: ID of User
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
outboundContact:
description: outboundContact
type: array
items:
type: object
properties:
provider:
description: provider
type: string
enum:
- mandrill
- twilio
- nexmo
- sendgrid
- plivo
- bandwidth
- ringcentral
- awsses
- interfax
channel:
description: channel
type: string
enum:
- sms
- voice
- fax
- email
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
primaryCareProvider:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recommendations:
type: object
properties:
reminderTime:
description: recommendations.reminderTime
type: number
balance:
description: balance
type: number
balanceUpdatedAt:
description: balanceUpdatedAt
type: string
format: date-time
searchIds:
description: searchIds
type: array
items:
type: string
randomName:
description: randomName
type: boolean
name:
description: name
type: string
normalizedName:
description: normalizedName
type: string
firstname:
description: firstname
type: string
lastname:
description: lastname
type: string
middlename:
description: middlename
type: string
displayPhone:
description: displayPhone
type: string
displayStatus:
description: displayStatus
type: string
default: pending
enum:
- active
- pending
- suspended
email:
description: email
type: string
safeId:
description: safeId
type: string
type:
description: type
type: string
enum:
- doctor
- staff
- patient
- guest
roles:
description: roles
type: array
items:
type: string
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
description: ID of Organization
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
description: contact
type: array
items:
type: object
properties:
type:
description: type
type: string
default: email
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
archived:
description: archived
type: boolean
archivedReason:
description: archivedReason
type: string
default: none
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
description: doNotContact
type: boolean
doNotContactMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
description: groups
type: array
items:
type: objectid
stripeCustomerId:
description: stripeCustomerId
type: string
stripeSubscriptionId:
description: stripeSubscriptionId
type: string
salesforceId:
description: salesforceId
type: string
lastLogin:
description: lastLogin
type: string
format: date-time
active:
description: active
type: number
master:
description: master
type: boolean
language:
$ref: '#/components/schemas/Language'
setting:
description: ID of Setting
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
settings:
$ref: '#/components/schemas/SettingProperty'
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
gender:
description: gender
type: string
default: unknown
enum:
- male
- female
- unknown
- nonbinary
allowedIps:
description: allowedIps
type: array
items:
type: string
avatar:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
publicKey:
description: publicKey
type: string
directMessagingEmail:
description: directMessagingEmail
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
website:
description: website
type: string
salesforceData:
$ref: '#/components/schemas/SalesforceData'
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
properties:
year:
description: dateOfBirth.year
type: number
month:
description: dateOfBirth.month
type: number
day:
description: dateOfBirth.day
type: number
twoFactorAuthSecret:
type: object
properties:
enabled:
description: twoFactorAuthSecret.enabled
type: boolean
__v:
description: __v
type: number
__t:
description: __t
type: string
default: Patient
PatientRequestCreate:
type: object
required:
- name
- type
- doNotContact
- active
- country
- gender
properties:
culture:
description: culture
type: string
enum:
- cn
- hk
birthSex:
description: birthSex
type: string
enum:
- M
- F
- UNK
race:
description: race
type: string
enum:
- american-indian-or-alaska-native
- asian
- black-or-african-american
- native-hawaiian-or-other-pacific-islander
- white
- other-race
ethnicityGroup:
description: ethnicityGroup
type: string
enum:
- hispanic-or-latino
- not-hispanic-or-latino
suffix:
description: suffix
type: string
enum:
- II
- III
- IV
- Jr.
- Sr.
previousAddress:
description: previousAddress
type: string
stats:
type: object
properties:
counters:
type: object
properties:
messagesSentToPatient:
description: stats.counters.messagesSentToPatient
type: number
confirmedAppointments:
description: stats.counters.confirmedAppointments
type: number
cancelledAppointments:
description: stats.counters.cancelledAppointments
type: number
offersSent:
description: stats.counters.offersSent
type: number
offersAccepted:
description: stats.counters.offersAccepted
type: number
appointmentOffersReplied:
description: stats.counters.appointmentOffersReplied
type: number
average:
type: object
properties:
appointmentOfferReplyTime:
description: stats.average.appointmentOfferReplyTime
type: number
metadata:
type: object
properties:
lastAppointmentAt:
description: stats.metadata.lastAppointmentAt
type: string
format: date-time
oldestAppointment:
description: stats.oldestAppointment
type: string
format: date-time
lastProcessedAt:
description: lastProcessedAt
type: string
format: date-time
default: '2022-03-31T12:01:59.227Z'
source:
description: source
type: string
enum:
- widget
- integrator
- ui
- referring-provider
- hub
widget:
description: widget
type: string
enum:
- lumabot
mergedInto:
description: ID of Patient
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
subscribers:
description: subscribers
type: array
items:
type: object
properties:
subscribed:
description: subscribed
type: boolean
user:
description: ID of User
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
outboundContact:
description: outboundContact
type: array
items:
type: object
properties:
provider:
description: provider
type: string
enum:
- mandrill
- twilio
- nexmo
- sendgrid
- plivo
- bandwidth
- ringcentral
- awsses
- interfax
channel:
description: channel
type: string
enum:
- sms
- voice
- fax
- email
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
primaryCareProvider:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recommendations:
type: object
properties:
reminderTime:
description: recommendations.reminderTime
type: number
balance:
description: balance
type: number
balanceUpdatedAt:
description: balanceUpdatedAt
type: string
format: date-time
searchIds:
description: searchIds
type: array
items:
type: string
randomName:
description: randomName
type: boolean
name:
description: name
type: string
normalizedName:
description: normalizedName
type: string
firstname:
description: firstname
type: string
lastname:
description: lastname
type: string
middlename:
description: middlename
type: string
displayPhone:
description: displayPhone
type: string
displayStatus:
description: displayStatus
type: string
default: pending
enum:
- active
- pending
- suspended
email:
description: email
type: string
safeId:
description: safeId
type: string
type:
description: type
type: string
enum:
- patient
- guest
roles:
description: roles
type: array
items:
type: string
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
description: ID of Organization
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
description: contact
type: array
items:
type: object
properties:
type:
description: type
type: string
default: email
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
archived:
description: archived
type: boolean
archivedReason:
description: archivedReason
type: string
default: none
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
description: doNotContact
type: boolean
doNotContactMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
description: groups
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
description: stripeCustomerId
type: string
twoFactorAuthSecret:
type: object
properties:
enabled:
description: twoFactorAuthSecret.enabled
type: boolean
stripeSubscriptionId:
description: stripeSubscriptionId
type: string
salesforceId:
description: salesforceId
type: string
lastLogin:
description: lastLogin
type: string
format: date-time
active:
description: active
type: number
master:
description: master
type: boolean
language:
description: language
type: string
default: en
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
gender:
description: gender
type: string
default: unknown
enum:
- male
- female
- unknown
- nonbinary
allowedIps:
description: allowedIps
type: array
items:
type: string
avatar:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
publicKey:
description: publicKey
type: string
directMessagingEmail:
description: directMessagingEmail
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
website:
description: website
type: string
salesforceData:
$ref: '#/components/schemas/SalesforceData'
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
properties:
year:
description: dateOfBirth.year
type: number
month:
description: dateOfBirth.month
type: number
day:
description: dateOfBirth.day
type: number
PatientRequestUpdate:
type: object
properties:
culture:
description: culture
type: string
enum:
- cn
- hk
birthSex:
description: birthSex
type: string
enum:
- M
- F
- UNK
race:
description: race
type: string
enum:
- american-indian-or-alaska-native
- asian
- black-or-african-american
- native-hawaiian-or-other-pacific-islander
- white
- other-race
ethnicityGroup:
description: ethnicityGroup
type: string
enum:
- hispanic-or-latino
- not-hispanic-or-latino
suffix:
description: suffix
type: string
enum:
- II
- III
- IV
- Jr.
- Sr.
previousAddress:
description: previousAddress
type: string
stats:
type: object
properties:
counters:
type: object
properties:
messagesSentToPatient:
description: stats.counters.messagesSentToPatient
type: number
confirmedAppointments:
description: stats.counters.confirmedAppointments
type: number
cancelledAppointments:
description: stats.counters.cancelledAppointments
type: number
offersSent:
description: stats.counters.offersSent
type: number
offersAccepted:
description: stats.counters.offersAccepted
type: number
appointmentOffersReplied:
description: stats.counters.appointmentOffersReplied
type: number
average:
type: object
properties:
appointmentOfferReplyTime:
description: stats.average.appointmentOfferReplyTime
type: number
metadata:
type: object
properties:
lastAppointmentAt:
description: stats.metadata.lastAppointmentAt
type: string
format: date-time
oldestAppointment:
description: stats.oldestAppointment
type: string
format: date-time
lastProcessedAt:
description: lastProcessedAt
type: string
format: date-time
default: '2022-03-31T12:01:59.227Z'
source:
description: source
type: string
enum:
- widget
- integrator
- ui
- referring-provider
- hub
widget:
description: widget
type: string
enum:
- lumabot
mergedInto:
description: ID of Patient
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
subscribers:
description: subscribers
type: array
items:
type: object
properties:
subscribed:
description: subscribed
type: boolean
user:
description: ID of User
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
outboundContact:
description: outboundContact
type: array
items:
type: object
properties:
provider:
description: provider
type: string
enum:
- mandrill
- twilio
- nexmo
- sendgrid
- plivo
- bandwidth
- ringcentral
- awsses
- interfax
channel:
description: channel
type: string
enum:
- sms
- voice
- fax
- email
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
_id:
description: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
primaryCareProvider:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recommendations:
type: object
properties:
reminderTime:
description: recommendations.reminderTime
type: number
balance:
description: balance
type: number
balanceUpdatedAt:
description: balanceUpdatedAt
type: string
format: date-time
searchIds:
description: searchIds
type: array
items:
type: string
randomName:
description: randomName
type: boolean
name:
description: name
type: string
normalizedName:
description: normalizedName
type: string
firstname:
description: firstname
type: string
lastname:
description: lastname
type: string
middlename:
description: middlename
type: string
displayPhone:
description: displayPhone
type: string
displayStatus:
description: displayStatus
type: string
default: pending
enum:
- active
- pending
- suspended
email:
description: email
type: string
safeId:
description: safeId
type: string
type:
description: type
type: string
enum:
- patient
- guest
roles:
description: roles
type: array
items:
type: string
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
description: ID of Organization
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
description: contact
type: array
items:
type: object
properties:
type:
description: type
type: string
default: email
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
archived:
description: archived
type: boolean
archivedReason:
description: archivedReason
type: string
default: none
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
description: doNotContact
type: boolean
doNotContactMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
description: groups
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
description: stripeCustomerId
type: string
twoFactorAuthSecret:
type: object
properties:
enabled:
description: twoFactorAuthSecret.enabled
type: boolean
stripeSubscriptionId:
description: stripeSubscriptionId
type: string
salesforceId:
description: salesforceId
type: string
lastLogin:
description: lastLogin
type: string
format: date-time
active:
description: active
type: number
master:
description: master
type: boolean
language:
description: language
type: string
default: en
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
gender:
description: gender
type: string
default: unknown
enum:
- male
- female
- unknown
- nonbinary
allowedIps:
description: allowedIps
type: array
items:
type: string
avatar:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
publicKey:
description: publicKey
type: string
directMessagingEmail:
description: directMessagingEmail
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
website:
description: website
type: string
salesforceData:
$ref: '#/components/schemas/SalesforceData'
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
properties:
year:
description: dateOfBirth.year
type: number
month:
description: dateOfBirth.month
type: number
day:
description: dateOfBirth.day
type: number
PatientContactPreferencesResponse:
type: object
description: >-
This resource represents the set of contact methods Luma Health can
currently use to reach a given patient, such as phone numbers and email
addresses, along with whether each one is active or archived. It is
built from the patient's outbound and external contact records, taking
into account do-not-contact status and reasons like the patient being
deceased or having asked not to be contacted, so that messaging only
targets channels that are currently valid and permitted. It is used by
messaging and reminder workflows to decide which contact to use before
sending a communication.
required:
- validContacts
properties:
validContacts:
type: array
description: List of valid contacts as messenger would use them
items:
type: object
properties:
type:
type: string
value:
type: string
active:
type: boolean
archived:
type: boolean
PatientCreditCard:
type: object
description: >-
A saved credit card on file for a patient, used to charge co-pays,
invoices, and other balances without requiring the patient to re-enter
card details each time. It stores a reference to the patient, a pointer
to the card record held by the external payment processor such as
Stripe, and non-sensitive display details like the card issuer, last
four digits, and expiration month and year. The actual card number and
full payment credentials are never stored here, only in the external
payment vendor.
required:
- _id
- patient
- externalId
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
patient:
type: string
externalId:
type: object
properties:
source:
type: string
value:
type: string
cardIssuer:
type: string
lastFourDigits:
type: string
expMonth:
type: string
expYear:
type: string
PatientFormResponse:
type: object
description: >-
A patient form is a specific instance of a form template that has been
sent to or filled out by a patient, such as an intake form, consent
form, or feedback survey. It tracks the patient's answers, completion
status, and processing state, and can be linked to an appointment, a
file upload, or a resulting scheduling offer. It also supports advanced
workflows like jump logic between form sections, EHR writeback of
answers or PDFs, and staff review of submitted answers.
properties:
patient:
description: the ID of the patient who filled out the answers for this form.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
status:
description: >
The completion status of the patient form under the patient's
perspective, knowingly:
- `pending`: the initial status, not seen by the patient, created
when a message is sent out with the form link;
- `unstarted`: set when the patient clicked on the link to open the
form but only saw the welcome screen, without actually answering any
questions;
- `started`: when the patient started answering at least one
question, but hasn't finished the form yet;
- `completed`: the patient has finished answering all the questions
and cannot edit the form anymore.
type: string
default: started
enum:
- pending
- unstarted
- started
- completed
completedAt:
description: >-
the date/time when the patient finished all the responses of this
form.
type: string
format: date-time
processingStatus:
description: >
The internal staff's management status for a completed form, serving
the purpose of organizing which answers were analysed by a staff
member or not.
- `open`: the form was completed by a patient but not seen by any
staff member yet;
- `in-progress`: a staff user is analysing the answers;
- `closed`: the form has been completely analysed by a member of the
staff team.
type: string
default: open
enum:
- open
- in-progress
- closed
processingStatusUpdatedBy:
description: >-
the ID of a staff `user` who analysed the responses of this
completed patient form and changed its `processingStatus`.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
processingStatusUpdatedAt:
description: >-
the date/time when a staff `user` analysed the responses of this
completed patient form and changed its `processingStatus`.
type: string
format: date-time
lumabot:
description: >-
flag to signal whether a form was filled out in the shape of a
patient chat with a bot.
type: boolean
appointment:
description: the ID of an appointment related to this form.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
fileUpload:
description: the ID of a fileUpload related to this form.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
duration:
description: the time it took (in minutes) for the patient to complete this form.
type: number
url:
description: >
deprecated: custom patient form url, basically to identify any
patient in survey monkey,
an external forms service that's not being used anymore by Luma.
type: string
currentItemId:
description: >
The code of the current question the patient was last shown, before
answering it.
Such a code must be the content of any
`responses.pages[0].questions[x].id`, or `success`.
Usually this will contain each id, in sequence, but patients can go
back and forth.
Also, forms can have jump logic, and some questions might not be
displayed to the patient.
When the form is completed, this is updated to `success`.
type: string
patientFormTemplate:
description: >-
the ID of the template of questions that was displayed for the
patient.
type: string
pattern: '[0-9a-f]'
required: true
minLength: 24
maxLength: 24
patientFormTemplateName:
description: >-
the name of the template of questions used as a basis for these form
answers. See `patientFormTemplates`.
type: string
patientFormTemplateType:
description: >
A flag to help filter forms by their originally desired purpose.
The form structure and behavior is identical, but depending on the
settings screen,
some forms may be displayed as a selectable option or not. Also,
CCDA forms enable
some more form components/questions that are compatible with EHR
systems nation wide.
- `intake`: a regular form, intended to be sent to patients
manually, or in reminders, or even custom actions.
- `pre-qualification`: a form to be displayed before the scheduler
is shown to patients. In the scheduler settings page, you can only
select a `pre-qualification` form to be displayed before the patient
actually schedules an appointment.
- `feedback`: a form to be sent to patients after their visits, to
rate the service they've received. On the feedback settings page,
you can only select a form with this flag.
- `ccda`: a form containing special questions that conform to the
standard format which can be read by EHR Systems.
type: string
enum:
- intake
- pre-qualification
- feedback
- ccda
ref:
$ref: '#/components/schemas/Ref'
refId:
description: The ID of the Object refereced by the `ref` field.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
offer:
description: The ID of an appointment `Offer` related to these form answers.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
language:
description: The language in which the form was answered by the patient.
type: string
enum:
- en
- es
- pt
accessedFrom:
description: IP address of the patient who filled out the form.
type: string
previousPatientForm:
description: >
PreviousPatientForm and nextPatientForm will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
patientForm and set
the previous form ID on its `previousPatientForm` property.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
nextPatientForm:
description: >
PreviousPatientForm and nextPatientForm will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
patientForm and set
the new form ID on the first form's `nextPatientForm` property.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
description: Contains information about the responses given by the patient.
type: object
properties:
currentItemId:
type: string
description: >
The code of the current question the patient was last shown,
before answering it.
Such a code must be the content of any
`responses.pages[0].questions[x].id`, or `success`.
Usually this will contain each id, in sequence, but patients can
go back and forth.
Also, forms can have jump logic, and some questions might not be
displayed to the patient.
When the form is completed, this is updated to `success`.
path:
description: The sequence in each questions were seen by the patient.
type: array
items:
type: string
finalDisposition:
description: >
The last question or template answered/seen by the patient on
form completion.
Same structure as a question in
`responses.pages[0].questions[i]`.
type: object
pages:
description: >-
The pages of the form. Luma forms always only have one page,
whose index is zero.
type: array
items:
type: object
properties:
questions:
description: >
An array of metadata about the questions and their
answers. The information about the
questions is kept here because the template might be
updated at any time, so the version
of these question might be out-of-date when compared to
the actual patientFormTemplate.
type: array
items:
type: object
description: >-
each item contains metadata about the question and the
answer given by the patient.
properties:
id:
type: string
description: >-
the reference code for this question, also used in
`currentItemId` and `path`.
type:
type: string
description: >
The `PatientFormTemplateItemTypeKeys`, representing
the type of question.
- `group`: at this root level, a special `type:
group` may be used, and in that case,
`responses.pages[0].questions[x].properties.items[]`
will contain objects with a structure similar to one
of `responses.pages[0].questions[i]` (recursively),
with the exception that the inner question cannot be
of type `group`.
- `jump`: a special type of question, containing a
property called `script`in
`responses.pages[0].questions[x].properties.script`
which resolves to one of the values in
`responses.pages[0].question[x].properties.answers[k].label`.
Each
`responses.pages[0].question[x].properties.answers[k].properties`
will determine if the jump is to the next question
(nothing inside properties), or another specific
question (properties object containing a `goTo` with
another question squiggly), or redirect (properties
object containing a final `url` for redirection).
enum:
- 2FA
- address
- date
- dropdown
- e_signature
- email
- group
- information_capture
- insurance_card
- jump
- long_text
- medication_search
- multiple_choice
- patient_information
- pharmacy_search
- phone_number
- scheduler
- short_text
- ssn
- template_welcome
- template
- yes_no
- zipcode
- copay
- docusign_templates
- insurance_verification
- insurance_capture
- medication_list
- immunization_history
- allergy
- surgical_history
- family_history
- problems
- social_history
- scheduler_component
- book_status_component
- demographics
title:
type: string
description:
description: the description of the question
type: string
locales:
description: >-
A map-object whose keys may be any of these language
codes `es` or `pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of the
question into spanish
type: string
title:
description: >-
the translation of the title of the question
into spanish
type: string
properties:
description: >-
same structure as
`responses.pages[0].questions[i].properties`.
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of the
question into portuguese
type: string
title:
description: >-
the translation of the title of the question
into portuguese
type: string
properties:
description: >-
same structure as
`responses.pages[0].properties`.
type: object
text:
description: the text of the question
type: string
squiggly:
description: >
The code to be used in message templates, in the
format `custom-form-xyz`,
which becomes `{{custom-form-xyz}}` in message
templates, and turns into
the URL for the patient to click and answer the
form.
type: string
redirectType:
type: string
enum:
- externalUrl
- goTo
- goToForm
- goToPrevious
- isFinal
- none
- reschedule
- scheduler
validations:
type: object
properties:
required:
type: boolean
answers:
description: >
This is the
`responses.pages[0].questions[i].answers` array.
Contains the answer (or possible answers) for the
question in `responses.pages[0].questions[i]`.
When a drop down menu is displayed, then all the
possible answers are listed here.
But only the one selected is marked as `selected:
true`.
type: array
items:
type: object
properties:
id:
type: string
description: id of a question
redirectType:
description: PatientFormTemplateItemRedirectType
type: string
enum:
- externalUrl
- goTo
- goToForm
- goToPrevious
- isFinal
- none
- reschedule
- scheduler
text:
type: string
label:
type: string
score:
type: string
code:
type: string
disabled:
type: boolean
locales:
description: >-
A map-object whose keys may be any of these
language codes `es` or `pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of
the question into spanish
type: string
title:
description: >-
the translation of the title of the
question into spanish
type: string
properties:
description: >-
same structure as
`responses.pages[0].questions[i].properties`.
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of
the question into portuguese
type: string
title:
description: >-
the translation of the title of the
question into portuguese
type: string
properties:
description: >-
same structure as
`responses.pages[0].properties`.
type: object
properties:
type: object
description: >
This is
`responses.pages[0].questions[i].answers[j].properties`.
Has the same structure as
`responses.pages[0].questions[i].properties`.
insurances:
type: array
items:
description: Insurance
type: object
properties:
payerName:
type: string
_id:
type: string
planName:
type: string
memberName:
type: string
firstname:
type: string
lastname:
type: string
memberNumber:
type: string
insuranceGroupName:
type: string
url:
type: string
description: URL of the front picture of the insurance card
urlBack:
type: string
description: URL of the back picture of the insurance card
fileUpload:
description: >-
the ID of a fileUpload for the picture of the
insurance card (front)
type: string
fileUploadBack:
description: >-
the ID of a fileUpload for the picture of the
insurance card (back)
type: string
active:
type: boolean
status:
type: string
enum:
- archived
- active
externalId:
type: object
properties:
source:
type: string
value:
type: string
payerId:
type: string
verification:
type: object
properties:
status:
type: string
enum:
- unknown
- active
- inactive
- failed
updatedAt:
type: number
description: timestamp
requestedBy:
type: object
description: User details
properties:
safeId:
description: safeId
type: string
name:
type: string
description: Full name
firstname:
type: string
description: First name
lastname:
type: string
description: Last name
middlename:
type: string
description: Middle name
alternativeName:
type: string
description: Alternative name
displayPhone:
type: string
description: >-
Phone number displayed in staff profile.
Not used for communication purposes.
displayStatus:
type: string
description: >-
Account status. Informative field only,
not used for access control.
enum:
- active
- pending
- suspended
email:
type: string
description: User's e-mail address in lowercase.
roles:
type: array
description: User's roles, used for access control.
items:
type: string
enum:
- staff
- doctor
- widget
- manager
- admin
- referringProvider
- renderingProvider
- subaccount
- readFileUpload
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
type: string
description: >-
The ID of the organization controling
this root user account.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
type: array
description: List of contact infos of this user.
items:
type: object
required: []
properties:
type:
type: string
description: >-
The channel of communication for the
current contact info.
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
type: string
description: >-
The value (number, email, login, etc) of
the current contact info.
default: ''
active:
type: boolean
description: >-
Indicates if the current contact is
active for use or not.
default: false
archived:
type: boolean
description: >-
Indicates if the current contact has
been archived by the system due to
deliverability issues.
default: false
archivedReason:
type: string
description: >-
Reason why the number was archived by
the system.
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
type: string
description: >-
The ID of the message that triggered the
system to archive this contact.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
type: boolean
description: >-
Indicates if the user has requested not
to be contacted anymore.
default: false
doNotContactMessage:
type: string
description: >-
The ID of the message where the user
requested not to be contacted anymore.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
type: array
description: >-
List of group IDs to which this user
belongs.
uniqueItems: true
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
type: string
description: Customer ID from stripe for this account
stripeSubscriptionId:
type: string
description: Stripe subscription ID
salesforceId:
type: string
description: Salesforce Account ID for this account
salesforceData:
$ref: '#/components/schemas/SalesforceData'
active:
type: number
description: >-
Indicates if a user is active and able
to log into the system or not.
default: 0
language:
type: string
description: User's preferred language.
default: en
pattern: ^([a-z]{2}$|zh-t)$
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
description: Date of birth
required:
- year
- month
- day
properties:
year:
type: number
month:
type: number
day:
type: number
address:
type: string
description: User's address.
city:
type: string
description: User's city.
state:
type: string
description: User's state.
country:
type: string
default: US
description: User's country
postcode:
type: string
description: User's postal code.
gender:
type: string
description: User's gender.
default: unknown
enum:
- male
- female
- unknown
- nonbinary
avatar:
type: string
description: >-
The ID of a FileUpload containing the
profile picture of the user.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
directMessagingEmail:
type: string
description: >-
E-mail for direct communication with the
user.
website:
description: User's website.
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
type:
description: type
type: string
enum:
- staff
- doctor
- guest
allowedIps:
description: allowedIps
type: array
items:
type: string
lookupResults:
type: object
description: ReplaceAny
patient:
type: object
description: Patient
properties:
safeId:
description: safeId
type: string
name:
type: string
description: Full name
firstname:
type: string
description: First name
lastname:
type: string
description: Last name
middlename:
type: string
description: Middle name
alternativeName:
type: string
description: Alternative name
displayPhone:
type: string
description: >-
Phone number displayed in staff profile.
Not used for communication purposes.
displayStatus:
type: string
description: >-
Account status. Informative field only,
not used for access control.
enum:
- active
- pending
- suspended
email:
type: string
description: User's e-mail address in lowercase.
roles:
type: array
description: User's roles, used for access control.
items:
type: string
enum:
- staff
- doctor
- widget
- manager
- admin
- referringProvider
- renderingProvider
- subaccount
- readFileUpload
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
type: string
description: >-
The ID of the organization controling this
root user account.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
type: array
description: List of contact infos of this user.
items:
type: object
required: []
properties:
type:
type: string
description: >-
The channel of communication for the
current contact info.
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
type: string
description: >-
The value (number, email, login, etc) of
the current contact info.
default: ''
active:
type: boolean
description: >-
Indicates if the current contact is
active for use or not.
default: false
archived:
type: boolean
description: >-
Indicates if the current contact has
been archived by the system due to
deliverability issues.
default: false
archivedReason:
type: string
description: >-
Reason why the number was archived by
the system.
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
type: string
description: >-
The ID of the message that triggered the
system to archive this contact.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
type: boolean
description: >-
Indicates if the user has requested not to
be contacted anymore.
default: false
doNotContactMessage:
type: string
description: >-
The ID of the message where the user
requested not to be contacted anymore.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
type: array
description: >-
List of group IDs to which this user
belongs.
uniqueItems: true
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
type: string
description: Customer ID from stripe for this account
stripeSubscriptionId:
type: string
description: Stripe subscription ID
salesforceId:
type: string
description: Salesforce Account ID for this account
salesforceData:
$ref: '#/components/schemas/SalesforceData'
active:
type: number
description: >-
Indicates if a user is active and able to
log into the system or not.
default: 0
language:
type: string
description: User's preferred language.
default: en
pattern: ^([a-z]{2}$|zh-t)$
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
description: Date of birth
required:
- year
- month
- day
properties:
year:
type: number
month:
type: number
day:
type: number
address:
type: string
description: User's address.
city:
type: string
description: User's city.
state:
type: string
description: User's state.
country:
type: string
default: US
description: User's country
postcode:
type: string
description: User's postal code.
gender:
type: string
description: User's gender.
default: unknown
enum:
- male
- female
- unknown
- nonbinary
avatar:
type: string
description: >-
The ID of a FileUpload containing the
profile picture of the user.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
directMessagingEmail:
type: string
description: >-
E-mail for direct communication with the
user.
website:
description: User's website.
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
type:
description: type
type: string
enum:
- staff
- doctor
- guest
allowedIps:
description: allowedIps
type: array
items:
type: string
dependent:
type: object
description: Dependent
properties:
firstname:
type: string
lastname:
type: string
dateOfBirth:
type: object
properties:
year:
type: number
month:
type: number
day:
type: number
relationshipToSubscriber:
type: string
description: PatientRelationship
enum:
- spouse
- grandfather-or-grandmother
- grandson-or-grandaughter
- nephew-or-niece
- foster-child
- ward-of-the-court
- stepson-or-stepdaughter
- self
- child
- employee
- unknown
- handicapped-dependent
- sponsored-dependent
- dependent-of-minor-dependent
- significant-other
- mother
- emancipated-minor
- organ-donor
- cadaver-donor
- injured-plaintiff
- >-
child-where-insured-has-no-financial-responsibility
- life-partner
- other-relationship
address:
type: string
primary:
type: boolean
properties:
description: >
This is
`responses.pages[0].questions[i].properties`.
These are the properties of the current question.
If type is `group`, then
`responses.pages[0].questions[i].properties.items`
will contain sub-questions inside the group.
type: object
properties:
answers:
type: array
items:
description: >
This is
`responses.pages[0].questions[i].properties.answers`.
Same structure as
`responses.pages[0].questions[i].answers`.
type: object
showDescription:
type: boolean
visibility:
type: string
showCustomAction:
type: boolean
scoringEnabled:
type: boolean
allowMultipleSelection:
type: boolean
allowOtherChoice:
type: boolean
includeNoneOfAboveChoice:
type: boolean
includeInsuranceCard:
type: string
enum:
- DEFAULT
- REQUIRED
- OPTIONAL
addToAppointment:
type: boolean
persistAnswer:
type: boolean
mustExist:
type: boolean
params:
type: array
items:
type: object
description: ReplaceAny
goTo:
description: >-
The id of a question where the patient will be
taken after this question
type: string
url:
description: URL to redirect the patient.
type: string
template:
type: string
actionLabel:
type: string
actionHref:
type: string
script:
type: string
items:
description: >
This is
`responses.pages[0].questions[i].properties.items`.
Same structure as
`responses.pages[0].questions`.
Used if `responses.pages[0].questions[i].type`
is `group`.
These items will be sub-questions inside the
group, but they
themselves cannot be of type `group` again (no
groups inside groups).
type: array
items:
type: object
copay:
type: string
immunizationHistory:
description: >
Immunization History.
Additional info on
`reponses.pages[0].questions[i].answers`,
such as
`reponses.pages[0].questions[i].answers[j].answer:
2022`.
with the same ids as the items in the history
here.
Only used when form is CCDA.
type: array
items:
type: object
properties:
id:
type: string
description: UUID of the immunization history entry
code:
type: string
codeSystem:
type: string
description: >-
Luma's internal ID referring a
`CCDACodeSystem` on the database.
description:
type: string
description: >-
Description of the immunization item
according to the chosen code system.
friendlyName:
type: string
description: >-
Friendly description of the immunization
item.
surgicalHistory:
description: >
Surgical History.Additional info on
`reponses.pages[0].questions[i].answers`,
such as
`reponses.pages[0].questions[i].answers[j].answer:
2022`.
with the same ids as the items in the history
here.
Only used when form is CCDA.
type: array
items:
type: object
properties:
id:
type: string
description: UUID of the surgical history entry
code:
type: string
codeSystem:
type: string
description: >-
Luma's internal ID referring a
`CCDACodeSystem` on the database.
description:
type: string
description: >-
Description of the surgical procedure item
according to the chosen code system.
friendlyName:
type: string
description: >-
Friendly description of the surgical
procedure item.
familyHistory:
description: >
Family History.
Additional info on
`reponses.pages[0].questions[i].answers`,
such as
`reponses.pages[0].questions[i].answers[j].familyMembers:
[ 'Mother' ]`.
with the same ids as the items in the history
here.
Only used when form is CCDA.
type: array
items:
type: object
properties:
id:
type: string
description: UUID of the family history entry
code:
type: string
codeSystem:
type: string
description: >-
Luma's internal ID referring a
`CCDACodeSystem` on the database.
description:
type: string
description: >-
Description of the family history item
according to the chosen code system.
friendlyName:
type: string
description: >-
Friendly description of the family history
item.
locales:
description: >-
A map-object whose keys may be any of these
language codes `es` or `pt`
type: object
properties:
es:
type: object
properties:
description:
description: >-
the translation of the description of
the question into spanish
type: string
title:
description: >-
the translation of the title of the
question into spanish
type: string
properties:
description: >-
same structure as
`responses.pages[0].questions[i].properties`.
type: object
pt:
type: object
properties:
description:
description: >-
the translation of the description of
the question into portuguese
type: string
title:
description: >-
the translation of the title of the
question into portuguese
type: string
properties:
description: >-
same structure as
`responses.pages[0].questions[i].properties`.
type: object
canSkip:
type: boolean
notifyStaff:
type: boolean
mappingField:
type: string
description: >
The name of any Patient model fields.
When this property is set, then the question
will have its answer pre-populated using
the value from the Patient model.
As an example, if the mappingField for the
question is `firstname`, when creating the
form, the system will try to get this
information from the patient data, and if
there's a value on this field, it will be set as
the default answer for the question.
answers:
description: >-
A simplified representation of the answers contained in
`responses.pages[0].questions[i]`.
type: array
items:
type: object
properties:
id:
type: string
description: |
The id of the question to which this answer refers.
The content of any `responses.pages[0].questions[x].id`.
answerId:
type: string
description: >-
The id of the answer chosen or entered by the user for the
given question.
question:
type: string
description: the label of the question being answered by the patient.
answer:
type: string
description: >-
the answer given by the patient, either by typing of by
picking an option.
questionType:
type: string
description: the type of question.
enum:
- 2FA
- address
- date
- dropdown
- e_signature
- email
- group
- information_capture
- insurance_card
- jump
- long_text
- medication_search
- multiple_choice
- patient_information
- pharmacy_search
- phone_number
- scheduler
- short_text
- ssn
- template_welcome
- template
- yes_no
- zipcode
- copay
- docusign_templates
- insurance_verification
- insurance_capture
- medication_list
- immunization_history
- allergy
- surgical_history
- family_history
- problems
- social_history
- scheduler_component
- book_status_component
- demographics
path:
description: path
type: array
items:
type: string
finalDisposition:
description: |
Not used, and always filled with an empty string.
Rather, see `reponses.finalDisposition`
type: string
integratorUpdateResults:
description: integratorUpdateResults
type: object
properties:
status:
description: PatientFormIntegratorUpdateResultsStatus
type: string
enum:
- success
- failure
- pending
error:
type: string
directMessageCcdaUpdateResults:
description: directMessageCcdaUpdateResults
type: object
properties:
status:
type: string
enum:
- success
- failure
- pending
error:
type: string
requestAt:
type: string
format: date-time
responseAt:
type: string
format: date-time
calculationResult:
description: |
If the `patientFormTemplate` has a `calculation` field,
which is a javascript code, then the result will be stored here.
type: object
availabilities:
description: availabilities
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facilities:
description: facilities
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
querystring:
description: querystring ReplaceAny
type: object
PatientFormRequest:
type: object
required:
- status
- processingStatus
properties:
status:
type: string
enum:
- pending
- unstarted
- started
- completed
processingStatus:
description: processingStatus
type: string
default: open
enum:
- open
- in-progress
- closed
PatientFormTemplateResponse:
type: object
description: >-
A form template is the reusable definition of a form that staff
configure once and then send to many patients, such as intake,
pre-qualification, feedback, or consent forms. It defines the form
content, jump logic for branching between questions, optional insurance
and reminder settings, and custom scripts used to calculate results, map
answers to EHR fields, or intercept scheduler requests when the form
leads into booking an appointment. Each time a patient fills it out, a
separate patient form instance is created from this template.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
source:
description: source of the patient form template
type: string
enum:
- system
- user
externalId:
description: externalId of the patient form template
type: object
properties:
source:
type: string
enum:
- docusign
- hellosign
- surveymonkey
- luma
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
title:
description: title of the patient form template
type: string
description:
description: description of the patient form template
type: string
insurance:
description: insurance of the patient form template
type: object
properties:
enabled:
type: boolean
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
reminder:
description: reminder of the patient form template
type: object
properties:
enabled:
type: boolean
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
description: type of the patient form template
type: string
enum:
- pre-qualification
- intake
- feedback
- ccda
active:
description: describes if the patient form template is active
type: boolean
url:
description: url of the patient form template
type: string
tag:
description: tag of the patient form template which is used to build the squiggly
type: string
template:
description: template of the patient form template
type: object
properties:
version:
type: string
welcomeScreens:
type: array
items:
type: object
properties:
id:
type: string
template:
type: string
title:
type: string
properties:
type: object
properties:
template:
type: string
actionLabel:
type: string
items:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
squiggly:
type: string
title:
type: string
redirectType:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
addToAppointment:
type: boolean
showCustomAction:
type: boolean
includeNoneOfAboveChoice:
type: boolean
allowOtherChoice:
type: boolean
scoringEnabled:
type: boolean
visibility:
type: string
allowMultipleSelection:
type: boolean
showDescription:
type: boolean
answers:
type: object
properties:
id:
type: string
redirectType:
type: string
integratorMapping:
description: integratorMapping of the patient form template
type: string
calculation:
description: calculation of the patient form template
type: string
finalDispositionCalculation:
description: finalDispositionCalculation of the patient form template
type: string
schedulerRequestInterceptor:
description: schedulerRequestInterceptor of the patient form template
type: string
schedulerResponseInterceptor:
description: schedulerResponseInterceptor of the patient form template
type: string
htmlPdfTemplateHeader:
description: htmlPdfTemplateHeader of the patient form template
type: string
htmlPdfTemplateBody:
description: htmlPdfTemplateBody of the patient form template
type: string
htmlPdfTemplateFooter:
description: htmlPdfTemplateFooter of the patient form template
type: string
lumabot:
description: lumabot of the patient form template
type: boolean
sendToDirectMessageEmail:
description: sendToDirectMessageEmail of the patient form template
type: boolean
lumaBotFlow:
description: lumaBotFlow of the patient form template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
PatientFormTemplateRequestCreate:
type: object
required:
- source
- lumabot
properties:
source:
description: source of the patient form template
type: string
enum:
- system
- user
externalId:
description: externalId of the patient form template
type: object
properties:
source:
type: string
enum:
- docusign
- hellosign
- surveymonkey
- luma
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
title:
description: title of the patient form template
type: string
description:
description: description of the patient form template
type: string
insurance:
description: insurance of the patient form template
type: object
properties:
enabled:
type: boolean
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
reminder:
description: reminder of the patient form template
type: object
properties:
enabled:
type: boolean
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
description: type of the patient form template
type: string
enum:
- pre-qualification
- intake
- feedback
- ccda
active:
description: describes if the patient form template is active
type: boolean
url:
description: url of the patient form template
type: string
tag:
description: tag of the patient form template which is used to build the squiggly
type: string
template:
description: template of the patient form template
type: object
properties:
version:
type: string
welcomeScreens:
type: array
items:
type: object
properties:
id:
type: string
template:
type: string
title:
type: string
properties:
type: object
properties:
template:
type: string
actionLabel:
type: string
items:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
squiggly:
type: string
title:
type: string
redirectType:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
addToAppointment:
type: boolean
showCustomAction:
type: boolean
includeNoneOfAboveChoice:
type: boolean
allowOtherChoice:
type: boolean
scoringEnabled:
type: boolean
visibility:
type: string
allowMultipleSelection:
type: boolean
showDescription:
type: boolean
answers:
type: object
properties:
id:
type: string
redirectType:
type: string
integratorMapping:
description: integratorMapping of the patient form template
type: string
calculation:
description: calculation of the patient form template
type: string
finalDispositionCalculation:
description: finalDispositionCalculation of the patient form template
type: string
schedulerRequestInterceptor:
description: schedulerRequestInterceptor of the patient form template
type: string
schedulerResponseInterceptor:
description: schedulerResponseInterceptor of the patient form template
type: string
htmlPdfTemplateHeader:
description: htmlPdfTemplateHeader of the patient form template
type: string
htmlPdfTemplateBody:
description: htmlPdfTemplateBody of the patient form template
type: string
htmlPdfTemplateFooter:
description: htmlPdfTemplateFooter of the patient form template
type: string
lumabot:
description: lumabot of the patient form template
type: boolean
sendToDirectMessageEmail:
description: sendToDirectMessageEmail of the patient form template
type: boolean
lumaBotFlow:
description: lumaBotFlow of the patient form template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
PatientFormTemplateRequestUpdate:
type: object
properties:
source:
description: source of the patient form template
type: string
enum:
- system
- user
externalId:
description: externalId of the patient form template
type: object
properties:
source:
type: string
enum:
- docusign
- hellosign
- surveymonkey
- luma
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
title:
description: title of the patient form template
type: string
description:
description: description of the patient form template
type: string
insurance:
description: insurance of the patient form template
type: object
properties:
enabled:
type: boolean
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
reminder:
description: reminder of the patient form template
type: object
properties:
enabled:
type: boolean
id:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
description: type of the patient form template
type: string
enum:
- pre-qualification
- intake
- feedback
- ccda
active:
description: describes if the patient form template is active
type: boolean
url:
description: url of the patient form template
type: string
tag:
description: tag of the patient form template which is used to build the squiggly
type: string
template:
description: template of the patient form template
type: object
properties:
version:
type: string
welcomeScreens:
type: array
items:
type: object
properties:
id:
type: string
template:
type: string
title:
type: string
properties:
type: object
properties:
template:
type: string
actionLabel:
type: string
items:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
squiggly:
type: string
title:
type: string
redirectType:
type: string
validations:
type: object
properties:
required:
type: boolean
properties:
type: object
properties:
addToAppointment:
type: boolean
showCustomAction:
type: boolean
includeNoneOfAboveChoice:
type: boolean
allowOtherChoice:
type: boolean
scoringEnabled:
type: boolean
visibility:
type: string
allowMultipleSelection:
type: boolean
showDescription:
type: boolean
answers:
type: object
properties:
id:
type: string
redirectType:
type: string
integratorMapping:
description: integratorMapping of the patient form template
type: string
calculation:
description: calculation of the patient form template
type: string
finalDispositionCalculation:
description: finalDispositionCalculation of the patient form template
type: string
schedulerRequestInterceptor:
description: schedulerRequestInterceptor of the patient form template
type: string
schedulerResponseInterceptor:
description: schedulerResponseInterceptor of the patient form template
type: string
htmlPdfTemplateHeader:
description: htmlPdfTemplateHeader of the patient form template
type: string
htmlPdfTemplateBody:
description: htmlPdfTemplateBody of the patient form template
type: string
htmlPdfTemplateFooter:
description: htmlPdfTemplateFooter of the patient form template
type: string
lumabot:
description: lumabot of the patient form template
type: boolean
sendToDirectMessageEmail:
description: sendToDirectMessageEmail of the patient form template
type: boolean
lumaBotFlow:
description: lumaBotFlow of the patient form template
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
PatientMessageTemplatesResponse:
type: object
properties:
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
name:
type: string
message:
type: string
language:
type: string
enum:
- ar
- bn
- cn
- de
- en
- es
- fa
- fl
- fr
- gr
- gu
- hi
- ht
- hy
- it
- ja
- km
- ko
- mr
- my
- pa
- pl
- pt
- ru
- so
- th
- ti
- ur
- vi
- zh-t
- zh
type:
type: string
enum:
- chat
- broadcast
channel:
type: string
enum:
- sms
- email
- voice
- whatsapp
autoCloseChat:
type: boolean
PatientMessageTemplatesCreate:
type: object
required:
- message
- name
- type
- language
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
name:
type: string
message:
type: string
language:
type: string
enum:
- ar
- bn
- cn
- de
- en
- es
- fa
- fl
- fr
- gr
- gu
- hi
- ht
- hy
- it
- ja
- km
- ko
- mr
- my
- pa
- pl
- pt
- ru
- so
- th
- ti
- ur
- vi
- zh-t
- zh
type:
type: string
enum:
- chat
- broadcast
channel:
type: string
enum:
- sms
- email
- voice
- whatsapp
autoCloseChat:
type: boolean
PatientMessageTemplatesUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
name:
type: string
message:
type: string
language:
type: string
enum:
- ar
- bn
- cn
- de
- en
- es
- fa
- fl
- fr
- gr
- gu
- hi
- ht
- hy
- it
- ja
- km
- ko
- mr
- my
- pa
- pl
- pt
- ru
- so
- th
- ti
- ur
- vi
- zh-t
- zh
type:
type: string
enum:
- chat
- broadcast
channel:
type: string
enum:
- sms
- email
- voice
- whatsapp
autoCloseChat:
type: boolean
ProviderResponse:
type: object
description: >-
A Provider represents a doctor, clinician, or other care team member
(including referring or rendering providers) within a Luma Health
customer's practice. It tracks scheduling eligibility, appointment type
durations, billing classification, and contact details used across
scheduling, referrals, and patient communications.
required:
- _id
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
description: name
type: string
normalizedName:
description: normalizedName
type: string
firstname:
description: firstname
type: string
lastname:
description: lastname
type: string
middlename:
description: middlename
type: string
displayPhone:
description: displayPhone
type: string
displayStatus:
description: displayStatus
type: string
default: pending
enum:
- active
- pending
- suspended
email:
description: email
type: string
safeId:
description: safeId
type: string
type:
description: type
type: string
enum:
- doctor
- staff
- patient
- guest
roles:
description: roles
type: array
items:
type: string
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
description: ID of Organization
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
description: contact
type: array
items:
type: object
properties:
type:
description: type
type: string
default: email
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
archived:
description: archived
type: boolean
archivedReason:
description: archivedReason
type: string
default: none
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
description: doNotContact
type: boolean
doNotContactMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
description: groups
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
description: stripeCustomerId
type: string
stripeSubscriptionId:
description: stripeSubscriptionId
type: string
salesforceId:
description: salesforceId
type: string
lastLogin:
description: lastLogin
type: string
format: date-time
active:
description: active
type: number
master:
description: master
type: boolean
language:
description: language
type: string
default: en
setting:
description: ID of Setting
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
settings:
$ref: '#/components/schemas/SettingProperty'
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
gender:
description: gender
type: string
default: unknown
enum:
- male
- female
- unknown
- nonbinary
allowedIps:
description: allowedIps
type: array
items:
type: string
avatar:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
publicKey:
description: publicKey
type: string
directMessagingEmail:
description: directMessagingEmail
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
website:
description: website
type: string
deptCode:
description: deptCode
type: string
phonetic:
description: phonetic
type: string
alternativeName:
description: alternativeName
type: string
schedulable:
description: schedulable
type: boolean
default: true
isReferringProvider:
description: isReferringProvider
type: boolean
isRenderingProvider:
description: isRenderingProvider
type: boolean
visible:
description: visible
type: boolean
default: true
npi:
description: npi
type: number
source:
description: source
type: string
default: integrator
enum:
- upload
- patient-referral-form
- ui
- integrator
biography:
description: biography
type: string
biographyUrl:
description: biographyUrl
type: string
headshot:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
billingType:
description: billingType
type: string
default: unknown
enum:
- resource
- part-time
- full-time
- non-billed
- duplicate
- no-longer-employed
- unknown
mergedInto:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
telehealthVendors:
description: telehealthVendors
type: object
properties:
zoom:
type: object
properties:
id:
type: string
status:
type: string
enum:
- active
- inactive
- pending
specialInstructions:
description: specialInstructions
type: string
salesforceData:
$ref: '#/components/schemas/SalesforceData'
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
properties:
year:
description: dateOfBirth.year
type: number
month:
description: dateOfBirth.month
type: number
day:
description: dateOfBirth.day
type: number
twoFactorAuthSecret:
type: object
properties:
enabled:
description: twoFactorAuthSecret.enabled
type: boolean
stats:
type: object
properties:
oldestAppointment:
description: stats.oldestAppointment
type: string
format: date-time
ProviderRequestCreate:
type: object
required:
- name
- email
- type
- doNotContact
- active
- country
- gender
- visible
properties:
name:
description: name
type: string
normalizedName:
description: normalizedName
type: string
firstname:
description: firstname
type: string
lastname:
description: lastname
type: string
middlename:
description: middlename
type: string
displayPhone:
description: displayPhone
type: string
displayStatus:
description: displayStatus
type: string
default: pending
enum:
- active
- pending
- suspended
email:
description: email
type: string
safeId:
description: safeId
type: string
type:
description: type
type: string
enum:
- doctor
- staff
- guest
- patient
roles:
description: roles
type: array
items:
type: string
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
description: ID of Organization
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
description: contact
type: array
items:
type: object
properties:
type:
description: type
type: string
default: email
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
archived:
description: archived
type: boolean
archivedReason:
description: archivedReason
type: string
default: none
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
description: doNotContact
type: boolean
doNotContactMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
description: groups
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
description: stripeCustomerId
type: string
stripeSubscriptionId:
description: stripeSubscriptionId
type: string
salesforceId:
description: salesforceId
type: string
lastLogin:
description: lastLogin
type: string
format: date-time
active:
description: active
type: number
master:
description: master
type: boolean
language:
description: language
type: string
default: en
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
gender:
description: gender
type: string
default: unknown
enum:
- male
- female
- unknown
- nonbinary
allowedIps:
description: allowedIps
type: array
items:
type: string
avatar:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
publicKey:
description: publicKey
type: string
directMessagingEmail:
description: directMessagingEmail
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
website:
description: website
type: string
deptCode:
description: deptCode
type: string
phonetic:
description: phonetic
type: string
alternativeName:
description: alternativeName
type: string
schedulable:
description: schedulable
type: boolean
default: true
isReferringProvider:
description: isReferringProvider
type: boolean
isRenderingProvider:
description: isRenderingProvider
type: boolean
visible:
description: visible
type: boolean
default: true
npi:
description: npi
type: number
source:
description: source
type: string
default: integrator
enum:
- upload
- patient-referral-form
- ui
- integrator
biography:
description: biography
type: string
biographyUrl:
description: biographyUrl
type: string
headshot:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
billingType:
description: billingType
type: string
default: unknown
enum:
- resource
- part-time
- full-time
- non-billed
- duplicate
- no-longer-employed
- unknown
mergedInto:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
telehealthVendors:
description: telehealthVendors
type: object
properties:
zoom:
type: object
properties:
id:
type: string
status:
type: string
enum:
- active
- inactive
- pending
specialInstructions:
description: specialInstructions
type: string
salesforceData:
$ref: '#/components/schemas/SalesforceData'
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
properties:
year:
description: dateOfBirth.year
type: number
month:
description: dateOfBirth.month
type: number
day:
description: dateOfBirth.day
type: number
twoFactorAuthSecret:
type: object
properties:
enabled:
description: twoFactorAuthSecret.enabled
type: boolean
stats:
type: object
properties:
oldestAppointment:
description: stats.oldestAppointment
type: string
format: date-time
ProviderRequestUpdate:
type: object
properties:
name:
description: name
type: string
normalizedName:
description: normalizedName
type: string
firstname:
description: firstname
type: string
lastname:
description: lastname
type: string
middlename:
description: middlename
type: string
displayPhone:
description: displayPhone
type: string
displayStatus:
description: displayStatus
type: string
default: pending
enum:
- active
- pending
- suspended
email:
description: email
type: string
safeId:
description: safeId
type: string
type:
description: type
type: string
enum:
- doctor
- staff
- guest
- patient
roles:
description: roles
type: array
items:
type: string
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
description: ID of Organization
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
description: contact
type: array
items:
type: object
properties:
type:
description: type
type: string
default: email
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
description: value
type: string
active:
description: active
type: boolean
archived:
description: archived
type: boolean
archivedReason:
description: archivedReason
type: string
default: none
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
description: doNotContact
type: boolean
doNotContactMessage:
description: ID of Message
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
description: groups
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
description: stripeCustomerId
type: string
stripeSubscriptionId:
description: stripeSubscriptionId
type: string
salesforceId:
description: salesforceId
type: string
lastLogin:
description: lastLogin
type: string
format: date-time
active:
description: active
type: number
master:
description: master
type: boolean
language:
description: language
type: string
default: en
address:
description: address
type: string
city:
description: city
type: string
state:
description: state
type: string
country:
description: country
type: string
default: US
postcode:
description: postcode
type: string
gender:
description: gender
type: string
default: unknown
enum:
- male
- female
- unknown
- nonbinary
allowedIps:
description: allowedIps
type: array
items:
type: string
avatar:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
publicKey:
description: publicKey
type: string
directMessagingEmail:
description: directMessagingEmail
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
website:
description: website
type: string
deptCode:
description: deptCode
type: string
phonetic:
description: phonetic
type: string
alternativeName:
description: alternativeName
type: string
schedulable:
description: schedulable
type: boolean
default: true
isReferringProvider:
description: isReferringProvider
type: boolean
isRenderingProvider:
description: isRenderingProvider
type: boolean
visible:
description: visible
type: boolean
default: true
npi:
description: npi
type: number
source:
description: source
type: string
default: integrator
enum:
- upload
- patient-referral-form
- ui
- integrator
biography:
description: biography
type: string
biographyUrl:
description: biographyUrl
type: string
headshot:
description: ID of FileUpload
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
billingType:
description: billingType
type: string
default: unknown
enum:
- resource
- part-time
- full-time
- non-billed
- duplicate
- no-longer-employed
- unknown
mergedInto:
description: ID of Provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
telehealthVendors:
description: telehealthVendors
type: object
properties:
zoom:
type: object
properties:
id:
type: string
status:
type: string
enum:
- active
- inactive
- pending
specialInstructions:
description: specialInstructions
type: string
salesforceData:
$ref: '#/components/schemas/SalesforceData'
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
properties:
year:
description: dateOfBirth.year
type: number
month:
description: dateOfBirth.month
type: number
day:
description: dateOfBirth.day
type: number
twoFactorAuthSecret:
type: object
properties:
enabled:
description: twoFactorAuthSecret.enabled
type: boolean
stats:
type: object
properties:
oldestAppointment:
description: stats.oldestAppointment
type: string
format: date-time
ProviderSchedulingGroupResponse:
type: object
description: >-
Represents a group of providers configured for shared scheduling
behavior, such as round-robin or waterfall assignment of appointments.
Each group has a type (structured or parallel) and a list of member
providers, each assigned a tier that determines priority within the
group. Groups can be toggled active or inactive without being deleted,
and are typically referenced by scheduling logic to determine which
provider should receive a given appointment.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the provider scheduling group.
minLength: 1
maxLength: 255
groupType:
type: string
description: >-
The scheduling behavior used to assign appointments across the
group's members.
enum:
- structured
- parallel
members:
type: array
description: >-
Members of the scheduling group and their priority tier. Each
provider may only appear once in the array.
minItems: 1
items:
type: object
additionalProperties: false
required:
- provider
properties:
provider:
type: string
description: ID of a provider.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
tier:
type: integer
description: >-
Priority tier for this provider within the group. Lower tiers
are prioritized first.
default: 1
minimum: 1
active:
type: boolean
description: >-
Indicates whether this group is active and should be used by
scheduling logic.
default: true
ProviderSchedulingGroupRequestCreate:
type: object
required:
- name
- groupType
- members
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the provider scheduling group.
minLength: 1
maxLength: 255
groupType:
type: string
description: >-
The scheduling behavior used to assign appointments across the
group's members.
enum:
- structured
- parallel
members:
type: array
description: >-
Members of the scheduling group and their priority tier. Each
provider may only appear once in the array.
minItems: 1
items:
type: object
additionalProperties: false
required:
- provider
properties:
provider:
type: string
description: ID of a provider.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
tier:
type: integer
description: >-
Priority tier for this provider within the group. Lower tiers
are prioritized first.
default: 1
minimum: 1
active:
type: boolean
description: >-
Indicates whether this group is active and should be used by
scheduling logic.
default: true
ProviderSchedulingGroupRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Name of the provider scheduling group.
minLength: 1
maxLength: 255
groupType:
type: string
description: >-
The scheduling behavior used to assign appointments across the
group's members.
enum:
- structured
- parallel
members:
type: array
description: >-
Members of the scheduling group and their priority tier. Each
provider may only appear once in the array.
minItems: 1
items:
type: object
additionalProperties: false
required:
- provider
properties:
provider:
type: string
description: ID of a provider.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
tier:
type: integer
description: >-
Priority tier for this provider within the group. Lower tiers
are prioritized first.
default: 1
minimum: 1
active:
type: boolean
description: >-
Indicates whether this group is active and should be used by
scheduling logic.
default: true
OfferResponse:
type: object
description: >-
An Offer represents an available appointment slot that Luma Health is
trying to fill by reaching out to patients on a waitlist or through
self-scheduling and rescheduling flows. It tracks who the offer is for,
its source such as a cancellation, manual creation, or a reschedule
request, and its lifecycle status as it moves from in progress to either
a patient being found or the offer expiring or being cancelled. It also
links to the resulting appointment, the provider and facility involved,
and the waitlist entries considered for that slot.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
provider:
description: The ID of provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: Date of the offer
type: string
format: date-time
duration:
description: ID of Setting
type: integer
facility:
description: The ID of facility
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
approvedBy:
description: The ID of approvedBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
declinedBy:
description: The ID of declinedBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
currentWaitlist:
description: current Waitlist of the offer
type: integer
expireAt:
description: When the offer will expire
type: string
format: date-time
patientFoundAt:
description: The ID of patientFoundAt
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientFound:
description: The ID of patientFound
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
estimatedCompletionAt:
description: When the offer will be estimated complete
type: string
format: date-time
shadowAppointment:
description: The ID of shadowAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
availability:
description: The ID of availability
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
protocol:
description: Protocol of the offer
type: string
enum:
- serial
- parallel
offer:
description: The ID of offer
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
usedForAppointment:
description: The ID of usedForAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
rescheduledFromAppointment:
description: The ID of rescheduledFromAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientForm:
description: The ID of patientForm
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientFormTemplate:
description: The ID of patientFormTemplate
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
description: The ID of referral
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
integratorCreationResults:
description: Integrator Creation Results
type: object
enum:
- success
- failure
- pending
waitlists:
description: The ID of waitlists
type: array
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
description: The ID of appointmentType
type: array
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
source:
description: Source of the offer
type: string
enum:
- cancellation
- manual
- find-open-spots
- self-scheduling
- reschedule
- staff-scheduling
- reschedule-from-intent
status:
description: Status of the offer
type: string
enum:
- in-progress
- patient-found
- patient-not-found
- cancelled
OfferRequestCreate:
type: object
required:
- waitlists
- appointmentType
- source
- status
properties:
provider:
description: The ID of provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: Date of the offer
type: date-time
duration:
description: ID of Setting
type: integer
facility:
description: The ID of facility
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
approvedBy:
description: The ID of approvedBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
declinedBy:
description: The ID of declinedBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
currentWaitlist:
description: current Waitlist of the offer
type: integer
expireAt:
description: When the offer will expire
type: date-time
patientFoundAt:
description: The ID of patientFoundAt
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientFound:
description: The ID of patientFound
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
estimatedCompletionAt:
description: When the offer will be estimated complete
type: date-time
shadowAppointment:
description: The ID of shadowAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
availability:
description: The ID of availability
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
protocol:
description: Protocol of the offer
type: string
enum:
- serial
- parallel
offer:
description: The ID of offer
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
usedForAppointment:
description: The ID of usedForAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
rescheduledFromAppointment:
description: The ID of rescheduledFromAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientForm:
description: The ID of patientForm
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientFormTemplate:
description: The ID of patientFormTemplate
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
description: The ID of referral
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
integratorCreationResults:
description: Integrator Creation Results
type: object
enum:
- success
- failure
- pending
waitlists:
description: The ID of waitlists
type: array
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
description: The ID of appointmentType
type: array
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
source:
description: Source of the offer
type: string
enum:
- cancellation
- manual
- find-open-spots
- self-scheduling
- reschedule
- staff-scheduling
- reschedule-from-intent
status:
description: Status of the offer
type: string
enum:
- in-progress
- patient-found
- patient-not-found
- cancelled
OfferRequestUpdate:
type: object
properties:
provider:
description: The ID of provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: Date of the offer
type: date-time
duration:
description: ID of Setting
type: integer
facility:
description: The ID of facility
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
approvedBy:
description: The ID of approvedBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
declinedBy:
description: The ID of declinedBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
currentWaitlist:
description: current Waitlist of the offer
type: integer
expireAt:
description: When the offer will expire
type: date-time
patientFoundAt:
description: The ID of patientFoundAt
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientFound:
description: The ID of patientFound
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
estimatedCompletionAt:
description: When the offer will be estimated complete
type: date-time
shadowAppointment:
description: The ID of shadowAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
availability:
description: The ID of availability
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
protocol:
description: Protocol of the offer
type: string
enum:
- serial
- parallel
offer:
description: The ID of offer
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
usedForAppointment:
description: The ID of usedForAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
rescheduledFromAppointment:
description: The ID of rescheduledFromAppointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientForm:
description: The ID of patientForm
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientFormTemplate:
description: The ID of patientFormTemplate
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
description: The ID of referral
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
integratorCreationResults:
description: Integrator Creation Results
type: object
enum:
- success
- failure
- pending
waitlists:
description: The ID of waitlists
type: array
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentType:
description: The ID of appointmentType
type: array
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
source:
description: Source of the offer
type: string
enum:
- cancellation
- manual
- find-open-spots
- self-scheduling
- reschedule
- staff-scheduling
- reschedule-from-intent
status:
description: Status of the offer
type: string
enum:
- in-progress
- patient-found
- patient-not-found
- cancelled
RecallResponse:
type: object
description: >-
Represents a patient recall, a record used to bring a patient back in
for a follow-up visit or overdue care based on a scheduled trigger date.
It tracks status through the recall lifecycle (pending, active,
scheduled, inactive) and links to the source (upload, UI, or EHR
integrator).
required:
- _id
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
patient:
description: patient
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
description: provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facility:
description: facility
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
description: appointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
description: appointmentType
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: date
type: string
source:
description: source
type: string
enum:
- upload
- ui
- integrator
status:
description: status
type: string
enum:
- active
- pending
- scheduled
attempt:
description: attempt
type: string
RecallRequestCreate:
type: object
required:
- patient
- date
properties:
patient:
description: patient
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
description: provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facility:
description: facility
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
description: appointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
description: appointmentType
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: date
type: string
source:
description: source
type: string
enum:
- upload
- ui
- integrator
status:
description: status
type: string
enum:
- active
- pending
- scheduled
attempt:
description: attempt
type: string
RecallRequestUpdate:
type: object
properties:
patient:
description: patient
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
description: provider
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facility:
description: facility
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
description: appointment
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
description: appointmentType
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
date:
description: date
type: string
source:
description: source
type: string
enum:
- upload
- ui
- integrator
status:
description: status
type: string
enum:
- active
- pending
- scheduled
attempt:
description: attempt
type: string
Referral:
type: object
description: >-
A Referral tracks a patient being referred to a provider or facility for
care, following the referral from creation through outreach, scheduling,
and completion. It captures the referring and schedulable providers,
status and status reason, scheduling window, and any related fax,
upload, or appointment records used in referral management workflows.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
facility:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referringProviderId:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referringProvider:
type: string
duration:
type: number
format: int32
statusReason:
type: string
enum:
- patient-cancelled
- invalid-insurance
- missing-data
- other
statusReasonDescription:
type: string
source:
type: string
enum:
- upload
- patient-referral-form
- ui
- integrator
- followup
- manual
status:
type: string
enum:
- active
- called
- called-late
- scheduled
- scheduled-late
- incomplete
- expired
- cancelled
- pending
- closed
startOn:
type: string
format: date-time
expireAt:
type: string
format: date-time
attempt:
type: number
format: int32
lastAttemptSentAt:
type: string
format: date-time
calledAt:
type: string
format: date-time
acceptedAt:
type: string
format: date-time
scheduledAt:
type: string
format: date-time
notes:
type: string
customerNotes:
type: string
appointmentType:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
reason:
type: string
departmentOrFacility:
type: string
scheduledByAppointment:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
scheduledByOffer:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
processedReferralFollowup:
type: string
enum:
- pending
- skipped
- failed
- success
upload:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
faxUpload:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
faxSentAt:
type: string
format: date-time
scheduleStartOn:
type: string
format: date-time
referringProviderFaxNumberOverride:
type: string
pageParam:
in: query
name: page
required: false
type: integer
format: int32
default: 1
minimum: 1
schema:
type: integer
format: int32
default: 1
minimum: 1
limitParam:
name: limit
in: query
description: How many items to fetch per page
required: false
type: integer
format: int32
default: 500
minimum: 1
maximum: 1000
schema:
type: integer
format: int32
default: 500
minimum: 1
maximum: 1000
Reminder:
type: object
description: >-
Represents a scheduled outbound communication, such as an appointment
reminder, recall, referral, or telehealth notice, sent to a patient
through a channel like SMS or email. It tracks the reminder type,
priority, and delivery status as it moves from scheduled to sent.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
provider:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recall:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
telehealth:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
followup:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
followupOperation:
type: string
enum:
- created
- deleted
- updated
facility:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientForm:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
message:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
type:
type: string
enum:
- appointment
- feedback
- referral
- outbound-referral
- followup
- patient-form
- recall
- telehealth
- waiting-room
externalId:
type: object
properties:
source:
type: string
enum:
- mandrill
- twilio
- nexmo
- sendgrid
- plivo
- awsses
value:
type: string
sendAt:
type: string
format: date-time
sentAt:
type: string
format: date-time
contact:
type: array
items:
type: string
messageTemplate:
type: string
status:
type: string
enum:
- scheduled
- pending
- queued
- sent
- confirmed
- emailOpened
- skipped
- delivered
- blocked
statusReason:
type: string
replied:
type: integer
format: int32
default: 0
repliedMessage:
type: string
originalRepliedMessage:
type: string
repliedTime:
type: string
format: date-time
paritalStatus:
type: array
items:
type: object
properties:
status:
type: string
enum:
- scheduled
- pending
- queued
- sent
- confirmed
- emailOpened
- skipped
- delivered
- blocked
statusReason:
type: string
channel:
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
message:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
forcedTime:
type: boolean
ReportResponse:
type: object
description: >-
Represents a configured analytics report or dashboard, backed by Looker
or Sigma, that staff can view within Luma Health. It stores the report
name, description, external dashboard reference, and whether it is a
custom, featured, or legacy report type.
properties:
_id:
type: string
format: uuid
name:
type: string
description:
type: string
enabled:
type: boolean
type:
type: string
ReportRequestCreate:
type: object
required:
- _id
- name
- description
- enabled
- type
properties:
_id:
type: string
format: uuid
name:
type: string
description:
type: string
enabled:
type: boolean
type:
type: string
ReportRequestUpdate:
type: object
properties:
_id:
type: string
format: uuid
name:
type: string
description:
type: string
enabled:
type: boolean
type:
type: string
SchedulerRequestUpdate:
type: object
required:
- date
- endDate
properties:
locked:
type: boolean
showEntireDay:
type: boolean
default: false
date:
type: integer
endDate:
type: integer
facility:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
provider:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
status:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
statusReason:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
statusSource:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
type:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
insuranceVerificationStatus:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
billingTransactionStatus:
type: object
properties:
in:
type: array
items:
type: string
nin:
type: array
items:
type: string
modality:
type: string
SettingResponse:
type: object
description: >-
Represents the configuration settings for a Luma Health account,
covering areas such as session timeouts, telehealth behavior, kiosk
flows, and data sync freshness windows. It is a large, flexible settings
object used to control product behavior on a per-customer basis, and can
be scoped to a user, provider, facility, appointment type, or
integrator.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
refId:
description: refId
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
ref:
description: ref
type: string
enum:
- user
- provider
- facility
- appointment-type
- integrator
settings:
$ref: '#/components/schemas/SettingProperty'
SettingRequest:
type: object
properties:
refId:
description: refId
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
ref:
description: ref
type: string
enum:
- user
- provider
- facility
- appointment-type
- integrator
settings:
$ref: '#/components/schemas/SettingProperty'
SpecialtyResponse:
type: object
description: >-
Represents a medical specialty, such as cardiology or dermatology, used
to categorize providers, facilities, and appointment types within an
account. It stores the specialty name, description, contact info, and an
optional parent specialty for hierarchical grouping.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
externalId:
$ref: '#/components/schemas/ExternalId'
name:
type: string
description:
type: string
phone:
type: string
directMessageAddress:
type: string
parentSpecialty:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
SpecialtyRequestCreate:
type: object
required:
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
externalId:
$ref: '#/components/schemas/ExternalId'
name:
type: string
description:
type: string
phone:
type: string
directMessageAddress:
type: string
parentSpecialty:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
SpecialtyRequestUpdate:
type: object
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
externalId:
$ref: '#/components/schemas/ExternalId'
name:
type: string
description:
type: string
phone:
type: string
directMessageAddress:
type: string
parentSpecialty:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
SpecialtyResourceResponse:
type: object
description: >-
Represents an association between a specialty and a specific resource
such as an appointment type, provider, or facility. It is used to
determine which providers, facilities, or appointment types belong to a
given medical specialty.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
deletedBy:
$ref: '#/components/schemas/deletedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
deletedAt:
$ref: '#/components/schemas/deletedAtParam'
specialty:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
refId:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
ref:
type: string
enum:
- appointmentType
- facility
- provider
SquiggliesResponse:
type: object
description: >-
Represents a squiggly, a reusable template tag such as a dynamic URL or
system value that can be inserted into messages and rendered at send
time. It defines the tag name, namespace, and which product scopes it is
available in.
properties:
tag:
type: string
pattern: '{{[aA-zZ]+}}'
label:
type: string
ref:
type: string
SystemAuditResponse:
type: object
description: >-
Represents a system audit log entry that records actions or changes
affecting a patient, appointment, provider, or other resource for
compliance and traceability purposes. It links to the related entities
involved and stores arbitrary key-value metadata about the event, with
entries expiring after 90 days.
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
tags:
description: List of labels attached to a log message.
type: array
items:
description: Descriptive label used to group logs of the same kind.
type: string
log:
description: A somewhat friendly log message about a system event.
type: string
dataPoints:
description: A JSON containing key/values of data related to this log message.
patient:
description: The ID of patient related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
description: The ID of an `appointment` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
provider:
description: The ID of a `provider` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
facility:
description: The ID of a `facility` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
referral:
description: The ID of a `referral` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
followup:
description: The ID of a `followup` (custom action) related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
recall:
description: The ID of a `recall` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
message:
description: >
The ID of a `message` related to this log message.
ATTENTION: old logs generated by followups (custom actions) before
Aug 25th, 2022, use `message`
as a generic container which may hold the ID of any kind of object,
not only messages.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
broadcast:
description: The ID of a `broadcast` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
fileUpload:
description: |
The ID of a generic `fileUpload` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
upload:
description: >
The ID of an `upload` related to this log. Uploads differ from
FileUploads because they usually
consist of CSV files which are processed in batch to synchronize
patients, appointments, providers,
facilities and other EHR data that couldn't be synchronized by other
means.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
integrator:
description: The ID of an `integrator` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
setting:
description: The ID of a `setting` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientForm:
description: The ID of a `patientForm` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patientFormTemplate:
description: The ID of a `patientFormTemplate` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
billingCopay:
description: The ID of a `billingCopay` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
billingTransaction:
description: The ID of a `billingTransaction` related to this log message.
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
UserResponse:
type: object
description: >-
Represents a user account in Luma Health, which can be a patient, staff
member, or system account depending on user type. It stores identity,
contact, authentication, and communication preference data used across
scheduling and messaging features.
properties:
_id:
$ref: '#/components/schemas/idParam'
safeId:
description: safeId
type: string
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
name:
type: string
description: Full name
firstname:
type: string
description: First name
lastname:
type: string
description: Last name
middlename:
type: string
description: Middle name
alternativeName:
type: string
description: Alternative name
normalizedName:
description: normalizedName
type: string
displayPhone:
type: string
description: >-
Phone number displayed in staff profile. Not used for communication
purposes.
displayStatus:
type: string
description: Account status. Informative field only, not used for access control.
enum:
- active
- pending
- suspended
email:
type: string
description: User's e-mail address in lowercase.
roles:
type: array
description: User's roles, used for access control.
items:
type: string
enum:
- staff
- doctor
- widget
- manager
- admin
- referringProvider
- renderingProvider
- subaccount
- readFileUpload
rolesByUser:
type: object
description: >-
Object containing 2 keys, referringProvider and renderingProvider.
The value for each key is an array. The content of the array should
be the root account ids under the same organization, where this user
has the role with the same name of the key.
properties:
referringProvider:
type: array
description: >-
List of root account IDs under an organization where the user
has the role referringProvider
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
renderingProvider:
type: array
description: >-
List of root account IDs under an organization where the user
has the role renderingProvider
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
organization:
type: string
description: The ID of the organization controling this root user account.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
type: array
description: List of contact infos of this user.
items:
type: object
properties:
type:
type: string
description: The channel of communication for the current contact info.
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
type: string
description: >-
The value (number, email, login, etc) of the current contact
info.
default: ''
active:
type: boolean
description: Indicates if the current contact is active for use or not.
default: false
archived:
type: boolean
description: >-
Indicates if the current contact has been archived by the
system due to deliverability issues.
default: false
archivedReason:
type: string
description: Reason why the number was archived by the system.
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
type: string
description: >-
The ID of the message that triggered the system to archive
this contact.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
type: boolean
description: Indicates if the user has requested not to be contacted anymore.
default: false
doNotContactMessage:
type: string
description: >-
The ID of the message where the user requested not to be contacted
anymore.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
type: array
description: List of group IDs to which this user belongs.
uniqueItems: true
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
type: string
description: Customer ID from stripe for this account
stripeSubscriptionId:
type: string
description: Stripe subscription ID
salesforceId:
type: string
description: Salesforce Account ID for this account
salesforceData:
$ref: '#/components/schemas/SalesforceData'
active:
type: number
description: >-
Indicates if a user is active and able to log into the system or
not.
default: 0
language:
type: string
description: User's preferred language.
default: en
pattern: ^([a-z]{2}$|zh-t)$
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
description: Date of birth
required:
- year
- month
- day
properties:
year:
type: number
month:
type: number
day:
type: number
address:
type: string
description: User's address.
city:
type: string
description: User's city.
state:
type: string
description: User's state.
country:
type: string
default: US
description: User's country
postcode:
type: string
description: User's postal code.
gender:
type: string
description: User's gender.
default: unknown
enum:
- male
- female
- unknown
- nonbinary
avatar:
type: string
description: The ID of a FileUpload containing the profile picture of the user.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
directMessagingEmail:
type: string
description: E-mail for direct communication with the user.
website:
description: User's website.
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
setting:
description: ID of Setting
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
settings:
$ref: '#/components/schemas/SettingProperty'
type:
description: type
type: string
enum:
- doctor
- staff
- patient
- guest
lastLogin:
description: lastLogin
type: string
format: date-time
master:
description: master
type: boolean
allowedIps:
description: allowedIps
type: array
items:
type: string
publicKey:
description: publicKey
type: string
twoFactorAuthSecret:
type: object
properties:
enabled:
description: twoFactorAuthSecret.enabled
type: boolean
stats:
type: object
properties:
oldestAppointment:
description: stats.oldestAppointment
type: string
format: date-time
UserRequestCreate:
type: object
required:
- name
- email
- doNotContact
- active
- contry
- gender
- type
properties:
safeId:
description: safeId
type: string
name:
type: string
description: Full name
firstname:
type: string
description: First name
lastname:
type: string
description: Last name
middlename:
type: string
description: Middle name
alternativeName:
type: string
description: Alternative name
displayPhone:
type: string
description: >-
Phone number displayed in staff profile. Not used for communication
purposes.
displayStatus:
type: string
description: Account status. Informative field only, not used for access control.
enum:
- active
- pending
- suspended
email:
type: string
description: User's e-mail address in lowercase.
roles:
type: array
description: User's roles, used for access control.
items:
type: string
enum:
- staff
- doctor
- widget
- manager
- admin
- referringProvider
- renderingProvider
- subaccount
- readFileUpload
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
type: string
description: The ID of the organization controling this root user account.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
type: array
description: List of contact infos of this user.
items:
type: object
required: []
properties:
type:
type: string
description: The channel of communication for the current contact info.
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
type: string
description: >-
The value (number, email, login, etc) of the current contact
info.
default: ''
active:
type: boolean
description: Indicates if the current contact is active for use or not.
default: false
archived:
type: boolean
description: >-
Indicates if the current contact has been archived by the
system due to deliverability issues.
default: false
archivedReason:
type: string
description: Reason why the number was archived by the system.
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
type: string
description: >-
The ID of the message that triggered the system to archive
this contact.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
type: boolean
description: Indicates if the user has requested not to be contacted anymore.
default: false
doNotContactMessage:
type: string
description: >-
The ID of the message where the user requested not to be contacted
anymore.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
type: array
description: List of group IDs to which this user belongs.
uniqueItems: true
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
type: string
description: Customer ID from stripe for this account
stripeSubscriptionId:
type: string
description: Stripe subscription ID
salesforceId:
type: string
description: Salesforce Account ID for this account
salesforceData:
$ref: '#/components/schemas/SalesforceData'
active:
type: number
description: >-
Indicates if a user is active and able to log into the system or
not.
default: 0
language:
type: string
description: User's preferred language.
default: en
pattern: ^([a-z]{2}$|zh-t)$
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
description: Date of birth
required:
- year
- month
- day
properties:
year:
type: number
month:
type: number
day:
type: number
address:
type: string
description: User's address.
city:
type: string
description: User's city.
state:
type: string
description: User's state.
country:
type: string
default: US
description: User's country
postcode:
type: string
description: User's postal code.
gender:
type: string
description: User's gender.
default: unknown
enum:
- male
- female
- unknown
- nonbinary
avatar:
type: string
description: The ID of a FileUpload containing the profile picture of the user.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
directMessagingEmail:
type: string
description: E-mail for direct communication with the user.
website:
description: User's website.
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
type:
description: type
type: string
enum:
- staff
- doctor
- guest
allowedIps:
description: allowedIps
type: array
items:
type: string
UserRequestUpdate:
type: object
properties:
safeId:
description: safeId
type: string
name:
type: string
description: Full name
firstname:
type: string
description: First name
lastname:
type: string
description: Last name
middlename:
type: string
description: Middle name
alternativeName:
type: string
description: Alternative name
displayPhone:
type: string
description: >-
Phone number displayed in staff profile. Not used for communication
purposes.
displayStatus:
type: string
description: Account status. Informative field only, not used for access control.
enum:
- active
- pending
- suspended
email:
type: string
description: User's e-mail address in lowercase.
roles:
type: array
description: User's roles, used for access control.
items:
type: string
enum:
- staff
- doctor
- widget
- manager
- admin
- referringProvider
- renderingProvider
- subaccount
- readFileUpload
rolesByUser:
$ref: '#/components/schemas/RolesByUser'
organization:
type: string
description: The ID of the organization controling this root user account.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
contact:
type: array
description: List of contact infos of this user.
items:
type: object
required: []
properties:
type:
type: string
description: The channel of communication for the current contact info.
enum:
- inapp
- sms
- voice
- email
- fax
- whatsapp
value:
type: string
description: >-
The value (number, email, login, etc) of the current contact
info.
default: ''
active:
type: boolean
description: Indicates if the current contact is active for use or not.
default: false
archived:
type: boolean
description: >-
Indicates if the current contact has been archived by the
system due to deliverability issues.
default: false
archivedReason:
type: string
description: Reason why the number was archived by the system.
enum:
- none
- unreachable
- do-not-contact
archivedMessage:
type: string
description: >-
The ID of the message that triggered the system to archive
this contact.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
doNotContact:
type: boolean
description: Indicates if the user has requested not to be contacted anymore.
default: false
doNotContactMessage:
type: string
description: >-
The ID of the message where the user requested not to be contacted
anymore.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
groups:
type: array
description: List of group IDs to which this user belongs.
uniqueItems: true
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
stripeCustomerId:
type: string
description: Customer ID from stripe for this account
stripeSubscriptionId:
type: string
description: Stripe subscription ID
salesforceId:
type: string
description: Salesforce Account ID for this account
salesforceData:
$ref: '#/components/schemas/SalesforceData'
active:
type: number
description: >-
Indicates if a user is active and able to log into the system or
not.
default: 0
language:
type: string
description: User's preferred language.
default: en
pattern: ^([a-z]{2}$|zh-t)$
externalId:
$ref: '#/components/schemas/ExternalId'
secondaryExternalId:
$ref: '#/components/schemas/ExternalId'
dateOfBirth:
type: object
description: Date of birth
required:
- year
- month
- day
properties:
year:
type: number
month:
type: number
day:
type: number
address:
type: string
description: User's address.
city:
type: string
description: User's city.
state:
type: string
description: User's state.
country:
type: string
default: US
description: User's country
postcode:
type: string
description: User's postal code.
gender:
type: string
description: User's gender.
default: unknown
enum:
- male
- female
- unknown
- nonbinary
avatar:
type: string
description: The ID of a FileUpload containing the profile picture of the user.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
directMessagingEmail:
type: string
description: E-mail for direct communication with the user.
website:
description: User's website.
type: string
demoConfiguration:
type: object
properties:
type:
type: string
enum:
- default
type:
description: type
type: string
enum:
- staff
- doctor
- guest
allowedIps:
description: allowedIps
type: array
items:
type: string
Waitlist:
type: object
description: >-
Represents a patient's entry on an appointment waitlist, used to offer
earlier appointment slots as they become available. It tracks the offer
lifecycle from waiting through offered, accepted, or declined, along
with who added the patient to the waitlist (patient, staff, or
automatically by the system).
required:
- _id
- name
properties:
_id:
$ref: '#/components/schemas/idParam'
user:
$ref: '#/components/schemas/userParam'
deleted:
$ref: '#/components/schemas/deletedParam'
createdBy:
$ref: '#/components/schemas/createdByParam'
updatedBy:
$ref: '#/components/schemas/updatedByParam'
createdAt:
$ref: '#/components/schemas/createdAtParam'
updatedAt:
$ref: '#/components/schemas/updatedAtParam'
patient:
type: string
provider:
type: string
facility:
type: string
facilities:
type: array
items:
type: string
appointmentType:
type: string
offer:
type: string
status:
type: string
enum:
- waiting
- in-flight
- offered
- confirming
- accepted
- pending
- declined
parameters:
userParam:
in: query
name: user
required: false
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: The ID of the root account user.
deletedParam:
in: query
name: deleted
required: false
type: number
enum:
- 0
- 1
schema:
type: number
enum:
- 0
- 1
description: Flag for logical deletion where 1 means deleted.
createdByParam:
in: query
name: createdBy
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
required: false
description: The ID of the user who created this object.
updatedByParam:
in: query
name: updatedBy
required: false
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: The ID of the user who updated this object.
createdAtParam:
in: query
name: createdAt
type: string
format: date-time
schema:
type: string
format: date-time
required: false
description: The date/time when this object was created.
updatedAtParam:
in: query
name: updatedAt
type: string
format: date-time
schema:
type: string
format: date-time
required: false
description: The date/time when this object was updated.
pageParam:
in: query
name: page
required: false
type: integer
format: int32
default: 1
minimum: 1
schema:
type: integer
format: int32
default: 1
minimum: 1
limitParam:
name: limit
in: query
description: How many items to fetch per page
required: false
type: integer
format: int32
default: 500
minimum: 1
maximum: 1000
schema:
type: integer
format: int32
default: 500
minimum: 1
maximum: 1000
populateParam:
name: _populate
in: query
description: >-
Response properties which will be replaced by the referenced objects,
separated by commas.
required: false
type: string
schema:
type: string
selectParam:
name: _select
in: query
description: Response properties that should be returned, separated by commas.
required: false
type: string
schema:
type: string
idParam:
in: query
name: _id
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
required: false
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: Luma's internal ID of an object.
deletedByParam:
in: query
name: deletedBy
required: false
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
description: The ID of the user who deleted this object.
deletedAtParam:
in: query
name: deletedAt
type: string
format: date-time
schema:
type: string
format: date-time
required: false
description: The date/time when this object was deleted.
patientGlobalSearch:
in: query
name: patientGlobalSearch
type: string
required: false
schema:
type: string
description: >
Search for a patient within the resource using the current parameters
Luma Patient ID (patient._id),
MRN (patient.medicalRecordNumber),
Name combos(patient.firstname, patient.lastname) OR
(patient.lastname,patient.firstname),
All contact method (phone number and email - active OR not),
ExternalID (patient.externalId.value),
Date of Birth.
languageParam:
in: query
name: language
type: string
schema:
type: string
enum:
- ar
- bn
- cn
- de
- en
- es
- fa
- fl
- fr
- gr
- gu
- hi
- ht
- hy
- it
- ja
- km
- ko
- mr
- my
- pa
- pl
- pt
- ru
- so
- th
- ti
- ur
- vi
- zh-t
- zh
description: Language code.
refParam:
in: query
name: ref
description: >-
Indicates what this is about. Depending on this value, you also know
what the parameter `refId` refers to.
schema:
$ref: '#/components/schemas/Ref'
security:
- Bearer: []
tags:
- name: assistantTransferRules
description: Transfer rules for AI assistants (Navigator) to handle call routing
- name: auth
description: Luma Client Access
- name: appointments
description: Patient's appointments to see a doctor
- name: appointmentTypes
description: EHR appointment types
- name: assistantActions
description: >-
Audit log of individual tool calls made by the Navigator AI assistant
during a conversation
- name: assistantInstances
description: >-
Conversations between the Navigator AI assistant and a patient or staff
member
- name: availabilities
description: EHR provider scheduler availability
- name: billingCharges
description: >-
Financial charges tracked against a patient, such as copays and patient
balances
- name: billingCopays
description: >-
Copay amounts configured per source (system, EHR, or manual) and
referenced by patient form templates
- name: broadcastEvents
description: Broadcast event logs and history
- name: broadcastFlows
description: Broadcast flows for mass messaging campaigns
- name: broadcastTemplates
description: Templates for broadcasts
- name: campaigns
description: >-
Contact preference campaigns that determine how and in what order a
patient, facility, or user is contacted
- name: chatActivities
description: conversations with a patient
- name: chatActivitiesReasons
description: reason why a chatActivity was closed
- name: chatAudits
description: Audits for message chat
- name: checklists
description: >-
Per-appointment, per-patient instances of required pre-visit tasks
generated from a checklist template
- name: checklistTemplates
description: Reusable definitions of required pre-visit tasks used to build checklists
- name: customWebStyles
description: custom styles, CSS, logo images for customers
- name: engagements
description: >-
Conversation sessions between the system and a recipient, driven by one or
more AI agents
- name: engagementEvents
description: Append-only history of events that occurred during an engagement
- name: engagementSettings
description: Reusable voice and language presets that can be attached to an engagement
- name: estimates
description: Estimates
- name: facilities
description: Customer facilities
- name: fileUploads
description: File Uploads
- name: groups
description: Group of staff users
- name: insurances
description: Patient insurance coverage records
- name: insurancePayors
description: Insurance payors/carriers maintained in Luma's payor directory
- name: knowledgeBaseQuestionAnswers
description: Question and answer entries for knowledge bases
- name: lumabotFlows
description: LumaBot Flows answered by patients
- name: lumabotFlowTemplates
description: Templates for LumaBot flows
- name: messages
description: Messages (chat, sms, voice, email, whatsapp, fax, in-app)
- name: messageTemplatePartials
description: Reusable partials that can be composed into message templates
- name: offers
description: Offers
- name: queueManagerInstances
description: Instances of queue manager templates representing items in a queue
- name: outboundReferrals
description: Outbound Referral
- name: patients
description: Customer patients
- name: patientCreditCards
description: Luma Health patient credit cards
- name: patientForms
description: Patient forms answered by patients
- name: patientFormTemplates
description: Templates from patient forms
- name: patientMessageTemplates
description: Message templates used to compose patient communications
- name: providers
description: Luma Health providers
- name: providerSchedulingGroups
description: >-
Groups of providers configured for shared scheduling behavior, such as
round-robin or waterfall assignment
- name: recalls
description: Recalls
- name: referrals
description: Luma Patient referrals
- name: reminders
description: Luma Reminders
- name: reports
description: Luma Analytical Reports
- name: schedulers
description: Scheduler
- name: settings
description: Luma resource settings
- name: specialties
description: A Doctor's specialty
- name: squigglies
description: Messages Squigglies
- name: systemAudits
description: Audit logs for certain system events in a given account
- name: users
description: Staff users
- name: waitlists
description: Patients waiting for an appointment
paths:
/appointmentTypes/{appointmentTypeId}:
get:
summary: Get an appointment type by id
operationId: appointmentTypeGet
tags:
- appointmentTypes
parameters:
- name: appointmentTypeId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Type of Appointment
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentTypeResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an appointment type
operationId: appointmentTypeUpdate
tags:
- appointmentTypes
parameters:
- name: appointmentTypeId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An appointment type (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentTypeRequestUpdate'
responses:
'200':
description: Appointment Type
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentTypeResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an appointment type
operationId: appointmentTypeDelete
tags:
- appointmentTypes
parameters:
- name: appointmentTypeId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted appointment type
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentTypeResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/appointmentTypes:
get:
summary: List appointment types
operationId: appointmentTypesList
tags:
- appointmentTypes
parameters:
- name: _id
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: visible
in: query
schema:
type: boolean
- name: modality
in: query
schema:
type: string
enum:
- office-visit
- telehealth
- name: name
in: query
schema:
type: string
- name: description
in: query
schema:
type: string
- name: settings
description: >-
Path string for resources. Formatted as
'settings.{{resource}}.enabled'
in: query
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of appointment types
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/AppointmentTypeResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create appointment type
operationId: appointmentTypeCreate
tags:
- appointmentTypes
requestBody:
description: Create an appointment type
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentTypeRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentTypeResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/appointments/{appointmentId}:
get:
summary: Get appointment by id
operationId: appointmentGet
tags:
- appointments
parameters:
- name: appointmentId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Appointment
content:
application/json:
schema:
$ref: '#/components/schemas/Appointment'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an appointment
operationId: appointmentUpdate
tags:
- appointments
parameters:
- name: appointmentId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An appointment (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Appointment'
responses:
'200':
description: Appointment
content:
application/json:
schema:
$ref: '#/components/schemas/Appointment'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an appointment
operationId: appointmentDelete
tags:
- appointments
parameters:
- name: appointmentId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted appointment
content:
application/json:
schema:
$ref: '#/components/schemas/Appointment'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/appointments:
get:
summary: List appointments
operationId: appointmentsList
tags:
- appointments
parameters:
- name: patient
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: provider
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: facility
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: type
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: date
in: query
schema:
type: string
format: date-time
- name: duration
in: query
schema:
type: integer
format: int32
- name: source
in: query
schema:
type: string
enum:
- integrator
- reminder
- ui
- waitlist
- reschedule
- telehealth
- name: status
in: query
schema:
type: string
enum:
- unconfirmed
- confirmed
- cancelled
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of appointments
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/Appointment'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create appointment
operationId: appointmentCreate
tags:
- appointments
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Appointment'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/Appointment'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/assistantTransferRules/bulk:
post:
summary: Bulk create assistant transfer rules
description: >
Creates multiple AssistantTransferRules documents and syncs them with
the AI service for intent routing.
This endpoint:
1. Creates AssistantTransferRules documents in MongoDB
2. Uses the created document _ids as departmentIds for intent routing
sync
3. Syncs the intent routing table with the AI service
4. Rolls back created documents if sync fails
operationId: assistantTransferRulesBulkCreate
tags:
- assistantTransferRules
requestBody:
description: Bulk create assistant transfer rules
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantTransferRulesBulkRequest'
responses:
'200':
description: Successfully created transfer rules
content:
application/json:
schema:
type: object
properties:
createdRules:
type: array
items:
$ref: '#/components/schemas/AssistantTransferRulesResponse'
'400':
description: Bad request - missing entries, invalid entry data, or sync failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/assistantInstances:
get:
summary: List assistant instances
operationId: assistantInstancesList
tags:
- assistantInstances
parameters:
- name: assistant
in: query
description: ID of the assistant.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patient
in: query
description: ID of the patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patient.name
in: query
description: Search by the patient's name.
schema:
type: string
- name: status
in: query
schema:
type: string
enum:
- idle
- in-progress
- failure
- success
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of assistant instances
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/AssistantInstanceResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create an assistant instance
operationId: assistantInstanceCreate
tags:
- assistantInstances
requestBody:
description: Create an assistant instance
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantInstanceRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantInstanceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/assistantInstances/{assistantInstanceId}:
get:
summary: Get assistant instance by id
operationId: assistantInstanceGet
tags:
- assistantInstances
parameters:
- name: assistantInstanceId
in: path
required: true
description: AssistantInstance's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: AssistantInstance
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantInstanceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an assistant instance
operationId: assistantInstanceUpdate
tags:
- assistantInstances
parameters:
- name: assistantInstanceId
in: path
required: true
description: AssistantInstance's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An assistant instance (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantInstanceRequestUpdate'
responses:
'200':
description: AssistantInstance
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantInstanceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an assistant instance
operationId: assistantInstanceDelete
tags:
- assistantInstances
parameters:
- name: assistantInstanceId
in: path
required: true
description: AssistantInstance's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted assistant instance
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantInstanceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/assistantInstances/{assistantInstanceId}/analysis:
get:
summary: Get the analysis timeline for an assistant instance
description: >-
Returns a merged timeline of AssistantActions and underlying LLM vendor
events for a conversation, for debugging and QA.
operationId: assistantInstanceGetAnalysis
tags:
- assistantInstances
parameters:
- name: assistantInstanceId
in: path
required: true
description: AssistantInstance's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: The assistant instance's analysis timeline
content:
application/json:
schema:
type: object
properties:
assistant:
type: object
assistantInstance:
$ref: '#/components/schemas/AssistantInstanceResponse'
version:
type: number
release:
type: string
analysisEvents:
type: array
items:
type: object
patientJourneyEvents:
type: array
items:
type: object
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: Assistant instance not found
/assistantInstances/{assistantInstanceId}/reporting:
get:
summary: Get QA reporting data for an assistant instance
description: >-
Returns a QA/reporting summary for a conversation, including the
transcript, the tool calls made, and vendor/skill details.
operationId: assistantInstanceGetReportingData
tags:
- assistantInstances
parameters:
- name: assistantInstanceId
in: path
required: true
description: AssistantInstance's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: The assistant instance's reporting data
content:
application/json:
schema:
type: object
properties:
conversation:
type: array
items:
type: object
tools:
type: array
items:
$ref: '#/components/schemas/AssistantActionResponse'
skillDetails:
type: object
vendorDetails:
type: object
assistantInstance:
$ref: '#/components/schemas/AssistantInstanceResponse'
externalStatus:
type: object
status:
type: string
statusReason:
type: string
createdAt:
type: string
format: date-time
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: Assistant instance not found
/assistantInstances/patients/{patientId}/completions:
post:
summary: Generate an assistant chat completion for a patient
description: >-
Generates an AI completion for a patient's chat conversation with the
Navigator assistant.
operationId: assistantInstanceCompletion
tags:
- assistantInstances
parameters:
- name: patientId
in: path
required: true
description: The patient's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
required: false
content:
application/json:
schema:
type: object
responses:
'200':
description: The generated completion
content:
application/json:
schema:
type: object
properties:
text:
type: string
'400':
description: >-
Not found chat activity, default assistant, or internal entry point
in assistant
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/assistantActions:
get:
summary: List assistant actions
operationId: assistantActionsList
tags:
- assistantActions
parameters:
- name: assistantInstance
in: query
description: ID of the assistant instance (conversation).
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: functionName
in: query
schema:
type: string
- name: status
in: query
schema:
type: string
enum:
- success
- failure
- pending
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of assistant actions
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/AssistantActionResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create an assistant action
operationId: assistantActionCreate
tags:
- assistantActions
requestBody:
description: Create an assistant action
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantActionRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantActionResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/assistantActions/{assistantActionId}:
get:
summary: Get assistant action by id
operationId: assistantActionGet
tags:
- assistantActions
parameters:
- name: assistantActionId
in: path
required: true
description: AssistantAction's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: AssistantAction
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantActionResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an assistant action
operationId: assistantActionUpdate
tags:
- assistantActions
parameters:
- name: assistantActionId
in: path
required: true
description: AssistantAction's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An assistant action (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantActionRequestUpdate'
responses:
'200':
description: AssistantAction
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantActionResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an assistant action
operationId: assistantActionDelete
tags:
- assistantActions
parameters:
- name: assistantActionId
in: path
required: true
description: AssistantAction's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted assistant action
content:
application/json:
schema:
$ref: '#/components/schemas/AssistantActionResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/auth/clients:
post:
summary: Generate client id and secret
description: >-
This endpoint allows our users to generate clientId and clientSecrets
that can be used for machine-to-machine communication without the need
of a username / password. Since clientId / clientSecret never expires,
it is usefull in running automation process / scripts etc. A user can
only have one clientId/clientSecret at any given time.
tags:
- auth
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- clientName
properties:
clientName:
type: string
description: Name of the client
additionalProperties: false
x-codeSamples:
- lang: cURL
source: |
curl --request POST \
--url 'https://api.lumahealth.io/v2/auth/clients' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer
--data '{"clientName": "Luma Client Inc."}'
responses:
'200':
description: Returns a clientId and clientSecret
content:
application/json:
schema:
type: object
required:
- clientId
- clientSecret
properties:
clientId:
type: string
clientSecret:
type: string
'400':
description: >-
If the request parameter - clientName - is malformed/invalid or
missing. We will also return 400 if the operation fails.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
'406':
description: If a clientId/clientSecret pair has already been generated.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
patch:
summary: Rotate clientSecret
description: >-
This action allows our users to change secrets associated with a
clientId. This does not generate a new clientId.
tags:
- auth
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- clientName
properties:
clientName:
type: string
description: Name of the client
additionalProperties: false
x-codeSamples:
- lang: cURL
source: |
curl --request PATCH \
--url 'https://api.lumahealth.io/v2/auth/clients' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer
--data '{"clientName": "Luma Client Inc."}'
responses:
'200':
description: Returns a clientId and clientSecret
content:
application/json:
schema:
type: object
required:
- clientId
- clientSecret
properties:
clientId:
type: string
clientSecret:
type: string
'400':
description: >-
If the request parameter - clientName - is malformed/invalid or
missing. We will also return 400 if the operation fails.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
'404':
description: If the user associated with this clientId is not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
get:
summary: Get clientIds
description: >-
This action returns the clientId value as well as its creation date or
the last time clientSecret was rotated.
tags:
- auth
x-codeSamples:
- lang: cURL
source: |
curl --request GET \
--url 'https://api.lumahealth.io/v2/auth/clients' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer
responses:
'200':
description: >-
Returns clientId and last updated time. If no clientId is found, an
emptry array will be returned.
content:
application/json:
schema:
type: array
items:
type: object
required:
- clientId
- updatedAt
properties:
clientId:
type: string
updatedAt:
type: string
format: date-time
'400':
description: If server encounters an error in processing the request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
/auth/token:
post:
summary: Get access token
description: >-
This endpoint allows user to receive access token that can be used to
access luma service with. This is similar to login flow except that
client receives access token by providing clientId and clientSecret.
tags:
- auth
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- client_id
- client_secret
- grant_type
properties:
client_id:
type: string
description: client_id provided by luma
client_secret:
type: string
description: client_secret provided by luma
grant_type:
type: string
description: The type of token to generate
enum:
- client_credentials
additionalProperties: false
x-codeSamples:
- lang: cURL
source: >
curl --location --request POST
'https://api.lumahealth.io/api/v2/auth/token' \
--header 'Content-Type: application/json' \
--data-raw '{
"client_id": "XXXXX",
"client_secret": "XXXXX",
"grant_type": "client_credentials"
}'
responses:
'200':
description: Returns a JWT token that can be used as a Bearer token.
content:
application/json:
schema:
type: object
required:
- access_token
- token_type
- expires_in
properties:
access_token:
type: string
token_type:
type: string
enum:
- Bearer
expires_in:
type: number
'400':
description: >-
A 400 will be returned if any of the request parameters (client_id
or client_secret) is malformed/invalid or missing.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
'401':
description: >-
A 401 Unauthorized will be returned if wrong clientId and/or
clientSecret is given.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
/auth/token/{userId}:
put:
summary: Get subaccount access token
description: >-
This endpoint allows user to receive access token of another user that
can be used to impersonate their account and access luma services. It
can only be invoked by an access token with apiUser role, generated with
a client_id and a client_secret via POST /api/v2/auth/token.
tags:
- auth
parameters:
- name: userId
description: The user id for which an impersonated token will be returned.
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
expires_in:
type: number
description: Seconds for the token to expire.
additionalProperties: false
x-codeSamples:
- lang: cURL
source: >
curl --request PUT \
--url
'https://api.lumahealth.io/v2/auth/token/62269a436124f88ce8d73488' \
--header 'content-type: application/json' \
--data '{ "expires_in": "600" }'
responses:
'200':
description: Returns a JWT token that can be used as a Bearer token.
content:
application/json:
schema:
type: object
required:
- access_token
- token_type
properties:
access_token:
type: string
token_type:
type: string
enum:
- Bearer
'400':
description: >-
A 400 will be returned if any of the request parameters (clientId or
clientSecret) is malformed/invalid or missing.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
/availabilities/scheduler:
get:
summary: List scheduler availabilities
operationId: listSchedulerAvailabilities
tags:
- availabilities
parameters:
- name: appointmentType
description: >
The ID of an `AppointmentType`. If given, only scheduler
availabilities for that type of appointment will be listed.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: includeNullApptTypes
description: >
Some appointments might not have a type at all, so this boolean flag
determines
if scheduler availabilities for such appointments will be listed or
not.
in: query
schema:
type: boolean
- name: date
description: >
The date/time to display scheduler availabilities, in ISO format,
including timezone information.
See the request sample in `curl` displayed at the side.
This queryParameter should be passed twice, to specify a date/time
range.
Example:
`?date=>2022-08-10T09:49:47-07:00&date=<2022-09-09T23:59:59-03:00`
Notice the greater-than (`>`) and less-than (`<`) operators.
in: query
schema:
type: string
format: date-time
- name: facility
description: >-
Filter the availabilities by the ID of a `Facility` where the
doctor/provider may be seen by a patient.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientForm
description: >
Only display the availability that was chosen by the patient who
answered this form.
If a form template with type `pre-scheduling` is set in the
scheduler settings, then
Luma's scheduler UI will require the patient to answer those form
template questions,
store the answers in a `patientForm` object, and then redirect them
to another page
listing the availabilities to be scheduled. Once the patient picks
an availability
and books an appointment, Luma will update the availability with the
`patientForm` ID.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientFormTemplate
description: >
Filter scheduler availabilities that were booked after patients
answered the questions of this template ID.
The field `patientForm` will only bring *one availability* that was
chosen by the patient who answered that form.
This field will bring *multiple availabilities*, because it does not
refer to the form answers of a single patient,
but rather, to the form template. Multiple patients may have seen
the questions of a template.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: provider
description: >-
Only display scheduler availabilities for the ID of the
provider/doctor given on this query parameter.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: status
description: >-
Filter availabilities by status. It must be `available`, as other
statuses were already booked or canceled.
in: query
schema:
type: string
enum:
- available
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/pageParam'
- name: populate
description: >
Determines if the facility and the provider IDs will be replaced
with objects detailing some of their properties.
The populated IDs are the ones inside the response's `response`
array, not on the root level of the response.
- `facility` ID will be replaced by an object containing: `{ _id,
name, address, city, state, postcode, phone }`, all strings.
- `provider` ID will be replaced by an object containing: `{ _id,
name, lastname, firstname }`, all strings.
- `appointmentType` ID is never populated.
in: query
schema:
type: boolean
- name: sort
description: >-
Determines which property will be used to order the response.
Currently the only option available is `date`.
in: query
schema:
type: string
enum:
- date
- name: sortBy
description: |
Determines the direction in which the sorting will happen:
- ascending (earliest date to latest), or
- descending (latest date to earliest).
in: query
schema:
type: string
enum:
- asc
- desc
x-codeSamples:
- lang: cURL
source: >
curl
'https://api.lumahealth.io/api/v2/availabilities/scheduler?date=%3E2022-08-10T09%3A49%3A47-03%3A00&date=%3C2022-09-09T23%3A59%3A59-03%3A00&includeNullApptTypes=true&limit=1000&page=1&sort=date&sortBy=asc&status=available'
\
-H 'accept: application/json, text/plain, */*' \
-H 'Authorization: Bearer '
responses:
'200':
description: List of availabilities and other relevant data for scheduling
content:
application/json:
schema:
type: object
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/AvailabilitySchedulerResponse'
facilities:
description: >-
All the places/facilities availabie to use as filters when
listing scheduler availabilities.
type: array
minItems: 0
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
providers:
description: >-
All the providers/doctors availabie to use as filters when
listing scheduler availabilities.
type: array
minItems: 0
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointmentTypes:
description: >-
All the appointment types availabie to use as filters when
listing scheduler availabilities.
type: array
minItems: 0
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
/availabilities:
get:
summary: List availability
operationId: availabilityList
tags:
- availabilities
parameters:
- name: appointmentType
description: >
The ID of an `AppointmentType`. If given, only scheduler
availabilities for that type of appointment will be listed.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: includeNullApptTypes
description: >
Some appointments might not have a type at all, so this boolean flag
determines
if scheduler availabilities for such appointments will be listed or
not.
in: query
schema:
type: boolean
- name: date
description: >
The date/time to display scheduler availabilities, in ISO format,
including timezone information.
See the request sample in `curl` displayed at the side.
This queryParameter should be passed twice, to specify a date/time
range.
Example:
`?date=>2022-08-10T09:49:47-07:00&date=<2022-09-09T23:59:59-03:00`
Notice the greater-than (`>`) and less-than (`<`) operators.
in: query
schema:
type: string
format: date-time
- name: facility
description: >-
Filter the availabilities by the ID of a `Facility` where the
doctor/provider may be seen by a patient.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientForm
description: >
Only display the availability that was chosen by the patient who
answered this form.
If a form template with type `pre-scheduling` is set in the
scheduler settings, then
Luma's scheduler UI will require the patient to answer those form
template questions,
store the answers in a `patientForm` object, and then redirect them
to another page
listing the availabilities to be scheduled. Once the patient picks
an availability
and books an appointment, Luma will update the availability with the
`patientForm` ID.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientFormTemplate
description: >
Filter scheduler availabilities that were booked after patients
answered the questions of this template ID.
The field `patientForm` will only bring *one availability* that was
chosen by the patient who answered that form.
This field will bring *multiple availabilities*, because it does not
refer to the form answers of a single patient,
but rather, to the form template. Multiple patients may have seen
the questions of a template.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: provider
description: >-
Only display scheduler availabilities for the ID of the
provider/doctor given on this query parameter.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: status
description: >-
Filter availabilities by status. It must be `available`, as other
statuses were already booked or canceled.
in: query
schema:
type: string
enum:
- available
- name: sort
description: >-
Determines which property will be used to order the response.
Currently the only option available is `date`.
in: query
schema:
type: string
enum:
- date
- name: sortBy
description: |
Determines the direction in which the sorting will happen:
- ascending (earliest date to latest), or
- descending (latest date to earliest).
in: query
schema:
type: string
enum:
- asc
- desc
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of availabilities
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/AvailabilitySchedulerResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/availabilities/{availabilitiesId}:
get:
summary: Get availability by id
operationId: availabilityGet
tags:
- availabilities
parameters:
- name: availabilityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Availability
content:
application/json:
schema:
$ref: '#/components/schemas/AvailabilitySchedulerResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a availability
operationId: availabilityUpdate
tags:
- availabilities
parameters:
- name: availabilityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A availability (full or partial) to be published
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AvailabilityRequestUpdate'
responses:
'200':
description: Availability updated
content:
application/json:
schema:
$ref: '#/components/schemas/AvailabilitySchedulerResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/billingCharges:
get:
summary: List billing charges
operationId: billingChargesList
tags:
- billingCharges
parameters:
- name: status
in: query
schema:
type: string
enum:
- planned
- billable
- billed
- aborted
- name: type
in: query
schema:
type: string
enum:
- copay
- balance
- custom-appointment-charge
- convenience-fee
- name: source
in: query
schema:
type: string
enum:
- manual
- integrator
- insurance-verification
- fixedAmount
- name: paymentStatus
in: query
schema:
type: string
enum:
- pending
- not-paid
- paid
- partially-paid
- refunded
- name: patient
in: query
description: ID of a patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointment
in: query
description: ID of an appointment.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: >-
List of billing charges. When the caller is authenticated as a
patient, the `reason` field (staff-only) is omitted from each
charge.
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/BillingChargeResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Bulk upsert billing charges for an appointment
description: >-
Creates or updates the set of billing charges tied to a single
appointment in one call. Only one `copay` type charge is allowed per
appointment, and any existing `custom-appointment-charge` not present in
the request will be aborted.
operationId: billingChargesUpsert
tags:
- billingCharges
requestBody:
description: Charges to upsert for an appointment
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BillingChargesUpsertRequest'
responses:
'200':
description: The upserted billing charges
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BillingChargeResponse'
'400':
description: Missing appointmentId or charges
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/billingCharges/balance:
post:
summary: Create a balance charge for a patient
description: >-
Creates a standalone charge against a patient's balance, independent of
the appointment upsert flow. Does not require an appointment.
operationId: billingChargeCreateBalance
tags:
- billingCharges
requestBody:
description: The balance charge to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BillingChargeBalanceRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/BillingChargeResponse'
'400':
description: patient and a positive numeric amount are required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/billingCharges/{billingChargeId}:
get:
summary: Get billing charge by id
operationId: billingChargeGet
tags:
- billingCharges
parameters:
- name: billingChargeId
in: path
required: true
description: BillingCharge's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: BillingCharge
content:
application/json:
schema:
$ref: '#/components/schemas/BillingChargeResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/billingCopays:
get:
summary: List BillingCopays
operationId: billingCopaysList
tags:
- billingCopays
parameters:
- $ref: '#/components/parameters/idParam'
- $ref: '#/components/parameters/userParam'
- name: source
in: query
description: >-
Source of the billing copay. Accepts a comma-separated list (e.g.
system,ehr).
style: form
explode: false
schema:
type: array
items:
type: string
enum:
- system
- ehr
- manual
- name: type
in: query
description: Type of the billing copay
schema:
type: string
enum:
- balance
- behavioral
- copay
- custom
- dental
- medical
- name: visible
in: query
description: >-
Whether the billing copay is visible. Defaults to true when not
specified.
schema:
type: boolean
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/deletedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/deletedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of billing copays
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/BillingCopaysResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create BillingCopay
operationId: billingCopayCreate
tags:
- billingCopays
requestBody:
description: Create a billing copay
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BillingCopaysCreate'
responses:
'200':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/BillingCopaysResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/billingCopays/{billingCopayId}:
get:
summary: Get a BillingCopay by id
operationId: billingCopayById
tags:
- billingCopays
parameters:
- name: billingCopayId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: BillingCopay
content:
application/json:
schema:
$ref: '#/components/schemas/BillingCopaysResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a BillingCopay
operationId: billingCopayUpdate
tags:
- billingCopays
parameters:
- name: billingCopayId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
requestBody:
description: A billingCopay (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BillingCopaysUpdate'
responses:
'200':
description: BillingCopay
content:
application/json:
schema:
$ref: '#/components/schemas/BillingCopaysResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a BillingCopay
operationId: billingCopayDelete
tags:
- billingCopays
parameters:
- name: billingCopayId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted billingCopay
content:
application/json:
schema:
$ref: '#/components/schemas/BillingCopaysResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'409':
description: Copay is referenced by a patient form template and cannot be deleted
/billingCopays/{billingCopayId}/patientFormTemplates:
get:
summary: List the patient form templates that reference a BillingCopay
operationId: billingCopayPatientFormTemplates
tags:
- billingCopays
parameters:
- name: billingCopayId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: Patient form templates referencing the billing copay
content:
application/json:
schema:
type: array
minItems: 0
items:
type: object
properties:
_id:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
title:
type: string
template:
type: object
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/broadcastEvents:
get:
summary: List broadcast events
operationId: broadcastEventsList
tags:
- broadcastEvents
parameters:
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: A list of broadcast events
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
items:
$ref: '#/components/schemas/BroadcastEvent'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
post:
summary: Create broadcast event
operationId: broadcastEventsCreate
tags:
- broadcastEvents
requestBody:
description: The broadcast event to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastEvent'
responses:
'201':
description: The broadcast event was created successfully
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
/broadcastEvents/{broadcastEventId}:
get:
summary: Get broadcast event by ID
operationId: broadcastEventsGet
tags:
- broadcastEvents
parameters:
- name: broadcastEventId
in: path
required: true
schema:
type: string
description: ID of the broadcast event to retrieve
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: The broadcast event was retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastEvent'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
put:
summary: Update broadcast event
operationId: broadcastEventsUpdate
tags:
- broadcastEvents
parameters:
- name: broadcastEventId
in: path
required: true
schema:
type: string
description: ID of the broadcast event to update
requestBody:
description: The broadcast event to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastEvent'
responses:
'200':
description: The broadcast event was updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastEvent'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
/broadcastFlows:
get:
summary: List broadcast flows
operationId: broadcastFlowsList
tags:
- broadcastFlows
parameters:
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: A list of broadcast flows
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
items:
$ref: '#/components/schemas/BroadcastFlow'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
post:
summary: Create broadcast flow
operationId: broadcastFlowsCreate
tags:
- broadcastFlows
requestBody:
description: The broadcast flow to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastFlow'
responses:
'201':
description: The broadcast flow was created successfully
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
/broadcastFlows/{broadcastFlowId}:
get:
summary: Get broadcast flow by ID
operationId: broadcastFlowsGet
tags:
- broadcastFlows
parameters:
- name: broadcastFlowId
in: path
required: true
schema:
type: string
description: ID of the broadcast flow to retrieve
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: The broadcast flow was retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastFlow'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
put:
summary: Update broadcast flow
operationId: broadcastFlowsUpdate
tags:
- broadcastFlows
parameters:
- name: broadcastFlowId
in: path
required: true
schema:
type: string
description: ID of the broadcast flow to update
requestBody:
description: The broadcast flow to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastFlow'
responses:
'200':
description: The broadcast flow was updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastFlow'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
/broadcastFlows/{broadcastFlowId}/batches:
get:
summary: List batches for a broadcast flow
operationId: broadcastFlowsListBatches
tags:
- broadcastFlows
parameters:
- name: broadcastFlowId
in: path
required: true
schema:
type: string
description: ID of the broadcast flow to list batches for
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: The batches were retrieved successfully
content:
application/json:
schema:
type: object
properties:
size:
type: number
description: Number of batches returned
page:
type: number
description: Current page number
response:
type: array
items:
$ref: '#/components/schemas/BroadcastFlow'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
/broadcastFlows/{broadcastFlowId}/recipients:
get:
summary: List recipients for a broadcast flow
operationId: broadcastFlowsListRecipients
tags:
- broadcastFlows
parameters:
- name: broadcastFlowId
in: path
required: true
schema:
type: string
description: ID of the broadcast flow to list recipients for
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: The recipients were retrieved successfully
content:
application/json:
schema:
type: object
properties:
size:
type: number
description: Number of recipients returned
page:
type: number
description: Current page number
response:
type: array
items:
$ref: '#/components/schemas/BroadcastFlow'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
/broadcastFlows/{broadcastFlowId}/review/approve:
parameters:
- name: broadcastFlowId
in: path
required: true
schema:
type: string
description: The ID of the broadcast flow to approve
post:
summary: Approve broadcast flow
description: >
Approves a broadcast flow for sending. This endpoint creates a review
event and updates the broadcast flow status to pre-processing.
**Requirements:**
- Only admins or managers can approve broadcast flows
- Broadcast flow must be in `needs-approval` or `needs-edit` status
- Only the root broadcast flow (not child batches) can be reviewed
- Broadcast flow must not already be approved
**Actions:**
- Creates a BroadcastEvent of type 'review' with approved status
- Updates the broadcast flow status to `pre-processing`
- Records the reviewer and review timestamp
operationId: broadcastFlowsApprove
tags:
- broadcastFlows
requestBody:
description: Optional status reason for the approval
required: false
content:
application/json:
schema:
type: object
properties:
statusReason:
type: string
description: Optional reason or comment for the approval
maxLength: 400
additionalProperties: false
responses:
'200':
description: Broadcast flow approved successfully
content:
application/json:
schema:
type: object
required:
- broadcastFlow
- broadcastEvent
properties:
broadcastFlow:
$ref: '#/components/schemas/BroadcastFlow'
broadcastEvent:
$ref: '#/components/schemas/BroadcastEvent'
additionalProperties: false
'400':
description: Invalid request - missing or invalid broadcast flow ID
'401':
description: Not authenticated
'403':
description: |
Not authorized. Possible reasons:
- User is not an admin or manager
- Broadcast flow is not in a valid status for approval
- Broadcast flow is already approved
- Cannot review a child broadcast flow (must be root)
'404':
description: Broadcast flow not found
'500':
description: Internal server error
/broadcastFlows/{broadcastFlowId}/review/decline:
parameters:
- name: broadcastFlowId
in: path
required: true
schema:
type: string
description: The ID of the broadcast flow to decline
post:
summary: Decline broadcast flow
description: >
Declines a broadcast flow and requests edits. This endpoint creates a
review event and updates the broadcast flow status to needs-edit.
**Requirements:**
- Only admins or managers can decline broadcast flows
- A `statusReason` must be provided explaining the required changes
- The `statusReason` must be between 1 and 400 characters
- Only the root broadcast flow (not child batches) can be reviewed
**Actions:**
- Creates a BroadcastEvent of type 'review' with declined status
- Updates the broadcast flow status to `needs-edit`
- Records the reviewer, review timestamp, and required changes
operationId: broadcastFlowsDecline
tags:
- broadcastFlows
requestBody:
description: The reason for declining the broadcast flow
required: true
content:
application/json:
schema:
type: object
required:
- statusReason
properties:
statusReason:
type: string
description: Required explanation of what changes are needed
minLength: 1
maxLength: 400
example: >-
Please update the message content to be more clear and fix
the typo in the subject line.
additionalProperties: false
responses:
'200':
description: Broadcast flow declined successfully
content:
application/json:
schema:
type: object
required:
- broadcastFlow
- broadcastEvent
properties:
broadcastFlow:
$ref: '#/components/schemas/BroadcastFlow'
broadcastEvent:
$ref: '#/components/schemas/BroadcastEvent'
additionalProperties: false
'400':
description: |
Invalid request. Possible reasons:
- Missing or invalid broadcast flow ID
- Missing required changes text (statusReason)
- Required changes text exceeds 400 characters
'401':
description: Not authenticated
'403':
description: |
Not authorized. Possible reasons:
- User is not an admin or manager
- Cannot review a child broadcast flow (must be root)
'404':
description: Broadcast flow not found
'500':
description: Internal server error
/broadcastFlows/update-mapping/{broadcastFlowId}:
parameters:
- name: broadcastFlowId
in: path
required: true
schema:
type: string
description: The ID of the broadcast flow to update mapping for
put:
summary: Update broadcast flow mapping
description: >-
Updates the file mapping configuration for a broadcast flow. The
broadcast flow must be in DRAFT or PENDING_MAPPING status.
operationId: broadcastFlowsUpdateMapping
tags:
- broadcastFlows
requestBody:
description: The mapping configuration to update
required: true
content:
application/json:
schema:
type: object
required:
- mapping
properties:
mapping:
type: object
description: The file mapping configuration object
additionalProperties: true
additionalProperties: false
responses:
'200':
description: Broadcast flow mapping updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastFlow'
'400':
description: >-
Invalid request - broadcast flow not in valid status for mapping
update
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Broadcast flow or mapping not found
'500':
description: Internal server error
/broadcastTemplates:
get:
summary: List broadcast templates
description: Retrieves a list of broadcast templates
operationId: listBroadcastTemplates
tags:
- Broadcast Templates
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BroadcastTemplate'
post:
summary: Create a broadcast template
description: Creates a new broadcast template
operationId: createBroadcastTemplate
tags:
- Broadcast Templates
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastTemplate'
responses:
'201':
description: Broadcast template created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastTemplate'
/broadcastTemplates/{broadcastTemplateId}:
get:
summary: Get broadcast template
description: Retrieves a specific broadcast template by ID
operationId: getBroadcastTemplate
tags:
- Broadcast Templates
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastTemplate'
'404':
description: Broadcast template not found
put:
summary: Update broadcast template
description: Updates an existing broadcast template
operationId: updateBroadcastTemplate
tags:
- Broadcast Templates
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastTemplate'
responses:
'200':
description: Broadcast template updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastTemplate'
'404':
description: Broadcast template not found
delete:
summary: Delete broadcast template
description: Deletes a broadcast template
operationId: deleteBroadcastTemplate
tags:
- Broadcast Templates
responses:
'204':
description: Broadcast template deleted successfully
'404':
description: Broadcast template not found
/broadcast-templates/{id}/duplicate: null
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Broadcast template ID to duplicate
post:
summary: Duplicate broadcast template
description: Creates a copy of an existing broadcast template
operationId: duplicateBroadcastTemplate
tags:
- Broadcast Templates
responses:
'201':
description: Broadcast template duplicated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BroadcastTemplate'
'400':
description: Invalid request - missing broadcast template ID
'404':
description: Original broadcast template not found
/campaigns:
get:
summary: List campaigns
operationId: campaignsList
tags:
- campaigns
parameters:
- name: ref
in: query
description: The type of resource linked to this campaign
schema:
type: string
enum:
- patient
- facility
- user
- name: refId
in: query
description: The ID of the resource linked to this campaign
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: name
in: query
description: The name of this campaign
schema:
type: string
- name: channels
in: query
description: >-
The opt-in preferences and order of channels to contact the resource
linked to this campaign
schema:
type: array
items:
type: string
enum:
- sms
- voice
- email
- name: active
in: query
description: >-
Indicates whether this campaign should be used when sending messages
for this resource
schema:
type: boolean
- name: lastUpdatedBy
in: query
description: Indicates the last resource that updated this campaign
schema:
type: string
enum:
- patient
- integrator
- name: useRootAsFallback
in: query
description: >-
If the patient has missing Campaigns for certain types, it will
fallback to returning the root campaigns. Requires one and single
patient _id
schema:
type: boolean
responses:
'200':
description: List of campaigns
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/Campaign'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create campaign
operationId: campaignCreate
tags:
- campaigns
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/campaigns/{campaignId}:
get:
summary: Get campaign by id
operationId: campaignGet
tags:
- campaigns
parameters:
- name: campaignId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a campaign
operationId: campaignUpdate
tags:
- campaigns
parameters:
- name: campaignId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A campaign (full or partial) to be published
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
responses:
'200':
description: Campaign updated
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklists:
get:
summary: List checklists
operationId: checklistsList
tags:
- checklists
parameters:
- name: appointment
in: query
description: ID of an appointment.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patient
in: query
description: ID of a patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: template
in: query
description: ID of a ChecklistTemplate.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: status
in: query
schema:
type: string
enum:
- empty
- pending
- sent
- in-progress
- completed
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of checklists
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ChecklistResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create a checklist
operationId: checklistCreate
tags:
- checklists
requestBody:
description: Create a checklist
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklists/{checklistId}:
get:
summary: Get checklist by id
operationId: checklistGet
tags:
- checklists
parameters:
- name: checklistId
in: path
required: true
description: Checklist's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Checklist
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a checklist
operationId: checklistUpdate
tags:
- checklists
parameters:
- name: checklistId
in: path
required: true
description: Checklist's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A checklist (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistRequestUpdate'
responses:
'200':
description: Checklist
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a checklist
operationId: checklistDelete
tags:
- checklists
parameters:
- name: checklistId
in: path
required: true
description: Checklist's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted checklist
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklists/replace:
post:
summary: Build a checklist from a template, replacing an appointment's checklist
description: >-
Builds a new checklist from a ChecklistTemplate for a given appointment
and patient, evaluating the template's filters against that appointment
and patient, and replaces any checklist currently attached to the
appointment.
operationId: checklistReplace
tags:
- checklists
requestBody:
description: The template, appointment, and patient to build the checklist from
required: true
content:
application/json:
schema:
type: object
required:
- checklistTemplate
- appointment
- patient
properties:
checklistTemplate:
type: string
description: ID of the ChecklistTemplate to build from.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of the appointment to attach the new checklist to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
patient:
type: string
description: ID of the patient the checklist is for.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
sendMessage:
type: boolean
description: >-
Whether to send the patient a message about the new
checklist.
default: true
responses:
'200':
description: The newly built checklist
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklists/send:
post:
summary: Send a patient's checklist message
description: (Re)sends the patient-facing message for an appointment's checklist.
operationId: checklistSend
tags:
- checklists
requestBody:
description: The patient and appointment whose checklist message should be sent
required: true
content:
application/json:
schema:
type: object
required:
- patient
- appointment
properties:
patient:
type: string
description: ID of the patient to send the checklist message to.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: >-
ID of the appointment whose checklist message should be
sent.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Checklist message sent
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklistTemplates:
get:
summary: List checklist templates
operationId: checklistTemplatesList
tags:
- checklistTemplates
parameters:
- name: enabled
in: query
schema:
type: boolean
- name: type
in: query
schema:
type: string
enum:
- appointment
- name: includeFiltersCount
in: query
description: >-
When true, includes a computed `filtersCount` breakdown on each
returned template.
schema:
type: boolean
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of checklist templates
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ChecklistTemplateResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create a checklist template
operationId: checklistTemplateCreate
tags:
- checklistTemplates
requestBody:
description: Create a checklist template
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistTemplateRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklistTemplates/{checklistTemplateId}:
get:
summary: Get checklist template by id
operationId: checklistTemplateGet
tags:
- checklistTemplates
parameters:
- name: checklistTemplateId
in: path
required: true
description: ChecklistTemplate's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: ChecklistTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a checklist template
description: >-
Updates a checklist template. If `enabled` is toggled, or `recreate` is
passed, a background job is dispatched to resync already-created
checklists derived from this template. `recreate` is accepted in the
request but is not itself persisted on the template.
operationId: checklistTemplateUpdate
tags:
- checklistTemplates
parameters:
- name: checklistTemplateId
in: path
required: true
description: ChecklistTemplate's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A checklist template (full or partial) to be updated
required: true
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ChecklistTemplateRequestUpdate'
- type: object
properties:
recreate:
type: boolean
description: >-
When true, forces existing checklists built from this
template to be recreated.
responses:
'200':
description: ChecklistTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a checklist template
operationId: checklistTemplateDelete
tags:
- checklistTemplates
parameters:
- name: checklistTemplateId
in: path
required: true
description: ChecklistTemplate's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted checklist template
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklistTemplates/{checklistTemplateId}/duplicate:
post:
summary: Duplicate a checklist template
description: >-
Creates a copy of the given checklist template, named "{original} -
(Copy)". The duplicate is always created with `enabled: false`.
operationId: checklistTemplateDuplicate
tags:
- checklistTemplates
parameters:
- name: checklistTemplateId
in: path
required: true
description: ChecklistTemplate's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'201':
description: The duplicated checklist template
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/checklistTemplates/system:
get:
summary: Get the default system checklist template
operationId: checklistTemplateGetSystem
tags:
- checklistTemplates
responses:
'200':
description: The default system checklist template
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: No default system template exists
post:
summary: Create the default system checklist templates
description: >-
Idempotently creates the account's default system checklist templates if
they do not already exist.
operationId: checklistTemplateCreateSystem
tags:
- checklistTemplates
responses:
'200':
description: The default system checklist template(s)
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ChecklistTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/chatActivities:
get:
summary: List chatActivities
operationId: chatActivitiesList
tags:
- chatActivities
parameters:
- name: status
in: query
schema:
type: string
enum:
- closed
- assigned
- unassigned
- name: assignee
description: The ID of a single user
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: groupAssignee
description: The ID of group
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: statusReason
description: >-
The id of a ChatActivityStatusReason to detail why a chat was closed
(status=closed)
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: description
description: >-
The partial text of the complementary description of the
statusReason why a chat was closed
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patient
description: The id of the patient
in: query
schema:
type: string
pattern: '[0-9a-f]'
required: true
minLength: 24
maxLength: 24
- name: lastMessage
description: The ID of the most recent message of this conversation.
in: query
schema:
type: string
pattern: '[0-9a-f]'
required: true
minLength: 24
maxLength: 24
- name: previousAssignee
description: The ID of the previous user to whom this chat was assigned.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/patientGlobalSearch'
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of chatActivities
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ChatActivityResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/chatActivities/unread:
get:
summary: Get unread chats count per user
operationId: chatActivityUnread
tags:
- chatActivities
parameters:
- name: assignee
in: query
required: false
description: If not provided, the authenticated user will be considered.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: limit
in: query
required: false
description: Default is 100.
schema:
type: number
responses:
'200':
description: ChatActivityUnreadCount
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityUnreadResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/chatActivities/{chatActivityId}:
get:
summary: Get chatActivity by id
operationId: chatActivityGet
tags:
- chatActivities
parameters:
- name: chatActivityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: ChatActivity
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Assign or Close
operationId: chatActivityUpdate
tags:
- chatActivities
parameters:
- name: chatActivityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A chatActivity (full or partial) to be published
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityPut'
examples:
assign to user:
value:
status: assigned
assignee: 6278231511da71004284870c
groupAssignee: null
assign to group:
value:
status: assigned
groupAssignee: 6278231511da71004284870d
assignee: null
close chat:
value:
status: closed
statusReason: 6278231511da71004284870e
description: closed as requested by patient
responses:
'200':
description: ChatActivity updated
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/chatActivitiesReasons:
get:
summary: List chatActivitiesReasons
operationId: chatActivitiesReasonsList
tags:
- chatActivitiesReasons
parameters:
- name: allowDescription
in: query
schema:
type: boolean
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of chatActivitiesReasons
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ChatActivityReasonResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create a chatActivityReason
operationId: chatActivityReasonCreate
tags:
- chatActivitiesReasons
requestBody:
description: ChatActivityReason to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityReasonRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityReasonResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/chatActivitiesReasons/{chatActivityReasonId}:
get:
summary: Get chatActivityReason by id
operationId: chatActivityReasonGet
tags:
- chatActivitiesReasons
parameters:
- name: chatActivityReasonId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: ChatActivityReason
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityReasonResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a chatActivityReason
operationId: chatActivityReasonUpdate
tags:
- chatActivitiesReasons
parameters:
- name: chatActivityReasonId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A chatActivityReason (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityReasonRequestUpdate'
responses:
'200':
description: ChatActivityReason updated
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityReasonResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a chatActivityReason
operationId: chatActivityReasonDelete
tags:
- chatActivitiesReasons
parameters:
- name: chatActivityReasonId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted chatActivityReason
content:
application/json:
schema:
$ref: '#/components/schemas/ChatActivityReasonResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/chatAudits:
get:
summary: Show a list of chatAudits
operationId: listChatAudits
tags:
- chatAudits
parameters:
- name: patient
in: query
description: The patient ID
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: reader
in: query
description: The reader ID
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: lastMessage
in: query
description: The last message ID
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: readAt
in: query
description: When the message was read
schema:
type: date-time
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of chatAudits
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ChatAuditResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a chatAudit
operationId: chatAuditCreate
tags:
- chatAudits
requestBody:
description: Create a chatAudit
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/ChatAuditRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/ChatAuditResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/chatAudits/{chatAuditId}:
get:
summary: Get chat audit by id
operationId: chatAuditGet
tags:
- chatAudits
parameters:
- name: chatAuditId
in: path
required: true
description: ChatAudit's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: ChatAudit
content:
application/json:
schema:
$ref: '#/components/schemas/ChatAuditResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a chatAudit
operationId: chatAuditUpdate
tags:
- chatAudits
parameters:
- name: chatAuditId
in: path
required: true
description: ChatAudit's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A chatAudit (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChatAuditRequestUpdate'
responses:
'200':
description: ChatAudit
content:
application/json:
schema:
$ref: '#/components/schemas/ChatAuditResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a chatAudit
operationId: chatAuditDelete
tags:
- chatAudits
parameters:
- name: chatAuditId
in: path
required: true
description: ChatAudit's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted chatAudit
content:
application/json:
schema:
$ref: '#/components/schemas/ChatAuditResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/customWebStyles:
get:
summary: List customWebStyles
operationId: customWebStylesList
tags:
- customWebStyles
parameters:
- name: description
in: query
schema:
type: string
- name: url
in: query
schema:
type: string
- name: scope
in: query
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of customWebStyles
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/CustomWebStyleResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create a customWebStyle
operationId: customWebStyleCreate
tags:
- customWebStyles
requestBody:
description: CustomWebStyle to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomWebStylePost'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/CustomWebStyleResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/customWebStyles/{customWebStyleId}:
get:
summary: Get customWebStyle by id
operationId: customWebStyleGet
tags:
- customWebStyles
parameters:
- name: customWebStyleId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: CustomWebStyle
content:
application/json:
schema:
$ref: '#/components/schemas/CustomWebStyleResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Publish a customWebStyle
operationId: customWebStyleUpdate
tags:
- customWebStyles
parameters:
- name: customWebStyleId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A customWebStyle (full or partial) to be published
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomWebStylePut'
responses:
'200':
description: CustomWebStyle updated
content:
application/json:
schema:
$ref: '#/components/schemas/CustomWebStyleResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a customWebStyle
operationId: customWebStyleDelete
tags:
- customWebStyles
parameters:
- name: customWebStyleId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted customWebStyle
content:
application/json:
schema:
$ref: '#/components/schemas/CustomWebStyleResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagements:
get:
summary: List engagements
operationId: engagementsList
tags:
- engagements
parameters:
- name: recipient
in: query
description: ID of the recipient user.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: recipientType
in: query
schema:
type: string
enum:
- doctor
- staff
- patient
- system
- name: status
in: query
schema:
type: string
enum:
- in-progress
- failed
- success
- escalation_required
- idle
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of engagements
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/EngagementResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create an engagement
operationId: engagementCreate
tags:
- engagements
requestBody:
description: Create an engagement
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagements/{engagementId}:
get:
summary: Get engagement by id
operationId: engagementGet
tags:
- engagements
parameters:
- name: engagementId
in: path
required: true
description: Engagement's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Engagement
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an engagement
operationId: engagementUpdate
tags:
- engagements
parameters:
- name: engagementId
in: path
required: true
description: Engagement's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An engagement (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementRequestUpdate'
responses:
'200':
description: Engagement
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an engagement
operationId: engagementDelete
tags:
- engagements
parameters:
- name: engagementId
in: path
required: true
description: Engagement's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted engagement
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagements/findOrCreate:
post:
summary: Find or create an engagement
description: >-
Finds an existing engagement matching the given criteria, or creates a
new one if none exists. If `patient` is set and `recipient` is not,
`recipient` and `recipientType` are automatically derived from
`patient`.
operationId: engagementFindOrCreate
tags:
- engagements
requestBody:
description: The criteria to find or create an engagement with
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- patient
- direction
properties:
patient:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
direction:
type: string
enum:
- inbound
- outbound
agents:
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
goals:
type: array
items:
type: object
additionalProperties: false
required:
- type
properties:
type:
type: string
channel:
type: string
enum:
- sms
- email
- voice
- chat
- whatsapp
outboundNumber:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
expiresAt:
type: string
format: date-time
context:
type: object
responses:
'200':
description: The found or newly created engagement
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagements/{engagement}/operations/{operation}:
post:
summary: Perform an operation on an engagement
description: >-
Generic operation dispatcher for an in-flight engagement, used to
transfer or end a call, request a callback, send an SMS, hand off to the
hub, transfer channels, or push a new EngagementEvent onto the
engagement.
operationId: engagementPerformOperation
tags:
- engagements
parameters:
- name: engagement
in: path
required: true
description: Engagement's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: operation
in: path
required: true
description: The operation to perform.
schema:
type: string
enum:
- transferCall
- end
- callMe
- sendSms
- sendToHub
- transferChannel
- pushEvent
requestBody:
required: false
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
operationData:
type: object
description: >-
Data for the operation being performed. For `pushEvent`,
this is the EngagementEvent payload to append.
responses:
'200':
description: The updated engagement
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagements/{engagementId}/findLatest/{eventName}:
get:
summary: Find the most recent engagement event by name
description: >-
Finds the most recent EngagementEvent for this engagement whose
`payload.name` matches `eventName`.
operationId: engagementFindLatestEvent
tags:
- engagements
parameters:
- name: engagementId
in: path
required: true
description: Engagement's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: eventName
in: path
required: true
description: The event name to search for, for example `VoiceCallEnded`.
schema:
type: string
responses:
'200':
description: The most recent matching engagement event
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementEventResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: No matching event found
/engagementEvents:
get:
summary: List engagement events
description: >-
Engagement events are append-only and cannot be created directly through
this endpoint; they are appended via the `pushEvent` operation on an
engagement.
operationId: engagementEventsList
tags:
- engagementEvents
parameters:
- name: engagement
in: query
description: ID of the parent engagement.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of engagement events
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/EngagementEventResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagementEvents/{engagementEventId}:
get:
summary: Get engagement event by id
operationId: engagementEventGet
tags:
- engagementEvents
parameters:
- name: engagementEventId
in: path
required: true
description: EngagementEvent's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: EngagementEvent
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementEventResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagementSettings:
get:
summary: List engagement settings
operationId: engagementSettingsList
tags:
- engagementSettings
parameters:
- name: language
in: query
schema:
type: string
enum:
- en-US
- es-US
- es-ES
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of engagement settings
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/EngagementSettingResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create an engagement setting
operationId: engagementSettingCreate
tags:
- engagementSettings
requestBody:
description: Create an engagement setting
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementSettingRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementSettingResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/engagementSettings/{engagementSettingId}:
get:
summary: Get engagement setting by id
operationId: engagementSettingGet
tags:
- engagementSettings
parameters:
- name: engagementSettingId
in: path
required: true
description: EngagementSetting's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: EngagementSetting
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementSettingResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an engagement setting
operationId: engagementSettingUpdate
tags:
- engagementSettings
parameters:
- name: engagementSettingId
in: path
required: true
description: EngagementSetting's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An engagement setting (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementSettingRequestUpdate'
responses:
'200':
description: EngagementSetting
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementSettingResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an engagement setting
operationId: engagementSettingDelete
tags:
- engagementSettings
parameters:
- name: engagementSettingId
in: path
required: true
description: EngagementSetting's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted engagement setting
content:
application/json:
schema:
$ref: '#/components/schemas/EngagementSettingResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/estimates:
get:
summary: Show a list of estimate
operationId: listEstimates
tags:
- estimates
parameters:
- name: date
in: query
description: The date of service.
schema:
type: date-time
- name: totalPatientAmountInCents
in: query
description: The total amount for the patient.
schema:
type: number
- name: readAt
in: query
description: The time that the estimate was read.
schema:
type: date-time
- name: payCode
in: query
description: The paycode from estimate.
schema:
type: object
properties:
source:
type: string
enum:
- change-healthcare
value:
type: string
- name: patient
in: query
description: ID of a patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointment
in: query
description: ID of an appointment.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: fileUpload
in: query
description: ID of a file upload.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: message
in: query
description: ID of a message.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: visible
in: query
description: Flag that indicates if estimate is visible or not to the patient.
schema:
type: string
- name: source
in: query
schema:
type: string
enum:
- change-healthcare
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of estimates
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/EstimateResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a estimate
operationId: estimateCreate
tags:
- estimates
requestBody:
description: Create a estimate
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/EstimateRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/EstimateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/estimates/{estimateId}:
get:
summary: Get estimate by id
operationId: estimateGet
tags:
- estimates
parameters:
- name: estimateId
in: path
required: true
description: Estimate's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Estimate
content:
application/json:
schema:
$ref: '#/components/schemas/EstimateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a estimate
operationId: estimateUpdate
tags:
- estimates
parameters:
- name: estimateId
in: path
required: true
description: Estimate's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A estimate (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EstimateRequestUpdate'
responses:
'200':
description: Estimate
content:
application/json:
schema:
$ref: '#/components/schemas/EstimateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a estimate
operationId: estimateDelete
tags:
- estimates
parameters:
- name: estimateId
in: path
required: true
description: Estimate's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted estimate
content:
application/json:
schema:
$ref: '#/components/schemas/EstimateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/facilities:
get:
summary: List facilities
operationId: facilitiesList
tags:
- facilities
parameters:
- name: name
in: query
schema:
type: string
- name: country
in: query
schema:
type: string
enum:
- US
- name: visible
in: query
schema:
type: boolean
- name: address
in: query
schema:
type: string
- name: city
in: query
schema:
type: string
- name: state
in: query
schema:
type: string
- name: postcode
in: query
schema:
type: string
- name: phone
in: query
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of facilities
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/FacilityResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create a facility
operationId: facilityCreate
tags:
- facilities
requestBody:
description: Facility to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FacilityRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/FacilityResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/facilities/{facilityId}:
get:
summary: Get facility by id
operationId: facilityGet
tags:
- facilities
parameters:
- name: facilityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Facility
content:
application/json:
schema:
$ref: '#/components/schemas/FacilityResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a facility
operationId: facilityUpdate
tags:
- facilities
parameters:
- name: facilityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A facility (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FacilityRequestUpdate'
responses:
'200':
description: Facility updated
content:
application/json:
schema:
$ref: '#/components/schemas/FacilityResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a facility
operationId: facilityDelete
tags:
- facilities
parameters:
- name: facilityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted facility
content:
application/json:
schema:
$ref: '#/components/schemas/FacilityResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/fileUploads:
get:
summary: List file uploads
operationId: fileUploadsList
tags:
- fileUploads
parameters:
- name: bucket
in: query
description: AWS Bucket S3 name.
schema:
type: string
- name: aswId
in: query
description: The ID of the AWS of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: name
in: query
description: The name of uploaded file.
schema:
type: string
- name: extension
in: query
description: The extension of uploaded file.
schema:
type: string
- name: contentType
in: query
description: The content type/MIME of uploaded file.
schema:
type: string
- name: type
in: query
description: The type of uploaded file.
schema:
type: string
enum:
- patient-insurance-image
- patient-message
- patient-referral-fax
- patient-referral
- patient-form
- provider-headshot
- avatar
- custom-web-style-logo
- generic
- integration-archive
- patient-pdf
- patient-ccda
- bulk-patients-insurance
- bulk-patients-form
- do-not-contact-patients-list
- archived-contacts-list
- bulk-users-update
- bulk-users-create
- upload
- lumabot-html-preview
- name: patient
in: query
description: The ID of the patient of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: insurance
in: query
description: The ID of the insurance of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: referral
in: query
description: The ID of the referral of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: outboundReferral
in: query
description: The ID of the outboundReferral of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientForm
in: query
description: The ID of the patientForm of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: message
in: query
description: The ID of the message of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: broadcast
in: query
description: The ID of the broadcast of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: website
in: query
description: The ID of website.
schema: null
- name: status
in: query
description: >-
Status of the file upload. Processing = File-upload was created, but
still being processed, Completed = File-upload was completed
successfully, Failed = File-upload has failed.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
enum:
- processing
- completed
- failed
- name: estimate
in: query
description: The ID of the estimate of uploaded file.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/languageParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of fileUploads
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/FileUploadResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create fileUpload
description: >
There are two ways to upload a file, base64 and multipart.
For base64, you will need to describe the fields name, extension,
patient, content-type, type and the image converted to base64. You can
see a request example on the right side.
For multipart: you will have to create an HTML form, with an input field
type "file" named "file", as well as the other required fields, and
submit the form
operationId: fileUploadCreate
tags:
- fileUploads
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FileUploadRequest'
x-codeSamples:
- lang: cURL
description: test
source: >
curl --location --request POST
'http://localhost:8002/api/v2/fileUploads' \
--header 'Authorization: Bearer
eyJ0eXAiOiJKV1QiLCJhBgciOiJIUzI1NiJ9.eyJpc3MiOiI2MmJhZjA3ZmVhMTdkODkxZTUwYzMwM2YiLCJleHAiOjE2NTY1OTEzMTk5NTgsInR5cGUiOiJzdGFmZiJ9.sRVWzaTAaf4kvTAmUWVjlUA7AmAfV4iCXaceNeTyJOA'
\
--form 'file=@"/home/user/Pictures/kgroka6i0vw41.jpg"' \
--form 'extension="jpg"' \
--form 'name="kgroka6i0vw41.jpg"' \
--form 'contentType="image/png"' \
--form 'type="generic"'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/FileUploadResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/fileUploads/{fileUploadId}:
get:
summary: Get file upload by id
operationId: fileUploadGet
tags:
- fileUploads
parameters:
- name: fileUploadId
in: path
required: true
description: FileUploads unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: FileUpload
content:
application/json:
schema:
$ref: '#/components/schemas/FileUploadResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a fileUpload
operationId: fileUploadUpdate
tags:
- fileUploads
parameters:
- name: fileUploadId
in: path
required: true
description: File Upload unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A fileUpload (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FileUploadRequest'
responses:
'200':
description: FileUpload
content:
application/json:
schema:
$ref: '#/components/schemas/FileUploadResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a fileUpload
operationId: fileUploadDelete
tags:
- fileUploads
parameters:
- name: fileUploadId
in: path
required: true
description: FileUploads' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted fileUpload
content:
application/json:
schema:
$ref: '#/components/schemas/FileUploadResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurances/eligibility/verification/{insuranceId}:
post:
summary: Check eligibility for a single insurance
description: >-
Runs a real-time eligibility verification check for one insurance
against the account's configured eligibility integrator.
operationId: insuranceCheckEligibility
tags:
- insurances
parameters:
- name: insuranceId
in: path
required: true
description: Insurance's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: Additional data to pass to the eligibility check
required: false
content:
application/json:
schema:
type: object
responses:
'200':
description: The eligibility check result
content:
application/json:
schema:
type: object
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurances/eligibility/verification:
post:
summary: Check eligibility for multiple insurances
description: >-
Runs eligibility verification checks for multiple insurances in a single
call.
operationId: insuranceCheckEligibilityBulk
tags:
- insurances
requestBody:
description: The insurances to check
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The eligibility check results
content:
application/json:
schema:
type: object
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurances/writeback/{insuranceId}:
post:
summary: Mark a single insurance as staff-reviewed and queue it for writeback
description: >-
Marks the insurance as staff-approved, sets it up to be written back to
the EHR integrator, and stamps who reviewed it and when.
operationId: insuranceWriteback
tags:
- insurances
parameters:
- name: insuranceId
in: path
required: true
description: Insurance's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: Who reviewed this insurance. Defaults to the authenticated user.
required: false
content:
application/json:
schema:
type: object
properties:
reviewedBy:
type: string
description: ID of the user who reviewed this insurance.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: The updated insurance
content:
application/json:
schema:
$ref: '#/components/schemas/InsuranceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurances/writeback:
post:
summary: Review and queue multiple insurances for writeback
description: >-
Bulk sets the staff review status across multiple insurances. The new
review status is only applied to insurances whose current review status
is `pending` or unset.
operationId: insuranceWritebackBulk
tags:
- insurances
requestBody:
description: The insurances to review
required: true
content:
application/json:
schema:
type: object
required:
- insuranceIds
properties:
insuranceIds:
type: array
description: IDs of the insurances to review.
minItems: 1
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
staffReview:
type: boolean
description: >-
When true, the new review status is `pending`; when false,
`ignored`.
responses:
'200':
description: The updated insurances
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/InsuranceResponse'
'400':
description: Invalid insuranceIds
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurances/archive:
put:
summary: Archive a list of insurances
description: >-
Bulk-archives the given insurances, marking each as inactive and no
longer primary.
operationId: insuranceArchiveBulk
tags:
- insurances
requestBody:
description: The insurances to archive
required: true
content:
application/json:
schema:
type: object
required:
- insurances
properties:
insurances:
type: array
description: IDs of the insurances to archive.
minItems: 1
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
appointment:
type: string
description: ID of an appointment to stamp onto each archived insurance.
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: The updated insurances
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/InsuranceResponse'
'400':
description: Invalid insurances
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurancePayors:
get:
summary: Search insurance payors
description: >-
Searches the account's insurance payor directory. Patients (and callers
with the `widget` role) receive a filtered, patient-friendly view that
excludes payors marked `isHiddenFromPatients` and prefers
`friendlyName`.
operationId: insurancePayorsList
tags:
- insurancePayors
parameters:
- name: query
in: query
description: >-
Free-text search against name and external identifiers. If this is a
24-character hex string, it is treated as an `_id` lookup instead.
schema:
type: string
- name: hasTransactionId
in: query
description: >-
Filter to payors that do (or don't) have at least one external
identifier value set.
schema:
type: boolean
- name: isHiddenFromPatients
in: query
schema:
type: boolean
- name: status
in: query
description: Filter by the status of the payor's external identifiers.
schema:
type: string
enum:
- inactive
- testing
- live
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of insurance payors
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/InsurancePayorResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create an insurance payor
operationId: insurancePayorCreate
tags:
- insurancePayors
requestBody:
description: Create an insurance payor
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InsurancePayorRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/InsurancePayorResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurancePayors/{insurancePayorId}:
get:
summary: Get insurance payor by id
operationId: insurancePayorGet
tags:
- insurancePayors
parameters:
- name: insurancePayorId
in: path
required: true
description: InsurancePayor's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: InsurancePayor
content:
application/json:
schema:
$ref: '#/components/schemas/InsurancePayorResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an insurance payor
description: >-
Updates a payor. If `externalIdentifiers` is included, it is merged into
the existing array by matching `source` rather than replacing the whole
array.
operationId: insurancePayorUpdate
tags:
- insurancePayors
parameters:
- name: insurancePayorId
in: path
required: true
description: InsurancePayor's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An insurance payor (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InsurancePayorRequestUpdate'
responses:
'200':
description: InsurancePayor
content:
application/json:
schema:
$ref: '#/components/schemas/InsurancePayorResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an insurance payor
operationId: insurancePayorDelete
tags:
- insurancePayors
parameters:
- name: insurancePayorId
in: path
required: true
description: InsurancePayor's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted insurance payor
content:
application/json:
schema:
$ref: '#/components/schemas/InsurancePayorResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/insurancePayors/bulk:
post:
summary: Bulk create insurance payors
operationId: insurancePayorsBulkCreate
tags:
- insurancePayors
requestBody:
description: The insurance payors to create
required: true
content:
application/json:
schema:
type: array
minItems: 1
items:
type: object
additionalProperties: false
required:
- name
- externalIdentifiers
- source
properties:
name:
type: string
minLength: 1
externalIdentifiers:
type: array
items:
type: object
required:
- source
- value
properties:
source:
type: string
value:
type: string
status:
type: string
source:
type: string
isHiddenFromPatients:
type: boolean
responses:
'201':
description: The created insurance payors
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/InsurancePayorResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Bulk update insurance payors
description: >-
Updates a set of payors matched by id, optionally patching a single
`externalIdentifiers` entry (matched by `source`) plus top-level
`source`/`isHiddenFromPatients`.
operationId: insurancePayorsBulkUpdate
tags:
- insurancePayors
requestBody:
description: The insurance payors to update
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- ids
properties:
ids:
type: array
description: IDs of the payors to update.
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
externalIdentifiers:
type: array
items:
type: object
properties:
source:
type: string
value:
type: string
status:
type: string
pin:
type: string
source:
type: string
isHiddenFromPatients:
type: boolean
responses:
'200':
description: Result of the bulk update
content:
application/json:
schema:
type: object
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/groups:
get:
summary: List groups
operationId: groupsList
tags:
- groups
parameters:
- name: name
in: query
description: >-
Descriptive label of a group. This is the only way to link a group
in Luma with another in an external service, as the group doesn't
have an "externalId" field.
schema:
type: string
- name: facilities
in: query
description: The IDs of the facilities associated with this group.
schema:
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: type
in: query
description: Indicates if a group was created by users or by the system.
schema:
type: string
enum:
- user
- system
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of groups
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/GroupResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create group
operationId: groupCreate
tags:
- groups
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GroupRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/GroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/groups/{groupId}:
get:
summary: Get group by id
operationId: groupGet
tags:
- groups
parameters:
- name: groupId
in: path
required: true
description: Groups' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Group
content:
application/json:
schema:
$ref: '#/components/schemas/GroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a group
operationId: groupUpdate
tags:
- groups
parameters:
- name: groupId
in: path
required: true
description: Groups' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A group (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GroupRequestUpdate'
responses:
'200':
description: Group
content:
application/json:
schema:
$ref: '#/components/schemas/GroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a group
operationId: groupDelete
tags:
- groups
parameters:
- name: groupId
in: path
required: true
description: Groups' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted group
content:
application/json:
schema:
$ref: '#/components/schemas/GroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/knowledgeBaseQuestionAnswers:
get:
summary: List knowledge base question answers
operationId: knowledgeBaseQuestionAnswersList
tags:
- knowledgeBaseQuestionAnswers
parameters:
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/selectParam'
- name: knowledgeBase
in: query
required: false
schema:
type: string
description: Filter by knowledge base ID
responses:
'200':
description: A list of knowledge base question answers
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
items:
$ref: '#/components/schemas/KnowledgeBaseQuestionAnswer'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Not authorized
'500':
description: Internal server error
post:
summary: Create a knowledge base question answer
operationId: knowledgeBaseQuestionAnswersCreate
tags:
- knowledgeBaseQuestionAnswers
requestBody:
description: The knowledge base question answer to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/KnowledgeBaseQuestionAnswer'
responses:
'200':
description: The knowledge base question answer was created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/KnowledgeBaseQuestionAnswer'
'401':
description: Not authenticated
'403':
description: Not authorized
'500':
description: Internal server error
/knowledgeBaseQuestionAnswers/{knowledgeBaseQuestionAnswerId}:
get:
summary: Get a knowledge base question answer by ID
operationId: knowledgeBaseQuestionAnswersGet
tags:
- knowledgeBaseQuestionAnswers
parameters:
- name: knowledgeBaseQuestionAnswerId
in: path
required: true
schema:
type: string
description: ID of the knowledge base question answer to retrieve
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: The knowledge base question answer was retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/KnowledgeBaseQuestionAnswer'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
put:
summary: Update a knowledge base question answer
operationId: knowledgeBaseQuestionAnswersUpdate
tags:
- knowledgeBaseQuestionAnswers
parameters:
- name: knowledgeBaseQuestionAnswerId
in: path
required: true
schema:
type: string
description: ID of the knowledge base question answer to update
requestBody:
description: The knowledge base question answer fields to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/KnowledgeBaseQuestionAnswer'
responses:
'200':
description: The knowledge base question answer was updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/KnowledgeBaseQuestionAnswer'
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
delete:
summary: Delete a knowledge base question answer
operationId: knowledgeBaseQuestionAnswersDelete
tags:
- knowledgeBaseQuestionAnswers
parameters:
- name: knowledgeBaseQuestionAnswerId
in: path
required: true
schema:
type: string
description: ID of the knowledge base question answer to delete
responses:
'200':
description: The knowledge base question answer was deleted successfully
'401':
description: Not authenticated
'403':
description: Not authorized
'404':
description: Not found
'500':
description: Internal server error
/lumabotFlows:
get:
summary: Show a list of lumabotFlows
operationId: listLumabotFlows
tags:
- lumabotFlows
parameters:
- name: patient
in: query
description: the ID of the patient who filled out the answers for this flow.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: status
in: query
description: >
The completion status of the lumabot flow under the patient's
perspective, knowingly:
- `started`: when the patient started answering at least one
question, but hasn't finished the flow yet;
- `completed`: the patient has finished answering all the questions
and cannot edit the flow anymore.
schema:
type: string
enum:
- started
- completed
- name: completedAt
in: query
description: >-
the date/time when the patient finished all the responses of this
flow.
schema:
type: string
flowat: date-time
- name: appointment
in: query
description: the ID of an appointment related to this flow.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: fileUpload
in: query
description: the ID of a fileUpload related to this flow.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: url
in: query
description: >
deprecated: custom lumabot flow url, basically to identify any
patient in survey monkey,
an external flows service that's not being used anymore by Luma.
schema:
type: string
- name: currentItemId
in: query
description: >
The code of the current question the patient was last shown, before
answering it.
Such a code must be the content of any `questions[x].id`, or
`success`.
Usually this will contain each id, in sequence, but patients can go
back and forth.
Also, flows can have jump logic, and some questions might not be
displayed to the patient.
When the flow is completed, this is updated to `success`.
schema:
type: string
- name: lumabotFlowTemplate
in: query
description: >-
the ID of the template of questions that was displayed for the
patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: lumabotFlowTemplateName
in: query
description: >-
the name of the template of questions used as a basis for these flow
answers. See `lumabotFlowTemplates`.
schema:
type: string
- name: language
in: query
description: The language in which the flow was answered by the patient.
schema:
type: string
enum:
- en
- es
- pt
- name: accessedFrom
in: query
description: IP address of the patient who filled out the flow.
schema:
type: string
- name: previousLumabotFlow
in: query
description: >
PreviousLumabotFlow and nextLumabotFlow will be used to make it
possible for flows
to be able to jump to another flow with another template so we can
reduce the number of
unecessary questions in a single flow, which should help with
organization and performance.
One flow must call the jump template, at which time we create a new
lumabotFlow and set
the previous flow ID on its `previousLumabotFlow` property.
- name: nextLumabotFlow
in: query
description: >
PreviousLumabotFlow and nextLumabotFlow will be used to make it
possible for flows
to be able to jump to another flow with another template so we can
reduce the number of
unecessary questions in a single flow, which should help with
organization and performance.
One flow must call the jump template, at which time we create a new
lumabotFlow and set
the new flow ID on the first flow's `nextLumabotFlow` property.
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of lumabotFlows
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/LumabotFlowResponse'
page:
type: integer
flowat: int32
minimum: 1
size:
type: integer
flowat: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a lumabot flow
operationId: lumabotFlowCreate
tags:
- lumabotFlows
parameters:
- name: flowType
in: query
description: >-
If you don't provide the lumabotFlowTemplate for the new flow, the
system will pick a template based on the type specified here.
schema:
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- error
- no-availabilities
- regular
requestBody:
description: Create a lumabot flow
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/LumabotFlowRequest'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/sessions:
get:
summary: Get a list of LumaBot unique sessions
operationId: lumabotFlowGetSessions
tags:
- lumabotFlows
parameters:
- name: patient
in: query
description: the ID of the patient who filled out the answers for this flow.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: status
in: query
description: >
The completion status of the lumabot flow under the patient's
perspective, knowingly:
- `started`: when the patient started answering at least one
question, but hasn't finished the flow yet;
- `completed`: the patient has finished answering all the questions
and cannot edit the flow anymore.
schema:
type: string
enum:
- started
- completed
- name: completedAt
in: query
description: >-
the date/time when the patient finished all the responses of this
flow.
schema:
type: string
flowat: date-time
- name: lumabotFlowTemplate
in: query
description: >-
the ID of the template of questions that was displayed for the
patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: lumabotFlowTemplateName
in: query
description: >-
the name of the template of questions used as a basis for these flow
answers. See `lumabotFlowTemplates`.
schema:
type: string
- name: language
in: query
description: The language in which the flow was answered by the patient.
schema:
type: string
enum:
- en
- es
- pt
- name: accessedFrom
in: query
description: IP address of the patient who filled out the flow.
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of lumabotFlows that started a session
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/LumabotFlowResponse'
page:
type: integer
flowat: int32
minimum: 1
size:
type: integer
flowat: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/{lumabotFlowId}:
get:
summary: Get lumabotFlow by id
operationId: lumabotFlowGet
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: LumabotFlow
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a lumabotFlow
operationId: lumabotFlowUpdate
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A lumabotFlow (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowRequest'
responses:
'200':
description: LumabotFlow
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a lumabotFlow
operationId: lumabotFlowDelete
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted lumabotFlow
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/{lumabotFlowId}/currentQuestion:
get:
summary: Get current question(s) of a lumabotFlow
operationId: lumabotFlowGetCurrentQuestion
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: LumabotFlow's one or more current questions
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowQuestionResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/{lumabotFlowId}/pdf:
get:
summary: Get responses of a lumabotFlow in PDF format.
operationId: lumabotFlowGetPdf
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Returns a PDF with the LumaBot flow responses.
content:
application/pdf:
schema:
type: string
format: binary
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/{lumabotFlowId}/responses:
get:
summary: Get responses of a lumabotFlow and its subsequent flows.
operationId: lumabotFlowGetResponses
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: >-
Returns the list of responses of the lumabotFlow and its subsequent
flows.
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/LumabotFlowResponsesResponse'
page:
type: integer
flowat: int32
minimum: 1
size:
type: integer
flowat: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/{lumabotFlowId}/snapshot:
get:
summary: >-
Get responses of a lumabotFlow and its subsequent flows in a
question/answer format.
operationId: lumabotFlowGetSnapshot
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: >-
Returns the list of responses of the lumabotFlow and its subsequent
flows in a question/answer format.
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowSnapshotResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/{lumabotFlowId}/answer:
post:
summary: Answer the current question of a lumabot flow
operationId: lumabotFlowAnswer
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A lumabotFlow answer (full or partial) to be created
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowAnswerRequest'
responses:
'200':
description: LumabotFlow new current questions
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowQuestionResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlows/{lumabotFlowId}/answer/{itemId}:
delete:
summary: Delete a lumabotFlow answer
operationId: lumabotFlowAnswerDelete
tags:
- lumabotFlows
parameters:
- name: lumabotFlowId
in: path
required: true
description: LumabotFlows' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: itemId
in: path
required: true
description: >-
The unique identifier of the question whose answer you want to
delete.
schema:
type: string
responses:
'200':
description: LumabotFlow new current questions
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowQuestionResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlowTemplates:
get:
summary: Show a list of lumabotFlowTemplates
operationId: listLumabotFlowTemplates
tags:
- lumabotFlowTemplates
parameters:
- name: source
in: query
description: of the lumabot flow template
schema:
type: string
enum:
- system
- user
- name: externalId
in: query
description: The ID of externalId
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: description
in: query
description: description of the lumabot flow template
schema:
type: string
- name: flowType
in: query
description: type of the lumabot flow template
schema:
type: string
enum:
- pre-qualification
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- error
- regular
- name: active
in: query
description: active
schema:
type: boolean
- name: url
in: query
description: url of the lumabot flow template
schema:
type: string
- name: tag
in: query
description: tag of the lumabot flow template
schema:
type: string
- name: schedulerRequestInterceptor
in: query
description: schedulerRequestInterceptor
schema:
type: string
- name: schedulerResponseInterceptor
in: query
description: schedulerResponseInterceptor
schema:
type: string
- name: facilities
in: query
description: The IDs of the facilities associated with this form template
schema:
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of lumabotFlowTemplates
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/LumabotFlowTemplateResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a lumabotFlowTemplate
operationId: lumabotFlowTemplateCreate
tags:
- lumabotFlowTemplates
requestBody:
description: Create a lumabotFlowTemplate
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/LumabotFlowTemplateRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/lumabotFlowTemplates/{lumabotFlowTemplateId}:
get:
summary: Get lumabotFlowTemplate by id
operationId: lumabotFlowTemplateGet
tags:
- lumabotFlowTemplates
parameters:
- name: lumabotFlowTemplateId
in: path
required: true
description: LumabotFlowTemplates' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: LumabotFlowTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a lumabotFlowTemplate
operationId: lumabotFlowTemplateUpdate
tags:
- lumabotFlowTemplates
parameters:
- name: lumabotFlowTemplateId
in: path
required: true
description: LumabotFlowTemplates' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A lumabotFlowTemplate (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowTemplateRequestUpdate'
responses:
'200':
description: LumabotFlowTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a lumabotFlowTemplate
operationId: lumabotFlowTemplateDelete
tags:
- lumabotFlowTemplates
parameters:
- name: lumabotFlowTemplateId
in: path
required: true
description: LumabotFlowTemplates' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted lumabotFlowTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/LumabotFlowTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/messages:
get:
summary: List messages
operationId: messagesList
tags:
- messages
parameters:
- name: patient
in: query
description: The ID of the patient linked to this message.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: key
in: query
description: >
The MessageTemplate name. There are only 2 templates available
through the RESTful API.
The secure template means that the patient only gets a generic
message with a link to open the patient web app
and then read the real message. In that case, there are 2 messages,
one with that generic message,
and one with the real message. This parameter is set automatically
on the message,
depending on the `secure` parameter which was chosen when the
message was created.
schema:
type: string
enum:
- chatRequest
- chatRequestInsecure
- name: from
in: query
description: >-
the phone number or e-mail address from whom this message was
received. It depends on the value of the parameter `channel`.
schema:
type: string
- name: to
in: query
description: >-
the phone number or e-mail address to whom this message was sent. It
depends on the value of the parameter `channel`.
schema:
type: string
- name: type
in: query
description: >-
Indicates if a message was sent from Luma to an external person, or
the other way around.
schema:
type: string
enum:
- inbound
- outbound
- name: voiceAnsweredBy
in: query
description: voiceAnsweredBy
schema:
type: string
enum:
- human
- fax
- unknown
- machine-start
- machine-end-beep
- machine-end-silence
- machine-end-other
- name: ref
description: >
Indicates what this message is about. Depending on this value, you
also know what the parameter `refId` refers to.
- reminder (`refId` will be the ID of a `Reminder`)
- referral-reminder (`refId` will be the ID of a `Reminder`)
- feedback-reminder (`refId` will be the ID of a `Reminder`)
- followup (`refId` will be the ID of a `Reminder`)
- outbound-referral-reminder (`refId` will be the ID of a
`Reminder`)
- form-reminder (`refId` will be the ID of a `Reminder`)
- reschedule (`refId` will be the ID of a `Reminder`)
- waitlist (`refId` will be the ID of a `Waitlist`)
- appointment-offer (`refId` will be the ID of a `Offer`)
- chat-notification (`refId` will be the ID of a `Message`)
- pin-verification (`refId` will be the ID of a `Message`)
- chat (`refId` will be the ID of a `Message`)
- chat-audit (`refId` will be the ID of a `ChatActivity`)
- chat-audit-tz (`refId` will be the ID of a `ChatActivity`)
- feedback (`refId` will be the ID of a `Feedback` request)
- waitlist-offer (`refId` will be the ID of an `Appointment`)
- referral-followup (`refId` will be the ID of a `Referral`)
- outbound-referral-outreach (`refId` will be the ID of a
`Referral`)
- referral-redirect (`refId` will be the ID of a `Referral`)
- broadcast (`refId` will be the ID of a `Broadcast`)
- generic (`refId` will refer to the same object of the previous
message to this same patient)
- stop (`refId` will refer to the same object of the previous
message to this same patient)
- bot:followup (`refId` will be the ID of a `Patient`)
- telehealth (`refId` will be the ID of a `Telehealth` object)
- waiting-room-patient (`refId` will be the ID of a
`WaitingRoomPatient` object)
in: query
schema:
type: string
enum:
- reminder
- referral-reminder
- feedback-reminder
- followup
- outbound-referral-reminder
- form-reminder
- reschedule
- waitlist
- appointment-offer
- chat-notification
- pin-verification
- chat
- chat-audit
- chat-audit-tz
- feedback
- waitlist-offer
- referral-followup
- outbound-referral-outreach
- referral-redirect
- broadcast
- generic
- stop
- bot:followup
- telehealth
- waiting-room-patient
- name: refId
in: query
description: The ID of the object referenced by the `ref` parameter.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientMessageTemplate
in: query
description: >-
The ID of a Hub Message Template (or `PatientMessageTemplate`).
These are custom messages, created by users, to make their typing
experience easier.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: outboundMessage
in: query
description: >
This field is only present on a patient's reply (aka `messages`
whose `type` are `inbound`)
so as to link it to the original outbound `message` that was sent to
them.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: status
in: query
description: >
The deliverability status, provided by Luma's external vendors.
Messages are initially created as `sent`, and later updated to some
other status.
- Sent = vendor has acknowledged receipt of request
- Pending = vendor has sent non-terminating status update
- Delivered = vendor has confirmed a delivered message
- Undelivered = vendor has confirmed an undelivered message
- Opened = vendor has confirmed an opened message
- Skipped = system skipped sending the message
schema:
type: string
enum:
- sent
- pending
- delivered
- undelivered
- opened
- skipped
- name: externalStatus
in: query
description: >
Delivery status codes and messages provided by external vendors.
`code` : Status code provided by vendor
`reason` : Status message provided by vendor
schema:
type: array
items:
type: string
enum:
- code
- reason
- name: skippedStatusReason
in: query
description: >
This field is only present on messages whose `status` is `skipped`.
It contains the reason why Luma decided to skip sending the message
out.
schema:
type: string
- name: channel
in: query
description: >
The channel used to send this message.
On our RESTful API, you may search for multiple channels, but only
POST `chat` messages.
Two of them deserve an explanation:
- `chat` will check the recipient's contact and pick the channel
automatically.
- `inapp` are meant for internal messages, when a staff user
`@mentions` another staff user on Hub.
The mentioned person only gets a notification on their browser
window,
by fetching from the `notifications` API.
schema:
type: string
enum:
- sms
- email
- voice
- inapp
- chat
- fax
- whatsapp
- name: text
in: query
description: >
The content of the message.
If the channel was `chat`, then the text was manually provided when
the message was created.
For all other channels, the `key` was used to fetch a
`messageTemplate` and determine the `text`
based on that template.
schema:
type: string
- name: classification
in: query
description: >
The classification of patient replies (inbound messages) interpreted
by our
NLP (Natural Language Processing) service.
- `positive` indicates a yes-type answer (e.g. "sounds good", "yes",
or "ok")
- `negative` indicates a no-type answer (e.g. "no way", "negative",
"no good")
- `irregular` indicates classification attempt was not able to
classify the text as positive or negative
- `recognized-keywords` indicates that an expected keyword was
identified (e.g. "waitlist")
- `unclassified` indicates no classification attempted - yet
schema:
type: string
default: unclassified
enum:
- positive
- negative
- irregular
- recognized-keywords
- unclassified
- name: secure
in: query
description: >
Indicates how a message with channel `chat` will be delivered.
Secure messages are created on the database but not really sent to
patients. Instead, we create another unsecure message whose content
is the messageTemplate `chatRequestInsecure`, which basically
instructs the patient to click on a link to open patient-web-app to
log in and then read the secure message.
Insecure messages are sent directly to patients. Their text should
not contain any PHI or sensitive information.
schema:
type: boolean
- name: automated
in: query
description: >-
Indicates if a message was created by users (chat) or by the system
(reminders, recalls, etc).
schema:
type: boolean
- name: visibility
in: query
description: >
Helps determine where a certain message should be displayed.
- `public` = manual and automated messages sent to patients, visible
to patients logged into our patient web app;
- `private` = automated messages sent to staff, only visible to one
recipient staff user;
- `internal` = manual messages sent from staff to staff, visible to
both staff users involved in a conversation, whenever one @mentined
the other, both logged into our internal web app, and usually on Hub
rather than any notification areas.
schema:
type: string
default: public
enum:
- public
- private
- internal
- name: file
in: query
description: |
The ID of a `FileUpload`, in case this message has any attachment,
sent via the `FileUpload` RESTful API.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: recipient
in: query
description: >-
The ID of the User receiving the message. Usually, for messages
`type outbound`, the recipient is the ID of a patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: recipientType
in: query
description: The type of the user in the field `recipient`
schema:
type: string
enum:
- doctor
- staff
- patient
- name: shouldForceContactWithNotifyTo
in: query
description: >
When the patient has the patient web app open, we detect that and
only send messages through the web interface.
This is to avoid having the patient receive the same message both on
the web and also by SMS.
But if this flag is set to TRUE, then we will send to the contact
specified in the `notifyTo` field, regardless of the patient's
online presence.
schema:
type: boolean
- name: appointment
in: query
description: ID of Appointment
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: provider
in: query
description: ID of Provider
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointmentType
in: query
description: ID of AppointmentType
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: followup
in: query
description: ID of Followup, or Custom Action.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: recall
in: query
description: ID of Recall
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: referral
in: query
description: ID of Referral
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: messageFailure
in: query
description: ID of MessageFailure
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: groups
in: query
description: >-
An _id or array of _ids separated by comma. Filters by
message.facility within the facilities from the specified groups
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/languageParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of messages
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/MessageResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create message
operationId: messageCreate
tags:
- messages
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MessageRequest'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/messages/{messageId}:
get:
summary: Get message by id
operationId: messageGet
tags:
- messages
parameters:
- name: messageId
in: path
required: true
description: Messages' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Message
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
put:
summary: Update message visibility
operationId: messageUpdateVisibility
tags:
- messages
parameters:
- name: messageId
in: path
required: true
description: Messages' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: markMessageAs
in: query
description: >
Helps determine where a certain message should be displayed.
- `public` = manual and automated messages sent to patients, visible
to patients logged into our patient web app;
- `private` = automated messages sent to staff, only visible to one
recipient staff user;
- `internal` = manual messages sent from staff to staff, visible to
both staff users involved in a conversation, whenever one @mentined
the other, both logged into our internal web app, and usually on Hub
rather than any notification areas.
schema:
type: string
default: public
enum:
- public
- private
- internal
requestBody:
description: The message visibility status
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MessagesUpdateVisibilityRequest'
responses:
'200':
description: Success updating message visibility
content:
application/json:
schema:
type: object
required:
- message
properties:
body:
type: object
properties:
message:
type: string
additionalProperties: false
'400':
description: Bad params or the address are invalid
content:
application/json:
schema:
type: object
required:
- message
properties:
error:
type: object
properties:
message:
type: string
additionalProperties: false
'500':
description: An unexpected error occurred
content:
application/json:
schema:
type: object
required:
- message
properties:
error:
type: object
properties:
message:
type: string
additionalProperties: false
/messageTemplatePartials:
get:
summary: List MessageTemplatePartials
operationId: messageTemplatePartialsList
tags:
- messageTemplatePartials
parameters:
- $ref: '#/components/parameters/idParam'
- $ref: '#/components/parameters/userParam'
- name: name
in: query
description: Name of the message template partial
schema:
type: string
- name: type
in: query
description: Type of the message template partial
schema:
type: string
enum:
- campaign
- digital-call-deflection
- generic
- name: subType
in: query
description: Sub-type of the message template partial
schema:
type: string
enum:
- digital-call-deflection-appointment-management
- digital-call-deflection-initiated-text
- digital-call-deflection-error
- digital-call-deflection-luma-bot
- digital-call-deflection-main-menu
- digital-call-deflection-other
- digital-call-deflection-patient-verification
- digital-call-deflection-redirect
- digital-call-deflection-scheduling
- digital-call-deflection-sub-menu
- digital-call-deflection-third-party-link
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/deletedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/deletedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of message template partials
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/MessageTemplatePartialsResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create MessageTemplatePartial
operationId: messageTemplatePartialCreate
tags:
- messageTemplatePartials
requestBody:
description: Create a message template partial
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MessageTemplatePartialsCreate'
responses:
'200':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/MessageTemplatePartialsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/messageTemplatePartials/{messageTemplatePartialId}:
get:
summary: Get a MessageTemplatePartial by id
operationId: messageTemplatePartialById
tags:
- messageTemplatePartials
parameters:
- name: messageTemplatePartialId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: MessageTemplatePartial
content:
application/json:
schema:
$ref: '#/components/schemas/MessageTemplatePartialsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: MessageTemplatePartial not found
put:
summary: Update a MessageTemplatePartial
operationId: messageTemplatePartialUpdate
tags:
- messageTemplatePartials
parameters:
- name: messageTemplatePartialId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
requestBody:
description: A messageTemplatePartial (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MessageTemplatePartialsUpdate'
responses:
'200':
description: MessageTemplatePartial
content:
application/json:
schema:
$ref: '#/components/schemas/MessageTemplatePartialsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: MessageTemplatePartial not found
delete:
summary: Delete a MessageTemplatePartial
operationId: messageTemplatePartialDelete
tags:
- messageTemplatePartials
parameters:
- name: messageTemplatePartialId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted messageTemplatePartial
content:
application/json:
schema:
$ref: '#/components/schemas/MessageTemplatePartialsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: MessageTemplatePartial not found
/outboundReferrals:
get:
summary: List OutboundReferrals
operationId: outboundReferralsList
tags:
- outboundReferrals
parameters:
- name: _id
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/deletedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/deletedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of outbound referrals
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/OutboundReferralsResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create OutboundReferrals
operationId: outboundReferralsCreate
tags:
- outboundReferrals
requestBody:
description: Create an outbound referral
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OutboundReferralsCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/OutboundReferralsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/outboundReferrals/{outboundReferralsId}:
get:
summary: Get a OutboundReferral by id
operationId: outboundReferralById
tags:
- outboundReferrals
parameters:
- name: outboundReferralId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: OutboundReferral
content:
application/json:
schema:
$ref: '#/components/schemas/OutboundReferralsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a OutboundReferral
operationId: outboundReferralUpdate
tags:
- outboundReferrals
parameters:
- name: outboundReferralId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A outboundReferral (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OutboundReferralsUpdate'
responses:
'200':
description: OutboundReferral
content:
application/json:
schema:
$ref: '#/components/schemas/OutboundReferralsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a OutboundReferral
operationId: outboundReferralDelete
tags:
- outboundReferrals
parameters:
- name: outboundReferralId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted outboundReferral
content:
application/json:
schema:
$ref: '#/components/schemas/OutboundReferralsResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/patients:
get:
summary: Show a list of patients
operationId: listPatients
tags:
- patients
parameters:
- name: culture
in: query
schema:
type: string
enum:
- cn
- hk
- name: birthSex
in: query
schema:
type: string
enum:
- M
- F
- UNK
- name: race
in: query
schema:
type: string
enum:
- american-indian-or-alaska-native
- asian
- black-or-african-american
- native-hawaiian-or-other-pacific-islander
- white
- other-race
- name: ethnicityGroup
in: query
schema:
type: string
enum:
- hispanic-or-latino
- not-hispanic-or-latino
- name: suffix
in: query
schema:
type: string
enum:
- II
- III
- IV
- Jr.
- Sr.
- name: previousAddress
in: query
schema:
type: string
- name: lastProcessedAt
in: query
schema:
type: string
format: date-time
- name: source
in: query
schema:
type: string
enum:
- widget
- integrator
- ui
- referring-provider
- hub
- name: widget
in: query
schema:
type: string
enum:
- lumabot
- name: mergedInto
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: createdBy
in: query
schema:
type: string
pattern: '[0-9a-f]'
required: true
minLength: 24
maxLength: 24
- name: updatedBy
in: query
schema:
type: string
pattern: '[0-9a-f]'
required: true
minLength: 24
maxLength: 24
- name: deletedBy
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: deletedAt
in: query
schema:
type: string
format: date-time
- name: primaryCareProvider
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: balance
in: query
schema:
type: number
- name: balanceUpdatedAt
in: query
schema:
type: string
format: date-time
- name: searchIds
in: query
schema:
type: array
items:
type: string
- name: randomName
in: query
schema:
type: boolean
- name: _id
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: name
in: query
schema:
type: string
- name: normalizedName
in: query
schema:
type: string
- name: firstname
in: query
schema:
type: string
- name: lastname
in: query
schema:
type: string
- name: middlename
in: query
schema:
type: string
- name: displayPhone
in: query
schema:
type: string
- name: displayStatus
in: query
schema:
type: string
default: pending
enum:
- active
- pending
- suspended
- name: email
in: query
schema:
type: string
- name: safeId
in: query
schema:
type: string
- name: type
in: query
schema:
type: string
required: true
enum:
- doctor
- staff
- patient
- guest
- name: roles
in: query
schema:
type: array
items:
type: string
- name: organization
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: doNotContact
in: query
schema:
type: boolean
required: true
- name: doNotContactMessage
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: groups
in: query
schema:
type: array
items:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: stripeCustomerId
in: query
schema:
type: string
- name: stripeSubscriptionId
in: query
schema:
type: string
- name: salesforceId
in: query
schema:
type: string
- name: deleted
in: query
schema:
type: number
required: true
- name: createdAt
in: query
schema:
type: string
format: date-time
- name: updatedAt
in: query
schema:
type: string
format: date-time
- name: lastLogin
in: query
schema:
type: string
format: date-time
- name: active
in: query
schema:
type: number
required: true
- name: master
in: query
schema:
type: boolean
- name: language
in: query
schema:
type: string
default: en
- name: user
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: setting
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: settings
in: query
schema:
type: mixed
- name: address
in: query
schema:
type: string
- name: city
in: query
schema:
type: string
- name: state
in: query
schema:
type: string
- name: country
in: query
schema:
type: string
required: true
default: US
- name: postcode
in: query
schema:
type: string
- name: gender
in: query
schema:
type: string
required: true
default: unknown
enum:
- male
- female
- unknown
- nonbinary
- name: allowedIps
in: query
schema:
type: array
items:
type: string
- name: avatar
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: publicKey
in: query
schema:
type: string
- name: directMessagingEmail
in: query
schema:
type: string
- name: website
in: query
schema:
type: string
- $ref: '#/components/parameters/patientGlobalSearch'
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
- name: searchByNameOrDobOrPhoneNumber
description: >
If this parameter is passed, we perform a search by name or DOB or
Phone Number,
limited by parameter 'limit' and ignoring all other parameters.
in: query
schema:
type: string
responses:
'200':
description: Returns a list of patients
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/PatientResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create patients
operationId: createPatients
tags:
- patients
requestBody:
description: Patients to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientRequestCreate'
responses:
'200':
description: Returns the created patients
content:
application/json:
schema:
$ref: '#/components/schemas/PatientResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/patients/{patientId}:
get:
summary: Show a single patient
operationId: getPatientById
tags:
- patients
parameters:
- name: patientId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Patient
content:
application/json:
schema:
$ref: '#/components/schemas/PatientResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
put:
summary: Update a patient
operationId: patientUpdate
tags:
- patients
parameters:
- name: patientId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: Patient proprieties to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientRequestUpdate'
responses:
'200':
description: Waitlist updated
content:
application/json:
schema:
$ref: '#/components/schemas/PatientResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a patient
operationId: deletePatient
tags:
- patients
parameters:
- name: patientId
in: path
required: true
schema:
type: string
responses:
'200':
description: Deleted patient
content:
application/json:
schema:
$ref: '#/components/schemas/PatientResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/patients/{patientId}/contact-preferences:
get:
summary: Get patient contact preferences
description: >-
Returns the valid contacts for a patient as messenger would use them
(after doNotContact, enabled channels, template support, etc.)
operationId: getPatientContactPreferences
tags:
- patients
parameters:
- name: patientId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-fA-F]{24}$
minLength: 24
maxLength: 24
- name: template
in: query
required: false
description: >-
Message template for channel support (default
patientGenericNotification)
schema:
type: string
default: patientGenericNotification
- name: campaignId
in: query
required: false
description: >-
Optional campaign ID for campaign-specific contact preferences
(opt-out, channels)
schema:
type: string
pattern: ^[0-9a-fA-F]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: Patient contact preferences
content:
application/json:
schema:
$ref: '#/components/schemas/PatientContactPreferencesResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: Patient or campaign (when campaignId provided) not found
/patientCreditCards:
get:
summary: List patient credit cards
operationId: patientCreditCardsList
tags:
- patientCreditCards
parameters:
- name: _id
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: externalId
in: query
schema:
type: object
properties:
source:
type: string
value:
type: string
- name: patient
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: cardIssuer
in: query
schema:
type: string
- name: lastFourDigits
in: query
schema:
type: string
- name: expMonth
in: query
schema:
type: string
- name: expYear
in: query
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of patient credit cards
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/PatientCreditCard'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create patient credit cards
operationId: patientCreditCardCreate
tags:
- patientCreditCards
requestBody:
description: Create an patient credit card
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientCreditCard'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/PatientCreditCard'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/patientCreditCards/{patientCreditCardId}:
get:
summary: Get patient credit card by id
operationId: patientCreditCardGet
tags:
- patientCreditCards
parameters:
- name: patientCreditCardId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: PatientCreditCard
content:
application/json:
schema:
$ref: '#/components/schemas/PatientCreditCard'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an patient credit card
operationId: patientCreditCardUpdate
tags:
- patientCreditCards
parameters:
- name: patientCreditCardId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An patient credit card (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientCreditCard'
responses:
'200':
description: PatientCreditCard
content:
application/json:
schema:
$ref: '#/components/schemas/PatientCreditCard'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an patient credit card
operationId: patientCreditCardDelete
tags:
- patientCreditCards
parameters:
- name: patientCreditCardId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted patient credit card
content:
application/json:
schema:
$ref: '#/components/schemas/PatientCreditCard'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/patientForms:
get:
summary: Show a list of patientForms
operationId: listPatientForms
tags:
- patientForms
parameters:
- name: patient
in: query
description: the ID of the patient who filled out the answers for this form.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: status
in: query
description: >
The completion status of the patient form under the patient's
perspective, knowingly:
- `pending`: the initial status, not seen by the patient, created
when a message is sent out with the form link;
- `unstarted`: set when the patient clicked on the link to open the
form but only saw the welcome screen, without actually answering any
questions;
- `started`: when the patient started answering at least one
question, but hasn't finished the form yet;
- `completed`: the patient has finished answering all the questions
and cannot edit the form anymore.
schema:
type: string
enum:
- pending
- unstarted
- started
- completed
- name: completedAt
in: query
description: >-
the date/time when the patient finished all the responses of this
form.
schema:
type: string
format: date-time
- name: processingStatus
in: query
description: >
The internal staff's management status for a completed form, serving
the purpose of organizing which answers were analysed by a staff
member or not.
- `open`: the form was completed by a patient but not seen by any
staff member yet;
- `in-progress`: a staff user is analysing the answers;
- `closed`: the form has been completely analysed by a member of the
staff team.
schema:
type: string
enum:
- open
- in-progress
- closed
- name: processingStatusUpdatedBy
in: query
description: >-
the ID of a staff `user` who analysed the responses of this
completed patient form and changed its `processingStatus`.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: processingStatusUpdatedAt
in: query
description: >-
the date/time when a staff `user` analysed the responses of this
completed patient form and changed its `processingStatus`.
schema:
type: string
format: date-time
- name: lumabot
in: query
description: >-
flag to signal whether a form was filled out in the shape of a
patient chat with a bot.
schema:
type: boolean
- name: appointment
in: query
description: the ID of an appointment related to this form.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: fileUpload
in: query
description: the ID of a fileUpload related to this form.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: duration
in: query
description: the time it took (in minutes) for the patient to complete this form.
schema:
type: number
- name: url
in: query
description: >
deprecated: custom patient form url, basically to identify any
patient in survey monkey,
an external forms service that's not being used anymore by Luma.
schema:
type: string
- name: currentItemId
in: query
description: >
The code of the current question the patient was last shown, before
answering it.
Such a code must be the content of any
`responses.page[0].questions[x].id`, or `success`.
Usually this will contain each id, in sequence, but patients can go
back and forth.
Also, forms can have jump logic, and some questions might not be
displayed to the patient.
When the form is completed, this is updated to `success`.
schema:
type: string
- name: patientFormTemplate
in: query
description: >-
the ID of the template of questions that was displayed for the
patient.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientFormTemplateName
in: query
description: >-
the name of the template of questions used as a basis for these form
answers. See `patientFormTemplates`.
schema:
type: string
- name: patientFormTemplateType
in: query
description: >
A flag to help filter forms by their originally desired purpose.
The form structure and behavior is identical, but depending on the
settings screen,
some forms may be displayed as a selectable option or not.
- `intake`: a regular form, intended to be sent to patients
manually, or in reminders, or even custom actions.
- `pre-qualification`: a form to be displayed before the scheduler
is shown to patients. In the scheduler settings page, you can only
select a `pre-qualification` form to be displayed before the patient
actually schedules an appointment.
- `feedback`: a form to be sent to patients after their visits, to
rate the service they've received. On the feedback settings page,
you can only select a form with this flag.
- `ccda`: a form containing special questions that conform to the
standard format which can be read by EHR Systems.
schema:
type: string
enum:
- intake
- pre-qualification
- feedback
- ccda
- $ref: '#/components/parameters/refParam'
- name: refId
in: query
description: The ID of the Object refereced by the `ref` field.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: offer
in: query
description: The ID of an appointment `Offer` related to these form answers.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: language
in: query
description: The language in which the form was answered by the patient.
schema:
type: string
enum:
- en
- es
- pt
- name: accessedFrom
in: query
description: IP address of the patient who filled out the form.
schema:
type: string
- name: previousPatientForm
in: query
description: >
PreviousPatientForm and nextPatientForm will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
patientForm and set
the previous form ID on its `previousPatientForm` property.
- name: nextPatientForm
in: query
description: >
PreviousPatientForm and nextPatientForm will be used to make it
possible for forms
to be able to jump to another form with another template so we can
reduce the number of
unecessary questions in a single form, which should help with
organization and performance.
One form must call the jump template, at which time we create a new
patientForm and set
the new form ID on the first form's `nextPatientForm` property.
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of patientForms
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/PatientFormResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/patientForms/{patientFormId}:
get:
summary: Get patientForm by id
operationId: patientFormGet
tags:
- patientForms
parameters:
- name: patientFormId
in: path
required: true
description: PatientForms' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: PatientForm
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a patientForm
operationId: patientFormUpdate
tags:
- patientForms
parameters:
- name: patientFormId
in: path
required: true
description: PatientForms' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A patientForm (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormRequest'
responses:
'200':
description: PatientForm
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a patientForm
operationId: patientFormDelete
tags:
- patientForms
parameters:
- name: patientFormId
in: path
required: true
description: PatientForms' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted patientForm
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/patientFormTemplates:
get:
summary: Show a list of patientFormTemplates
operationId: listPatientFormTemplates
tags:
- patientFormTemplates
parameters:
- name: source
in: query
description: of the patient form template
schema:
type: string
enum:
- system
- user
- name: externalId
in: query
description: The ID of externalId
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: description
in: query
description: description of the patient form template
schema:
type: string
- name: type
in: query
description: type of the patient form template
schema:
type: string
enum:
- pre-qualification
- intake
- feedback
- ccda
- name: active
in: query
description: active
schema:
type: boolean
- name: url
in: query
description: url of the patient form template
schema:
type: string
- name: tag
in: query
description: tag of the patient form template
schema:
type: string
- name: integratorMapping
in: query
description: integratorMapping
schema:
type: string
- name: calculation
in: query
description: calculation
schema:
type: string
- name: finalDispositionCalculation
in: query
description: finalDispositionCalculation
schema:
type: string
- name: schedulerRequestInterceptor
in: query
description: schedulerRequestInterceptor
schema:
type: string
- name: schedulerResponseInterceptor
in: query
description: schedulerResponseInterceptor
schema:
type: string
- name: htmlPdfTemplateHeader
in: query
description: htmlPdfTemplateHeader
schema:
type: string
- name: htmlPdfTemplateBody
in: query
description: htmlPdfTemplateBody of the patient form template
schema:
type: string
- name: htmlPdfTemplateFooter
in: query
description: htmlPdfTemplateFooter of the patient form template
schema:
type: string
- name: lumabot
in: query
description: lumabot
schema:
type: string
- name: sendToDirectMessageEmail
in: query
description: sendToDirectMessageEmail
schema:
type: string
- name: lumaBotFlow
in: query
description: lumaBotFlow
schema:
type: string
enum:
- welcome
- authenticate-patient
- speak-with-staff
- session-timeout
- knock-knock
- cul-de-sac
- feedback
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of patientFormTemplates
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/PatientFormTemplateResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a patientFormTemplate
operationId: patientFormTemplateCreate
tags:
- patientFormTemplates
requestBody:
description: Create a patientFormTemplate
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/PatientFormTemplateRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/patientFormTemplates/{patientFormTemplateId}:
get:
summary: Get patientFormTemplate by id
operationId: patientFormTemplateGet
tags:
- patientFormTemplates
parameters:
- name: patientFormTemplateId
in: path
required: true
description: PatientFormTemplates' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: PatientFormTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a patientFormTemplate
operationId: patientFormTemplateUpdate
tags:
- patientFormTemplates
parameters:
- name: patientFormTemplateId
in: path
required: true
description: PatientFormTemplates' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A patientFormTemplate (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormTemplateRequestUpdate'
responses:
'200':
description: PatientFormTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a patientFormTemplate
operationId: patientFormTemplateDelete
tags:
- patientFormTemplates
parameters:
- name: patientFormTemplateId
in: path
required: true
description: PatientFormTemplates' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted patientFormTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/PatientFormTemplateResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/patientFormTemplates/docusign/template:
get:
summary: Get list of DocuSign accounts availables
operationId: listDocuSign accounts
tags:
- patientFormTemplates
responses:
'200':
description: Returns a list of DocuSign accounts that user can switch in Luma
content:
application/json:
schema:
type: object
properties:
response:
type: array
minItems: 0
items:
type: object
properties:
accountId:
type: string
isDefault:
type: string
accountName:
type: string
baseUri:
type: string
additionalProperties: false
'400':
description: Invalid credentials
content:
application/json:
schema:
type: object
required:
- message
properties:
error:
type: object
properties:
message:
type: string
additionalProperties: false
'500':
description: An unexpected error occurred
content:
application/json:
schema:
type: object
required:
- message
properties:
error:
type: object
properties:
message:
type: string
additionalProperties: false
/patientMessageTemplates:
get:
summary: List PatientMessageTemplates
operationId: patientMessageTemplatesList
tags:
- patientMessageTemplates
parameters:
- $ref: '#/components/parameters/idParam'
- $ref: '#/components/parameters/userParam'
- name: name
in: query
description: Name of the patient message template
schema:
type: string
- name: language
in: query
description: Language the override applies to
schema:
type: string
enum:
- ar
- bn
- cn
- de
- en
- es
- fa
- fl
- fr
- gr
- gu
- hi
- ht
- hy
- it
- ja
- km
- ko
- mr
- my
- pa
- pl
- pt
- ru
- so
- th
- ti
- ur
- vi
- zh-t
- zh
- name: type
in: query
description: Type of the patient message template
schema:
type: string
enum:
- chat
- broadcast
- name: channel
in: query
description: Channel the patient message template applies to
schema:
type: string
enum:
- sms
- email
- voice
- whatsapp
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/deletedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/deletedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of patient message templates
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/PatientMessageTemplatesResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create PatientMessageTemplate
operationId: patientMessageTemplateCreate
tags:
- patientMessageTemplates
requestBody:
description: Create a patient message template
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientMessageTemplatesCreate'
responses:
'200':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/PatientMessageTemplatesResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/patientMessageTemplates/{patientMessageTemplateId}:
get:
summary: Get a PatientMessageTemplate by id
operationId: patientMessageTemplateById
tags:
- patientMessageTemplates
parameters:
- name: patientMessageTemplateId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: PatientMessageTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/PatientMessageTemplatesResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a PatientMessageTemplate
operationId: patientMessageTemplateUpdate
tags:
- patientMessageTemplates
parameters:
- name: patientMessageTemplateId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
requestBody:
description: A patientMessageTemplate (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatientMessageTemplatesUpdate'
responses:
'200':
description: PatientMessageTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/PatientMessageTemplatesResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a PatientMessageTemplate
operationId: patientMessageTemplateDelete
tags:
- patientMessageTemplates
parameters:
- name: patientMessageTemplateId
in: path
required: true
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted patientMessageTemplate
content:
application/json:
schema:
$ref: '#/components/schemas/PatientMessageTemplatesResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/providers:
get:
summary: Show a list of providers
operationId: listProviders
tags:
- providers
parameters:
- name: searchByPartialName
description: >
If this parameter is passed, we perform a search by name, limited by
parameter 'limit'.
in: query
schema:
type: string
- name: npiSearch
description: >
If this parameter is passed, we perform a search by name on the NPI
registry.
All other parameters are ignored.
in: query
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of providers
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ProviderResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a provider
operationId: providerCreate
tags:
- providers
requestBody:
description: Create a provider
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/ProviderRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/providers/{providerId}:
get:
summary: Get provider by id
operationId: providerGet
tags:
- providers
parameters:
- name: providerId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Provider
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a provider
operationId: providerUpdate
tags:
- providers
parameters:
- name: providerId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A provider (full or partial) to be updated
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/ProviderRequestUpdate'
responses:
'200':
description: Provider updated
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a provider
operationId: providerDelete
tags:
- providers
parameters:
- name: providerId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted provider
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/providerSchedulingGroups:
get:
summary: List provider scheduling groups
operationId: providerSchedulingGroupsList
tags:
- providerSchedulingGroups
parameters:
- name: name
in: query
schema:
type: string
- name: groupType
in: query
schema:
type: string
enum:
- structured
- parallel
- name: active
in: query
schema:
type: boolean
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of provider scheduling groups
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ProviderSchedulingGroupResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create a provider scheduling group
operationId: providerSchedulingGroupCreate
tags:
- providerSchedulingGroups
requestBody:
description: Create a provider scheduling group
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderSchedulingGroupRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderSchedulingGroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/providerSchedulingGroups/{providerSchedulingGroupId}:
get:
summary: Get provider scheduling group by id
operationId: providerSchedulingGroupGet
tags:
- providerSchedulingGroups
parameters:
- name: providerSchedulingGroupId
in: path
required: true
description: ProviderSchedulingGroup's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: ProviderSchedulingGroup
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderSchedulingGroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a provider scheduling group
operationId: providerSchedulingGroupUpdate
tags:
- providerSchedulingGroups
parameters:
- name: providerSchedulingGroupId
in: path
required: true
description: ProviderSchedulingGroup's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A provider scheduling group (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderSchedulingGroupRequestUpdate'
responses:
'200':
description: ProviderSchedulingGroup
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderSchedulingGroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a provider scheduling group
operationId: providerSchedulingGroupDelete
tags:
- providerSchedulingGroups
parameters:
- name: providerSchedulingGroupId
in: path
required: true
description: ProviderSchedulingGroup's unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted provider scheduling group
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderSchedulingGroupResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/queueManagerInstances/{id}/transfer:
post:
summary: Transfer a queue manager instance to a different queue
description: >
Creates a new QueueManagerInstance in the target queue (identified by
`template`) and marks the source instance as transferred. The new
instance
inherits patient/appointment/order associations from the source.
The source instance must exist and not already be in a terminal state.
The target `template` must exist and belong to the same account.
If `status` is omitted, the new instance is placed in the Initial-type
status configured on the target template.
operationId: transferQueueManagerInstance
tags:
- queueManagerInstances
parameters:
- name: id
in: path
required: true
description: ObjectId of the source queue manager instance to transfer
schema:
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- template
properties:
template:
description: >-
Target queue template ID (ObjectId of the destination
QueueManagerTemplate)
type: string
pattern: ^[0-9a-f]{24}$
minLength: 24
maxLength: 24
status:
description: >
Initial status for the new instance in the target queue.
Defaults to the target template's Initial-type status if
omitted.
type: string
customFields:
description: Custom field values to set on the new instance
type: array
items:
type: object
properties:
name:
description: Custom field name
type: string
value:
description: Custom field value (any type)
type:
description: Custom field type
type: string
staffNotes:
description: Staff notes to attach to the new instance
type: object
required:
- value
properties:
value:
type: string
additionalProperties: false
additionalProperties: false
responses:
'200':
description: The newly created QueueManagerInstance in the target queue
content:
application/json:
schema:
type: object
properties:
_id:
type: string
description: ObjectId of the newly created instance
template:
type: string
description: ObjectId of the target queue template
source:
type: string
enum:
- transfer
createdFrom:
type: string
description: ObjectId of the original (now soft-deleted) instance
status:
type: string
description: Current status in the target queue
deleted:
type: integer
enum:
- 0
description: Always 0 for newly created instances
'400':
description: |
Validation error. Common causes:
- `template` field is missing from the request body.
- Request body does not conform to the schema (e.g. unknown properties).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
'404':
description: |
Source instance or target template not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: >
Status requirements not met on the target template (e.g. the
provided
`status` value does not exist on the target template, or the target
template has no Initial-type status configured).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/offers:
get:
summary: List offers
operationId: offersList
tags:
- offers
parameters:
- name: provider
in: query
description: The ID of provider
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: duration
in: query
description: Duration of the offer
schema:
type: integer
- name: date
in: query
description: Date of the offer
schema:
type: date-time
- name: facility
in: query
description: The ID of facility
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: approvedBy
in: query
description: The ID of approvedBy
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: declinedBy
in: query
description: The ID of declinedBy
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: currentWaitlist
in: query
description: current Waitlist of the offer
schema:
type: integer
- name: expireAt
in: query
description: When the offer will expire
schema:
type: date-time
- name: patientFoundAt
in: query
description: The ID of patientFoundAt
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientFound
in: query
description: The ID of patientFound
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: estimatedCompletionAt
in: query
description: When the offer will be estimated complete
schema:
type: date-time
- name: shadowAppointment
in: query
description: The ID of shadowAppointment
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: availability
in: query
description: The ID of availability
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: protocol
in: query
description: Protocol of the offer
schema:
type: string
enum:
- serial
- parallel
- name: offer
in: query
description: The ID of offer
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: usedForAppointment
in: query
description: The ID of usedForAppointment
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: rescheduledFromAppointment
in: query
description: The ID of rescheduledFromAppointment
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientForm
in: query
description: The ID of patientForm
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientFormTemplate
in: query
description: The ID of patientFormTemplate
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: referral
in: query
description: The ID of referral
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: integratorCreationResults
in: query
description: Status Integrator Creation Results
schema:
type: object
enum:
- success
- failure
- pending
- name: waitlists
in: query
description: The ID of waitlists
schema:
type: array
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointmentType
in: array
description: The ID of appointmentType
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: source
in: query
description: Source of the offer
schema:
type: string
enum:
- cancellation
- manual
- find-open-spots
- self-scheduling
- reschedule
- staff-scheduling
- reschedule-from-intent
- name: status
in: query
description: Status of the offer
schema:
type: string
enum:
- in-progress
- patient-found
- patient-not-found
- cancelled
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of offers
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/OfferResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create offer
operationId: offerCreate
tags:
- offers
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OfferRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/OfferResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/offers/{offerId}:
get:
summary: Get offer by id
operationId: offerGet
tags:
- offers
parameters:
- name: offerId
in: path
required: true
description: Offers' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Offer
content:
application/json:
schema:
$ref: '#/components/schemas/OfferResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update an offer
operationId: offerUpdate
tags:
- offers
parameters:
- name: offerId
in: path
required: true
description: Offers' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An offer (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OfferRequestUpdate'
responses:
'200':
description: Offer
content:
application/json:
schema:
$ref: '#/components/schemas/OfferResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete an offer
operationId: offerDelete
tags:
- offers
parameters:
- name: offerId
in: path
required: true
description: Offers' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted offer
content:
application/json:
schema:
$ref: '#/components/schemas/OfferResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/recalls:
get:
summary: Show a list of recalls
operationId: listRecalls
tags:
- recalls
parameters:
- name: patient
in: query
description: The ID of patient
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: provider
in: query
description: The ID of provider
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: facility
in: query
description: The ID of facility
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointment
in: query
description: The ID of appointment
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointmentType
in: query
description: The ID of appointment type
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: date
in: query
description: Date of recall
schema:
type: date-time
- name: source
in: query
description: Source of recall
schema:
type: string
enum:
- active
- pending
- scheduled
- name: status
in: query
description: Status of recall
schema:
type: string
enum:
- active
- pending
- scheduled
- name: attempt
in: query
description: Attempt of recall
schema:
type: string
- name: q
in: query
description: >-
Patient name, provider name, appointment type name, facility name or
status of Recall
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of recalls
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/RecallResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a recall
operationId: recallCreate
tags:
- recalls
requestBody:
description: Create a recall
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/RecallRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/RecallResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/recalls/{recallId}:
get:
summary: Get recall by id
operationId: recallGet
tags:
- recalls
parameters:
- name: recallId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Recall
content:
application/json:
schema:
$ref: '#/components/schemas/RecallResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a recall
operationId: recallUpdate
tags:
- recalls
parameters:
- name: recallId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A recall (full or partial) to be updated
required: true
content:
application:json:
schema:
$ref: '#/components/schemas/RecallRequestUpdate'
responses:
'200':
description: Recall updated
content:
application/json:
schema:
$ref: '#/components/schemas/RecallResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a recall
operationId: recallDelete
tags:
- recalls
parameters:
- name: recallId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted recall
content:
application/json:
schema:
$ref: '#/components/schemas/RecallResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/referrals/{referralId}:
get:
summary: Get a referral by id
operationId: referralGet
tags:
- referrals
parameters:
- name: referralId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: A referral
content:
application/json:
schema:
$ref: '#/components/schemas/Referral'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a referral
operationId: referralUpdate
tags:
- referrals
parameters:
- name: referralId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A referral (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Referral'
responses:
'200':
description: Updated referral
content:
application/json:
schema:
$ref: '#/components/schemas/Referral'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a referral
operationId: referralDelete
tags:
- referrals
parameters:
- name: referralId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted referral
content:
application/json:
schema:
$ref: '#/components/schemas/Referral'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/referrals:
get:
summary: List referrals
operationId: referralsList
tags:
- referrals
parameters:
- $ref: '#/components/parameters/idParam'
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
- name: facility
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: provider
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patient
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: referringProviderId
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: referringProvider
in: query
description: The name of the referring provider
schema:
type: string
- name: duration
description: Optional duration for how long the patient should be seen for
in: query
schema:
type: number
format: int32
- name: statusReason
in: query
description: Reason why there's a status update to this referral
schema:
type: string
enum:
- patient-cancelled
- invalid-insurance
- missing-data
- other
- name: statusReasonDescription
in: query
description: Free text explaining more details about closing chat activities
schema:
type: string
- name: source
in: query
schema:
type: string
enum:
- upload
- patient-referral-form
- ui
- integrator
- followup
- manual
- name: status
in: query
schema:
type: string
enum:
- active
- called
- called-late
- scheduled
- scheduled-late
- incomplete
- expired
- cancelled
- pending
- closed
- name: startOn
in: query
schema:
type: string
format: date-time
- name: expireAt
in: query
schema:
type: string
format: date-time
- name: attempt
in: query
schema:
type: number
format: int32
- name: lastAttemptSentAt
in: query
schema:
type: string
format: date-time
- name: calledAt
in: query
schema:
type: string
format: date-time
- name: acceptedAt
in: query
schema:
type: string
format: date-time
- name: scheduledAt
in: query
schema:
type: string
format: date-time
- name: notes
in: query
schema:
type: string
- name: customerNotes
in: query
schema:
type: string
- name: appointmentType
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: reason
in: query
schema:
type: string
- name: departmentOrFacility
description: >-
When the costumer has multiple departments/facilities, this field
makes it easier to handle where the referral should go
in: query
schema:
type: string
- name: scheduledByAppointment
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: scheduledByOffer
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: processedReferralFollowup
in: query
schema:
type: string
enum:
- pending
- skipped
- failed
- success
- name: upload
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: faxUpload
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: faxSentAt
in: query
schema:
type: string
format: date-time
- name: scheduleStartOn
in: query
schema:
type: string
format: date-time
- name: referringProviderFaxNumberOverride
in: query
description: >-
If set, the fax sent back to the referring provider will be sent to
this value instead of the fax contact on the referring provider
record.
schema:
type: string
responses:
'200':
description: List of referrals
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/Referral'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create referral
operationId: referralCreate
tags:
- referrals
requestBody:
description: Create a referral
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Referral'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/Referral'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/referrals/inbound:
post:
summary: Get a list of referrals
tags:
- referrals
requestBody:
description: Request body description will be here
required: true
content:
application/json:
schema:
type: object
properties:
page:
$ref: '#/components/schemas/pageParam'
limit:
$ref: '#/components/schemas/limitParam'
dateFrom:
type: string
format: date
description: If this is missing, it will take the value of dateTo.
dateTo:
type: string
format: date
description: If this field is missing, the default date is today.
search:
type: string
minLength: 3
maxLength: 15
filterFacility:
description: Filter out the facilities by their ids.
type: array
minItems: 0
maxItems: 20
items:
type: string
filterAppointment:
type: array
minItems: 0
maxItems: 10
items:
type: string
filterReferringProvider:
description: >-
Default filter is `any`. If list of referring provider ids
are given, resulting response will remove those providers.
type: array
minItems: 0
maxItems: 10
items:
type: string
statuses:
type: array
items:
type: string
enum:
- active
- called
- called-late
- scheduled
- scheduled-late
- incomplete
- expired
- cancelled
- pending
- closed
additionalProperties: false
responses:
'200':
description: Returns a list of referrals after applying the filters
content:
application/json:
schema:
type: object
required:
- referrals
- page
- totalCount
properties:
referrals:
type: array
minItems: 0
items:
type: object
properties:
patient:
$ref: '#/components/schemas/PatientResponse'
facility:
$ref: '#/components/schemas/FacilityResponse'
status:
type: string
enum:
- active
- called
- called-late
- scheduled
- scheduled-late
- incomplete
- expired
- cancelled
- pending
- closed
startOn:
type: string
format: date
createdAt:
type: string
format: date-time
customerNotes:
type: string
minLength: 4
maxLength: 1024
notes:
type: string
minLength: 4
maxLength: 2048
page:
type: integer
format: int32
minimum: 1
totalCount:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/reminders:
get:
summary: List reminders
operationId: remindersList
tags:
- reminders
parameters:
- name: provider
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointment
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: referral
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: recall
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: telehealth
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: followup
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: followupOperation
in: query
schema:
type: string
enum:
- created
- deleted
- updated
- name: facility
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patient
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patientForm
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: message
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: type
in: query
schema:
type: string
enum:
- appointment
- feedback
- referral
- outbound-referral
- followup
- patient-form
- recall
- telehealth
- waiting-room
- name: sendAt
in: query
schema:
type: string
format: date-time
- name: sentAt
in: query
schema:
type: string
format: date-time
- name: messageTemplate
in: query
schema:
type: string
- name: status
in: query
schema:
type: string
enum:
- scheduled
- pending
- queued
- sent
- confirmed
- emailOpened
- skipped
- delivered
- blocked
- name: statusReason
in: query
schema:
type: string
- name: replied
in: query
schema:
type: integer
format: int32
- name: repliedMessage
in: query
schema:
type: string
- name: originalRepliedMessage
in: query
schema:
type: string
- name: repliedTime
in: query
schema:
type: string
format: date-time
- name: forcedTime
in: query
schema:
type: boolean
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of reminders
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/Reminder'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create reminder
operationId: reminderCreate
tags:
- reminders
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Reminder'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/Reminder'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/reminders/{reminderId}:
get:
summary: Get reminder by id
operationId: reminderGet
tags:
- reminders
parameters:
- name: reminderId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Reminder
content:
application/json:
schema:
$ref: '#/components/schemas/Reminder'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a reminder
operationId: reminderUpdate
tags:
- reminders
parameters:
- name: reminderId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: An reminder (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Reminder'
responses:
'200':
description: Reminder
content:
application/json:
schema:
$ref: '#/components/schemas/Reminder'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a reminder
operationId: reminderDelete
tags:
- reminders
parameters:
- name: reminderId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted reminder
content:
application/json:
schema:
$ref: '#/components/schemas/Reminder'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/reports:
get:
summary: List reports
operationId: reportsList
tags:
- reports
parameters:
- name: type
in: query
schema:
type: string
- name: enabled
in: query
schema:
type: boolean
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: List of reports
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ReportResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create a report
operationId: reportCreate
tags:
- reports
requestBody:
description: Report to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ReportRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/ReportResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/reports/{reportId}:
get:
summary: Get report by id
operationId: reportGet
tags:
- reports
parameters:
- name: reportId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Report
content:
application/json:
schema:
$ref: '#/components/schemas/ReportResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a report
operationId: reportUpdate
tags:
- reports
parameters:
- name: reportId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
description: A report (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ReportRequestUpdate'
responses:
'200':
description: Report updated
content:
application/json:
schema:
$ref: '#/components/schemas/ReportResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a report
operationId: reportDelete
tags:
- reports
parameters:
- name: reportId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Deleted report
content:
application/json:
schema:
$ref: '#/components/schemas/ReportResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/schedulers/{schedulerId}:
put:
summary: Update a scheduler
operationId: schedulerUpdate
tags:
- schedulers
parameters:
- name: schedulerId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A scheduler (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SchedulerRequestUpdate'
responses:
'200':
description: Reminder
content:
application/json:
schema:
type: object
properties:
message:
type: string
default: ok
statusCode:
type: integer
default: 200
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/settings:
get:
summary: List settings
operationId: settingsList
tags:
- settings
parameters:
- name: ref
description: >-
The name of the resource to which these settings apply (user,
appointment type, facility, integrator). See also refId.
in: query
schema:
type: string
enum:
- user
- provider
- facility
- appointment-type
- integrator
- name: refId
description: >-
The ID of the resource to which these settings apply (user,
appointment type, facility, integrator). See also ref.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: _id
description: >-
Luma's internal ID of these settings. It's a hexadecimal string, 24
chars long.
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of settings
content:
application/json:
schema:
type: object
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/SettingResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/settings/{settingId}:
get:
summary: Get setting by id
operationId: settingGet
tags:
- settings
parameters:
- name: settingId
in: path
required: true
description: Settings' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Setting
content:
application/json:
schema:
$ref: '#/components/schemas/SettingResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a setting
operationId: settingUpdate
tags:
- settings
parameters:
- name: settingId
in: path
required: true
description: Settings' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A setting (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SettingRequest'
responses:
'200':
description: Setting
content:
application/json:
schema:
$ref: '#/components/schemas/SettingResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/specialties:
get:
summary: List specialties
operationId: specialtiesList
tags:
- specialties
parameters:
- name: _id
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: name
in: query
schema:
type: string
- name: description
in: query
schema:
type: string
- name: parentSpecialty
in: query
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/deletedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/deletedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of specialties
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/SpecialtyResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create specialty
operationId: specialtyCreate
tags:
- specialties
requestBody:
description: Create a specialty
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/specialties/{specialtyId}:
get:
summary: Get a specialty by id
operationId: specialtyGet
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Specialty
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a specialty
operationId: specialtyUpdate
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A specialty (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyRequestUpdate'
responses:
'200':
description: Specialty
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a specialty
operationId: specialtyDelete
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted specialty
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/specialties/{specialtyId}/appointmentTypes:
get:
summary: List appointment types associated with a specialty
operationId: specialtyAppointmentTypesList
tags:
- specialties
parameters:
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: List of appointment types
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/AppointmentTypeResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/specialties/{specialtyId}/facilities:
get:
summary: List facilities associated with a specialty
operationId: specialtyFacilitiesList
tags:
- specialties
parameters:
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: List of facilities
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/FacilityResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/specialties/{specialtyId}/providers:
get:
summary: List providers associated with a specialty
operationId: specialtyProvidersList
tags:
- specialties
parameters:
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: List of providers
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/ProviderResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/specialties/{specialtyId}/appointmentTypes/{appointmentTypeId}:
post:
summary: Associate an appointment type to a specialty
operationId: specialtyAddAppointmentType
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointmentTypeId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Specialty Resource
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResourceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Remove the association between an appointment type and a specialty
operationId: specialtyDeleteAppointmentType
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointmentTypeId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted specialty resource
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResourceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/specialties/{specialtyId}/facilities/{facilityId}:
post:
summary: Associate a facility to a specialty
operationId: specialtyAddFacility
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: facilityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Specialty Resource
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResourceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Remove the association between a facility and a specialty
operationId: specialtyDeleteFacility
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: facilityId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted specialty resource
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResourceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/specialties/{specialtyId}/providers/{providerId}:
post:
summary: Associate a provider to a specialty
operationId: specialtyAddProvider
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: providerId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Specialty Resource
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResourceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Remove the association between a provider and a specialty
operationId: specialtyDeleteProvider
tags:
- specialties
parameters:
- name: specialtyId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: providerId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted specialty resource
content:
application/json:
schema:
$ref: '#/components/schemas/SpecialtyResourceResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/squigglies:
get:
summary: >-
Show a list of all available squigglies. Enabling filtering by tag,
label, q and scope.
operationId: listSquigglies
tags:
- squigglies
parameters:
- name: tag
in: query
description: Filters by tag value. Accepts Wildcard(*)
schema:
type: string
- name: label
in: query
description: Filters by label value. Accepts Wildcard(*)
schema:
type: string
- name: q
in: query
description: Applies an OR operation for both value and tag. Accepts Wildcard(*)
schema:
type: string
- name: scope
in: query
description: Used to filter out squigglies by supported product
schema:
type: string
enum:
- actionsAppointment
- actionsRecall
- actionsProcedure
- actionsDiagnostic
- broadcast
- broadcastUpload
- hub
- systemTemplatesWaitingRoom
- systemTemplates
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
responses:
'200':
description: Returns a list of squigglies
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/SquiggliesResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/systemAudits:
get:
summary: list
operationId: listSystemAudits
tags:
- systemAudits
parameters:
- name: createdAt
in: query
description: >
The date/time in which the log was created, in ISO format, including
timezone information.
Example: `2022-09-09T23:59:59-03:00`. Because this is such a
specific time, it is recommended
to use this query parameter twice, combined with `greater than` and
`lower than` operators.
Example:
`/systemAudits?createdAt=>2022-09-09T00:00:00-03:00&createdAt=<2022-09-09T23:59:59-03:00`
schema:
type: string
format: date-time
- name: appointment
in: query
description: The ID of an `appointment` related to this log message.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: patient
in: query
description: The ID of a `patient` related to this log message.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: provider
in: query
description: The ID of a `provider`/doctor related to this log message.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: appointmentType
in: query
description: The ID of an `appointmentType` related to this log message.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: facility
in: query
description: The ID of a `facility` related to this log message.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
- name: tags
in: query
description: A keyword used to label a log message.
schema:
type: string
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of systemAudits
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/SystemAuditResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/users:
get:
summary: List users
operationId: usersList
tags:
- users
parameters:
- name: name
in: query
description: Full name of the staff user
schema:
type: string
- name: firstname
in: query
description: First name
schema:
type: string
- name: lastname
in: query
description: Last name
schema:
type: string
- name: middlename
in: query
description: Middle name
schema:
type: string
- name: alternativeName
in: query
description: Alternative name
schema:
type: string
- name: displayPhone
in: query
description: >-
Phone number displayed in staff profile. Not used for communication
purposes.
schema:
type: string
- name: displayStatus
in: query
description: Account status. Informative field only, not used for access control.
schema:
type: string
enum:
- active
- pending
- suspended
- name: email
in: query
description: User's e-mail address in lowercase.
schema:
type: string
- name: roles
in: query
description: User's roles, used for access control.
schema:
type: string
enum:
- staff
- doctor
- widget
- manager
- admin
- referringProvider
- renderingProvider
- subaccount
- readFileUpload
- name: doNotContact
in: query
description: Indicates if the user has requested not to be contacted by Luma.
schema:
type: boolean
default: false
- name: doNotContactMessage
in: query
description: The unique ID of the inbound message that requested DNC.
schema:
type: string
pattern: ^[0-9a-f]{24}$
- name: stripeCustomerId
in: query
description: Customer ID from stripe for this account
schema:
type: string
- name: stripeSubscriptionId
in: query
description: Stripe subscription ID
schema:
type: string
- name: salesforceId
in: query
description: Salesforce Account ID for this account
schema:
type: string
- name: active
in: query
description: >-
Indicates if a user is active and able to log into the system or
not.
schema:
type: number
default: 0
- name: language
in: query
description: User's preferred language.
schema:
type: string
default: en
pattern: ^([a-z]{2}$|zh-t)$
- name: address
in: query
description: User's address.
schema:
type: string
- name: city
in: query
description: User's city.
schema:
type: string
- name: state
in: query
description: User's state.
schema:
type: string
- name: country
in: query
description: User's country
schema:
type: string
default: US
- name: postcode
in: query
description: User's postal code.
schema:
type: string
- name: gender
in: query
description: User's gender.
schema:
type: string
default: unknown
enum:
- male
- female
- unknown
- nonbinary
- name: avatar
in: query
description: The ID of a FileUpload containing the profile picture of the user.
schema:
type: string
pattern: ^[0-9a-f]{24}$
- name: directMessagingEmail
in: query
description: E-mail for direct communication with the user.
schema:
type: string
- name: website
in: query
description: User's website.
schema:
type: string
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: List of users
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/UserResponse'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
post:
summary: Create user
operationId: userCreate
tags:
- users
requestBody:
description: Optional description in *Markdown*
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserRequestCreate'
responses:
'201':
description: Successful creation
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/users/{userId}:
get:
summary: Get user by id
operationId: userGet
tags:
- users
parameters:
- name: userId
in: path
required: true
description: Users' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: User
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
put:
summary: Update a user
operationId: userUpdate
tags:
- users
parameters:
- name: userId
in: path
required: true
description: Users' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: A user (full or partial) to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserRequestUpdate'
responses:
'200':
description: User
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a user
operationId: userDelete
tags:
- users
parameters:
- name: userId
in: path
required: true
description: Users' unique identifier in Luma's database.
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Deleted user
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
/waitlists:
get:
summary: Show a list of waitlists
operationId: listWaitlists
tags:
- waitlists
parameters:
- name: patient
in: query
schema:
type: string
- name: provider
in: query
schema:
type: string
- name: facility
in: query
schema:
type: string
- name: offer
in: query
schema:
type: string
- name: status
in: query
schema:
type: string
enum:
- waiting
- in-flight
- offered
- confirming
- accepted
- pending
- declined
- $ref: '#/components/parameters/userParam'
- $ref: '#/components/parameters/deletedParam'
- $ref: '#/components/parameters/createdByParam'
- $ref: '#/components/parameters/updatedByParam'
- $ref: '#/components/parameters/createdAtParam'
- $ref: '#/components/parameters/updatedAtParam'
- $ref: '#/components/parameters/pageParam'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/populateParam'
- $ref: '#/components/parameters/selectParam'
responses:
'200':
description: Returns a list of waitlists
content:
application/json:
schema:
type: object
required:
- response
- page
- size
properties:
response:
type: array
minItems: 0
items:
$ref: '#/components/schemas/Waitlist'
page:
type: integer
format: int32
minimum: 1
size:
type: integer
format: int32
minimum: 0
additionalProperties: false
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create waitlists
operationId: createWaitlists
tags:
- waitlists
requestBody:
description: Waitlist to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Waitlist'
responses:
'200':
description: Returns the created waitlists
content:
application/json:
schema:
$ref: '#/components/schemas/Waitlist'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/waitlists/{waitlistId}:
get:
summary: Show a single waitlist
operationId: getWaitlistById
tags:
- waitlists
parameters:
- name: waitlistId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
responses:
'200':
description: Waitlist
content:
application/json:
schema:
$ref: '#/components/schemas/Waitlist'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
default:
description: unexpected error - need to finalize the error codes
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
put:
summary: Update a waitlist
operationId: waitlistUpdate
tags:
- waitlists
parameters:
- name: waitlistId
in: path
required: true
schema:
type: string
pattern: '[0-9a-f]'
minLength: 24
maxLength: 24
requestBody:
description: Waitlist proprieties to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Waitlist'
responses:
'200':
description: Waitlist updated
content:
application/json:
schema:
$ref: '#/components/schemas/Waitlist'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope
delete:
summary: Delete a waitlist
operationId: deleteWaitlist
tags:
- waitlists
parameters:
- name: waitlistId
in: path
required: true
schema:
type: string
responses:
'200':
description: Deleted waitlist
content:
application/json:
schema:
$ref: '#/components/schemas/Waitlist'
'401':
description: Not authenticated
'403':
description: Access token does not have the required scope