Skip to content

Coverage Data API

Complete API reference for querying CMS Medicare Coverage data including NCDs, LCDs, and Articles.

Overview

The Coverage Data API provides access to Medicare Coverage policy documents:

  • NCDs - National Coverage Determinations (CMS-wide policies)
  • LCDs - Local Coverage Determinations (regional MAC policies)
  • Articles - Billing & Coding guidance documents

Base Path: /api/v1/coverage

Authentication: Required for all endpoints (Bearer token or API Key)


NCD Endpoints

Search NCDs

Search National Coverage Determinations with filtering and pagination.

Endpoint: GET /coverage/ncd/search

Query Parameters:

Parameter Type Required Description
keyword string No Search in section number and title
skip integer No Records to skip (default: 0)
limit integer No Max records to return (default: 50, max: 500)

Response:

{
  "items": [
    {
      "ncd_id": 250,
      "ncd_version": 2,
      "ncd_manual_section": "20.9.1",
      "ncd_manual_section_title": "Ambulance Services",
      "ncd_effective_date": "2005-01-01",
      "publication_code": 1
    }
  ],
  "total": 450
}

Example Request:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api.example.com/api/v1/coverage/ncd/search?keyword=ambulance"

Get NCD Document

Retrieve the HTML document for a specific NCD.

Endpoint: GET /coverage/ncd/doc/{id}/{version}/{section}

Path Parameters:

Parameter Type Required Description
id integer Yes NCD ID
version integer Yes Version number
section string Yes NCD manual section (slashes replaced with dashes)

Response: HTML content of the NCD document

Example Request:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api.example.com/api/v1/coverage/ncd/doc/250/2/20-9-1"

LCD Endpoints

Search LCDs

Search Local Coverage Determinations with filtering and pagination.

Endpoint: GET /coverage/lcd/search

Query Parameters:

Parameter Type Required Description
keyword string No Search in display ID and title
status string No Filter by status (Current, Proposed, Retired, Future)
skip integer No Records to skip (default: 0)
limit integer No Max records to return (default: 50, max: 500)

Response:

{
  "items": [
    {
      "lcd_id": 35014,
      "lcd_version": 3,
      "display_id": "L35014",
      "title": "Wheelchair Seating",
      "status": "Current",
      "orig_det_eff_date": "2017-01-01",
      "rev_eff_date": "2024-01-15",
      "last_updated": "2024-01-10T12:00:00Z"
    }
  ],
  "total": 1250
}

Example Requests:

# Search by keyword
curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api.example.com/api/v1/coverage/lcd/search?keyword=wheelchair"

# Filter by status
curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api.example.com/api/v1/coverage/lcd/search?status=Current&limit=100"

Get LCD Document

Retrieve the HTML document for a specific LCD.

Endpoint: GET /coverage/lcd/doc/{id}/{version}

Path Parameters:

Parameter Type Required Description
id integer Yes LCD ID
version integer Yes Version number

Response: HTML content of the LCD document

Example Request:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api.example.com/api/v1/coverage/lcd/doc/35014/3"

List LCD HCPCS Codes

Get HCPCS codes associated with an LCD.

Endpoint: GET /coverage/lcd/{id}/{version}/hcpcs

Response:

{
  "lcd_id": 35014,
  "lcd_version": 3,
  "codes": [
    {
      "hcpc_code_id": "E1161",
      "hcpc_code_version": 1,
      "short_description": "Man w/c access folding",
      "long_description": "Manual adult size wheelchair..."
    }
  ],
  "count": 45
}

Article Endpoints

Search Articles

Search Billing & Coding Articles with filtering and pagination.

Endpoint: GET /coverage/article/search

Query Parameters:

Parameter Type Required Description
keyword string No Search in display ID and title
status string No Filter by status
skip integer No Records to skip (default: 0)
limit integer No Max records to return (default: 50, max: 500)

Response:

{
  "items": [
    {
      "article_id": 57704,
      "article_version": 2,
      "article_type": 1,
      "display_id": "A57704",
      "title": "Billing and Coding: Wheelchair Seating",
      "status": "Current",
      "article_eff_date": "2024-01-15",
      "last_updated": "2024-01-10T12:00:00Z"
    }
  ],
  "total": 3500
}

Get Article Document

Retrieve the HTML document for a specific Article.

Endpoint: GET /coverage/article/doc/{id}/{version}

Path Parameters:

Parameter Type Required Description
id integer Yes Article ID
version integer Yes Version number

Response: HTML content of the Article document


List Article ICD-10 Codes

Get ICD-10 diagnosis codes associated with an Article.

Endpoint: GET /coverage/article/{id}/{version}/icd10

Query Parameters:

Parameter Type Required Description
covered boolean No If true, return covered codes only. If false, non-covered only.

Response:

{
  "article_id": 57704,
  "article_version": 2,
  "covered_codes": [
    {
      "icd10_code_id": "M54.5",
      "description": "Low back pain"
    }
  ],
  "noncovered_codes": [
    {
      "icd10_code_id": "Z00.00",
      "description": "General adult medical exam"
    }
  ]
}

Common Response Fields

LCD Status Values

Status Description
Current Active policy in effect
Proposed Draft under review
Future Approved, not yet effective
Retired No longer active
Expired Past end date

Date Formats

  • Dates returned as ISO 8601 strings: YYYY-MM-DD
  • Timestamps include time: YYYY-MM-DDTHH:MM:SSZ

Error Handling

Status Code Description
200 Success
400 Invalid parameters
401 Unauthorized (missing/invalid token)
404 Document not found
500 Server error

Error Response:

{
  "detail": "LCD document not found for id=99999, version=1"
}

Rate Limits

  • Standard: 100 requests/minute per API key
  • Document endpoints: Count as 1 request regardless of document size
  • Search endpoints: Pagination recommended for large result sets