Partner Questionnaire Creation

Sonde Health API Platform Documentation

Partner Questionnaire Creation

Overview

The following use-cases (with curl language examples) are a guide for your app development. To create and consume questionnaire for a user.

Notes:

  • To access create Questionnaire Api, please contact Sonde at support@sondehealth.com. Please provide your company name and address.

API Credentials

For all use-cases, you should have the following information (the following values are examples only):

Refer Account for detail on how to create an account with Sonde and obtained below client-id & client-secret.

client-id: 6lpo5bolnp4uda4n2is3u8tt2

client-secret: 1114assc3pnln1b2lngjjml6mkce3uw0q70mrv9pqphusfbgtq9a

domain: api.sondeservices.com

The Sonde Service API uses an access-token to authenticate requests. Generate an access-token using ‘client-credential’ (consists of “client-id” and “client-secret”).

Your 'client-credential' must be kept secure on your server (or preferably in secret storage at the server-side). Do not share your client-credential in publicly accessible areas (such as GitHub, client-side code, and so forth).

Obtain the access-token by following the steps below.

API call

curl --request POST 'https://api.sondeservices.com/platform/v1/oauth2/token' \ --header 'Authorization: Basic <Base64EncodedString>' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'scope=sonde-platform/users.write sonde-platform/questionnaires.read sonde-platform/questionnaires.write sonde-platform/questionnaire-responses.read sonde-platform/questionnaire-responses.write'

Get <Base64EncodedString> using the below command

$ echo -n "<clientid>:<clientsecret>" | openssl base64 -A

API response

{ "access_token": "ya29.QQIBibTwvKkE39hY8mdkT_mXZoRh7Ub9cK9hNsqrxem4QJ6sQa36VHfyuBe", "expire_in": 3600, "token_type": "Bearer" }

Pass the “access_token” key value in the Authorization header of Sonde Service APIs.

The access_token will expire_in 3600 seconds.

The token_type is “Bearer” (this value is fixed).

For a list of supported scopes, please check the schema in the Authentication section of the API Documentation REST API Reference.

For a list of scopes required for Scoring refer to Authentication Scopes

Using the generated access-token, you can access Sonde Platform’s Services.

For example; if you want your device to submit a questionnaire to the Sonde Platform using Questionnaire Service, then you can share an access-token with the device having scope sonde-platform/questionnaire.write to restrict the access and prevent the misuse of privileges your client-credential is carrying.

As a developer, I want to register a questionnaire to consume it in my app.

On your backend perform the below steps create questionnaire and submit response.

STEP 1 : GET THE APPROPRIATE ACCESS-TOKEN
STEP 2: REGISTER A USER WITH SONDE HEALTH
STEP 3: CREATE QUESTIONNAIRE
STEP 4: GET QUESTIONNAIRE ON YOUR APP
STEP 5: SUBMIT QUESTIONNAIRE RESPONSE TO SERVER
 

Detailed explanation with curl examples of each step is given below.

STEP 1: GET THE APPROPRIATE ACCESS-TOKEN

Get the access-token with scopes sonde-platform/questionnaire.write and sonde-platform/users.write .

Ensure your client-credentials are granted to these scopes during the registration/onboarding process with Sonde Health.

$ curl --request POST 'https://api.sondeservices.com/platform/v1/oauth2/token' \ --header 'Authorization: Basic <Base64EncodedString>' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'scope=sonde-platform/users.write sonde-platform/scores.write sonde-platform/questionnaires.read sonde-platform/questionnaire-responses.write sonde-platform/questionnaire.write'

 

Response1:

{ "access_token": "ya29.QQIBibTwvKkE39hY8mdkT_mXZoRh7Ub9cK9hNsqrxem4QJ6sQa36VHfyuBe", "expire_in": 3600, "token_type": "Bearer" }

 

STEP 2: REGISTER A USER WITH SONDE HEALTH

Use "access_token" to register a user. Put the value of access_token into the Authorization header (refer to the below curl command).

It is expected that your server will register the user with SondePlatform during the user sign-up process.

Replace <access_token> with the value of the access_token attribute of Response1.

$ curl --request POST 'https://api.sondeservices.com/platform/v2/users' \ --header 'Authorization: <access_token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "yearOfBirth": "1985", "gender": "Female", "language": "HINDI", "device": { "type": "MOBILE", "manufacturer": "VIVO" } }'

 

Response2:

Capture the userIdentifier, in the below response wiNODNXcm.

{ "requestId": "23454556", "userIdentifier": "wiNODNXcm" }

Keep userIdentifier in your UserManagement module (or database) to later use it for the same patient.
userIdentifier will be used in STEP 3 & STEP 6.

 

STEP 3: CREATE QUESTIONNAIRE

Call the Post questionnaires API to check the questionnaire required for measure and list of languages in which questionnaire is available on API Platform.

$ curl --request POST 'https://api.sondeservices.com/platform/v1/questionnaires' \ --header 'Authorization: <access_token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "title": "covid_19", "language": "en", "questions": [ { "type": "MULTIPLE_CHOICE", "text": "Have you been within 6 feet of a person with a lab confirmed case of COVID-19 or with symptoms of COVID-19 for at least 15 minutes, or had direct contact with their mucus or saliva,in the past 14 days?", "isSkippable": false, "options": [ { "text": "No", "score": 0 }, { "text": "Yes", "score": 1 } ] }, { "type": "MULTIPLE_SELECT", "text": "In the last 48 hours, have you had any of the following NEW symptoms? Select all that apply.", "isSkippable": false, "options": [ { "text": "Fever of 100.4° F or above", "score": 3 }, { "text": "Cough", "score": 2 }, { "text": "Trouble breathing", "score": 1 }, { "text": "None of the above", "score": 0 } ] }, { "type": "TEXT_FIELD", "text": "How many covid center do you have in your city?", "isSkippable": true, "inputDataType": "INTEGER" }, { "type": "TEXT_FIELD", "text": "What is your text temperature?", "isSkippable": true, "inputDataType": "BODY_TEMPERATURE" } ] }'

Response3:

{ "id": "qnr-c79f28329", "language": "en", "requestId": "ab3e2522-d3ca-4991-a9f5-faa66371b214" }

questionnaire.id and questionnaire.languages are required in STEP 4.

STEP 4: GET QUESTIONNAIRE ON YOUR APP

Call /questionnaires/{questionnaireId}?language=<language> to get questionnaire.

Below API will return questionnaire qnr_67rerf432 in the English language. 

Replace <access_token> with the value of the access_token attribute from Response1.
Replace <questionnaireId> with the value of questionnaire.id attribute from Response3.
Replace <language> with en.

curl --request GET 'https://api.sondeservices.com/platform/v1/questionnaires/<questionnaireId>?language=<language>' \ --header 'Authorization:<access_token>'

Response4:

{ "id": "qnr-c79f28329", "title": "covid_19", "language": "en", "questions": [ { "type": "MULTIPLE_CHOICE", "text": "Have you been within 6 feet of a person with a lab confirmed case of COVID-19 or with symptoms of COVID-19 for at least 15 minutes, or had direct contact with their mucus or saliva,in the past 14 days?", "isSkippable": false, "options": [ { "text": "No", "score": 0 }, { "text": "Yes", "score": 1 } ] }, { "type": "MULTIPLE_SELECT", "text": "In the last 48 hours, have you had any of the following NEW symptoms? Select all that apply.", "isSkippable": false, "options": [ { "text": "Fever of 100.4° F or above", "score": 3 }, { "text": "Cough", "score": 2 }, { "text": "Trouble breathing", "score": 1 }, { "text": "None of the above", "score": 0 } ] }, { "type": "TEXT_FIELD", "text": "How many covid center do you have in your city?", "isSkippable": true, "inputDataType": "INTEGER" }, { "type": "TEXT_FIELD", "text": "What is your body temperature?", "isSkippable": true, "inputDataType": "BODY_TEMPERATURE" } ], "requestId": "726a8184-639c-41ed-9de7-ac7b2e79f312" }

 

STEP 5: SUBMIT QUESTIONNAIRE RESPONSE TO SERVER

Ask your questionnaire (received in STEP 4) to your app user and use API POST /questionnaire-responses to submit a response to the server

Replace <access_token> with the value of the access_token attribute of Response1.
Replace <questionnaireId> with the value of the id attribute of Response4.
Replace <language> with the value of the language attribute of Response4.
Replace <userIdentifier> with the value of userIdentifier attribute of Response2.

 

Fill up the questionnaire.questionResponses as per user responses for the PHQ2.

$ curl --request POST 'https://api.sondeservices.com/platform/v1/questionnaire-responses' \ --header 'Content-Type: application/json' \ --header 'Authorization: <access_token>' \ --data-raw '{ "questionnaire": { "id": "<qid>", "language": "en", "userIdentifier":"<subjectIdentifier>", "respondedAt": "1994-11-05T13:15:30Z", "questionResponses": [ { "optionIndex": 1 }, { "optionIndexes": [1] }, { "response": 4 }, { "isSkipped": true } ] } }'

 Response5:

{ "id": "qrs_21397202f07e", "requestId": "a6964f06-e174-4d60-a268-2f68df8e0e07" }

 

Sonde Health