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_result

Emergency 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'])

Next Steps