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