CMS Beneficiary Claims Data API (BCDA)

BCDA enables Medicare Shared Savings Program Accountable Care Organizations (ACOs) to retrieve bulk Medicare Parts A, B, and D claims data for their assigned and assignable beneficiaries via the HL7 FHIR Bulk Data Access (Flat FHIR) specification. Uses asynchronous $export endpoints returning NDJSON resources for Patient, Coverage, and ExplanationOfBenefit.

OpenAPI Specification

cms-gov-bcda-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: CMS Beneficiary Claims Data API (BCDA)
  description: |
    BCDA enables Medicare Shared Savings Program ACOs to retrieve bulk Medicare Parts A, B,
    and D claims data for assigned and assignable beneficiaries via the HL7 FHIR Bulk Data
    Access (Flat FHIR) specification.
  version: '2.0'
  contact:
    name: BCDA Help
    url: https://bcda.cms.gov/
    email: bcapi@cms.hhs.gov
  license:
    name: Public Domain (U.S. Government Work)
    url: https://www.usa.gov/government-works
servers:
- url: https://api.bcda.cms.gov/api/v2
  description: Production
- url: https://sandbox.bcda.cms.gov/api/v2
  description: Sandbox
security:
- BearerAuth: []
paths:
  /metadata:
    get:
      summary: Get FHIR Capability Statement
      operationId: getCapabilityStatement
      tags: [Metadata]
      security: []
      responses:
        '200': { description: CapabilityStatement, content: { application/fhir+json: { schema: { type: object } } } }
  /Patient/$export:
    get:
      summary: Initiate Bulk Patient Export
      operationId: exportPatient
      description: Asynchronously export Patient resources for the ACO's beneficiary population.
      tags: [Bulk Export]
      parameters:
      - { name: _type, in: query, schema: { type: string, description: 'Comma-delimited list: Patient,Coverage,ExplanationOfBenefit' } }
      - { name: _since, in: query, schema: { type: string, format: date-time } }
      - { name: _outputFormat, in: query, schema: { type: string, default: 'application/fhir+ndjson' } }
      - { name: Prefer, in: header, required: true, schema: { type: string, enum: ['respond-async'] } }
      - { name: Accept, in: header, required: true, schema: { type: string, enum: ['application/fhir+json'] } }
      responses:
        '202':
          description: Export job accepted; poll Content-Location for status.
          headers:
            Content-Location: { schema: { type: string, format: uri } }
  /Group/{groupId}/$export:
    get:
      summary: Initiate Group Bulk Export
      operationId: exportGroup
      tags: [Bulk Export]
      parameters:
      - { name: groupId, in: path, required: true, schema: { type: string, enum: [all, runout, new] } }
      - { name: _type, in: query, schema: { type: string } }
      - { name: _since, in: query, schema: { type: string, format: date-time } }
      - { name: Prefer, in: header, required: true, schema: { type: string } }
      responses:
        '202': { description: Accepted }
  /jobs/{jobId}:
    get:
      summary: Get Bulk Export Job Status
      operationId: getJob
      tags: [Bulk Export]
      parameters:
      - { name: jobId, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: Job complete, output manifest returned.
          content:
            application/json:
              schema:
                type: object
                properties:
                  transactionTime: { type: string, format: date-time }
                  request: { type: string }
                  requiresAccessToken: { type: boolean }
                  output:
                    type: array
                    items:
                      type: object
                      properties:
                        type: { type: string }
                        url: { type: string, format: uri }
                  error: { type: array, items: { type: object } }
        '202': { description: Still processing }
    delete:
      summary: Cancel Bulk Export Job
      operationId: cancelJob
      tags: [Bulk Export]
      parameters:
      - { name: jobId, in: path, required: true, schema: { type: string } }
      responses:
        '202': { description: Job cancelled }
  /jobs:
    get:
      summary: List Bulk Export Jobs
      operationId: listJobs
      tags: [Bulk Export]
      responses:
        '200': { description: List of jobs, content: { application/json: { schema: { type: array, items: { type: object } } } } }
  /attribution_status:
    get:
      summary: Get Attribution Status
      operationId: getAttributionStatus
      description: Retrieve the date of the last attribution and runout file ingestion.
      tags: [Metadata]
      responses:
        '200': { description: Attribution status, content: { application/json: { schema: { type: object } } } }
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: BCDA uses SMART Backend Services authentication — token obtained from /auth/token.