---
title: "How to Find and Register Patients in EHRs and Practice Management Systems with"
img: https://unified.to/images/logo.svg
date: 2026-10-24T01:33:00.000Z
updated: 2026-10-24T11:39:57.358Z
readingTime: 3
tag: Product
description: "Your product can search a practice's patients by name on 31 integrations, including EHRs such as Epic, Oracle Health, athenahealth, NextGen Healthcare and..."
url: "https://unified.to/blog/how_to_find_and_register_patients_in_ehrs_and_practice_management_systems_with"
---

# 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](http://unified.to/)'s [Healthcare API](/healthcare) returns patients as a single [Patient object](https://docs.unified.to/healthcare/patient/model) with names, birthdate, contact details, address and identifiers such as the medical record number.


## What you are building

1. Authorize the practice's system and store one connection ID
2. Search for the patient by name, and confirm the match on birthdate
3. Register them if they're new
4. Keep contact details current from your intake flow

## Search for a patient


```typescript
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


```typescript
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


```typescript
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](/blog/replacing_polling_with_event_driven_integrations_using_virtual_webhooks). On Canvas Medical, Cliniko, Dentally, DrChrono, Elation Health, IntakeQ, Open Dental, Semble, SMART on FHIR, TietoEVRY Lifecare, TruBridge and Veradigm, [virtual webhooks](/blog/what_are_virtual_webhooks_how_they_differ_from_sync_based_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](https://app.unified.to/login)
→ [Book a demo](https://calendly.com/d/cph9-g8n-jzg/connect-with-unified)


## 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.