Particle Health API

The Particle Health API is a RESTful interface for patient demographic registration, clinical data querying, and document retrieval across all major US health information networks. Developers register a patient via demographics, submit a query under a defined Purpose of Use, and asynchronously receive normalized clinical data in FHIR R4 Bundles, C-CDA documents, Flat datasets, or Deltas (incremental change sets). The API also exposes batch query, network participant search, patient provider mapping, and webhook event notifications for query completion, ADT, transitions, encounters, and AI output. Authentication uses OAuth 2 Client-Credentials grant with JWT access tokens scoped to a project.

Particle Health API is published by Particle Health on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 12 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include C-CDA, Carequality, CommonWell, Deltas, and eHealth Exchange. The published artifact set on APIs.io includes API documentation, an API reference, authentication docs, a getting-started guide, rate-limit docs, an OpenAPI specification, and 12 Naftiko capability specs.

Documentation

Specifications

Other Resources

🔗
Sandbox
https://docs.particlehealth.com/docs/test-patient-sandbox
🔗
Postman
https://www.postman.com/particlehealth/particle-health-api
🔗
LLMs
https://docs.particlehealth.com/llms.txt
🔗
Webhooks
https://docs.particlehealth.com/docs/webhook-event-notifications
🔗
SupportedFHIRResources
https://docs.particlehealth.com/docs/supported-fhir-resources
🔗
Networks
https://docs.particlehealth.com/docs/networks
🔗
DataNormalization
https://docs.particlehealth.com/docs/data-normalization
🔗
DataDeduplication
https://docs.particlehealth.com/docs/data-deduplication
🔗
DataProvenance
https://docs.particlehealth.com/docs/data-provenance
🔗
PurposesOfUse
https://docs.particlehealth.com/docs/purposes-of-use
🔗
DelegationOfAuthority
https://docs.particlehealth.com/docs/delegation-of-authority
🔗
Spectral
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/spectral/particle-health-spectral.yml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-patients.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-queries.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-fhir.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-deltas.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-flat.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-ccda.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-documents.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-batches.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-signal.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-subscriptions.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-network-participants.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/particle-health/refs/heads/main/capabilities/particle-health-hl7v2.yaml

OpenAPI Specification

particle-health-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Particle Health API
  description: >-
    Particle Health is a healthcare data interoperability API that aggregates patient
    medical records from US health information exchanges (Carequality, CommonWell,
    eHealth Exchange), TEFCA / QHIN partners, state HIEs, and Surescripts. The API
    surfaces patient registration, asynchronous query orchestration, batch processing,
    document handling, network participant directory search, patient provider mapping,
    and real-time Signal alerting. Clinical data is returned in FHIR R4 Bundles, C-CDA
    documents, Flat datasets, or Deltas (incremental changes). Authentication uses
    OAuth 2 client-credentials with JWT bearer tokens scoped to a project.
  version: 'v1'
  contact:
    name: Particle Health Support
    email: [email protected]
    url: https://particlehealth.com/contact
  license:
    name: Particle Health Terms of Service
    url: https://particlehealth.com/
externalDocs:
  description: Particle Health API Documentation
  url: https://docs.particlehealth.com/
servers:
  - url: https://api.particlehealth.com
    description: Particle Health Production
tags:
  - name: Authentication
    description: OAuth 2 client-credentials JWT issuance.
  - name: Patients
    description: Patient demographic registration and lookup.
  - name: Queries
    description: One-time network query orchestration.
  - name: Deltas
    description: Incremental change retrieval since a previous query.
  - name: FHIR
    description: FHIR R4 resource search and read.
  - name: Flat
    description: Flat (normalized columnar) clinical data domains.
  - name: CCDA
    description: C-CDA clinical document retrieval.
  - name: Documents
    description: Document upload, retrieval, and deletion.
  - name: Batches
    description: Batch query orchestration over patient cohorts.
  - name: HL7v2
    description: HL7v2 ADT messages.
  - name: Signal
    description: Real-time encounter, transition, and ADT alerts.
  - name: Subscriptions
    description: Patient subscription management for Signal.
  - name: NetworkParticipants
    description: Directory search over connected network organizations.
  - name: ProviderMap
    description: Patient provider mapping across the network.
  - name: Notifications
    description: Project-level webhook notification configuration.
  - name: Projects
    description: Project and service-account management.
  - name: Files
    description: Query result file download.
security:
  - bearerAuth: []
paths:
  /auth:
    get:
      operationId: getAuthToken
      summary: Generate a JSON Web Token
      description: Generate a JSON Web Token (JWT) via the OAuth 2 client-credentials grant. The
        returned token is valid for one hour and must be sent as a Bearer token on subsequent calls.
      tags: [Authentication]
      security: []
      parameters:
        - name: client_id
          in: header
          required: true
          schema: { type: string }
        - name: client_secret
          in: header
          required: true
          schema: { type: string }
      responses:
        '200':
          description: JWT access token issued
  /api/v2/patients:
    get:
      operationId: listPatients
      summary: List Patients
      description: List patients registered under the current project.
      tags: [Patients]
      responses:
        '200':
          description: Patient list
    post:
      operationId: submitPatient
      summary: Submit Patient
      description: Register a patient's demographics and obtain a unique Particle Patient ID (PPID).
      tags: [Patients]
      responses:
        '201':
          description: Patient created
  /api/v2/patients/{id}:
    get:
      operationId: getPatient
      summary: Get Patient
      tags: [Patients]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Patient resource
    delete:
      operationId: deletePatient
      summary: Delete Patient
      tags: [Patients]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '204':
          description: Patient deleted
  /api/v2/patients/search:
    post:
      operationId: searchPatient
      summary: Search Patient
      description: Search for patients by demographic identifiers.
      tags: [Patients]
      responses:
        '200':
          description: Patient search results
  /api/v2/patients/{particle_patient_id}/query:
    get:
      operationId: getPatientQueryStatus
      summary: Get Query Status
      description: Returns the current state and timestamps for the most recent query for a patient.
      tags: [Queries]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: Query status
    post:
      operationId: createPatientQuery
      summary: Create Query
      description: Starts a one-time query for this Particle Patient ID under a Purpose of Use.
      tags: [Queries]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '202':
          description: Query accepted
  /api/v1/queries:
    get:
      operationId: listQueries
      summary: List Queries
      description: Lists queries you have created.
      tags: [Queries]
      responses:
        '200':
          description: Query list
    post:
      operationId: createQuery
      summary: Create Query
      description: Starts a one-time network query using demographics.
      tags: [Queries]
      responses:
        '202':
          description: Query accepted
  /api/v1/queries/{id}:
    get:
      operationId: getQuery
      summary: Get Query
      description: Returns status and result pointers for a query.
      tags: [Queries]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Query status
  /deltas:
    post:
      operationId: submitDeltasQuery
      summary: Submit Deltas Query
      description: Initiates an incremental query with Purpose of Use, hints, and specialty filters.
      tags: [Deltas]
      responses:
        '202':
          description: Deltas query accepted
  /deltas/{particle_patient_id}:
    get:
      operationId: getDeltasQueryStatus
      summary: Get Deltas Query Status
      tags: [Deltas]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: Deltas query status
  /deltas/r4/Patient/{particle_patient_id}/$everything:
    get:
      operationId: collectDeltasFhirEverything
      summary: Collect Deltas FHIR Datasets
      description: Returns a FHIR Bundle of changed resources for the patient since the last sync.
      tags: [Deltas, FHIR]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: FHIR Bundle of changed resources
  /deltas/r4/{resource_type}:
    get:
      operationId: searchDeltasFhirResources
      summary: Search Deltas FHIR Resources
      description: Searches deltas for a specific FHIR resource type.
      tags: [Deltas, FHIR]
      parameters:
        - $ref: '#/components/parameters/resourceTypeParam'
      responses:
        '200':
          description: FHIR Bundle of changed resources
  /deltas/r4/{resource_type}/{resource_id}:
    get:
      operationId: readDeltasFhirResource
      summary: Read Deltas FHIR Resource
      description: Reads a specific changed FHIR resource.
      tags: [Deltas, FHIR]
      parameters:
        - $ref: '#/components/parameters/resourceTypeParam'
        - $ref: '#/components/parameters/resourceIdParam'
      responses:
        '200':
          description: FHIR resource
  /deltas/flat/{particle_patient_id}:
    get:
      operationId: collectDeltasFlatDatasets
      summary: Collect Deltas Flat Datasets
      description: Returns Flat datasets changed since the supplied `_since` timestamp.
      tags: [Deltas, Flat]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: Flat dataset bundle
  /deltas/flat/{particle_patient_id}/{resource_type}/{resource_id}:
    get:
      operationId: getDeltasFlatResource
      summary: Get Deltas Flat Resource
      tags: [Deltas, Flat]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
        - $ref: '#/components/parameters/resourceTypeParam'
        - $ref: '#/components/parameters/resourceIdParam'
      responses:
        '200':
          description: Flat resource
  /r4/Patient:
    post:
      operationId: createFhirPatient
      summary: Create FHIR Patient
      description: Creates a FHIR R4 Patient resource.
      tags: [FHIR, Patients]
      responses:
        '201':
          description: FHIR Patient created
  /r4/Patient/{patient_id}/$everything:
    get:
      operationId: getFhirPatientEverything
      summary: Get Patient $everything
      description: Returns a FHIR Bundle of all resources related to the patient with paging and date filters.
      tags: [FHIR]
      parameters:
        - name: patient_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: FHIR Bundle
  /r4/Patient/{patient_id}/query:
    get:
      operationId: getFhirPatientQueryStatus
      summary: Get FHIR Patient Query Status
      tags: [FHIR, Queries]
      parameters:
        - name: patient_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Query status
    post:
      operationId: createFhirPatientQuery
      summary: Create FHIR Patient Query
      tags: [FHIR, Queries]
      parameters:
        - name: patient_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '202':
          description: Query accepted
  /r4/{resource_type}:
    get:
      operationId: searchFhirResources
      summary: Search FHIR Resources
      description: Search a FHIR resource type (Patient, Encounter, Condition, etc.) scoped by patient.
      tags: [FHIR]
      parameters:
        - $ref: '#/components/parameters/resourceTypeParam'
        - name: patient
          in: query
          schema: { type: string }
      responses:
        '200':
          description: FHIR Bundle
  /r4/{resource_type}/{resource_id}:
    get:
      operationId: readFhirResource
      summary: Read FHIR Resource
      tags: [FHIR]
      parameters:
        - $ref: '#/components/parameters/resourceTypeParam'
        - $ref: '#/components/parameters/resourceIdParam'
      responses:
        '200':
          description: FHIR resource
  /flat:
    post:
      operationId: submitFlatPatient
      summary: Submit Flat Patient
      description: Initiates a Flat query for a specific patient using demographics.
      tags: [Flat]
      responses:
        '202':
          description: Flat query accepted
  /flat/{id}:
    get:
      operationId: getFlatPatient
      summary: Get Flat Patient
      tags: [Flat]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Flat patient status
  /flat/{id}/collect-data:
    get:
      operationId: collectFlatDatasets
      summary: Collect Flat Datasets
      description: Retrieve Flat clinical data domains (allergies, encounters, medications, labs, etc.).
      tags: [Flat]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Flat datasets
  /flat/{patient_id}/{resource_type}/{resource_id}:
    get:
      operationId: getFlatResource
      summary: Get Flat Resource
      tags: [Flat]
      parameters:
        - name: patient_id
          in: path
          required: true
          schema: { type: string }
        - $ref: '#/components/parameters/resourceTypeParam'
        - $ref: '#/components/parameters/resourceIdParam'
      responses:
        '200':
          description: Flat resource
  /api/v2/patients/{particle_patient_id}/ccda:
    get:
      operationId: getCcdaFiles
      summary: Get CCDA Files
      description: Download a zip of CCDA files or a single CCDA document for a patient.
      tags: [CCDA]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: CCDA file(s)
  /api/v2/patients/{particle_patient_id}/fhir:
    get:
      operationId: getFhirDatasets
      summary: Get FHIR Datasets
      description: Returns a FHIR Bundle with paging and incremental sync semantics.
      tags: [FHIR]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: FHIR Bundle
  /api/v2/patients/{particle_patient_id}/flat:
    get:
      operationId: collectV2FlatDatasets
      summary: Collect v2 Flat Datasets
      description: Retrieve flat datasets filtered by domain (ALLERGIES, ENCOUNTERS, MEDICATIONS,
        LABS, IMMUNIZATIONS, VITAL_SIGNS, etc.) or a specific resource.
      tags: [Flat]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: Flat datasets
  /api/v1/documents:
    post:
      operationId: submitDocument
      summary: Submit Document
      description: Upload a document (CCDA, discharge summary, etc.) with metadata for ingestion.
      tags: [Documents]
      responses:
        '201':
          description: Document accepted
  /api/v1/documents/{id}:
    get:
      operationId: getDocument
      summary: Get Document
      tags: [Documents]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Document
    delete:
      operationId: deleteDocument
      summary: Delete Document
      tags: [Documents]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '204':
          description: Document deleted
  /api/v1/documents/patient/{id}:
    get:
      operationId: getPatientDocuments
      summary: Get Patient Documents
      tags: [Documents]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Document list
  /api/v1/batches:
    get:
      operationId: listBatches
      summary: List Batches
      description: Lists batch jobs with state, type, and counts.
      tags: [Batches]
      responses:
        '200':
          description: Batch list
  /api/v1/batches/{batch_type}:
    post:
      operationId: createBatch
      summary: Create Batch
      description: Starts a batch job of type CCDA, FHIR_R4, FLAT, or DELTAS over a patient cohort.
      tags: [Batches]
      parameters:
        - name: batch_type
          in: path
          required: true
          schema:
            type: string
            enum: [CCDA, FHIR_R4, FLAT, DELTAS]
      responses:
        '202':
          description: Batch accepted
  /api/v1/batches/{batch_id}:
    get:
      operationId: getBatch
      summary: Get Batch
      description: Returns batch metadata, progress, and results summary.
      tags: [Batches]
      parameters:
        - name: batch_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Batch status
  /hl7v2/message/{id}:
    get:
      operationId: getHl7v2Message
      summary: Get HL7v2 Message
      description: Returns a single HL7v2 ADT message.
      tags: [HL7v2]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: HL7v2 message
  /hl7v2/patient/{particle_patient_id}:
    get:
      operationId: getHl7v2Messages
      summary: Get HL7v2 Messages by Patient
      tags: [HL7v2]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: HL7v2 message list
  /api/v1/alerts/network:
    get:
      operationId: getNetworkAlerts
      summary: Get Network Alerts
      description: Retrieve network alerts generated for subscribed patients in the project.
      tags: [Signal]
      responses:
        '200':
          description: Network alerts
  /api/v1/alerts/network/{id}:
    get:
      operationId: getNetworkAlert
      summary: Get Network Alert
      tags: [Signal]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Network alert
  /api/v1/patients/{id}/signals:
    get:
      operationId: getPatientSignals
      summary: Get Patient Signals
      description: Retrieve the Signal alert history for a specific patient.
      tags: [Signal]
      parameters:
        - $ref: '#/components/parameters/idParam'
      responses:
        '200':
          description: Patient signal history
  /api/v1/patients/signalscohort:
    get:
      operationId: getPatientSignalsCohort
      summary: Get Patient Signals Cohort
      description: Retrieve the list of patients currently enrolled in Signal monitoring.
      tags: [Signal]
      responses:
        '200':
          description: Signal cohort
  /api/v1/patients/{particle_patient_id}/subscriptions:
    get:
      operationId: listPatientSubscriptions
      summary: List Patient Subscriptions
      description: Lists subscriptions for a patient with an optional type filter.
      tags: [Subscriptions]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: Subscription list
    post:
      operationId: createPatientSubscriptions
      summary: Create Patient Subscriptions
      description: Adds subscriptions for a single patient.
      tags: [Subscriptions]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '201':
          description: Subscription created
    delete:
      operationId: deletePatientSubscriptions
      summary: Delete Patient Subscriptions
      tags: [Subscriptions]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '204':
          description: Subscriptions deleted
  /api/v1/patients/subscriptions:
    post:
      operationId: createCohortSubscriptions
      summary: Create Subscriptions for Multiple Patients
      description: Subscribe a batch of patients to Signal monitoring in a single API call.
      tags: [Subscriptions]
      responses:
        '201':
          description: Cohort subscriptions created
  /api/v1/patients/{particle_patient_id}/subscriptions/trigger-sandbox-workflow:
    post:
      operationId: triggerSandboxWorkflow
      summary: Trigger Sandbox Workflow
      description: Triggers sandbox webhook notification events for testing.
      tags: [Subscriptions]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '202':
          description: Sandbox workflow triggered
  /api/v1/networkparticipants:
    get:
      operationId: searchNetworkParticipants
      summary: Search Network Participants
      description: Search for healthcare organizations participating in Particle's connected networks.
      tags: [NetworkParticipants]
      responses:
        '200':
          description: Participant list
  /api/v1/networkparticipants/state/{state}:
    get:
      operationId: searchNetworkParticipantsByState
      summary: Search Network Participants by State
      tags: [NetworkParticipants]
      parameters:
        - name: state
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Participant list
  /api/v1/networkparticipants/zipcode/{zip}:
    get:
      operationId: searchNetworkParticipantsByZipcode
      summary: Search Network Participants by Zipcode
      tags: [NetworkParticipants]
      parameters:
        - name: zip
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Participant list
  /api/v1/patients/{particle_patient_id}/provider-map:
    get:
      operationId: getPatientProviderMap
      summary: Get Patient Provider Map
      description: Returns the set of healthcare organizations associated with the given patient across
        Particle's network, enriched with NPI, address, and managing organization details.
      tags: [ProviderMap]
      parameters:
        - $ref: '#/components/parameters/particlePatientIdParam'
      responses:
        '200':
          description: Provider map
  /api/v1/files/{query_id}/{file_id}:
    get:
      operationId: downloadFile
      summary: Download a File
      description: Download an individual file from a query result.
      tags: [Files]
      parameters:
        - name: query_id
          in: path
          required: true
          schema: { type: string }
        - name: file_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: File contents
  /api/v1/files/{query_id}/zip:
    get:
      operationId: downloadQueryZip
      summary: Download Query Zip
      description: Download a zipped archive of all results for a query.
      tags: [Files]
      parameters:
        - name: query_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Zip archive
  /projects:
    get:
      operationId: searchProjects
      summary: Search Projects
      description: Searches projects by simple field filter.
      tags: [Projects]
      responses:
        '200':
          description: Project list
  /projects/{project_id}/notifications:
    get:
      operationId: listProjectNotifications
      summary: List Project Notifications
      tags: [Notifications]
      parameters:
        - name: project_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Notification list
    post:
      operationId: createProjectNotification
      summary: Create Project Notification
      description: Creates a webhook notification under a specific project.
      tags: [Notifications]
      parameters:
        - name: project_id
          in: path
          required: true
          schema: { type: string }
      responses:
        '201':
          description: Notification created
  /service-accounts:
    get:
      operationId: searchServiceAccounts
      summary: Search Service Accounts
      description: Searches service accounts by simple field filter.
      tags: [Projects]
      responses:
        '200':
          description: Service account list
components:
  parameters:
    idParam:
      name: id
      in: path
      required: true
      schema:
        type: string
    particlePatientIdParam:
      name: particle_patient_id
      in: path
      required: true
      description: Particle Patient ID (PPID)
      schema:
        type: string
    resourceTypeParam:
      name: resource_type
      in: path
      required: true
      description: FHIR resource type (Patient, Encounter, Condition, Observation, etc.)
      schema:
        type: string
    resourceIdParam:
      name: resource_id
      in: path
      required: true
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: OAuth 2 client-credentials JWT issued by `/auth`. Token expires after one hour.