Authentication

All API requests must be authenticated. You can get your initial credentials or refresh them if your security has been compromised.

Generate Authentication Token

Here is the utility to generate your authentication token. Please provide your login credentials below. The Credentials will be displayed in the right side box and you can use them while integrating it with your software.

Credentials will appear here.

Regenerate Token

To proceed with regenerating your User Authentication details click on the regenerate button.

Note: After regenerating auth token Nadi Tarangini database will be replaced with latest auth token. Please make sure your applications incorporate the latest auth token.

New credentials will appear here.

How to use Credentials

Include the following parameters in your HTTPS Request Headers:

user-id: "YOUR_USER_ID"
auth-token: "YOUR_AUTH_TOKEN"

FAQ & Developer Support

Common technical questions for integrating Nadi Tarangini hardware and APIs.

For web-based applications, the sensor is strictly supported on Google Chrome. Other browsers like Safari, Firefox, or Brave may not allow the hardware to communicate correctly with the application.

No external drivers are required. Once the sensor is plugged into your USB port, Chrome will automatically detect the device. You simply need to grant permission via the browser's connection prompt.

A clinical pulse capture takes exactly 30 seconds. This duration is necessary to capture a stable waveform and ensure high accuracy for the Ayurvedic parameter analysis.

Check your request headers. Ensure that user-id and auth-token are included in the Header of your request. These credentials are required for every API call to retrieve patient or report data.

Yes. All data is synced to the cloud. You can record a pulse using the Nadi Tarangini Android or iOS app and instantly retrieve that specific visit_id or report using these Data Management APIs.

Mobile App Integration

To begin your integration, download the NT Capture APK for Android. This APK is required to bridge the communication between your software and the Nadi Tarangini device. Use the download button below to fetch the latest stable build.

Note : Currently, the NT Capture application is available for Android. The iOS version is currently in development and will be released soon.

Flutter Implementation

Dart

final String path = "nadi://home?user_id={{USER_ID}}&auth_token={{AUTH_TOKEN}}"
                    "&visit_id={{VISIT_ID}}&client_code={{CLIENT_CODE}}"
                    "&height={{HEIGHT}}&weight={{WEIGHT}}&age={{AGE}}&gender={{GENDER}}"
                    "&prakruti={{PRAKRUTI}}&major_symptoms={{SYMPTOMS}}";

if (await canLaunchUrl(Uri.parse(path))) {
    await launchUrl(Uri.parse(path), mode: LaunchMode.externalApplication);
}
        
Where to add this code?

Developers should implement these snippets on the specific screen within their application where the user is ready to begin the diagnostic process. This is typically triggered by a "Start Assessment" or "Capture Pulse" button.

Why do we use this code?

This implementation utilizes a "Deep Link" system via the standard scheme nadi://home. It allows your "Sender" application to securely pass patient metrics (Height, Weight, Age) and authentication keys (User ID, Auth Token) directly to our diagnostic app. This creates a seamless transition for the user, as the NT Capture app will open pre-filled with the necessary data, ready to connect to the hardware immediately.


Android Implementation (Android-Based Application)

Kotlin

val url = "nadi://home?user_id={USER_ID}&auth_token={AUTH_TOKEN}&visit_id={VISIT_ID}&client_code={CLIENT_CODE}&height={HEIGHT}&weight={WEIGHT}&age={AGE}&gender={GENDER}&prakruti={PRAKRUTI}&major_symptoms={SYMPTOMS}"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)
        
Where to add this code?

Developers should implement these snippets for the Android Platform on the screen where the Nadi assessment is initiated.

Why do we use this code?

Native Android applications use Intents to communicate with other apps. By using the nadi://home scheme, your app instructs the Android OS to open the NT Capture app and transfer patient details instantly without manual data entry.


IOS Implementation (IOS-Based Application)

Swift

let urlString = "nadi://home?user_id={USER_ID}&auth_token={AUTH_TOKEN}&visit_id={VISIT_ID}&client_code={CLIENT_CODE}&height={HEIGHT}&weight={WEIGHT}&age={AGE}&gender={GENDER}&prakruti={PRAKRUTI}&major_symptoms={SYMPTOMS}"
if let url = URL(string: urlString) {
    UIApplication.shared.open(url)
}
        
Where to add this code?

Developers should implement these snippets for the iOS Platform on the screen where the Nadi assessment is initiated.

Why do we use this code?

Using UIApplication.shared.open with our custom URL scheme ensures that the diagnostic data is passed securely between apps on iOS. This streamlines the workflow by ensuring the app is ready for pulse capture the moment it is opened.


Parameter Reference

Comprehensive list of parameters used in the SDK authentication and data payload.

Parameter Required Description Request Value
Authentication & Identity
user_id Yes Practitioner's unique identification number 12345
auth_token Yes Secure API token for session authorization 25be054659f8eb164a61a02567449899
client_code Yes Unique Code mentioned to identify your patient NT_CLIENT_001
visit_id Yes Unique Code mentioned to identify patient current visit 4659f8eb164a61a025
Patient Bio-Data
prakruti No Patient's prakruti
(V: Vata, P: Pitta, K: Kapha, VP: Vata Pitta, VK: Vata Kapha, PV: Pitta Vata, PK: Pitta Kapha, KP: Kapha Pitta, KV: Kapha Vata)
VK
age Yes Patient's age in years 25
gender Yes Biological gender
(M: Male, F: Female, D: Diverse/Non Binary, N: Prefer not to disclose)
M
height Yes Patient's height in centimeters (cm) 165
weight Yes Patient's weight in kilograms (kg) 80
Capture & Clinical
nadi_capture_type No Hardware protocol used for capture (1: Bluetooth, 2: USB).
Default: USB (2)
1
major_symptoms No Comma-separated symptoms list (or 'NA') NA

Authentication

All API requests must be authenticated. You can get your initial credentials or refresh them if your security has been compromised.

Generate Authentication Token

Here is the utility to generate your authentication token. Please provide your login credentials below. The Credentials will be displayed in the right side box and you can use them while integrating it with your software.

Credentials will appear here.

Regenerate Token

To proceed with regenerating your User Authentication details click on the regenerate button.

Note: After regenerating auth token Nadi Tarangini database will be replaced with latest auth token. Please make sure your applications incorporate the latest auth token.

New credentials will appear here.

How to use Credentials

Include the following parameters in your HTTPS Request Headers:

user-id: "YOUR_USER_ID"
auth-token: "YOUR_AUTH_TOKEN"
Onboarding Roadmap

Steps to Full Integration

Follow this clear path to configure your developer environment and begin capturing pulse data.

Step 01
Step 1: Account Registration

To begin the process, the user must register an account on the Nadi Tarangini platform.

Details: Fill the registration form with valid professional and contact details.

Step 02
Step 2: User Login

After you completed step 1, you can log in using the credentials you added during sign-up.

Details: Fill the valid credentials to login.

Step 03
Step 3: Device Linking

Once the account is created, the user must associate their profile with their specific Nadi Tarangini device.

Action: Log in to the portal using the credentials created in Step 2.

Linking: On the dashboard, click on the "Link Device" and fill up the device and serial number mentioned behind the Nadi Tarangini device. (Refer the screenshot)

Step 04
Step 4: Generate Authentication Token

After you have successfully completed the above steps, you will need to create a valid authentication token. All API requests to Nadi Tarangini Backend must be authenticated using a valid API Token. Following are the steps to generate valid auth token.

Authentication
[Optional] Re-Generating User Authentication

If you wish to regenerate the new authentication token later. Following are the steps to regenerate valid auth token.

Re-Authentication
Note: After regenerating auth token Nadi Tarangini database will be replaced with latest auth token. Please make sure your applications incorporate the latest auth token.
Step 05
Step 5: Software Integration Prerequisites

NT Capture can be integrated on desktop and mobile platforms. To select your preferred way, click on the appropriate link below

Web SDK Integration

Contains the Web Link and JS/SDK instructions for browser-based platforms.

To Be Noted: Chrome Browser is required.
Mobile App Integration

Contains the instructions for Android and iOS apps.

To Be Noted: Our mobile app supports the following platforms - Flutter, Kotlin, Swift.
Step 06
Step 6: Fetch User Details

Now your application can capture the Nadi and send it to our backend for analysis. The nadi analysis data is supplied in the JSON format. To fetch this JSON, the following steps are to be followed.

NT Capture
Documentation

NT Capture is the SDK to integrate the Nadi Tarangini service/analytics with your platform. Enable digital pulse diagnosis in your healthcare software with the help of NT Capture. The SDK provides seamless communication between our patented sensors and your clinical applications.

Seamless Integration

NT Capture integrates effortlessly with existing web and application workflows using secure URL parameters. This allows users to launch assessments directly from their system without repeated logins, minimising friction and improving operational efficiency.

Real-Time Data Capture

Pulse signals are captured and processed in real time during the assessment. The system continuously synchronises data to ensure accurate readings, immediate validation, and instant availability for reports and clinical decision-making.

Data Security

NT Capture sessions are protected through authentication tokens and encrypted data transmission. Patient and assessment data are securely handled in compliance with privacy and security best practices, ensuring confidentiality and system integrity at every step.

Parameter Reference

Comprehensive list of parameters used in the SDK authentication and data payload.

Parameter Required Description Request Value
Authentication & Identity
user_id Yes Practitioner's unique identification number 12345
auth_token Yes Secure API token for session authorization 25be054659f8eb164a61a02567449899
client_code Yes Unique Code mentioned to identify your patient NT_CLIENT_001
visit_id Yes Unique Code mentioned to identify patient current visit 4659f8eb164a61a025
Patient Bio-Data
prakruti No Patient's prakruti
(V: Vata, P: Pitta, K: Kapha, VP: Vata Pitta, VK: Vata Kapha, PV: Pitta Vata, PK: Pitta Kapha, KP: Kapha Pitta, KV: Kapha Vata)
VK
age Yes Patient's age in years 25
gender Yes Biological gender
(M: Male, F: Female, D: Diverse/Non Binary, N: Prefer not to disclose)
M
height Yes Patient's height in centimeters (cm) 165
weight Yes Patient's weight in kilograms (kg) 80
Capture & Clinical
nadi_capture_type No Hardware protocol used for capture (1: Bluetooth, 2: USB).
Default: USB (2)
1
major_symptoms No Comma-separated symptoms list (or 'NA') NA

Analysis & Reports API

Retrieve detailed pulse analysis data using a specific visit_id.

Get Raw Analysis Data
https://api.ashoka.world/nt-capture/report/{visit_id}
GET /nt-capture/report/{visit_id}
cURL
curl -H "user-id: YOUR_ID" \
     -H "auth-token: YOUR_TOKEN" \
     https://api.ashoka.world/nt-capture/report/{visit_id}
Python
import requests

headers = {
    "user-id": "YOUR_ID",
    "auth-token": "YOUR_TOKEN"
}

response = requests.get(
    "https://api.ashoka.world/nt-capture/report/{visit_id}",
    headers=headers
)
Node.js
const axios = require('axios');

axios.get(
  'https://api.ashoka.world/nt-capture/report/' + visitId,
  {
    headers: {
      'user-id': 'YOUR_ID',
      'auth-token': 'YOUR_TOKEN'
    }
  }
);
PHP
$response = Http::withHeaders([
    'user-id' => 'YOUR_ID',
    'auth-token' => 'YOUR_TOKEN'
])->get('https://api.ashoka.world/nt-capture/report/' . $visit_id);
Java
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.ashoka.world/nt-capture/report/" + visitId))
    .header("user-id", "YOUR_ID")
    .header("auth-token", "YOUR_TOKEN")
    .GET()
    .build();
Go
url := "https://api.ashoka.world/nt-capture/report/" + visitId

req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("user-id", "YOUR_ID")
req.Header.Add("auth-token", "YOUR_TOKEN")
Ruby
uri = URI("https://api.ashoka.world/nt-capture/report/#{visit_id}")

request = Net::HTTP::Get.new(uri)
request['user-id'] = 'YOUR_ID'
request['auth-token'] = 'YOUR_TOKEN'
C#
var client = new HttpClient();
client.DefaultRequestHeaders.Add("user-id", "YOUR_ID");
client.DefaultRequestHeaders.Add("auth-token", "YOUR_TOKEN");

var response = await client.GetAsync(
    $"https://api.ashoka.world/nt-capture/report/{visitId}"
);
Dart
import 'package:http/http.dart' as http;

final response = await http.get(
  Uri.parse(
    'https://api.ashoka.world/nt-capture/report/$visitId'
  ),
  headers: {
    'user-id': 'YOUR_ID',
    'auth-token': 'YOUR_TOKEN'
  }
);
Kotlin
val client = OkHttpClient()

val request = Request.Builder()
    .url("https://api.ashoka.world/nt-capture/report/$visitId")
    .addHeader("user-id", "YOUR_ID")
    .addHeader("auth-token", "YOUR_TOKEN")
    .build()

val response = client.newCall(request).execute()
Swift
let url = URL(
    string: "https://api.ashoka.world/nt-capture/report/\(visitId)"
)!

var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("YOUR_ID", forHTTPHeaderField: "user-id")
request.setValue("YOUR_TOKEN", forHTTPHeaderField: "auth-token")

URLSession.shared.dataTask(with: request).resume()
Success (Analysis Results)
{
    "status": true,
    "status_code": "NT_2501",
    "message": "Success",
    "data": {
        "C-Code-Error": 1,
        "Pulse": ["73", "r", "N", "v"],
        "BMI": ["29", "O"]
    }
}
Error (NT_2503)
{
    "status": false,
    "status_code": "NT_2503",
    "message": "Report not found"
}

Additional API

Manage and retrieve patient records and their associated visit histories.

List All Patients
GET /nt-capture/patient/getPatients
cURL
curl -H "user-id: YOUR_ID" -H "auth-token: YOUR_TOKEN" https://api.ashoka.world/nt-capture/patient/getPatients
Python
import requests
headers = {"user-id": "YOUR_ID", "auth-token": "YOUR_TOKEN"}
response = requests.get("https://api.ashoka.world/nt-capture/patient/getPatients", headers=headers)
Node.js
const axios = require('axios');
axios.get('https://api.ashoka.world/nt-capture/patient/getPatients', {headers: {'user-id': 'YOUR_ID', 'auth-token': 'YOUR_TOKEN'}});
PHP
$response = Http::withHeaders(['user-id' => 'YOUR_ID', 'auth-token' => 'YOUR_TOKEN'])->get('https://api.ashoka.world/nt-capture/patient/getPatients');
Java
HttpRequest req = HttpRequest.newBuilder().uri(URI.create("https://api.ashoka.world/nt-capture/patient/getPatients")).header("user-id", "YOUR_ID").header("auth-token", "YOUR_TOKEN").build();
Go
req, _ := http.NewRequest("GET", "https://api.ashoka.world/nt-capture/patient/getPatients", nil)
req.Header.Add("user-id", "YOUR_ID")
req.Header.Add("auth-token", "YOUR_TOKEN")
Ruby
uri = URI("https://api.ashoka.world/nt-capture/patient/getPatients")
request = Net::HTTP::Get.new(uri)
request['user-id'] = 'YOUR_ID'
request['auth-token'] = 'YOUR_TOKEN'
C#
client.DefaultRequestHeaders.Add("user-id", "YOUR_ID");
client.DefaultRequestHeaders.Add("auth-token", "YOUR_TOKEN");
var response = await client.GetAsync("https://api.ashoka.world/nt-capture/patient/getPatients");
Dart

                final url = Uri.parse('https://api.ashoka.world/nt-capture/report/#{visit_id}');
                final response = await http.get(
                    url,
                    headers: {
                    'user-id': 'YOUR_USER_ID',
                    'auth-token': 'YOUR_AUTH_TOKEN',
                    },
                );
                
Kotlin

                    val client = OkHttpClient()
                    val request = Request.Builder()
                        .url("https://api.ashoka.world/nt-capture/patient/getPatients")
                        .addHeader("user-id", "YOUR_USER_ID")
                        .addHeader("auth-token", "YOUR_AUTH_TOKEN")
                        .build()

                    client.newCall(request).enqueue(object : Callback {
                        override fun onResponse(call: Call, response: Response) {
                            val result = response.body?.string()
                            // Map JSON result to your Patient model
                        }
                        override fun onFailure(call: Call, e: IOException) {
                            e.printStackTrace()
                        }
                    })
                
Swift

                    func getPatientsList() {
                        let url = URL(string: "https://api.ashoka.world/nt-capture/patient/getPatients")!
                        var request = URLRequest(url: url)
                        request.httpMethod = "GET"
                        request.addValue("YOUR_USER_ID", forHTTPHeaderField: "user-id")
                        request.addValue("YOUR_AUTH_TOKEN", forHTTPHeaderField: "auth-token")

                        URLSession.shared.dataTask(with: request) { data, response, error in
                            if let data = data {
                                let jsonResponse = try? JSONSerialization.jsonObject(with: data)
                                print(jsonResponse ?? "No data")
                            }
                        }.resume()
                    }
                
Success Response (NT_2501)
{
    "status": true,
    "status_code": "NT_2501",
    "message": "Success",
    "data": [
        { "patient_code": "P-9912", "create_date": "2025-12-16 15:39:37" },
        { "patient_code": "P-1111", "create_date": "2025-10-12 11:01:47" }
    ]
}
Get Reports by Patient
GET /nt-capture/patient/{patient_code}/reports
cURL
curl -H "user-id: YOUR_ID" -H "auth-token: YOUR_TOKEN" https://api.ashoka.world/nt-capture/patient/{patient_code}/reports
Python
import requests
    headers = {"user-id": "YOUR_ID", "auth-token": "YOUR_TOKEN"}
    response = requests.get(f"https://api.ashoka.world/nt-capture/patient/{patient_code}/reports", headers=headers)
Node.js
const axios = require('axios');
    const headers = {'user-id': 'YOUR_ID', 'auth-token': 'YOUR_TOKEN'};
    axios.get(`https://api.ashoka.world/nt-capture/patient/${patient_code}/reports`, { headers: headers });
PHP
$response = Http::withHeaders(['user-id' => 'YOUR_ID', 'auth-token' => 'YOUR_TOKEN'])
        ->get("https://api.ashoka.world/nt-capture/patient/{$patient_code}/reports");
Java
HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create("https://api.ashoka.world/nt-capture/patient/" + patientCode + "/reports"))
        .header("user-id", "YOUR_ID")
        .header("auth-token", "YOUR_TOKEN")
        .GET()
        .build();
Go
url := fmt.Sprintf("https://api.ashoka.world/nt-capture/patient/%s/reports", patientCode)
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Add("user-id", "YOUR_ID")
    req.Header.Add("auth-token", "YOUR_TOKEN")
Ruby
uri = URI("https://api.ashoka.world/nt-capture/patient/#{patient_code}/reports")
    request = Net::HTTP::Get.new(uri)
    request['user-id'] = 'YOUR_ID'
    request['auth-token'] = 'YOUR_TOKEN'
C#
var client = new HttpClient();
    client.DefaultRequestHeaders.Add("user-id", "YOUR_ID");
    client.DefaultRequestHeaders.Add("auth-token", "YOUR_TOKEN");
    var response = await client.GetAsync($"https://api.ashoka.world/nt-capture/patient/{patientCode}/reports");
Dart

                    Future getPatientHistory(String patientCode) async {
                        final url = Uri.parse('https://api.ashoka.world/nt-capture/patient/$patientCode/reports');
                        
                        final response = await http.get(
                            url,
                            headers: {
                            'user-id': 'YOUR_USER_ID',
                            'auth-token': 'YOUR_AUTH_TOKEN',
                            },
                        );

                        if (response.statusCode == 200) {
                            final List history = json.decode(response.body)['data'];
                            // Map history to your Timeline UI
                        }
                    }
                
Kotlin

                    val client = OkHttpClient()
                    val request = Request.Builder()
                        .url("https://api.ashoka.world/nt-capture/patient/$patientCode/reports")
                        .addHeader("user-id", "YOUR_USER_ID")
                        .addHeader("auth-token", "YOUR_AUTH_TOKEN")
                        .build()

                    client.newCall(request).enqueue(object : Callback {
                        override fun onResponse(call: Call, response: Response) {
                            val jsonData = response.body?.string()
                            // Display list of visits (visit_id, date, status)
                        }
                        override fun onFailure(call: Call, e: IOException) {
                            e.printStackTrace()
                        }
                    })
                
Swift#

                    func fetchPatientReports(patientCode: String) {
                        let url = URL(string: "https://api.ashoka.world/nt-capture/patient/\(patientCode)/reports")!
                        var request = URLRequest(url: url)
                        request.httpMethod = "GET"
                        request.addValue("YOUR_USER_ID", forHTTPHeaderField: "user-id")
                        request.addValue("YOUR_AUTH_TOKEN", forHTTPHeaderField: "auth-token")

                        URLSession.shared.dataTask(with: request) { data, response, error in
                            if let data = data {
                                let reports = try? JSONSerialization.jsonObject(with: data)
                                print("History for \(patientCode): \(reports ?? "Empty")")
                            }
                        }.resume()
                    }
                
Success Response
{
        "status": true,
        "status_code": "NT_2501",
        "message": "Success",
        "data": [
            { "visit_id": "1234321234r5432s1lkdajfd", "create_date": "2025-12-17 11:57:09" },
            { "visit_id": "9876543210v1234s0akshfjd", "create_date": "2025-12-17 11:23:33" }
        ]
    }
Error (NT_2502)
{
        "status": false,
        "status_code": "NT_2502",
        "message": "Patient not found"
    }

Web SDK Integration

Web applications launch the SDK via a secure popup window. Specify the hardware type using nadi_capture_type.

JavaScript Implementation

const config = {
    user_id: "{{USER_ID}}",
    auth_token: "{{AUTH_TOKEN}}",
    client_code: "{{CLIENT_CODE}}",
    visit_id: "{{VISIT_ID}}",
    height: "{{HEIGHT}}",
    weight: "{{WEIGHT}}",
    age: "{{AGE}}",
    gender: "{{GENDER}}",
    prakruti: "{{PRAKRUTI}}",
    major_symptoms: "{{SYMPTOMS}}",
    nadi_capture_type: "{{TYPE}}"
};

const query = new URLSearchParams(config).toString();
window.open("https://dashboard.naditarangini.com/nt-capture?" + query, 
            "CaptureUI", "width=1200,height=900");
        
Where to add this code?

Developers should implement this snippet within their web-based applications on the screen where the diagnostic process is initiated. It is typically triggered by a "Start Assessment" button.

Why do we use this code?

Web applications launch the SDK via a secure popup window to ensure a dedicated environment for pulse capture. By specifying the nadi_capture_type, the SDK automatically configures itself for the relevant hardware (Bluetooth or USB), allowing for a streamlined data collection process directly within the browser.


Parameter Reference

Comprehensive list of parameters used in the SDK authentication and data payload.

Parameter Required Description Request Value
Authentication & Identity
user_id Yes Practitioner's unique identification number 12345
auth_token Yes Secure API token for session authorization 25be054659f8eb164a61a02567449899
client_code Yes Unique Code mentioned to identify your patient NT_CLIENT_001
visit_id Yes Unique Code mentioned to identify patient current visit 4659f8eb164a61a025
Patient Bio-Data
prakruti No Patient's prakruti
(V: Vata, P: Pitta, K: Kapha, VP: Vata Pitta, VK: Vata Kapha, PV: Pitta Vata, PK: Pitta Kapha, KP: Kapha Pitta, KV: Kapha Vata)
VK
age Yes Patient's age in years 25
gender Yes Biological gender
(M: Male, F: Female, D: Diverse/Non Binary, N: Prefer not to disclose)
M
height Yes Patient's height in centimeters (cm) 165
weight Yes Patient's weight in kilograms (kg) 80
Capture & Clinical
nadi_capture_type No Hardware protocol used for capture (1: Bluetooth, 2: USB).
Default: USB (2)
1
major_symptoms No Comma-separated symptoms list (or 'NA') NA