Serif Health Provider Directory API
Determine in- vs out-of-network status across payers and perform NPI/EIN relationship crosswalks to understand network structure and decode MRF postings.
Determine in- vs out-of-network status across payers and perform NPI/EIN relationship crosswalks to understand network structure and decode MRF postings.
openapi: 3.0.1
info:
title: Serif Health Pricing API
description: >-
REST API for Serif Health's normalized healthcare price-transparency data.
Query payer-negotiated reimbursement rates and percentile rate distributions
for an individual procedure code (CPT/DRG), filtered by region, tier, site of
service, payer, and weighting. Rates are derived from federally mandated
machine-readable files (MRFs) published by payers and hospitals.
Only the rates and distributions endpoints are documented here from public
Serif Health materials. Find Care, Provider Directory, and dataset/extract
capabilities are offered but their request/response contracts are not publicly
documented and are intentionally not fabricated here.
termsOfService: https://www.serifhealth.com/legal/terms
contact:
name: Serif Health
email: hello@serifhealth.com
url: https://www.serifhealth.com
version: '1.0'
servers:
- url: https://pricing-api.serifhealth.com
description: Serif Health Pricing API
security:
- ApiKeyAuth: []
paths:
/v1/rates/code/{code}:
get:
operationId: getRatesByCode
tags:
- Rates
summary: Get negotiated rates for a procedure code
description: >-
Returns payer-negotiated reimbursement rates for a single procedure code
(CPT/DRG), optionally filtered by region, tier, site of service, and payer.
parameters:
- name: code
in: path
required: true
description: The procedure code (CPT or DRG) to look up.
schema:
type: string
example: '27445'
- name: region
in: query
required: false
description: US state abbreviation to scope rates to (e.g. PA).
schema:
type: string
example: PA
- name: tier
in: query
required: false
description: Service tier, e.g. professional or facility.
schema:
type: string
example: professional
- name: site
in: query
required: false
description: Site of service, e.g. nonfac (non-facility) or fac (facility).
schema:
type: string
example: nonfac
- name: payer
in: query
required: false
description: Payer name to filter to (e.g. bcbs, cigna, uhc).
schema:
type: string
example: bcbs
responses:
'200':
description: Negotiated rates for the requested code.
content:
application/json:
schema:
$ref: '#/components/schemas/RatesResponse'
'401':
description: Missing or invalid API key.
'404':
description: No rates found for the requested code/filters.
'429':
description: Rate limit exceeded.
/v1/distributions/code/{code}:
get:
operationId: getDistributionsByCode
tags:
- Distributions
summary: Get rate distribution for a procedure code
description: >-
Returns the percentile distribution (5th-95th) of negotiated rates for a
single procedure code, filtered by region, tier, site of service, payer,
and weighting method.
parameters:
- name: code
in: path
required: true
description: The procedure code (CPT or DRG) to look up.
schema:
type: string
example: '90837'
- name: region
in: query
required: false
description: US state abbreviation to scope the distribution to (e.g. TX).
schema:
type: string
example: TX
- name: tier
in: query
required: false
description: Service tier, e.g. professional or facility.
schema:
type: string
example: professional
- name: site
in: query
required: false
description: Site of service, e.g. nonfac (non-facility) or fac (facility).
schema:
type: string
example: nonfac
- name: payer
in: query
required: false
description: Payer name to filter to (e.g. bcbs, cigna, uhc).
schema:
type: string
example: bcbs
- name: weighting
in: query
required: false
description: Weighting method for the distribution, by ein or npi.
schema:
type: string
enum:
- ein
- npi
example: ein
responses:
'200':
description: Percentile rate distribution for the requested code.
content:
application/json:
schema:
$ref: '#/components/schemas/DistributionResponse'
'401':
description: Missing or invalid API key.
'404':
description: No distribution found for the requested code/filters.
'429':
description: Rate limit exceeded.
components:
securitySchemes:
ApiKeyAuth:
type: http
scheme: bearer
description: >-
Serif Health API key passed as a Bearer token in the Authorization
header (Authorization: Bearer <API_KEY>). API keys are issued by Serif
Health; contact hello@serifhealth.com for access.
schemas:
RatesResponse:
type: object
properties:
code:
type: string
description: The procedure code that was queried.
example: '27445'
count:
type: integer
description: Total number of matching rate records.
example: 3178
rates:
type: array
items:
$ref: '#/components/schemas/RateEntry'
RateEntry:
type: object
properties:
payer:
type: string
description: Payer name.
example: Cigna
rate:
type: number
description: Negotiated rate amount in USD.
example: 1621
npi_count:
type: integer
description: Number of distinct NPIs contributing to this rate.
example: 3509
ein_count:
type: integer
description: Number of distinct EINs contributing to this rate.
example: 2
DistributionResponse:
type: object
properties:
code:
type: string
description: The procedure code that was queried.
example: '90837'
npi_count:
type: integer
description: Number of distinct NPIs in the distribution.
example: 1128940
ein_count:
type: integer
description: Number of distinct EINs in the distribution.
example: 270301
weighting:
type: string
description: Weighting method applied to the distribution.
example: ein
distribution:
$ref: '#/components/schemas/Percentiles'
Percentiles:
type: object
description: Negotiated-rate percentiles in USD.
properties:
5th:
type: number
example: 92.04
10th:
type: number
example: 92.04
25th:
type: number
example: 103.06
50th:
type: number
example: 126.69
75th:
type: number
example: 133.86
90th:
type: number
example: 162.07
95th:
type: number
example: 179.27