Loading documentation…
Loading documentation…
Copy-paste production-ready examples for common PearMedica integration patterns. Available in JavaScript/TypeScript, Python, and cURL.
Submit symptoms and get a differential diagnosis with triage level.
const response = await fetch('https://api.pearmedica.com/v1/assess', {method: 'POST',headers: {'Authorization': `Bearer ${process.env.PEARMEDICA_API_KEY}`,'Content-Type': 'application/json',},body: JSON.stringify({patient: { age: 35, sex: 'male', location: 'lagos_nigeria' },evidence: [{ id: 's_fever', choice_id: 'present', duration_days: 5 },{ id: 's_abdominal_pain', choice_id: 'present', severity: 'moderate' },{ id: 's_diarrhoea', choice_id: 'present' },],}),});const data = await response.json();console.log('Top condition:', data.conditions[0].name);console.log('Triage:', data.triage.level);
import requests, osresponse = requests.post('https://api.pearmedica.com/v1/assess',headers={'Authorization': f'Bearer {os.environ["PEARMEDICA_API_KEY"]}','Content-Type': 'application/json',},json={'patient': {'age': 35, 'sex': 'male', 'location': 'lagos_nigeria'},'evidence': [{'id': 's_fever', 'choice_id': 'present', 'duration_days': 5},{'id': 's_abdominal_pain', 'choice_id': 'present', 'severity': 'moderate'},{'id': 's_diarrhoea', 'choice_id': 'present'},],},)data = response.json()print(f"Top condition: {data['conditions'][0]['name']}")print(f"Triage: {data['triage']['level']}")
curl -X POST https://api.pearmedica.com/v1/assess \-H "Authorization: Bearer $PEARMEDICA_API_KEY" \-H "Content-Type: application/json" \-d '{"patient": {"age": 35, "sex": "male", "location": "lagos_nigeria"},"evidence": [{"id": "s_fever", "choice_id": "present", "duration_days": 5},{"id": "s_abdominal_pain", "choice_id": "present", "severity": "moderate"},{"id": "s_diarrhoea", "choice_id": "present"}]}'
Extract structured symptoms from natural language patient descriptions.
const response = await fetch('https://api.pearmedica.com/v1/parse', {method: 'POST',headers: {'Authorization': `Bearer ${process.env.PEARMEDICA_API_KEY}`,'Content-Type': 'application/json',},body: JSON.stringify({text: "I've been having headaches and fever for the past three days. I also feel very tired and have body aches.",context: { age: 28, sex: 'female', location: 'lagos_nigeria' },}),});const { symptoms } = await response.json();// → [{ id: "s_fever", name: "Fever", confidence: 0.95 }, ...]// Use extracted symptoms in an assessmentconst assessment = await fetch('https://api.pearmedica.com/v1/assess', {method: 'POST',headers: {'Authorization': `Bearer ${process.env.PEARMEDICA_API_KEY}`,'Content-Type': 'application/json',},body: JSON.stringify({patient: { age: 28, sex: 'female', location: 'lagos_nigeria' },evidence: symptoms.map(s => ({ id: s.id, choice_id: 'present' })),}),});
import requests, os# Step 1: Parse free textparse_res = requests.post('https://api.pearmedica.com/v1/parse',headers={'Authorization': f'Bearer {os.environ["PEARMEDICA_API_KEY"]}'},json={'text': "I've been having headaches and fever for three days. Very tired with body aches.",'context': {'age': 28, 'sex': 'female', 'location': 'lagos_nigeria'},},)symptoms = parse_res.json()['symptoms']# Step 2: Use parsed symptoms in assessmentassess_res = requests.post('https://api.pearmedica.com/v1/assess',headers={'Authorization': f'Bearer {os.environ["PEARMEDICA_API_KEY"]}'},json={'patient': {'age': 28, 'sex': 'female', 'location': 'lagos_nigeria'},'evidence': [{'id': s['id'], 'choice_id': 'present'} for s in symptoms],},)print(assess_res.json())
Multi-turn interview loop: ask follow-up questions until should_stop is true.
async function runConversationalAssessment(patient, initialEvidence) {let evidence = [...initialEvidence];let interviewId = undefined;let shouldStop = false;let finalResult = null;const MAX_TURNS = 20; // Prevent runaway loopslet turns = 0;while (!shouldStop && turns < MAX_TURNS) {turns++;const response = await fetch('https://api.pearmedica.com/v1/assess', {method: 'POST',headers: {'Authorization': `Bearer ${process.env.PEARMEDICA_API_KEY}`,'Content-Type': 'application/json',},body: JSON.stringify({patient,evidence,interview_id: interviewId,}),});const result = await response.json();interviewId = result.interview_id;shouldStop = result.should_stop;finalResult = result;if (!shouldStop && result.next_question) {// Display question to user and collect their answerconst userAnswer = await promptUser(result.next_question);evidence.push({id: userAnswer.symptomId,choice_id: userAnswer.present ? 'present' : 'absent',});}}return finalResult; // Final assessment with conditions and triage}
def run_conversational_assessment(patient, initial_evidence):evidence = list(initial_evidence)interview_id = Noneshould_stop = Falsefinal_result = NoneMAX_TURNS = 20turns = 0while not should_stop and turns < MAX_TURNS:turns += 1response = requests.post('https://api.pearmedica.com/v1/assess',headers={'Authorization': f'Bearer {os.environ["PEARMEDICA_API_KEY"]}'},json={'patient': patient,'evidence': evidence,'interview_id': interview_id,},)result = response.json()interview_id = result['interview_id']should_stop = result['should_stop']final_result = resultif not should_stop and result.get('next_question'):# Display question to user and collect answeranswer = prompt_user(result['next_question'])evidence.append({'id': answer['symptom_id'],'choice_id': 'present' if answer['present'] else 'absent',})return final_result
Detect and handle emergency triage responses appropriately.
const result = await assess(patient, evidence);switch (result.triage.level) {case 'emergency':// CRITICAL: Show red alert banner immediatelyshowEmergencyAlert({message: result.triage.description,action: result.triage.recommended_action,facilities: result.nearest_facilities,redFlagsPresent: result.red_flags_present,watchFor: result.red_flags_watch_for,});// Log for clinical safety auditlogClinicalEvent('emergency_detected', result.interview_id);break;case 'urgent':showUrgentNotice(result.triage);break;case 'routine':showRoutineRecommendation(result.triage);break;case 'self-care':showSelfCareGuidance(result.triage);break;}// Always display the disclaimerdisplayDisclaimer(result.disclaimer);
import requestsresult = assess(patient, evidence)level = result['triage']['level']if level == 'emergency':# CRITICAL: Show red alert banner immediatelyshow_emergency_alert(message=result['triage']['description'],action=result['triage']['recommended_action'],facilities=result.get('nearest_facilities', []),red_flags_present=result.get('red_flags_present', []),watch_for=result.get('red_flags_watch_for', []),)# Log for clinical safety auditlog_clinical_event('emergency_detected', result['interview_id'])elif level == 'urgent':show_urgent_notice(result['triage'])elif level == 'routine':show_routine_recommendation(result['triage'])elif level == 'self-care':show_self_care_guidance(result['triage'])# Always display the disclaimerdisplay_disclaimer(result['disclaimer'])