Skip to main content

Medplum JS Client Library

The Medplum JS Client Library is a pure TypeScript library for calling a FHIR server from the browser.

Key Features

  • FHIR validation and operations
  • FHIR client to create, read, update, delete, patch, and search
  • WebSockets for realtime communication
  • Evaluation of FhirPath
  • No external dependencies


Add as a dependency:

npm install @medplum/core

Basic Usage

Create a new MedplumClient:

import { MedplumClient } from '@medplum/core';

const medplum = new MedplumClient();

Create a MedplumClient with additional configuration options:

import { MedplumClient } from '@medplum/core';

const medplum = new MedplumClient({
baseUrl: '',
clientId: 'MY_CLIENT_ID',

Authenticate with client credentials

const medplum = new MedplumClient();
await medplum.startClientLogin(MY_CLIENT_ID, MY_CLIENT_SECRET);

Authenticating with Medplum

If you are using Medplum as your FHIR server, you can use a direct sign-in API to authenticate email and password.

Before you begin

  1. Create a project in the Medplum App
  2. Enable Email/Password

After that, you can use the startLogin() method:

const loginResult = await medplum.startLogin({ email, password, remember });
const profile = await medplum.processCode(loginResult.code);

Authenticating with OAuth

Authenticate with a FHIR server via OAuth2 redirect:

medplum.signInWithRedirect().then((user) => console.log(user));

Search for any resource using a FHIR search string:

search<K extends ResourceType>(
resourceType: K,
query?: URLSearchParams | string,
options: RequestInit = {}
): ReadablePromise<Bundle<ExtractResource<K>>>


const bundle = await'Patient', 'given=eve');
bundle.entry.forEach((entry) => console.log(entry.resource));


Create resource:

createResource<T extends Resource>(resource: T): Promise<T>


resourceType: 'Observation',
subject: {
reference: 'Patient/123',
valueQuantity: {
// ...
// ...

Read a resource

Read a resource by ID:

readResource<T extends Resource>(resourceType: string, id: string): Promise<T>


const patient = await medplum.readResource('Patient', '123');

Read resource history

Read resource history:

readHistory<T extends Resource>(resourceType: string, id: string): Promise<Bundle<T>>


const historyBundle = await medplum.readHistory('Patient', '123');

Read resource version

Read a specific version:

readVersion<T extends Resource>(resourceType: string, id: string, vid: string): Promise<T>


const version = await medplum.readVersion('Patient', '123', '456');

Update a resource

Update a resource:

updateResource<T extends Resource>(resource: T): Promise<T>


const result = await medplum.updateResource({
resourceType: 'Patient',
id: '123',
name: [
family: 'Smith',
given: ['John'],

Delete a resource

Delete a resource:

deleteResource(resourceType: string, id: string): Promise<any>


await medplum.deleteResource('Patient', '123');

Patch a resource

Patch a resource:

patchResource<T extends Resource>(resourceType: string, id: string, operations: Operation[]): Promise<T>


const result = await medplum.patchResource('Patient', '123', [
{ op: 'replace', path: '/name/0/family', value: 'Smith' },


Execute a GraphQL query:

graphql(query: string, options?: RequestInit): Promise<any>


const result = await graphql(`
PatientList(name: "Alice") {
name {

About Medplum

Medplum is a healthcare platform that helps you quickly develop high-quality compliant applications. Medplum includes a FHIR server, React component library, and developer app.


Apache 2.0. Copyright © Medplum 2023