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.
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"
Active Credentials
---
---
FAQ & Developer Support
Common technical questions for integrating Nadi Tarangini hardware and APIs.
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.
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
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)
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)
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.
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"
Active Credentials
---
---
Onboarding Roadmap
Steps to Full Integration
Follow this clear path to configure your developer environment and begin capturing pulse data.
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 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 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 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-AuthenticationStep 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.
Mobile App Integration
Contains the instructions for Android and iOS apps.
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 -H "user-id: YOUR_ID" \
-H "auth-token: YOUR_TOKEN" \
https://api.ashoka.world/nt-capture/report/{visit_id}
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
)
const axios = require('axios');
axios.get(
'https://api.ashoka.world/nt-capture/report/' + visitId,
{
headers: {
'user-id': 'YOUR_ID',
'auth-token': 'YOUR_TOKEN'
}
}
);
$response = Http::withHeaders([
'user-id' => 'YOUR_ID',
'auth-token' => 'YOUR_TOKEN'
])->get('https://api.ashoka.world/nt-capture/report/' . $visit_id);
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();
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")
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'
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}"
);
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'
}
);
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()
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()
{
"status": true,
"status_code": "NT_2501",
"message": "Success",
"data": {
"C-Code-Error": 1,
"Pulse": ["73", "r", "N", "v"],
"BMI": ["29", "O"]
}
}
{
"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/getPatientscurl -H "user-id: YOUR_ID" -H "auth-token: YOUR_TOKEN" https://api.ashoka.world/nt-capture/patient/getPatients
import requests
headers = {"user-id": "YOUR_ID", "auth-token": "YOUR_TOKEN"}
response = requests.get("https://api.ashoka.world/nt-capture/patient/getPatients", headers=headers)
const axios = require('axios');
axios.get('https://api.ashoka.world/nt-capture/patient/getPatients', {headers: {'user-id': 'YOUR_ID', 'auth-token': 'YOUR_TOKEN'}});
$response = Http::withHeaders(['user-id' => 'YOUR_ID', 'auth-token' => 'YOUR_TOKEN'])->get('https://api.ashoka.world/nt-capture/patient/getPatients');
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();
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")
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'
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");
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',
},
);
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()
}
})
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()
}
{
"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}/reportscurl -H "user-id: YOUR_ID" -H "auth-token: YOUR_TOKEN" https://api.ashoka.world/nt-capture/patient/{patient_code}/reports
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)
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 });
$response = Http::withHeaders(['user-id' => 'YOUR_ID', 'auth-token' => 'YOUR_TOKEN'])
->get("https://api.ashoka.world/nt-capture/patient/{$patient_code}/reports");
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();
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")
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'
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");
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
}
}
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()
}
})
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()
}
{
"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" }
]
}
{
"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.
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 |