swagger: '2.0' info: version: null title: Grdn grdn.handler grdn.routes.impl.patients API description: Eden Health Inc. primary backend API service. consumes: - application/json produces: - application/json tags: - name: grdn.routes.impl.patients description: Contains handlers for routes related to Patients. paths: /v2/patient: post: summary: create-patient-handler description: Adjusts how we handle the act of registration of a patient. tags: - grdn.routes.impl.patients parameters: - in: body name: grdn.specs/create-patient-params description: 'origin spec: grdn.specs/create-patient-params' schema: type: object properties: funnel-id: type: string format: uuid first-name: type: string x-allOf: - type: string - {} ethnicity-id: type: string format: uuid dob: type: string city: type: string x-allOf: - type: string - {} preferred-name: type: string allowEmptyValue: true email: type: string x-allOf: - type: string - {} last-name: type: string x-allOf: - type: string - {} address2: type: string allowEmptyValue: true race-id: type: string format: uuid language-id: type: string format: uuid address1: type: string x-allOf: - type: string - {} pronouns: type: string allowEmptyValue: true sponsor: type: string mobile-phone: type: string x-allOf: - type: string - {} consent-version: type: string state: type: string x-allOf: - type: string - {} password: type: string x-allOf: - type: string - {} sex: enum: - '' - M - F type: string zip: type: string x-allOf: - type: string - {} work-email: type: string x-allOf: - type: string - {} required: - email - mobile-phone - password - first-name - last-name - sex - dob - address1 - city - state - zip - sponsor - consent-version title: grdn.specs/create-patient-params responses: default: description: Default success response. schema: {} get: summary: search-handler description: Searches for a patient given search params. tags: - grdn.routes.impl.patients parameters: - in: query name: mrn description: 'origin spec: grdn.specs/patient-search-params' required: false type: integer format: int64 minimum: 1 - in: query name: patient-id description: 'origin spec: grdn.specs/patient-search-params' required: false type: string format: uuid - in: query name: sub description: 'origin spec: grdn.specs/patient-search-params' required: false type: string format: uuid responses: default: description: Default success response. schema: {} /v2/patient/patient-app-data: get: summary: get-patient-app-data description: Gets patient-specific data relevant to app state. Called on app foreground. tags: - grdn.routes.impl.patients parameters: [] responses: default: description: Default success response. schema: {} /v2/patient/validate: get: summary: validate-patient-handler description: validates patient account credentials in cognito during registration. tags: - grdn.routes.impl.patients parameters: - in: query name: email description: 'origin spec: grdn.specs/validate-patient-params' required: false type: string x-allOf: - type: string - {} - in: query name: phone description: 'origin spec: grdn.specs/validate-patient-params' required: false type: string x-allOf: - type: string - {} responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}: put: summary: update-patient-handler description: "Updates patient data (i.e. Athena, Cognito).\n Requires PUT operations to be idempotent.\n Sends the user an email letting them know their profile changed." tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/update-patient-params' required: true type: string format: uuid - in: body name: grdn.specs/update-patient-params description: 'origin spec: grdn.specs/update-patient-params' schema: type: object properties: first-name: type: string x-allOf: - type: string - {} ethnicity-id: type: string format: uuid app-language: enum: - en - es type: string dob: type: string city: type: string x-allOf: - type: string - {} preferred-name: type: string allowEmptyValue: true email: type: string x-allOf: - type: string - {} last-name: type: string x-allOf: - type: string - {} address2: type: string allowEmptyValue: true race-id: type: string format: uuid language-id: type: string format: uuid address1: type: string x-allOf: - type: string - {} pronouns: type: string allowEmptyValue: true mobile-phone: type: string x-allOf: - type: string - {} state: type: string x-allOf: - type: string - {} sex: enum: - '' - M - F type: string zip: type: string x-allOf: - type: string - {} title: grdn.specs/update-patient-params responses: default: description: Default success response. schema: {} get: summary: get-patient-handler description: Given a patient-id, hydrate all patient data. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: ' required: null responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/account-info: get: summary: get-patient-account-info-handler description: Given a patient id, return patient account info from Athena, Cognito and Postgres. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: {} put: summary: put-patient-account-info-handler description: Update patient account info in Athena, Cognito and Postgres for a given patient id. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs.patients/patient-account-info-specs' required: true type: string format: uuid - in: body name: grdn.specs.patients/patient-account-info-specs description: 'origin spec: grdn.specs.patients/patient-account-info-specs' schema: type: object properties: first-name: type: string x-allOf: - type: string - {} last-name: type: string x-allOf: - type: string - {} email: type: string x-allOf: - type: string - {} mobile-phone: type: string x-allOf: - type: string - {} required: - first-name - last-name - email - mobile-phone title: grdn.specs.patients/patient-account-info-specs responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/ai-chat-suggestion: get: summary: ai-chat-suggestion description: '' tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs.patients/co-pilot-handler-params' required: true type: string format: uuid responses: default: description: Default success response. schema: type: object properties: suggestion: type: string required: - suggestion title: grdn.specs.patients/co-pilot-handler-resp /v2/patient/{patient-id}/app-language: put: summary: put-patient-app-language-handler description: Updates the patient's preferred app language tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs.patients/put-patient-app-language-params-spec' required: null - in: body name: grdn.specs.patients/put-patient-app-language-params-spec description: 'origin spec: grdn.specs.patients/put-patient-app-language-params-spec' schema: type: object properties: app-language: enum: - en - es type: string required: - app-language title: grdn.specs.patients/put-patient-app-language-params-spec responses: default: description: Default success response. schema: type: object properties: app-language: enum: - en - es type: string required: - app-language title: grdn.specs.patients/put-patient-app-language-response-spec /v2/patient/{patient-id}/case: post: summary: post-patient-case description: Creates a patient case on athena tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs.patients/post-patient-case-params-spec' required: true type: string format: uuid - in: body name: grdn.specs.patients/post-patient-case-params-spec description: 'origin spec: grdn.specs.patients/post-patient-case-params-spec' schema: type: object properties: notes: type: string pharmacy: type: string prescription-name: type: string provider-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string medication-id: type: number format: double required: - notes - pharmacy - prescription-name - provider-id - medication-id title: grdn.specs.patients/post-patient-case-params-spec responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/chart: get: summary: get-chart-handler description: "Given a Patient ID, fetch patient chart info.\n Gathers Allergies, Medications, and Problems" tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/deactivate: put: summary: deactivate-patient description: Deactivates the patient. Deletes their cognito user. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: ' required: null responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/headshot: get: summary: get-headshot-handler description: Gets patient headshot. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/join: put: summary: join-channels-handler description: "For a given patient-id, if a clinician has permission to join a patient's channels,\n join those channels." tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: body name: grdn.specs/patient-id-params description: 'origin spec: grdn.specs/patient-id-params' schema: type: object properties: funnel-id: type: string format: uuid title: grdn.specs/patient-id-params responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/location: put: summary: location-handler description: Updates a patients location given state and time zone or lat/lng. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/location-params' required: true type: string format: uuid - in: body name: grdn.specs/location-params description: 'origin spec: grdn.specs/location-params' schema: type: object properties: state: type: string x-allOf: - type: string - {} lat: type: number format: float lng: type: number format: float required: - state - lat - lng title: grdn.specs/location-params responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/pharmacy: get: summary: get-pharmacy-handler description: Given a patient id, fetch their default pharmacy. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/prescription: get: summary: get-prescriptions-medications description: Get the member's prescriptions medications details. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: type: array items: type: object properties: end-date: type: string x-nullable: true dosage-frequency-unit: type: string external-note: type: string quantity-value: type: integer format: int64 dosage-quantity-value: type: integer format: int64 dosage-duration-value: type: integer format: int64 name: type: string last-updated: type: string sig: type: string dosage-frequency-value: type: integer format: int64 medication: type: string quantity-unit: type: string medication-id: type: number format: double refills-allowed: type: integer format: int64 start-date: type: string dosage-duration-unit: type: string active: type: boolean dosage-quantity-unit: type: string dosage-additional-instructions: type: string required: - medication - medication-id - last-updated - name - active - start-date /v2/patient/{patient-id}/profile: get: summary: get-patient-profile-handler description: Given a patient id, return additional profile data. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: type: object properties: employer-name: type: string first-name: type: string x-allOf: - type: string - {} app-language: enum: - en - es type: string dob: type: string city: type: string x-allOf: - type: string - {} address-1: type: string x-allOf: - type: string - {} preferred-name: type: string x-nullable: true vaccination-status: type: string x-nullable: true patient-id: type: string format: uuid vaccinations: type: array items: type: object properties: manufacturer: type: string x-nullable: true vaccinated-at: x-nullable: true title: grdn.specs.patients/vaccination x-allOf: - type: array items: type: object properties: manufacturer: type: string x-nullable: true vaccinated-at: x-nullable: true title: grdn.specs.patients/vaccination id: type: string email: type: string x-allOf: - type: string - {} sponsor-name: type: string last-name: type: string x-allOf: - type: string - {} pronouns: type: string x-nullable: true primary-provider-id: type: string x-nullable: true mobile-phone: type: string x-allOf: - type: string - {} sponsor-id: type: string format: uuid address-2: type: string x-nullable: true state: type: string x-allOf: - type: string - {} patient-location: type: object properties: location-valid: type: boolean combined-statistical-area: type: string x-nullable: true patient-id: type: string format: uuid id: type: string format: uuid updated-at: {} lat-long: type: string x-nullable: true created-at: {} state: type: string x-allOf: - type: string - {} time-zone-id: type: string x-nullable: true required: - updated-at - state - lat-long - id - patient-id - location-valid - created-at - time-zone-id - combined-statistical-area title: grdn.specs.patients/patient-location sex: enum: - '' - M - F type: string membership-valid: type: boolean zip: type: string x-allOf: - type: string - {} required: - email - preferred-name - last-name - mobile-phone - sex - employer-name - vaccinations - city - pronouns - state - first-name - patient-location - dob - vaccination-status - primary-provider-id - membership-valid - zip - id - sponsor-id - sponsor-name - address-1 - address-2 - patient-id - app-language title: grdn.specs.patients/get-patient-profile-handler-response /v2/patient/{patient-id}/triage-status: get: summary: get-triage-status-handler description: Gets triage status for patient. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: {} post: summary: post-triage-status-handler description: Creates manual triage status updates by providers. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs.patients/triage-status-params' required: true type: string format: uuid - in: body name: grdn.specs.patients/triage-status-params description: 'origin spec: grdn.specs.patients/triage-status-params' schema: type: object properties: triage-status: enum: - triage-status/never-taken - triage-status/incomplete - triage-status/isolate - triage-status/cleared type: string return-to-work-date: type: string x-allOf: - type: string - {} x-anyOf: - type: string x-allOf: - type: string - {} - {} allowEmptyValue: true required: - triage-status title: grdn.specs.patients/triage-status-params responses: default: description: Default success response. schema: type: object properties: patient-id: type: string format: uuid triage-status: enum: - triage-status/never-taken - triage-status/incomplete - triage-status/isolate - triage-status/cleared type: string return-to-work-date: type: string x-allOf: - type: string - {} x-anyOf: - type: string x-allOf: - type: string - {} - {} x-nullable: true required: - patient-id - triage-status title: grdn.specs.patients/triage-status-params /v2/patient/{patient-id}/vaccination-status: get: summary: get-vaccination-status-handler description: Return patient vaccination status tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: type: object properties: status: type: string required: - status title: grdn.specs.patients/get-vaccination-status-response /v2/patient/{patient-id}/video-messages: get: summary: patient-has-had-video-visits-handler description: "Given a patient ID, return a boolean indicating whether the patient has had\n a video visit." tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/has-had-video-visits-params' required: true type: string format: uuid responses: default: description: Default success response. schema: {} /v2/patient/{patient-id}/visits: get: summary: get-visits-handler description: Gets a patient's visits. tags: - grdn.routes.impl.patients parameters: - in: path name: patient-id description: 'origin spec: grdn.specs/patient-id-params' required: true type: string format: uuid - in: query name: funnel-id description: 'origin spec: grdn.specs/patient-id-params' required: false type: string format: uuid responses: default: description: Default success response. schema: type: array items: type: object properties: appointment-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string encounter-visit-name: type: string closeduser: type: string provider-name: type: string x-nullable: true provider-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string sort-date: {} provider-first-name: type: string appointment-start-date: type: string x-allOf: - type: string - {} encounter-type: type: string department-timezone: type: string x-nullable: true after-visit-summary: type: object properties: appointment_id: type: integer format: int64 id: type: string format: uuid patient_id: type: string updated-at: {} status: enum: - ready-status - pending-status - sent-status - expired-status type: string created-at: {} content: type: string x-nullable: true provider_id: type: string sending_provider_id: type: string encounter_id: type: integer format: int64 deleted_on: x-nullable: true message_id: type: integer format: int64 required: - status title: grdn.specs.after-visit-summary/after-visit-summary providerphone: type: string status: type: string encounter-id: type: string x-anyOf: - type: string - type: integer format: int64 zoom-meeting-id: type: string patientlocationid: type: integer format: int64 patientstatus: type: string department-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string department-name: type: string x-nullable: true patientstatusid: type: integer format: int64 provider-last-name: type: string encounter-date: type: string closeddate: type: string x-allOf: - type: string - {} lastupdated: type: string required: - department-id - patientstatus - encounter-type - encounter-date - provider-id - patientstatusid - appointment-start-date - sort-date - encounter-id - department-timezone - appointment-id - status - department-name - providerphone - encounter-visit-name - lastupdated - provider-name - after-visit-summary title: grdn.specs.patients/encounter x-anyOf: - type: object properties: appointment-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string encounter-visit-name: type: string closeduser: type: string provider-name: type: string x-nullable: true provider-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string sort-date: {} provider-first-name: type: string appointment-start-date: type: string x-allOf: - type: string - {} encounter-type: type: string department-timezone: type: string x-nullable: true after-visit-summary: type: object properties: appointment_id: type: integer format: int64 id: type: string format: uuid patient_id: type: string updated-at: {} status: enum: - ready-status - pending-status - sent-status - expired-status type: string created-at: {} content: type: string x-nullable: true provider_id: type: string sending_provider_id: type: string encounter_id: type: integer format: int64 deleted_on: x-nullable: true message_id: type: integer format: int64 required: - status title: grdn.specs.after-visit-summary/after-visit-summary providerphone: type: string status: type: string encounter-id: type: string x-anyOf: - type: string - type: integer format: int64 zoom-meeting-id: type: string patientlocationid: type: integer format: int64 patientstatus: type: string department-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string department-name: type: string x-nullable: true patientstatusid: type: integer format: int64 provider-last-name: type: string encounter-date: type: string closeddate: type: string x-allOf: - type: string - {} lastupdated: type: string required: - department-id - patientstatus - encounter-type - encounter-date - provider-id - patientstatusid - appointment-start-date - sort-date - encounter-id - department-timezone - appointment-id - status - department-name - providerphone - encounter-visit-name - lastupdated - provider-name - after-visit-summary title: grdn.specs.patients/encounter - type: object properties: priority: type: string provider-name: type: string x-nullable: true provider-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string sort-date: {} documentroute: type: string last-modified-date: type: string document-subclass: type: string patient-id: type: integer format: int64 document-description: type: string createddocuments: type: array internal-note: type: string created-user: type: string status: type: string document-class: type: string subject: type: string department-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string patient-case-id: type: string last-modified-date-time: type: string created-date: type: string lastmodifieduser: type: string created-date-time: type: string x-allOf: - type: string - {} documentsource: type: string description: type: string required: - created-date - description - created-date-time - department-id - last-modified-date-time - documentroute - patient-case-id - document-class - sort-date - document-description - priority - status - created-user - patient-id - createddocuments - document-subclass - last-modified-date - lastmodifieduser - documentsource - provider-name title: grdn.specs.patients/case - type: object properties: appointment-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string appointment-type-id: type: string appointment-status: type: string start-time: {} provider-name: type: string x-nullable: true provider-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string sort-date: {} copay: type: integer format: int64 department-timezone: type: string x-nullable: true patient-appointment-type-name: type: string zoom-meeting-id: type: string department-id: type: integer format: int64 x-anyOf: - type: integer format: int64 - type: string appointmentcopay: type: object properties: collectedforother: type: integer format: int64 collectedforappointment: type: integer format: int64 insurancecopay: type: integer format: int64 required: - collectedforother - collectedforappointment - insurancecopay title: grdn.specs.patients/appointmentcopay department-name: type: string x-nullable: true duration: type: integer format: int64 date: type: string required: - department-id - date - copay - provider-id - start-time - duration - appointment-type-id - sort-date - department-timezone - appointment-id - patient-appointment-type-name - department-name - appointmentcopay - appointment-status - provider-name title: grdn.specs.patients/appointment /v2/sidebar: get: summary: get-sidebar-handler description: "List all patients and their channels to populate the messenger sidebar.\n If a prev-last-updated-at-in-ms timestamp is provided, only return channels which have\n been updated since then." tags: - grdn.routes.impl.patients parameters: - in: query name: prev-last-updated-at-in-ms description: 'origin spec: grdn.specs/get-sidebar-params' required: false type: integer format: int64 responses: default: description: Default success response. schema: type: object properties: patients: type: array items: type: object properties: athena-status: enum: - deleted - inactive - active - prospective type: string awaiting-screeners: type: boolean first-name: type: string x-allOf: - type: string - {} preferred-name: type: string x-nullable: true assigned: type: array items: type: string format: uuid sendbird-user-id: type: string format: uuid id: type: string format: uuid last-name: type: string x-allOf: - type: string - {} location: type: object properties: state: type: string x-allOf: - type: string - {} valid: type: boolean required: - state - valid title: grdn.specs.patients/location careteam-id: type: string format: uuid sponsor-id: type: string format: uuid mrn: type: integer format: int64 minimum: 1 secondary-mrns: type: array items: type: integer format: int64 minimum: 1 required: - careteam-id - id - location - mrn - preferred-name - first-name - last-name - secondary-mrns - sendbird-user-id - sponsor-id - athena-status title: grdn.specs.patients/sidebar-patient-payload patient-summaries: type: array items: type: object properties: patient-id: type: string format: uuid status: type: string assigned-provider-ids: type: array items: type: string format: uuid tag-ids: type: array items: type: string format: uuid last-message: type: object properties: message-type: type: string sender: type: object properties: id: type: string format: uuid required: - id title: grdn.specs.patients/sender required: - message-type - sender title: grdn.specs.patients/last-message updated-at: {} is-patient-online: type: boolean required: - patient-id - status - assigned-provider-ids - tag-ids - last-message - updated-at - is-patient-online title: grdn.specs.patients/sidebar-patient-summary last-updated-at: type: integer format: int64 required: - patients title: grdn.specs.patients/get-sidebar-handler-response