Skip to content

Fee Schedules API

Complete API reference for querying Medicare fee schedule data programmatically.

Overview

The Fee Schedules API provides read-only access to Medicare fee schedule pricing data across multiple schedule types. All endpoints require authentication and support flexible filtering, pagination, and temporal queries.

Base Path: /api/v1/fee-schedules

Authentication: Required for all endpoints (Bearer token)

Schedule Types

The following schedule types are available:

ID Name Description
0 Physician Fee Schedule (PFS) Professional services, procedures, and office visits
1 Clinical Lab Fee Schedule (CLFS) Laboratory tests and diagnostic procedures
2 Reserved Reserved for future use
3 Durable Medical Equipment (DME) Medical equipment and supplies
4 Ambulance Fee Schedule Emergency and non-emergency transport
5 ASP Pricing Files Average Sales Price drug pricing

Endpoints

Search Fee Schedules

Search and filter fee schedule records with pagination.

Endpoint: GET /fee-schedules/search

Query Parameters:

Parameter Type Required Description
code string No Filter by HCPCS/CPT code (case-insensitive prefix match)
schedule_type integer No Filter by schedule type (0-5, see table above)
active_on integer No Filter records active on date (YYYYMMDD format)
start_date_from integer No Filter records starting on or after date (YYYYMMDD)
start_date_to integer No Filter records starting on or before date (YYYYMMDD)
has_modifiers boolean No Filter by modifier presence (true=has modifiers, false=base only)
modifier string No Filter by specific modifier code (e.g., "TC", "26")
price_indicator string No Filter by CMS price indicator ('1'=QP, '9'=Standard, 'all'=both). Defaults to standard.
skip integer No Number of records to skip (default: 0)
limit integer No Maximum records to return (default: 50, max: 500)

Response:

{
  "data": [
    {
      "id": 123456,
      "code": "99213",
      "schedule_type": 0,
      "start_date": 20250101,
      "end_date": 20251231,
      "modifiers": null,
      "price_indicator": "9",
      "data": { /* schedule-specific fields */ },
      "created_at": "2025-01-01T00:00:00Z",
      "updated_at": "2025-01-01T00:00:00Z"
    }
  ],
  "count": 1523
}

Example Requests:

# Search for code 99213 (office visit)
curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/search?code=99213"

# Get all PFS codes active on January 1, 2025
curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/search?schedule_type=0&start_date_from=20250101&limit=100"

# Find Qualifyng APM Participant (QP) rates for codes starting with 99
curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/search?code=99&price_indicator=1"

Use Cases:

  • Code lookup: Search by code prefix to find specific procedures
  • Date-based queries: Find pricing active on specific dates
  • Modifier analysis: Compare base vs modified pricing
  • Bulk export: Paginate through all records for data warehousing

Calculate PFS Rate

Calculate geographically-adjusted Physician Fee Schedule (PFS) rates in a single API call.

Endpoint: GET /fee-schedules/pfs/calculate

Query Parameters:

Parameter Type Required Description
npi string Yes Provider NPI for geographic lookup
code string Yes HCPCS/CPT code
date integer No Service date (YYYYMMDD format). Defaults to today.

Response:

{
  "npi": "1234567890",
  "code": "99213",
  "code_description": "Office o/p est low 20 min",
  "service_date": 20260315,
  "rates": {
    "facility_rate": 57.47,
    "non_facility_rate": 95.18,
    "components": {
      "rvu_work": 1.30,
      "rvu_mp": 0.09,
      "full_fac_pe": 0.33,
      "full_nfac_pe": 1.46,
      "conv_fact": 33.4009,
      "gpci_work": 1.035,
      "gpci_pe": 1.094,
      "gpci_mp": 0.723
    }
  },
  "locality_info": {
    "locality": "0110102",
    "loc_description": "Manhattan, NY",
    "mac": "05102",
    "mac_description": "National Government Services",
    "year": 2026,
    "zip_code": "10001"
  },
  "fee_schedule_id": 163503
}

Example Request:

curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/pfs/calculate?npi=1234567890&code=99213&date=20260315"

Use Cases:

  • EHR Integration: Build patient estimators by surfacing expected reimbursement.
  • Contract Modeling: Estimate allowable amounts interactively.
  • Provider Transparency: Give providers a clear geographic breakdown of their rates.

Get Schedule Types

Retrieve list of available schedule types.

Endpoint: GET /fee-schedules/schedule-types

Response:

[
  { "id": 0, "name": "Physician Fee Schedule" },
  { "id": 1, "name": "Clinical Lab Fee Schedule" },
  { "id": 3, "name": "Durable Medical Equipment Fee Schedule" },
  { "id": 4, "name": "Ambulance Fee Schedule" },
  { "id": 5, "name": "ASP Pricing Files" }
]

Example Request:

curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/schedule-types"

Use Cases:

  • Dynamic UI generation: Populate dropdowns with available schedule types
  • Validation: Verify schedule type IDs before making queries

Get Fee Schedule Statistics

Get aggregate statistics about the fee schedule database.

Endpoint: GET /fee-schedules/stats

Response:

{
  "total_records": 2847563,
  "by_schedule_type": {
    "Physician Fee Schedule": 1250000,
    "Clinical Lab Fee Schedule": 450000,
    "Ambulatory Surgical Center Fee Schedule": 320000,
    "Durable Medical Equipment Fee Schedule": 280000,
    "Ambulance Fee Schedule": 125000,
    "ASP Pricing Files": 422563
  },
  "date_range": {
    "earliest": 20150101,
    "latest": 20251231
  },
  "unique_codes": 18453
}

Example Request:

curl -H "Authorization: sk_live_abc123..." \
  "https://api.example.com/api/v1/fee-schedules/stats"

Use Cases:

  • Data coverage validation: Verify available date ranges
  • System monitoring: Track database growth over time
  • Analytics: Understand distribution across schedule types

Get Code Timeline

Retrieve all temporal versions of a specific code.

Endpoint: GET /fee-schedules/code/{code}/timeline

Path Parameters:

Parameter Type Required Description
code string Yes HCPCS/CPT code (case-insensitive)

Query Parameters:

Parameter Type Required Description
schedule_type integer No Schedule type (default: 0)
modifier string No Filter to specific modifier combination

Response:

[
  {
    "id": 123456,
    "start_date": 20250101,
    "end_date": 20251231,
    "label": "20250101 - 20251231",
    "is_active": true
  },
  {
    "id": 123455,
    "start_date": 20240101,
    "end_date": 20241231,
    "label": "20240101 - 20241231",
    "is_active": false
  }
]

Example Requests:

# Get timeline for code 99213
curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/code/99213/timeline"

# Get timeline for code with modifier TC
curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/code/71010/timeline?modifier=TC"

# Get timeline for Clinical Lab code
curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/code/80053/timeline?schedule_type=1"

Use Cases:

  • Price history analysis: Track how pricing changed over time
  • Date range selection: Populate UI with available date ranges
  • Trend identification: Identify pricing patterns and adjustments

Get Code Modifiers

Retrieve all modifier combinations available for a specific code.

Endpoint: GET /fee-schedules/code/{code}/modifiers

Path Parameters:

Parameter Type Required Description
code string Yes HCPCS/CPT code (case-insensitive)

Query Parameters:

Parameter Type Required Description
schedule_type integer No Schedule type (default: 0)
active_on integer No Filter to modifiers active on date (YYYYMMDD)

Response:

[
  {
    "modifiers": null,
    "display": "Base",
    "record_count": 3,
    "latest_start_date": 20250101
  },
  {
    "modifiers": ["TC"],
    "display": "TC",
    "record_count": 3,
    "latest_start_date": 20250101
  },
  {
    "modifiers": ["26"],
    "display": "26",
    "record_count": 3,
    "latest_start_date": 20250101
  }
]

Example Requests:

# Get all modifiers for code 71010
curl -H "Authorization: API_KEY..." \
  "https://api.example.com/api/v1/fee-schedules/code/71010/modifiers"

Use Cases:

  • Related code discovery: Find all variations of a base code
  • Modifier validation: Verify which modifiers are billable
  • UI navigation: Show available modifier options to users

Get Single Fee Schedule Record

Retrieve a specific fee schedule record by ID.

Endpoint: GET /fee-schedules/{record_id}

Path Parameters:

Parameter Type Required Description
record_id integer Yes Unique record ID

Response:

{
  "id": 123456,
  "code": "99213",
  "schedule_type": 0,
  "start_date": 20250101,
  "end_date": 20251231,
  "modifiers": null,
  "price_indicator": "9",
  "data": { /* schedule-specific fields */ },
  "created_at": "2025-01-01T00:00:00Z",
  "updated_at": "2025-01-01T00:00:00Z"
}

Example Request:

curl -H "Authorization: sk_live_abc123..." \
  "https://api.example.com/api/v1/fee-schedules/123456"

Use Cases:

  • Direct record lookup: Retrieve specific record by ID
  • Bookmark/share: Enable deep linking to specific records

Common Patterns

Date Format

All dates use YYYYMMDD integer format: - January 1, 2025 = 20250101 - December 31, 2025 = 20251231

Modifier Handling

  • Base pricing: modifiers = null or has_modifiers = false
  • Modified pricing: modifiers = ["TC"] or modifier = "TC"
  • Multiple modifiers: modifiers = ["TC", "26"] (array of strings)

Pagination Strategy

For large result sets:

# Example: Export all PFS records
skip = 0
limit = 500
all_records = []

while True:
    response = requests.get(
        "https://api.example.com/api/v1/fee-schedules/search",
        params={
            "schedule_type": 0,
            "skip": skip,
            "limit": limit
        },
        headers={"Authorization": f"{api_key}"}
    )
    data = response.json()

    all_records.extend(data["data"])

    if skip + limit >= data["count"]:
        break

    skip += limit

Error Handling

Status Code Description
200 Success
400 Invalid parameters (e.g., invalid schedule_type)
401 Unauthorized (missing/invalid token)
404 Record not found (for single record endpoint)
500 Server error

Rate Limiting

API requests are subject to rate limiting: - Limit: 100 requests per minute per user - Headers: Check X-RateLimit-Remaining and X-RateLimit-Reset response headers


Support

For API support, authentication issues, or bulk data access: - Examples: See API Examples - Support Contact support@bedrockbilling.com