Metriport is an open-source universal API for healthcare data.
Metriport is an open-source universal API for healthcare data.
Complete real-time patient context from every source that matters, transformed into relevant intelligence for your care teams and their AI agents.
Learn more »
Docs
·
Website
·
Dashboard
·
NPMMetriport provides real-time access to medical data for 340+ million individuals across the US. Its open-source platform turns scattered patient records across all major healthcare IT systems into structured information that gives clinicians what they need, exactly when they need it, to provide the best possible care.
Metriport manages dozens of connections across all national HIEs and QHINs, state and regional HIEs, ADT networks, pharmacies, labs, and EHRs. It then matches, extracts, standardizes, deduplicates, and enriches records, and converts them into a unified data model, accessible through a single API, data warehouse, or apps directly within an EHR.
In addition to providing longitudinal patient clinical data at the point of care, Metriport offers ambient monitoring, alerting providers in real time as patients are moved through the healthcare system to assist with transitions of care. Metriport also delivers insights on top of the data, like AI medical record summarization, condition suspecting, and surfacing care gaps.
Founded in 2022 and headquartered in San Francisco, Metriport processes 4.2 billion network requests a month and returns the first structured record in under 15 seconds. Teams across care delivery, value-based programs, and health tech platforms build on Metriport, including Amazon One Medical, Strive Health, Color, Sollis Health, and Canvas Medical.
Metriport is HITRUST r2 certified, SOC 2 Type 2 certified, and HIPAA compliant. Visit our trust center to learn more about our security practices.
Metriport connects to every major source of patient data, harmonizes it into a single record, and delivers it wherever your team works - through an API, a data warehouse, apps inside your EHR, or as ready-made clinical insights.
A single Network Query reaches all four national networks - TEFCA/QHINs, Carequality, CommonWell, and eHealth Exchange.
Enroll a patient once and their admissions, transfers, and discharges are pushed as they happen, from the national ADT networks (Bamboo Health, PointClickCare) and from state and regional HIEs.
Medication fill history & notifications from Surescripts and PBM networks, reconciled onto the record you already query. Lab history & notifications from Quest.
Turnkey bi-directional connections to most major EHRs that reconcile internal chart data with everything retrieved from outside it into one interactive longitudinal record.
Work with structured data that’s clean, standardized, and actionable - no matter the format at its source.
Integrate Metriport into any workflow with a universal FHIR-native API.
Run analytical queries via a single unified flattened schema applied across all of your data.
Real-time admission, transfer, and discharge events for enrolled patients, with the discharge summary retrieved automatically. The webhook lands in your care-management system with the encounter record already attached, so transition-of-care follow-up starts from context instead of from a search.
External patient history rendered inside the chart your clinicians already have open, in EHRs like Epic, athenaOne, Practice Fusion, and Canvas.
Use our apps standalone, or bake them into your homegrown EHR.
Send and receive referrals to other providers, and send electronic case reports to public health agencies.
Get an AI summary of the patient information most pertinent to you - thousands of records in a single customizable paragraph.
Discover conditions that should be presently diagnosed, but are not, based on a patient’s longitudinal medical record.
Find proof of open and closed care gaps with an NCQA certified HEDIS engine.
Check out the links below to get started with Metriport:
Backend for the Metriport platform.
/packages/apiWe use AWS CDK as IaC.
/packages/infraOur beautiful developer documentation, powered by mintlify ❤️.
/docsGot ideas for how you can make Metriport better? We welcome community contributions!
By making a contribution to this project, you are deemed to have accepted the Developer Certificate of Origin (DCO), agree to GitHub's Community Guidelines, and agree to the Acceptable Use Policies.
Click here to open a new issue - follow the chosen template and you're good to go.
This monorepo uses npm workspaces to manage the packages and execute commands globally.
But not all folders under /packages are part of the workspace. To see the ones that are, check the
root folder's package.json under the workspaces section.
To setup this repository for local development, issue this command on the root folder:
$ npm run init # only needs to be run once
$ npm run build # packages depend on each other, so its best to build/compile them allUseful commands:
npm run test: it executes the test script on all workspaces;npm run typecheck: it will run typecheck on all workspaces, which checks for typescript compilation/syntax issues;npm run lint-fix: it will run lint-fix on all workspaces, which checks for linting issues and automatically fixes the issues it can;npm run prettier-fix: it will run prettier-fix on all workspaces, which checks for formatting issues and automatically fixes the issues it can;This repo uses Semantic Version, and we automate the versioning by using Conventional Commits.
This means all commit messages must be created following a certain standard:
[optional scope]:
[optional body]
[optional footer(s)]To enforce commits follow this pattern, we have a Git hook (using Husky) that verifies commit messages according to the Conventional Commits - it uses commitlint under the hood (config).
Accepted types:
Scope is optional, and we can use one of these, or empty (no scope):
./packages)The footer should have the issue number supporting the commit:
...
Ref: #One can enter the commit message manually and have commitlint check its content, or use Commitizen's
CLI to guide through building the commit message:
$ npm run commitIn case something goes wrong after you prepare the commit message and you want to retry it after fixing the issue, you can issue this command:
$ npm run commit -- --retryCommitizen will retry the last commit message you prepared previously. More about this here.
To avoid pushing secrets to the remote git repository we use Gitleaks - triggered by Husky.
From their repository:
Gitleaks is a SAST tool for detecting and preventing hardcoded secrets like passwords, api keys, and tokens in git repos.
It automaticaly scans new commits and interrupts the execution if it finds content that match the configured rules.
Example of report while trying to commit changes:
…If you're absolutely sure there's no secret on the reported file/line, add the fingerprint to .gitleaksignore file - that will be ignored and you'll be able to commit.
First, create a local environment file to define your developer keys, and local dev URLs:
$ touch packages/api/.env
$ echo "LOCAL_ACCOUNT_CXID=" >> packages/api/.env
$ echo "API_URL=http://localhost:8080" >> packages/api/.env
$ echo "FHIR_SERVER_URL=" >> packages/api/.env # optionalAdditionally, define your System Root OID. This will be the base identifier to represent your system in any medical data you create - such as organizations, facilities, patients, and etc.
Your OID must be registered and assigned by HL7. You can do this here.
By default, OIDs in Metriport are managed according to the recommended standards outlined by HL7.
$ echo "SYSTEM_ROOT_OID=" >> packages/api/.envThese envs are specific to CommonWell and are necessary in sending requests to their platform.
…The API server reports analytics to PostHog. This is optional.
If you want to set it up, add this to the .env file:
$ echo "POST_HOG_API_KEY_SECRET=" >> packages/api/.envThe API server reports endpoint usage to an external service. This is optional.
A reachable service that accepts a POST request to the informed URL with the payload below is required:
{
"cxId": "",
"cxUserId": ""
}If you want to set it up, add this to the .env file:
$No open issues yet, or sync has not completed.