How to Find and Register Patients in EHRs and Practice Management Systems with
Your product can search a practice's patients by name on 31 integrations, including EHRs such as Epic, Oracle Health, athenahealth, NextGen Healthcare and Veradigm, and practice management systems such as Cliniko, Halaxy and Open Dental, and register or update patients on 19, including Canvas Medical, Cliniko, DrChrono, Elation Health, Healthie, Open Dental and Tebra (as of 24 October 2026).
sdk.healthcare.listHealthcarePatients, createHealthcarePatient and updateHealthcarePatient work the same way on every one of them. Every request is executed directly against the practice's system.
Why patient matching comes first
Every healthcare workflow starts with a patient ID in the practice's system: booking, intake forms, care programs, results, notes. Products that skip this step create duplicates, which practices then merge by hand, or fail to link to the chart at all.
The fix is to look the patient up before you create them, and to write intake data into the practice's own record instead of keeping a parallel one. Unified.to's Healthcare API returns patients as a single Patient object with names, birthdate, contact details, address and identifiers such as the medical record number.
What you are building
- Authorize the practice's system and store one connection ID
- Search for the patient by name, and confirm the match on birthdate
- Register them if they're new
- Keep contact details current from your intake flow
Search for a patient
import { UnifiedTo } from '@unified-api/typescript-sdk';
const sdk = new UnifiedTo({
security: { jwt: process.env.UNIFIED_API_KEY },
});
const candidates = await sdk.healthcare.listHealthcarePatients({
connectionId,
query: 'Garcia',
limit: 50,
});
const match = candidates.find((p) => p.birthdate === '1984-03-12' && p.first_name?.toLowerCase() === 'maria');
query searches by name on the system's own search. Always confirm a match on at least one more field you trust, typically birthdate (always YYYY-MM-DD), before you attach data to a record; names aren't unique.
identifiers holds the record's business identifiers, each with a type (MRN, NPI, SSN, DRIVERS_LICENSE, PASSPORT, INSURANCE or OTHER) and value. When your customer gives you the medical record number, match on the MRN identifier; it's the most reliable key.
On SMART on FHIR EHRs, a patient-launch connection is already scoped to one patient: getHealthcarePatient with that patient's ID returns their record, and lists default to them.
Register a new patient
const patient = await sdk.healthcare.createHealthcarePatient({
connectionId,
healthcarePatient: {
first_name: 'Maria',
last_name: 'Garcia',
birthdate: '1984-03-12',
gender: 'FEMALE',
emails: [{ email: 'maria@example.com', type: 'HOME' }],
telephones: [{ telephone: '+1 555 0100', type: 'MOBILE' }],
address: { address1: '1 Main St', city: 'Springfield', region: 'IL', postal_code: '62701', country: 'US' },
},
});
Systems differ in the fields they require. For example, Open Dental requires first_name and last_name; Dentally requires those plus birthdate and gender; Elation Health and DrChrono also require a primary practitioner in practitioner_ids (as of 24 October 2026). The capability matrix lists required and writable fields per integration; build your intake form from it.
Large EHRs (Epic, Oracle Health, athenahealth, MEDITECH and others on patient-access APIs) don't accept patient registration through these APIs. Registration happens at the front desk; your product reads the result.
Update contact details
await sdk.healthcare.updateHealthcarePatient({
connectionId,
id: patient.id!,
healthcarePatient: { telephones: [{ telephone: '+1 555 0199', type: 'MOBILE' }] },
});
Send only the fields that changed. Updates are available on the same 19 integrations that accept registration.
Stay current
Halaxy and WellSky Personal Care push patient changes as native webhooks. On Canvas Medical, Cliniko, Dentally, DrChrono, Elation Health, IntakeQ, Open Dental, Semble, SMART on FHIR, TietoEVRY Lifecare, TruBridge and Veradigm, virtual webhooks for healthcare_patient detect changes, and updatedGte returns patients changed since a timestamp (as of 24 October 2026).
→ Start your 30-day free trial → Book a demo
Frequently asked questions
What if the search returns several matches?
Show them to staff with birthdate and contact details and let a person choose. Don't auto-merge or pick the first.
Can I deactivate or delete a patient?
Not through the unified Patient object. is_active tells you whether the practice still uses the record; deactivation happens in the practice's system.