Service Details

Some additional technical details about Web Measurement Service follow.

Call-in URL Structure

The user is redirected to WMS via the following URL structure:[CONFIG_ID]/[PROFILE_DATA]/[DFX_AUTH_TOKEN]/[DFX_REFRESH_TOKEN]/[SESSION_ID]
URL ParameterDescription
CONFIG_IDThe assigned configuration ID
PROFILE_DATABase64 encoded value of the encrypted profile information
DFX_AUTH_TOKENThe authorization token (Token) obtained by calling the registerLicense endpoint with the assigned license key
DFX_REFRESH_TOKENThe refresh token (RefreshToken) obtained by calling the registerLicense endpoint with the assigned license key
SESSION_IDID assigned by you to this measurement session


Please note that PROFILE_DATA, DFX_AUTH_TOKEN and DFX_REFRESH_TOKEN need to be encoded using encodeURIComponent() while constructing the call-in URL.

PROFILE_DATA object structure

Example PROFILE_DATA JSON object:

  "identifier": "B748FD3B-DF16-4963-A654-48A9574C1059", // [Partner ID (a 2 to 148 characters long string) used by you to tag this measurement]
  "age": 44,
  "height": 175,
  "weight": 89,
  "gender": "male",
  "smoking": "0",
  "bloodpressuremedication": "0",
  "diabetes": "type2"


Both keys and values used in the PROFILE_DATA JSON object must be lowercase. Also, please make sure that the keys are exactly the same as shown in the example above.

For more information about the questions that are included as part of the measurement questionnaire and their impact on the measurement, please refer to the Measurement Questionnaire section.

For more details about identifier/Partner ID, please refer to this page in the DeepAffex Developer Guide.

The PROFILE_DATA object will be encrypted using a public key to protect the privacy of the user. The corresponding private key will be used by WMS to decrypt it.

Config ID

The CONFIG_ID provided by NuraLogix to you will contain app specific information such as:

Config elementDescription
DeepAffex Study IDID for the DeepAffex Study to be used during the measurement. You can get it from the DeepAffex Dashboard. Under the Studies, select Details. Study Index is the Study ID.
Organization logo URLPublicly hosted URL for the logo to be displayed on WMS.
CALLBACK URLURL where WMS will send the results after the measurement is complete. The callback URL is hosted by you.
CSS file URLPublicly hosted URL for the stylesheet to customize the styling of the measurement screen.
Default languageDefault language from the supported languages list to be used for WMS. If not set, then the browser's active language is used if it is one of the supported languages.
Camera Auto startIf enabled, camera will start automatically. User won't see the start camera button.
Measurement auto startIf enabled, measurement will start automatically. User won't see the start measurement button.
Default camera on mobileAllows rear camera to be selected as default camera on mobile devices.
Expire token after measurementIf enabled, the token will expire after the measurement is completed. By default, it is disabled.
Region for data processingAllows to process the data in a specific region. Please refer to the regions chapter for more details.
Webhook URLURL where the WMS will send the Webhook events


WMS will use the pre-configured CALLBACK_URL to pass back results to your app. The results are passed as a Base64 encoded JSON object query string, along with the SESSION_ID that your app passed to WMS at call-in.

Example callback URL:<<base64encoded>>


If you are using CNAME, then the callback URL should not be a subpath of the CNAME. For example, if is the CNAME, then the callback URL must not be of the form This is required because the callback URL is hosted at your backend, whereas CNAME points towards the WMS.


The results are also encoded using JSON. A snippet is shown below.

    "identifier": "B748FD3B-DF16-4963-A654-48A9574C1059", // [Partner ID sent in PROFILE_DATA object],
    "MEASUREMENT_ID": "[DeepAffex Measurement ID that uniquely identifies this measurement]",
    "SESSION_ID": "[Session ID passed in via call-in URL]",
    "HR_BPM": 76,
    "SNR": 5.6,
    "BR_BPM": 20,
    "BP_DIASTOLIC": 120,
    "BP_SYSTOLIC": 80,
    ...  // Other signals in the study

It will always contain the identifier, MEASUREMENT_ID and SESSION_ID keys which correspond to the PartnerID, MeasurementID and SessionID respectively. The results themselves will be returned with keys corresponding to the Signal IDs present in your DeepAffex Study. To check the results:

  1. Get a list of Signal IDs for your app using the Studies.Retrieve endpoint
    • If you are always going to use the same study, you can embed this list in your app
    • If you intend to change studies at runtime, you can call that endpoint in your app (usually right after switching studies)
  2. Use these Signal IDs as keys to look for results. If a key is not present in the results, then that result could not be computed by the DeepAffex Cloud. This can happen if:
    • The signal quality is too low. In this case, the SNR key, will be present and it will be negative.
    • Some demographic information wasn't sent to the Cloud or
    • Some other issue was encountered during computation - you can investigate using the DeepAffex Dashboard etc.


Detailed measurement results can also be retrieved later by using our API if your legal agreement with Nuralogix™ allows saving results. Please refer to the results section here for more details. Please note that the authorization token gets expired in a certain amount of time (10 mins is the default value in the sample app). If your token has expired then you must call Auths.Renew endpoint to get a fresh pair of tokens before trying to retrieve the results from the API. If you lose the authorization token, then the only way to retrieve the measurement results through API is by calling the Organizations.RetrieveMeasurement endpoint. In addition to this, you may also directly see the results from the dashboard.

⚠️ Deprecated keys ⚠️

The following keys are currently returned in the results object but are deprecated. Please do not rely on them as they will be removed in future versions of WMS.

Deprecated KeySignal ID to use instead

Handling Errors

In case the Web Measurement Service faces an issue, or if there are any validation errors in the profile data, the measurement will fail and the user will be redirected to the CALLBACK_URL with an error parameter in the query string that contains the error code.

Error CodeDescription / Cause
MISSING_MEASUREMENT_IDENTIFIERThe identifier field is missing in the PROFILE_DATA object
INVALID_AGEThe age value is invalid.
INVALID_WEIGHTThe weight value is invalid.
INVALID_HEIGHTThe height value is invalid.
INVALID_BMIThe given values for weight and height represent an invalid BMI value.
MEASUREMENT_CANCELEDThe measurement is cancelled by the user.
TOKEN_EXPIREDThe authorization token has expired.
WORKER_ERRORAn error occurred in the DeepAffex™ Cloud while processing a payload.
MEASUREMENT_TIMED_OUTIf, after sending a chunk or while waiting for the final results, no response is received from the API for 60 seconds due to network issues, this error is returned.
CAMERA_PERMISSION_NOT_GRANTEDCamera permission is denied by the user.

For acceptable value ranges for age, height, weight, and BMI please refer to the Measurement Questionnaire section.


Please note that more keys may be added to results JSON and additional error codes may also be introduced in the future as we keep improving our service. It is important to handle the response in the CALLBACK_URL with these potential changes in mind to ensure your integration remains robust and reliable. We recommend regularly reviewing the documentation and testing your integration to stay up-to-date with any changes.

Supported Languages

Following languages are currently supported by WMS:

  • English
  • Simplified Chinese
  • Italian
  • French
  • Spanish
  • Portuguese
  • Brazilian Portuguese
  • Japanese

It is possible to fix a language to be used for WMS through the CONFIG_ID. Please reach out to us if you want to exercise this option. WMS follows the following order to decide the language to be used for the service :

  1. Language selected through CONFIG_ID
  2. Browser's active language if it is one of the supported languages given above
  3. English