Code Examples
Copy-paste production-ready examples for common PearMedica integration patterns. Available in JavaScript/TypeScript, Python, and cURL.
Basic Assessment
Submit symptoms and get a differential diagnosis with triage level.
javascript
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);python
import requests, os
response = 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
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"}
]
}'Free-Text Symptom Parsing
Extract structured symptoms from natural language patient descriptions.
javascript
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 assessment
const 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' })),
}),
});python
import requests, os
# Step 1: Parse free text
parse_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 assessment
assess_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())Conversational Assessment Flow
Multi-turn interview loop: ask follow-up questions until should_stop is true.
javascript
async function runConversationalAssessment(patient, initialEvidence) {
let evidence = [...initialEvidence];
let interviewId = undefined;
let shouldStop = false;
let finalResult = null;
const MAX_TURNS = 20; // Prevent runaway loops
let 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 answer
const 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
}python
def run_conversational_assessment(patient, initial_evidence):
evidence = list(initial_evidence)
interview_id = None
should_stop = False
final_result = None
MAX_TURNS = 20
turns = 0
while not should_stop and turns < MAX_TURNS:
turns += 1
response = 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 = result
if not should_stop and result.get('next_question'):
# Display question to user and collect answer
answer = prompt_user(result['next_question'])
evidence.append({
'id': answer['symptom_id'],
'choice_id': 'present' if answer['present'] else 'absent',
})
return final_resultEmergency Response Handling
Detect and handle emergency triage responses appropriately.
javascript
const result = await assess(patient, evidence);
switch (result.triage.level) {
case 'emergency':
// CRITICAL: Show red alert banner immediately
showEmergencyAlert({
message: result.triage.description,
action: result.triage.recommended_action,
facilities: result.nearest_facilities,
redFlags: result.red_flags,
});
// Log for clinical safety audit
logClinicalEvent('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 disclaimer
displayDisclaimer(result.disclaimer);python
import requests
result = assess(patient, evidence)
level = result['triage']['level']
if level == 'emergency':
# CRITICAL: Show red alert banner immediately
show_emergency_alert(
message=result['triage']['description'],
action=result['triage']['recommended_action'],
facilities=result.get('nearest_facilities', []),
red_flags=result.get('red_flags', []),
)
# Log for clinical safety audit
log_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 disclaimer
display_disclaimer(result['disclaimer'])