SynThera SDK for JavaScript
The SynThera JavaScript SDK enables seamless integration of clinical AI capabilities into web applications, Node.js backends, and browser-based healthcare tools. Perfect for building modern healthcare applications with real-time clinical intelligence.
Start building with our modern JavaScript SDK supporting both browser and Node.js environments.
<script src="https://cdn.synthera.health/sdk/v1/synthera.min.js"></script>
<script>
const client = new SynThera({
apiKey: 'your-api-key'
});
</script>
import { SynTheraClient } from '@synthera/sdk';
// Initialize the client
const client = new SynTheraClient({
apiKey: 'your-api-key-here',
environment: 'production', // or 'sandbox'
region: 'us-east-1'
});
// Example: Analyze patient data
async function analyzePatient() {
try {
const patientData = {
demographics: {
age: 65,
gender: 'M',
medicalHistory: ['hypertension', 'diabetes', 'smoking']
},
vitals: {
bloodPressure: '160/95',
heartRate: 92,
respiratoryRate: 18,
temperature: 99.2
},
chiefComplaint: 'Chest pain radiating to left arm'
};
const analysis = await client.clinical.analyze(patientData);
console.log('Risk Assessment:', analysis.riskScore);
console.log('Primary Diagnosis:', analysis.primaryDiagnosis);
console.log('Recommendations:', analysis.recommendations);
return analysis;
} catch (error) {
console.error('Analysis failed:', error);
}
}
// Execute analysis
analyzePatient();
This example shows basic patient data analysis. The SDK supports Promise-based async operations and provides comprehensive error handling.
// Real-time clinical analysis
const result = await client.clinical.analyze({
symptoms: ['shortness of breath', 'fatigue'],
labs: { bnp: 850, troponin: 0.02 },
ecg: 'base64-encoded-ecg-data'
});
// Access results
console.log(result.diagnosis.primary);
console.log(result.confidenceScore);
console.log(result.urgencyLevel);
// Real-time voice transcription
const stream = await client.voice.startStreaming({
language: 'en-US',
specialty: 'cardiology',
realTime: true
});
stream.onTranscription((text) => {
console.log('Transcribed:', text);
});
stream.onEntities((entities) => {
console.log('Medical entities:', entities);
});
import React, { useState, useEffect } from 'react';
import { SynTheraClient } from '@synthera/sdk';
const ClinicalAnalysis = () => {
const [client, setClient] = useState(null);
const [analysis, setAnalysis] = useState(null);
const [loading, setLoading] = useState(false);
useEffect(() => {
const syntheraClient = new SynTheraClient({
apiKey: process.env.REACT_APP_SYNTHERA_API_KEY,
environment: 'production'
});
setClient(syntheraClient);
}, []);
const analyzePatient = async (patientData) => {
setLoading(true);
try {
const result = await client.clinical.analyze(patientData);
setAnalysis(result);
} catch (error) {
console.error('Analysis error:', error);
} finally {
setLoading(false);
}
};
return (
<div>
{loading && <div>Analyzing patient data...</div>}
{analysis && (
<div>
<h3>Analysis Results</h3>
<p>Risk Score: {analysis.riskScore}</p>
<p>Primary Diagnosis: {analysis.primaryDiagnosis}</p>
</div>
)}
</div>
);
};
export default ClinicalAnalysis;
<template>
<div>
<button @click="analyzePatient" :disabled="loading">
Analyze Patient
</button>
<div v-if="analysis">
<h3>Analysis Results</h3>
<p>Risk Score: {{ analysis.riskScore }}</p>
<p>Diagnosis: {{ analysis.primaryDiagnosis }}</p>
</div>
</div>
</template>
<script>
import { SynTheraClient } from '@synthera/sdk';
export default {
data() {
return {
client: null,
analysis: null,
loading: false
};
},
mounted() {
this.client = new SynTheraClient({
apiKey: process.env.VUE_APP_SYNTHERA_API_KEY
});
},
methods: {
async analyzePatient() {
this.loading = true;
try {
this.analysis = await this.client.clinical.analyze({
/* patient data */
});
} catch (error) {
console.error(error);
} finally {
this.loading = false;
}
}
}
};
</script>
const express = require('express');
const { SynTheraClient } = require('@synthera/sdk');
const app = express();
app.use(express.json());
// Initialize SynThera client
const syntheraClient = new SynTheraClient({
apiKey: process.env.SYNTHERA_API_KEY,
environment: 'production'
});
// Clinical analysis endpoint
app.post('/api/analyze-patient', async (req, res) => {
try {
const { patientData } = req.body;
// Validate patient data
const validation = await syntheraClient.utils.validateData(patientData);
if (!validation.isValid) {
return res.status(400).json({ error: validation.errors });
}
// Perform clinical analysis
const analysis = await syntheraClient.clinical.analyze(patientData);
res.json({
success: true,
analysis: {
riskScore: analysis.riskScore,
primaryDiagnosis: analysis.primaryDiagnosis,
recommendations: analysis.recommendations,
confidence: analysis.confidenceScore
}
});
} catch (error) {
console.error('Analysis error:', error);
res.status(500).json({
error: 'Clinical analysis failed',
details: error.message
});
}
});
// Voice transcription endpoint
app.post('/api/transcribe', async (req, res) => {
try {
const { audioData, specialty } = req.body;
const transcription = await syntheraClient.voice.transcribe({
audio: audioData,
specialty: specialty,
language: 'en-US'
});
res.json({
success: true,
transcription: transcription.text,
entities: transcription.medicalEntities
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
client.clinical.analyze()
client.clinical.riskScore()
client.clinical.drugInteractions()
client.clinical.guidelines()
client.voice.transcribe()
client.voice.startStreaming()
client.voice.generateSOAP()
client.voice.extractEntities()
client.imaging.analyze()
client.imaging.detectAnomalies()
client.imaging.measure()
client.imaging.compare()
client.lab.interpret()
client.lab.trends()
client.lab.referenceRanges()
client.lab.criticalValues()
client.fhir.patient()
client.fhir.observation()
client.fhir.condition()
client.fhir.medication()
client.utils.validateData()
client.utils.anonymize()
client.utils.exportReport()
client.utils.healthCheck()
import {
SynTheraClient,
SynTheraError,
AuthenticationError,
RateLimitError,
ValidationError
} from '@synthera/sdk';
const client = new SynTheraClient({
apiKey: 'your-api-key',
// Enable automatic retries
retryConfig: {
maxRetries: 3,
retryDelay: 1000
}
});
async function robustAnalysis(patientData) {
try {
// Validate data locally first
const validation = await client.utils.validateData(patientData);
if (!validation.isValid) {
throw new ValidationError('Invalid patient data', validation.errors);
}
const result = await client.clinical.analyze(patientData);
return result;
} catch (error) {
if (error instanceof AuthenticationError) {
console.error('Authentication failed - check API key');
// Redirect to login or refresh token
} else if (error instanceof RateLimitError) {
console.warn(`Rate limit exceeded. Retry after ${error.retryAfter}ms`);
// Implement exponential backoff
setTimeout(() => robustAnalysis(patientData), error.retryAfter);
} else if (error instanceof ValidationError) {
console.error('Data validation failed:', error.details);
// Show user-friendly validation errors
} else if (error instanceof SynTheraError) {
console.error('SynThera API error:', error.message);
// Handle API-specific errors
} else {
console.error('Unexpected error:', error);
// Handle other errors
}
throw error;
}
}
The SynThera JavaScript SDK includes comprehensive TypeScript definitions for enhanced developer experience.
import {
SynTheraClient,
PatientData,
ClinicalAnalysis,
VoiceTranscription
} from '@synthera/sdk';
interface CustomPatientData extends PatientData {
customFields?: Record<string, any>;
}
const client: SynTheraClient = new SynTheraClient({
apiKey: process.env.SYNTHERA_API_KEY!,
environment: 'production'
});
async function analyzePatient(
patientData: CustomPatientData
): Promise<ClinicalAnalysis> {
const analysis = await client.clinical.analyze(patientData);
// TypeScript provides full intellisense and type checking
return {
riskScore: analysis.riskScore,
primaryDiagnosis: analysis.primaryDiagnosis,
recommendations: analysis.recommendations,
confidenceScore: analysis.confidenceScore
};
}
// Voice transcription with types
async function transcribeAudio(
audioFile: File
): Promise<VoiceTranscription> {
const transcription = await client.voice.transcribe({
audio: audioFile,
language: 'en-US',
specialty: 'cardiology'
});
return transcription;
}
Complete REST API reference
Official JavaScript package
Source code and examples
Get help from other developers