openapi: 3.0.1 info: title: Buoy Symptom Checker API termsOfService: https://static.buoyhealth.com/Buoy+API+Terms+of+Service.pdf contact: email: alex.nixon@buoyhealth.com version: v2.0 x-logo: url: https://www.buoyhealth.com/cms/images/buoy_logo.svg servers: - url: https://api.sandbox.buoyhealth.com/symptom-checker/v2 - url: https://api.buoyhealth.com/symptom-checker/v2 security: - Bearer: [] paths: /interviews/anonymous/: post: tags: - Interviews summary: Create anonymous interview description: 'Creates a new anonymous interview. This endpoint uses basic demographic information (age and sex at minimum) to create a de-identified interview. It does not require an authenticated user or store user information with a specific profile in Buoy.' operationId: interviews_anonymous requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateAnonymousInterviewRequestSchema' required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateAnonymousInterviewResponseSchema' examples: OK: value: token: 07218b0b-bed3-4d9b-92b4-795d1e21a21c profile: is_self: true age: 63 sex: m start_time: 01/01/2020 12:00:00 end_time: null location: latitude: 42.3377967 longitude: -71.0705763 postal_code: 02118 country: US approximate: true mode: input should_display_alarm: false '400': $ref: '#/components/responses/400MissingProfileResponse' '401': $ref: '#/components/responses/401Response' x-codegen-request-body-name: data /interviews/{interview_token}/: get: tags: - Interviews summary: Read interview description: Describes an interview instance. operationId: interviews_read parameters: - name: interview_token in: path description: A UUID-formatted token uniquely identifying an interview instance. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadUpdateInterviewSchema' examples: OK: value: - token: 07218b0b-bed3-4d9b-92b4-795d1e21a21c start_time: 01/01/2020 12:00:00 end_time: 01/01/2020 12:02:00 profile: 8849e11e-ceab-414f-a943-9ccfd5dd8179 location: latitude: 42.3377967 longitude: -71.0705763 postal_code: 02118 country: US approximate: true mode: protocol should_display_alarm: false _links: result: http://sandbox.buoyhealth.com/api/results/fae7f712-15ce-4002-bf79-a80ff4c80f07/ '401': $ref: '#/components/responses/401Response' '404': description: Not Found content: application/json: schema: type: object additionalProperties: {} examples: NotFound: value: detail: Not found. put: tags: - Interviews summary: Update interview description: 'Updates the interview operation mode one of the three modes: input, protocol, or differential. For more information on the differences of the interview modes, please refer to the [Interviews explainer page.](doc:explainer-interviews)' operationId: interviews_update parameters: - name: interview_token in: path description: A UUID-formatted token uniquely identifying an interview instance. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateInterviewRequestSchema' required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadUpdateInterviewSchema' examples: OK: value: token: 89aac148-ea1b-4801-bd3e-e27a0f9d10b9 start_time: 01/01/2020 12:00:00 end_time: null profile: 742970fd-7b92-45d2-b935-03841b35259a location: latitude: 42.3377967 longitude: -71.0705763 postal_code: 02118 country: US approximate: true mode: differential should_display_alarm: false _links: next: http://sandbox.buoyhealth.com/api/questions/311730e9-f0f6-42de-ac05-9edb8f8b45e6/ '202': description: Indicates the interview mode was accepted, but the resource won't be updated. The interview mode is reset automatically when the user either adds/updates a chief complaint or edits a related question answer. Additionally, in some cases where the chief complaint(s) could not be correctly linked to a diagnosis, a new chief complaint needs to be added. content: application/json: schema: type: object additionalProperties: {} examples: Accepted: value: status: Accepted '401': $ref: '#/components/responses/401Response' '409': description: Indicates that the interview is not in a state that can be updated. Interviews can not be updated if they have been completed, do not have a chief complaint or have unanswered questions. content: application/json: schema: type: object additionalProperties: {} examples: Conflict: value: Interview has an unanswered question. x-codegen-request-body-name: data /complaints/: get: tags: - Complaints summary: List complaints description: Returns a list of complaints associated with an interview. operationId: complaints_list parameters: - name: interview in: query description: A UUID-formatted token uniquely identifying an interview instance. required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadComplaintSchema' examples: List Complaints: $ref: '#/components/examples/ComplaintListResponse' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFound' post: tags: - Complaints summary: Create complaint description: 'Adds a chief complaint to an interview. The client should not expect that an interpretation will be returned for all user-generated complaints. The AI will do its best to interpret the query, but it is not guaranteed to succeed in finding appropriate interpretation matches. In instances where no interpretations are returned, the user should be asked to submit a new query. If a complaint is accepted while the interview is in the "protocol" or "differential" mode, the interview will be reset to the "input" mode.' operationId: complaints_create requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateComplaintSchema' required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ReadComplaintSchema' examples: Create Complaint: $ref: '#/components/examples/ComplaintCreateResponse' '204': description: No content. The system could not interpret the query. content: {} '400': description: Bad request content: application/json: schema: type: array items: type: string examples: Invalid Interview: value: '[Invalid ''interview'']' '401': $ref: '#/components/responses/401Response' x-codegen-request-body-name: data /complaints/{complaint_token}/: get: tags: - Complaints summary: Read complaint description: Returns an object describing the current state of a complaint. operationId: complaints_read parameters: - name: complaint_token in: path description: A UUID-formatted token uniquely identifying a complaint. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadComplaintSchema' examples: Read Complaint: $ref: '#/components/examples/ComplaintWithClarificationResponse' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFound' put: tags: - Complaints summary: Update complaint description: Updates a complaint with a clarification chosen from an AI generated list of interpretations. operationId: complaints_update parameters: - name: complaint_token in: path description: A UUID-formatted token uniquely identifying a complaint. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateComplaintSchema' required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadComplaintSchema' examples: Update Complaint: $ref: '#/components/examples/ComplaintWithClarificationResponse' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFound' x-codegen-request-body-name: data delete: tags: - Complaints summary: Delete complaint description: 'Deletes a complaint. Deleting a complaint will automatically reset the interview to the "input" mode and removes any complaints or questions answered that previously followed the complaint.' operationId: complaints_delete parameters: - name: complaint_token in: path description: A UUID-formatted token uniquely identifying a complaint. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '204': description: No Content content: {} '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFound' /queries/: get: tags: - Queries summary: List queries description: Retrieves autocomplete text for user queries. operationId: queries_list parameters: - name: text in: query description: User complaint search text. required: true examples: TextExample: value: neck pain summary: Text Example schema: type: string - name: tag in: query description: A label to include in the response. When provided, the server will return the response to the request with the optional 'tag' parameter included. This is to help clients order responses correctly when network latency is greater than the time between requests (e.g., when requests are sent with each character typed). A monotonically increasing integer value works best. examples: TagExample: value: '1' summary: Tag Example schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadAutoCompleteQuerySchema' examples: OK: value: text: neck p tag: '1' suggestions: - neck pain - neck pain moving down right arm - neck pain and headache '400': description: Bad Request content: application/json: schema: type: object additionalProperties: {} examples: BadRequest: value: - Must provide query parameter 'text' summary: Bad Request '401': $ref: '#/components/responses/401Response' /intents/: get: tags: - Intents summary: List intents description: Returns a list of intents associated with an interview. operationId: intents_list parameters: - name: interview in: query description: A UUID-formatted token uniquely identifying an interview instance. schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListIntentSchema' '401': $ref: '#/components/responses/401Response' post: tags: - Intents summary: Create intent description: 'Creates a new intent. Intents gathered at the start of an interview (or after entering complaints) should be submitted with the "INTERVIEW_START" event. Intents gathered at the end of an interview should be submitted with the "INTERVIEW_RESULT" event. An empty string ("") should always be submitted in the detail parameter.' operationId: intents_create requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateIntentSchema' required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/IntentSchema' examples: INTERVIEW_START: $ref: '#/components/examples/IntentInterviewStartResponse' INTERVIEW_RESULT: $ref: '#/components/examples/IntentInterviewResultResponse' '400': $ref: '#/components/responses/400Intent' '401': $ref: '#/components/responses/401Response' x-codegen-request-body-name: data /intents/{intent_token}/: get: tags: - Intents summary: Read intent description: Returns an object describing the current state of an intent. operationId: intents_read parameters: - name: intent_token in: path description: A UUID-formatted token uniquely identifying an intent. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/IntentSchema' examples: INTERVIEW_START: $ref: '#/components/examples/IntentInterviewStartResponse' INTERVIEW_RESULT: $ref: '#/components/examples/IntentInterviewResultResponse' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFoundHTML' put: tags: - Intents summary: Update intent description: Updates an intent. operationId: intents_update parameters: - name: intent_token in: path description: A UUID-formatted token uniquely identifying an intent. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateIntentSchema' required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/IntentSchema' examples: INTERVIEW_START: $ref: '#/components/examples/IntentInterviewStartResponse' INTERVIEW_RESULT: $ref: '#/components/examples/IntentInterviewResultResponse' '400': $ref: '#/components/responses/400Intent' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFoundHTML' x-codegen-request-body-name: data delete: tags: - Intents summary: Delete intent description: Deletes an intent. operationId: intents_delete parameters: - name: intent_token in: path description: A UUID-formatted token uniquely identifying an intent. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '204': description: No Content content: {} '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFoundHTML' /questions/: get: tags: - Questions summary: List questions description: Lists interview questions. operationId: questions_list parameters: - name: interview in: query description: A valid interview token required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListQuestionsSchema' examples: Read question: $ref: '#/components/examples/ListQuestionResponse' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFound' /questions/{question_token}/: get: tags: - Questions summary: Read question description: Retrieves an interview question. operationId: questions_read parameters: - name: question_token in: path description: A UUID-formatted token uniquely identifying a question. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadQuestionSchema' examples: Read question: $ref: '#/components/examples/QuestionResponse' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFoundHTML' put: tags: - Questions summary: Update question description: Updates the answer to a question. When a user updates the answer to a question, the interview resets so that the question sequence following the edit is all new. Thus, if the interview had fifteen questions and a user edits the eighth question, the interview will have eight answered questions and generate a new ninth question. This is done so that the system has the opportunity to change the question sequence to reflect the latest information from the user. If the updated question was asked before the interview complaint mode was changed, complaint mode is reset True. operationId: questions_update parameters: - name: question_token in: path description: A UUID-formatted token uniquely identifying a question. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateQuestionSchema' required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadQuestionSchema' examples: Read question: $ref: '#/components/examples/QuestionResponse' '400': $ref: '#/components/responses/400Questions' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFoundHTML' x-codegen-request-body-name: data /questions/{question_token}/explain/: get: tags: - Questions summary: Explain question description: Returns an object with diagnosis and predictors to help explain why a question was asked. Refer to the [questions explainer](doc:explainer-questions#using-the-explain-endpoint) for more details. operationId: questions_explain parameters: - name: question_token in: path description: A UUID-formatted token uniquely identifying a question. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionExplainSchema' examples: Explain question: $ref: '#/components/examples/QuestionExplainResponse' '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFoundHTML' /results/{result_token}/: get: tags: - Results summary: Read result description: Returns an object describing an interview result. Refer to [the results explainer](doc:explainer-results) for a detailed description of the result endpoint. operationId: results_read parameters: - name: result_token in: path description: A UUID-formatted token uniquely identifying a result. required: true schema: pattern: '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReadResultsSchema' examples: Differential and Triage: $ref: '#/components/examples/ResultsDifferentialAndTriageResponse' Triage Only: $ref: '#/components/examples/ResultsTriageOnlyResponse' No Result: $ref: '#/components/examples/ResultsNoResult' '204': description: No content (the interview is not finished). content: application/json: schema: type: object additionalProperties: {} examples: Not Found: value: status: No Content '401': $ref: '#/components/responses/401Response' '404': $ref: '#/components/responses/404NotFound' components: schemas: ReadProfileSchema: required: - token type: object properties: tag: $ref: '#/components/schemas/ProfileTagProperty' token: title: token description: A UUID-formatted token uniquely identifying a user profile. type: string format: uuid first_name: $ref: '#/components/schemas/FirstNameProperty' last_name: $ref: '#/components/schemas/LastNameProperty' phone: $ref: '#/components/schemas/PhoneProperty' is_self: $ref: '#/components/schemas/IsSelfProperty' age: $ref: '#/components/schemas/AgeProperty' birthday: $ref: '#/components/schemas/BirthdayProperty' sex: $ref: '#/components/schemas/SexProperty' race: $ref: '#/components/schemas/RaceProperty' height: $ref: '#/components/schemas/HeightProperty_Optional' weight: $ref: '#/components/schemas/WeightProperty' bmi: $ref: '#/components/schemas/BMIProperty' CreateProfileSchemaBirthdayRequired: required: - sex - birthday type: object properties: tag: $ref: '#/components/schemas/ProfileTagProperty' is_self: $ref: '#/components/schemas/IsSelfProperty_DefaultTrue' sex: $ref: '#/components/schemas/SexProperty' race: $ref: '#/components/schemas/RaceProperty' age: $ref: '#/components/schemas/AgeProperty_NoExample' birthday: $ref: '#/components/schemas/BirthdayProperty' height: $ref: '#/components/schemas/HeightProperty_Optional' weight: $ref: '#/components/schemas/WeightProperty' first_name: $ref: '#/components/schemas/FirstNameProperty' last_name: $ref: '#/components/schemas/LastNameProperty' phone: $ref: '#/components/schemas/PhoneProperty' CreateProfileSchemaAgeRequired: required: - sex - age type: object properties: tag: $ref: '#/components/schemas/ProfileTagProperty' is_self: $ref: '#/components/schemas/IsSelfProperty_DefaultTrue' sex: $ref: '#/components/schemas/SexProperty' race: $ref: '#/components/schemas/RaceProperty' age: $ref: '#/components/schemas/AgeProperty' birthday: $ref: '#/components/schemas/BirthdayProperty_NoExample' height: $ref: '#/components/schemas/HeightProperty_Optional' weight: $ref: '#/components/schemas/WeightProperty' first_name: $ref: '#/components/schemas/FirstNameProperty' last_name: $ref: '#/components/schemas/LastNameProperty' phone: $ref: '#/components/schemas/PhoneProperty' AnonymousProfileSchema: title: profile description: A UUID-formatted token uniquely identifying an interview profile. required: - age - sex type: object properties: is_self: $ref: '#/components/schemas/IsSelfProperty_DefaultTrue' age: $ref: '#/components/schemas/AgeProperty' sex: $ref: '#/components/schemas/SexProperty' UpdateProfileSchema: required: - birthday - sex type: object properties: tag: $ref: '#/components/schemas/ProfileTagProperty' is_self: $ref: '#/components/schemas/IsSelfProperty' sex: $ref: '#/components/schemas/SexProperty' race: $ref: '#/components/schemas/RaceProperty' age: $ref: '#/components/schemas/AgeProperty' birthday: $ref: '#/components/schemas/BirthdayProperty' height: $ref: '#/components/schemas/HeightProperty' weight: $ref: '#/components/schemas/WeightProperty' first_name: $ref: '#/components/schemas/FirstNameProperty' last_name: $ref: '#/components/schemas/LastNameProperty' phone: $ref: '#/components/schemas/PhoneProperty' ProfileTagProperty: title: tag minLength: 1 type: string description: A unique tag identifying the user profile to the API client. Required for authenticated interviews when using M2M tokens. ProfileTokenProperty: title: profile type: string description: A UUID-formatted token uniquely identifying a user profile. format: uuid IsSelfProperty: title: is_self type: boolean description: Boolean representing if a user is answering as themselves ('true') or for someone else ('false'). Defaults to 'true' if not provided. example: true IsSelfProperty_DefaultTrue: title: is_self type: boolean description: Boolean representing if a user is answering as themselves ('true') or for someone else ('false'). Defaults to 'true' if not provided. default: true example: true AgeProperty: title: age maximum: 120 minimum: 2 type: number description: Float between 2 and 120 representing the user's age. example: 63 AgeProperty_NoExample: title: age maximum: 120 minimum: 2 type: number description: Float between 2 and 120 representing the user's age. SexProperty: title: sex type: string description: The user's sex assigned at birth, either 'm' for male or 'f' for female. enum: - m - f example: m RaceProperty: title: race type: string description: The user's race from the options provided. enum: - 'race: asian or pacific islander' - 'race: black' - 'race: hispanic' - 'race: middle eastern' - 'race: native american' - 'race: south asian' - 'race: white' example: 'race: asian or pacific islander' FirstNameProperty: title: first_name minLength: 1 type: string description: The user's first name. LastNameProperty: title: last_name minLength: 1 type: string description: The user's last name. PhoneProperty: title: phone minLength: 1 type: string description: The user's phone number. WeightProperty: title: weight type: integer description: The user's weight in pounds (lbs). example: 152 minimum: 0 maximum: 1200 HeightProperty: title: height required: - feet - inches type: object description: The user's height in feet and inches. properties: feet: $ref: '#/components/schemas/FeetProperty' inches: $ref: '#/components/schemas/InchesProperty' HeightProperty_Optional: title: height type: object properties: feet: $ref: '#/components/schemas/FeetProperty' inches: $ref: '#/components/schemas/InchesProperty' FeetProperty: title: feet type: integer example: 5 minimum: 0 maximum: 20 description: The feet measurement of a user's height. InchesProperty: title: inches type: integer example: 9 minimum: 0 maximum: 11 description: The inches measurement of a user's height. BirthdayProperty: title: birthday type: object description: The user's birthday. properties: year: title: year type: integer example: 1958 month: title: month type: integer example: 5 day: title: day type: integer example: 3 BirthdayProperty_NoExample: title: birthday type: object description: The user's birthday. properties: year: title: year type: integer month: title: month type: integer day: title: day type: integer BMIProperty: title: bmi type: number minimum: 0 maximum: 200 description: The user's BMI. BMI is automatically calculated if height and weight are submitted. example: 22.4 LocationProperty: title: location type: object description: The user's current location. properties: latitude: $ref: '#/components/schemas/LatitudeProperty' longitude: $ref: '#/components/schemas/LongitudeProperty' postal_code: $ref: '#/components/schemas/PostalCodeProperty' country: $ref: '#/components/schemas/CountryProperty' approximate: $ref: '#/components/schemas/ApproximateProperty' LatitudeProperty: title: latitude type: number description: Latitude coordinate of user's current location. minimum: -90 maximum: 90 LongitudeProperty: title: longitude type: number description: Longitude coordinate of user's current location. minimum: -180 maximum: 180 PostalCodeProperty: title: postal_code maxLength: 32 minLength: 1 type: string description: The user's postal code. In the US, this is equivalent to zip code. example: 02118 CountryProperty: title: country minLength: 1 type: string description: The user's IATA defined country code. example: US ApproximateProperty: title: approximate type: boolean description: Indicates that the user did not provide location data and user's location data was determined through an IP address lookup approximation. example: US LinksProperty: title: _links type: object description: Conditional links that point to the next step of the interview. properties: next: type: string description: Absolute URI for next the question in an interview. example: null result: type: string description: Absolute URI for the result of an interview. example: http://sandbox.buoyhealth.com/api/results/fae7f712-15ce-4002-bf79-a80ff4c80f07/ interview: type: string description: Absolute URI for an interview. Returned in instances where there are no protocol based questions available in addition to the _msg parameter being set to \"No protocol-based questions or results. Try \'differential\' mode.\" complaints: type: string description: Absolute URI for a complaint. Returned in instances where there are no differential based questions available in addition to the _msg parameter being set to \"No differential-based questions or results. Add or update complaints.\" MsgProperty: title: _msg type: string description: Conditional msgs displayed by the interview. nullable: true CreateAnonymousInterviewRequestSchema: type: object properties: profile: $ref: '#/components/schemas/AnonymousProfileSchema' location: $ref: '#/components/schemas/CreateLocationProperty' required: - profile CreateAnonymousInterviewResponseSchema: type: object properties: token: $ref: '#/components/schemas/ProfileTokenProperty' profile: $ref: '#/components/schemas/AnonymousProfileSchema' start_time: $ref: '#/components/schemas/InterviewStartTimeProperty' end_time: $ref: '#/components/schemas/InterviewEndTimeProperty' location: $ref: '#/components/schemas/LocationProperty' mode: $ref: '#/components/schemas/InterviewModeProperty' should_display_alarm: $ref: '#/components/schemas/InterviewShouldDisplayAlarmProperty' required: - end_time - location - start_time - token CreateAuthenticatedInterviewRequestSchema: type: object properties: profile: $ref: '#/components/schemas/ProfileTokenProperty' location: $ref: '#/components/schemas/CreateLocationProperty' required: - profile CreateAuthenticatedInterviewResponseSchema: type: object properties: token: $ref: '#/components/schemas/InterviewTokenProperty' profile: $ref: '#/components/schemas/ProfileTokenProperty' start_time: $ref: '#/components/schemas/InterviewStartTimeProperty' end_time: $ref: '#/components/schemas/InterviewEndTimeProperty' location: $ref: '#/components/schemas/LocationProperty' mode: $ref: '#/components/schemas/InterviewModeProperty' should_display_alarm: $ref: '#/components/schemas/InterviewShouldDisplayAlarmProperty' required: - end_time - location - profile - start_time - token UpdateInterviewRequestSchema: type: object properties: mode: $ref: '#/components/schemas/InterviewModeProperty' ReadUpdateInterviewSchema: type: object properties: token: $ref: '#/components/schemas/InterviewTokenProperty' start_time: $ref: '#/components/schemas/InterviewStartTimeProperty' end_time: $ref: '#/components/schemas/InterviewEndTimeProperty' profile: $ref: '#/components/schemas/ProfileTokenProperty' location: $ref: '#/components/schemas/LocationProperty' mode: $ref: '#/components/schemas/InterviewModeProperty' should_display_alarm: $ref: '#/components/schemas/InterviewShouldDisplayAlarmProperty' _links: $ref: '#/components/schemas/LinksProperty' _msg: $ref: '#/components/schemas/MsgProperty' CreateLocationProperty: title: location type: object description: The user's location. When creating a new interview, either latitude and longitude or postal_code and country should be provided. If neither are provided, Buoy will attempt to determine a location based off of IP address. properties: latitude: $ref: '#/components/schemas/LatitudeProperty' longitude: $ref: '#/components/schemas/LongitudeProperty' postal_code: $ref: '#/components/schemas/PostalCodeProperty' country: $ref: '#/components/schemas/CountryProperty' InterviewTokenProperty: title: interview type: string description: A UUID-formatted token uniquely identifying an interview instance. format: uuid InterviewModeProperty: title: mode type: string description: Interview operation mode; input, protocol, or differential. enum: - input - protocol - differential InterviewStartTimeProperty: title: start_time type: string description: The time at which an interview was created in Central Daylight Time (CDT). format: date-time InterviewEndTimeProperty: title: end_time type: string description: The time at which results were made available in Central Daylight Time (CDT). format: date-time nullable: true InterviewShouldDisplayAlarmProperty: title: should_display_alarm type: boolean description: A flag indicating if an alarm should be displayed to the user. ReadComplaintSchema: type: object properties: token: title: token type: string description: A UUID-formatted token uniquely identifying a user's complaint. interview: $ref: '#/components/schemas/InterviewTokenProperty' query: $ref: '#/components/schemas/ComplaintQueryProperty' interpretations: type: array description: An object representing a machine-generated interpretation of a user's complaint. items: $ref: '#/components/schemas/ReadInterpretationSchema' clarification: type: array description: An object representing the user's selected machine-generated interpretation of their complaint. items: $ref: '#/components/schemas/ReadClarificationSchema' _links: title: _links type: object description: Conditional links that point to questions required to clarify a complaint. nullable: true properties: next: type: string description: Absolute URI for next the question in an interview. example: null result: type: string format: uri description: Absolute URI for the result of an interview. ReadInterpretationSchema: type: object properties: token: title: token type: string description: A UUID-formatted token uniquely identifying a machine-generated interpretation of a user's complaint. format: uuid title: title: title minLength: 1 type: string description: Title of a given machine-generated interpretation of a user's complaint. description: title: description minLength: 1 type: string description: Description of a given machine-generated interpretation of a user's complaint. ReadClarificationSchema: type: object properties: token: $ref: '#/components/schemas/ClarificationTokenProperty' CreateComplaintSchema: required: - interview - query type: object properties: query: $ref: '#/components/schemas/ComplaintQueryProperty' interview: $ref: '#/components/schemas/InterviewTokenProperty' UpdateComplaintSchema: required: - clarification - interview type: object properties: interview: $ref: '#/components/schemas/InterviewTokenProperty' clarification: $ref: '#/components/schemas/SetClarificationSchema' SetClarificationSchema: title: clarification required: - token type: object properties: token: $ref: '#/components/schemas/ClarificationTokenProperty' ComplaintQueryProperty: title: query minLength: 1 type: string description: The user's description of their complaint. ClarificationTokenProperty: title: token type: string format: uuid description: A UUID-formatted token uniquely identifying a clarification of a complaint. IntentSchema: required: - decision - event - interview type: object properties: token: title: token description: A UUID-formatted token uniquely identifying an intent. type: string format: uuid readOnly: true interview: $ref: '#/components/schemas/InterviewTokenProperty' event: $ref: '#/components/schemas/IntentEventProperty' decision: $ref: '#/components/schemas/IntentDecisionProperty' ListIntentSchema: required: - decision - event - interview type: array items: type: object properties: token: title: token description: A UUID-formatted token uniquely identifying an intent. type: string format: uuid readOnly: true interview: $ref: '#/components/schemas/InterviewTokenProperty' event: $ref: '#/components/schemas/IntentEventProperty' decision: $ref: '#/components/schemas/IntentDecisionProperty' CreateIntentSchema: required: - decision - detail - event - interview type: object properties: interview: $ref: '#/components/schemas/InterviewTokenProperty' event: $ref: '#/components/schemas/IntentEventProperty' decision: $ref: '#/components/schemas/IntentDecisionProperty' IntentEventProperty: title: event description: A string indicating whether an intent was captured at the start of an interview ("INTERVIEW_START") or after results have been shown ("INTERVIEW_RESULT"). type: string enum: - INTERVIEW_START - INTERVIEW_RESULT IntentDecisionProperty: title: decision description: A string clarifying the type of care a user intends to seek. type: string enum: - NO_CARE - SOMETHING_ELSE - UNSURE - WAIT_OR_SELF_TREAT - TELEMEDICINE - PRIMARY - SPECIALIST - URGENT - EMERGENCY ReadAutoCompleteQuerySchema: type: object properties: text: title: text minLength: 1 type: string description: User complaint search text received on request. tag: title: tag minLength: 1 type: string description: Label defined on request to maintain correct suggestion ordering. suggestions: type: array items: type: string description: List of autocompleted complaints based on text input. ReadQuestionSchema: type: object properties: token: $ref: '#/components/schemas/QuestionTokenProperty' text: $ref: '#/components/schemas/QuestionTextProperty' choice: $ref: '#/components/schemas/OptionChoiceProperty' media: $ref: '#/components/schemas/MediaProperty' options: type: array readOnly: true items: $ref: '#/components/schemas/ReadOptionSchema' answer: type: array description: An array of selected answer options. items: $ref: '#/components/schemas/ReadAnswerSchema' interview: $ref: '#/components/schemas/InterviewTokenProperty' media_alttext: $ref: '#/components/schemas/MediaAltTextProperty' _links: type: object description: Conditional links that point to the next step of the interview. properties: next: type: string description: Absolute URI for next the question in an interview. nullable: true example: null result: type: string description: Absolute URI for the result of an interview. nullable: true example: http://sandbox.buoyhealth.com/api/results/fae7f712-15ce-4002-bf79-a80ff4c80f07/ ListQuestionsSchema: type: array description: An array of questions. items: type: object properties: token: $ref: '#/components/schemas/QuestionTokenProperty' text: $ref: '#/components/schemas/QuestionTextProperty' choice: $ref: '#/components/schemas/OptionChoiceProperty' media: $ref: '#/components/schemas/MediaProperty' options: type: array readOnly: true items: $ref: '#/components/schemas/ReadOptionSchema' answer: type: array description: An array of selected answer options. items: $ref: '#/components/schemas/ReadAnswerSchema' interview: $ref: '#/components/schemas/InterviewTokenProperty' media_alttext: $ref: '#/components/schemas/MediaAltTextProperty' _links: type: object description: Conditional links that point to the next step of the interview. properties: next: type: string description: Absolute URI for next the question in an interview. nullable: true example: null result: type: string description: Absolute URI for the result of an interview. nullable: true example: http://sandbox.buoyhealth.com/api/results/fae7f712-15ce-4002-bf79-a80ff4c80f07/ ReadOptionSchema: type: object description: An array of answer options. properties: token: $ref: '#/components/schemas/OptionTokenProperty' text: $ref: '#/components/schemas/OptionTextProperty' media: $ref: '#/components/schemas/MediaProperty' exclusive: $ref: '#/components/schemas/OptionExclusiveProperty' media_alttext: $ref: '#/components/schemas/MediaAltTextProperty' free_text: $ref: '#/components/schemas/OptionFreeTextProperty' ReadAnswerSchema: type: object properties: token: $ref: '#/components/schemas/AnswerTokenProperty' extra: $ref: '#/components/schemas/AnswerExtraProperty' UpdateQuestionSchema: required: - answer type: object properties: answer: type: array description: An array of selected answer options. items: $ref: '#/components/schemas/SetAnswerSchema' SetAnswerSchema: required: - token type: object description: An array of selected answer options. properties: token: $ref: '#/components/schemas/AnswerTokenProperty' extra: $ref: '#/components/schemas/AnswerExtraProperty' QuestionExplainSchema: type: object properties: token: $ref: '#/components/schemas/QuestionTokenProperty' interview: $ref: '#/components/schemas/InterviewTokenProperty' diagnosis: type: string description: A string indicating the diagnoses related to the question being asked. nullable: true predictors: type: array items: type: string description: An array of strings indicating how the user's previous inputs relate to the current question. nullable: true Question: type: object properties: token: $ref: '#/components/schemas/QuestionTokenProperty' text: $ref: '#/components/schemas/QuestionTextProperty' choice: $ref: '#/components/schemas/OptionChoiceProperty' media: $ref: '#/components/schemas/MediaProperty' options: type: array description: An array of answer options. readOnly: true items: $ref: '#/components/schemas/Option' answer: type: array description: An array of selected answer options. items: $ref: '#/components/schemas/Token' interview: $ref: '#/components/schemas/InterviewTokenProperty' media_alttext: $ref: '#/components/schemas/MediaAltTextProperty' Option: type: object description: An array of answer options. items: properties: token: $ref: '#/components/schemas/OptionTokenProperty' text: $ref: '#/components/schemas/OptionTextProperty' media: $ref: '#/components/schemas/MediaProperty' exclusive: $ref: '#/components/schemas/OptionExclusiveProperty' media_alttext: $ref: '#/components/schemas/MediaAltTextProperty' free_text: $ref: '#/components/schemas/OptionFreeTextProperty' Token: required: - extra - token type: object properties: token: title: token type: string format: uuid extra: title: extra type: string QuestionTokenProperty: title: token type: string format: uuid description: A UUID-formatted token uniquely identifying a question. QuestionTextProperty: title: text description: A string containing the question text that should be displayed to a user. minLength: 1 type: string OptionTokenProperty: title: token type: string format: uuid description: A UUID-formatted token uniquely identifying an answer option. OptionChoiceProperty: title: choice type: string enum: - M - S - D description: A string indicating the response type of a question. Either 'S' for single-choice, 'M' for multiple-choice, or 'D' for duration. OptionTextProperty: title: text description: A string containing the answer option text that should be displayed to a user. minLength: 1 type: string OptionExclusiveProperty: title: exclusive type: boolean description: A flag indicating whether an answer option should not be submitted with other answer options. Answer options with the `exclusive` parameter set to True should not be returned with any other answer options. OptionFreeTextProperty: title: free_text type: boolean description: A flag indicating whether free text from a user may be returned to Buoy in the `extra` parameter. AnswerTokenProperty: title: token type: string format: uuid description: A UUID-formatted token that indicates the user's selected answer option(s). AnswerExtraProperty: title: extra type: string nullable: true description: A string in which API clients may return extra information in limited scenarios. "D"-type questions should return the duration, in hours, that a user has been experiencing a given condition. Clients may optionally return additional context when the `free_text` field is true. MediaProperty: title: media type: string format: uri description: An absolute URI linking to media. Clients should use the `content-type` of the associated file to determine how to display the file to the user. MediaAltTextProperty: title: media_alttext minLength: 1 type: string description: A string providing alternative text for it's associated media. ReadResultsSchema: type: object properties: token: title: token type: string format: uuid description: A UUID-formatted token uniquely identifying a result. alarm: title: alarm type: boolean description: A flag indicating if an alarming (emergency) result is present. undiagnosed: title: undiagnosed type: boolean description: A flag indicating if the interview did not result in a differential diagnosis. differential: title: differential type: array items: type: object properties: name: title: name type: string description: The name of the condition match. overview: title: overview type: string description: A description describing the condition match. May be null. nullable: true care_notes: title: care_notes type: string description: A description of how to care for the condition match. May be null. nullable: true token: title: token type: string format: uuid description: A UUID-formatted token uniquely identifying a condition match. duration: title: duration type: string description: A description of how long the condition match is likely to present. could_explain: title: could_explain type: string description: A description of how the user's complaints and answers could explain the condition match. cant_explain: title: cant_explain type: string description: A description of how the user's complaints and answers can't explain the condition match. nullable: true usually_causes: title: usually_causes type: string description: A descriptions of related conditions that are usually caused by the condition match but were not explicitly observed in the interview. nullable: true triage: type: object description: An object representing the level of care suggested (triage level) for a condition match. Refer to the [triage levels reference guide](doc:triage-levels) for more details. properties: token: title: token type: string format: uuid description: A UUID-formatted token uniquely identifying a triage recommendation for a condition match. May be null. nullable: true level: title: level type: integer minimum: 0 maximum: 7 nullable: true description: An integer between 0 and 7 representing the triage level for a condition match. description: title: description type: string description: A description of the triage level for a condition match. description: An array containing up to three condition (diagnoses) matches. triage: title: triage type: object description: An object providing information about about the level of care suggested (triage level) for a triage-only result. Refer to the [triage levels reference guide](doc:triage-levels) for more details. properties: token: title: token type: string format: uuid nullable: true description: A UUID-formatted token uniquely identifying a triage level for a result. May be null. level: title: level type: integer minimum: 0 maximum: 7 description: An integer between 0 and 7 representing the triage level for a result. description: title: description type: string description: A description of the triage level for a condition match. triage_explanation: title: triage_explanation type: object description: An object providing an explanation for a triage only result. properties: explanation: title: explanation type: string nullable: true description: A description of why a particular triage level was provided. potential_condition: title: potential_condition type: object nullable: true description: A description of a potential condition match to be provided with the triage explanation. May be null. properties: name: title: name type: string description: The name of the potential condition match. overview: title: overview type: string description: A description describing the condition match. care_notes: title: care_notes type: string description: A description of how to care for the potential condition match. securitySchemes: Bearer: type: oauth2 description: '[Full documentation for the Buoy Auth API is found here.](https://sandbox.buoyhealth.com/auth/redoc/)' flows: authorizationCode: authorizationUrl: https://auth.sandbox.buoyhealth.com/authorize tokenUrl: https://auth.sandbox.buoyhealth.com/oauth/token scopes: {} responses: 400MissingProfileResponse: description: Bad Request content: application/json: schema: type: object additionalProperties: {} examples: Bad request: value: profile: - This field is required. 400Intent: description: Bad Request content: application/json: schema: type: object additionalProperties: {} properties: non_field_errors: type: string description: A string returning details about a bad request not related to a specific field in the request body. nullable: true interview: type: string description: A string returning details about a bad request related to the submitted interview token. nullable: true event: type: string description: A string returning details about a bad request related to the submitted event. nullable: true decision: type: string description: A string returning details about a bad request related to the submitted decision. nullable: true examples: No results: value: non_field_errors: - Interview has no results. Invalid interview token: value: interview: Object with token= does not exist. Invalid event: value: event: - is not a valid choice. Invalid decision: value: decision: - is not a valid choice. 400Questions: description: Bad Request content: application/json: schema: type: object additionalProperties: {} properties: non_field_errors: type: array items: type: string description: A string returning details about a bad request. nullable: true answer: type: array items: type: object properties: token: type: array items: type: string description: A string returning details about a bad request related to the answer token examples: Invalid answer token: value: non_field_errors: - Invalid answer token(s). Choose from options. Invalid extra value: value: non_field_errors: - Invalid extra value. Bad answer token UUID: value: answer: - token: - Must be a valid UUID 401Response: description: Unauthorized content: application/json: schema: type: object additionalProperties: {} examples: Unauthorized: value: detail: Authentication credentials were not provided. Expired token: value: detail: Token is invalid or expired (decode) 404NotFound: description: Not Found content: application/json: schema: type: object additionalProperties: {} examples: Not found: value: detail: Not found. 404NotFoundHTML: description: Not Found content: application/json: schema: type: string examples: Not found: value: '

Not Found

The requested resource was not found on this server.

' examples: ComplaintCreateResponse: value: token: 290197ae-fa22-42a9-9ce4-0b771a8ace2c interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be query: back pain interpretations: - token: c5338e44-8c6f-4f1b-9f2c-0c4d01b99360 title: back pain description: I have back pain - token: 4468fa90-25f6-4bd9-90b9-27ce2354a77b title: upper back pain description: The upper part of my back hurts - token: 7684f2bb-31df-414b-add9-eeeb1496cc61 title: lower back pain description: I have lower back pain - token: 8bec7b05-7894-42ee-8fef-9beb8a326693 title: dull lower back pain description: My lower back pain is dull clarification: [] ComplaintWithClarificationResponse: value: token: 290197ae-fa22-42a9-9ce4-0b771a8ace2c interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be query: back pain interpretations: - token: c5338e44-8c6f-4f1b-9f2c-0c4d01b99360 title: back pain description: I have back pain - token: 4468fa90-25f6-4bd9-90b9-27ce2354a77b title: upper back pain description: The upper part of my back hurts - token: 7684f2bb-31df-414b-add9-eeeb1496cc61 title: lower back pain description: I have lower back pain - token: 8bec7b05-7894-42ee-8fef-9beb8a326693 title: dull lower back pain description: My lower back pain is dull clarification: - token: c5338e44-8c6f-4f1b-9f2c-0c4d01b99360 _links: next: https://sandbox.buoyhealth.com/api/questions/d1f68632-c8c5-4bc0-9b57-ccb97cb1293b/ ComplaintListResponse: value: - token: 290197ae-fa22-42a9-9ce4-0b771a8ace2c interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be query: back pain interpretations: - token: c5338e44-8c6f-4f1b-9f2c-0c4d01b99360 title: back pain description: I have back pain - token: 4468fa90-25f6-4bd9-90b9-27ce2354a77b title: upper back pain description: The upper part of my back hurts - token: 7684f2bb-31df-414b-add9-eeeb1496cc61 title: lower back pain description: I have lower back pain - token: 8bec7b05-7894-42ee-8fef-9beb8a326693 title: dull lower back pain description: My lower back pain is dull clarification: - token: c5338e44-8c6f-4f1b-9f2c-0c4d01b99360. - token: 7d4eabe2-e5f2-42b5-8f7e-a33e140a4dbc interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be query: hip pain interpretations: - token: e1943b59-94f9-496d-a663-395c4cb1e0b1 title: hip pain description: I have hip pain - token: ed9895d8-fdd3-4a17-a9a6-14fcd01ccb69 title: deep, throbbing hip pain description: The hip pain is deep and throbbing - token: 96bd510d-1fea-4420-9717-66b7074800ff title: dull, achy hip pain description: The hip pain is dull and achy clarification: - token: e1943b59-94f9-496d-a663-395c4cb1e0b1 IntentInterviewStartResponse: value: token: 76c8af5e-5849-401d-bd71-60773913df10 interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be event: INTERVIEW_START decision: EMERGENCY IntentInterviewResultResponse: value: token: 52d2af5e-5849-401d-bd71-20373513db16 interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be event: INTERVIEW_RESULT decision: PRIMARY IntentListResponse: value: - token: 76c8af5e-5849-401d-bd71-60773913df10 interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be event: INTERVIEW_START decision: EMERGENCY - token: 52d2af5e-5849-401d-bd71-20373513db16 interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be event: INTERVIEW_RESULT decision: PRIMARY QuestionResponse: value: token: 60fe635d-5d70-4e5f-9702-2be36c66ff91 text: Is your hip pain getting better or worse? choice: S media: '' options: - token: 97075008-f2d6-491f-866e-fda9fde8da89 text: Getting better media: '' exclusive: true media_alttext: '' free_text: false - token: 296f9630-a45b-4b28-809a-676664f95ca1 text: Staying the same media: '' exclusive: true media_alttext: '' free_text: false - token: ce6a57b3-85f6-4db0-8156-a8653ef21ad3 text: Getting worse media: '' exclusive: true media_alttext: '' free_text: false answer: - token: 97075008-f2d6-491f-866e-fda9fde8da89 extra: '' interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be media_alttext: '' _links: - next: https://sandbox.buoyhealth.com/api/questions/0f9b45c7-3004-4250-94ad-7d34004056d9/ ListQuestionResponse: value: - token: 60fe635d-5d70-4e5f-9702-2be36c66ff91 text: Is your hip pain getting better or worse? choice: S media: '' options: - token: 97075008-f2d6-491f-866e-fda9fde8da89 text: Getting better media: '' exclusive: true media_alttext: '' free_text: false - token: 296f9630-a45b-4b28-809a-676664f95ca1 text: Staying the same media: '' exclusive: true media_alttext: '' free_text: false - token: ce6a57b3-85f6-4db0-8156-a8653ef21ad3 text: Getting worse media: '' exclusive: true media_alttext: '' free_text: false answer: - token: 97075008-f2d6-491f-866e-fda9fde8da89 extra: '' interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be media_alttext: '' - token: 42effc1c-d938-4e4c-ab8e-51d9d5ec4488 text: Is your hip pain constant or come-and-go? media: '' options: - token: 2f9b34ca-3b60-4af3-936c-178dc79b3722" text: constant media: null exclusive: true media_alttext: '' free_text: false - token: b6df264a-34e0-4974-b6d3-874c79b10632 text: Come-and-go media: '' exclusive: true media_alttext: '' free_text: false answer: [] interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be media_alttext: '' QuestionExplainResponse: value: token: e177ab02-046e-49bd-ac9c-11431c4f2ba4 interview: 4cfcc68d-d365-4af5-8b4d-15881259e0be diagnosis: hip strain predictors: - hip pain ResultsDifferentialAndTriageResponse: value: token: eba8c893-1865-4683-87f4-abcc00d7032e alarm: false undiagnosed: false differential: - name: Hip strain overview: A strain, also known as a pulled muscle, occurs when a muscle is stretched or torn. A hip strain is a result of a pulled hip muscle. care_notes: You can safely treat this condition on your own. A muscle strain can be treated with rest, ice, compression, and pain medication. token: 4fac5aa4-412f-4de3-af06-ecdcd608aa09 duration: 6 months could_explain: This could explain your difficulty moving the hip, hip pain, and symptoms worse with exercise. cant_explain: This wouldn't explain your weight gain. usually_causes: '' triage: token: null level: 1 description: Self-treatment - name: Femoral stress fracture overview: A femoral stress fracture is a small crack in the thigh bone. It is usually caused by overuse of the bone, often from physical activity. care_notes: You should consider visiting a medical professional to discuss your symptoms. A femoral stress fracture can be evaluated with a review of your symptoms and medical history. An x-ray or MRI may be performed as well. Once diagnosed, it can be treated with pain medication and taking a break from weight-bearing physical activity for a few weeks. More severe injuries may require surgery. Recovery usually takes up to 12 weeks. token: 1872df99-7ef1-45c3-bf1e-ecaf30b6578a duration: many years could_explain: This could explain your Positive Hop Test, symptoms that worsen with running, and symptoms worse with exercise. cant_explain: This wouldn't explain your hip pain or weight gain usually_causes: This is typically also associated with dull, achy hip pain and pain in one thigh. triage: token: null level: 4 description: Primary care doctor - name: Hip pain of unspecified cause overview: The hip is a really complex joint, and there are a number of things that can cause pain. However, because of how complicated it is, it's often not possible to figure out what is causing the pain. care_notes: You can rest at home, keeping weight off of your affected leg. If things do not improve, go see your doctor. If things get worse, like you develop a fever, the hip pain worsens, or other symptoms crop up, go to the doctor immediately. token: a74c276c-4443-4873-b3db-f0410bbd5a99 duration: 2 months could_explain: This could explain your pain in one hip. cant_explain: This wouldn't explain your weight gain. usually_causes: '' triage: token: null level: 1 description: Self-treatment triage: token: null level: 4 description: Primary care doctor triage_explanation: explanation: '' potential_condition: null ResultsTriageOnlyResponse: value: token: db38c893-1865-4683-87f4-abcc00d7032d alarm: true undiagnosed: true differential: [] triage: token: 2873df99-7ef1-45c3-bf1e-ecaf30b657cc level: 7 description: Emergency medical service triage_explanation: explanation: Because of your blue lips or tongue and difficulty getting enough air, you may have coronavirus. potential_condition: name: coronavirus overview: Call 911 and mention you may have coronavirus so they can prepare. care_notes: There is no treatment to cure coronavirus (COVID-19), but it is advised to see a healthcare provider for testing. Mild symptoms can be treated the same as one would do for the common cold or flu. Very young children, the elderly, and people with known (heart- or lung) disease or a suppressed immune system can become more ill. These people might need extra support or treatment to help with breathing issues. It is very important to prevent the virus from spreading by washing hands frequently, covering mouth and nose while sneezing and coughing, and by staying away from other people when sick. ResultsNoResult: value: token: db38c893-1865-4683-87f4-abcc00d7032d alarm: false undiagnosed: true differential: [] triage: token: null level: null description: We didn’t find a good match for your symptoms. Please try again by using a different description for the symptom that is bothering you the most. triage_explanation: explanation: '' potential_condition: null