Candid Health Webhooks & Events API
Scan and retrieve billing lifecycle events used to drive webhook-style notifications as encounters, claims, and remits change state.
Scan and retrieve billing lifecycle events used to drive webhook-style notifications as encounters, claims, and remits change state.
openapi: 3.0.1
info:
title: Candid Health API
description: >-
REST API for Candid Health, an autonomous medical-billing and revenue-cycle
management platform. Submit encounters and claims, run eligibility checks,
capture charges, look up payers and fee schedules, retrieve insurance
adjudications (ERAs / remits), and scan billing lifecycle events. All
requests are authenticated with an OAuth bearer token obtained from the
auth token endpoint.
termsOfService: https://www.joincandidhealth.com
contact:
name: Candid Health Support
url: https://docs.joincandidhealth.com/additional-resources/support
version: '1.0'
servers:
- url: https://api.joincandidhealth.com/api
description: Candid Health production API
security:
- bearerAuth: []
tags:
- name: Auth
description: OAuth client-credentials token exchange.
- name: Encounters
description: Submit and manage encounters that drive claim generation.
- name: Eligibility
description: Real-time and batch insurance eligibility checks.
- name: Charge Capture
description: Capture charges and service lines ahead of claim assembly.
- name: Payers
description: Look up insurance payers.
- name: Fee Schedules
description: Resolve contracted rates for service lines.
- name: Insurance Adjudications
description: Retrieve ERA / 835 remittance adjudication detail.
- name: Events
description: Scan and retrieve billing lifecycle events.
paths:
/auth/v2/token:
post:
operationId: getToken
tags:
- Auth
summary: Get an OAuth bearer token.
description: >-
Exchange a client_id and client_secret for a short-lived JWT bearer
access token used to authenticate all other API requests.
security: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AuthGetTokenRequest'
responses:
'200':
description: A bearer access token.
content:
application/json:
schema:
$ref: '#/components/schemas/AuthGetTokenResponse'
'401':
description: Invalid client credentials.
/encounters/v4:
get:
operationId: getAllEncounters
tags:
- Encounters
summary: Get all encounters.
description: Returns a paginated list of encounters matching the supplied filters.
parameters:
- name: limit
in: query
description: Maximum number of encounters to return (1-100).
schema:
type: integer
minimum: 1
maximum: 100
- name: page_token
in: query
description: Opaque cursor for the next page of results.
schema:
type: string
- name: patient_external_id
in: query
schema:
type: string
- name: claim_status
in: query
schema:
type: string
- name: date_of_service_min
in: query
schema:
type: string
format: date
- name: date_of_service_max
in: query
schema:
type: string
format: date
responses:
'200':
description: A page of encounters.
content:
application/json:
schema:
$ref: '#/components/schemas/EncounterPage'
post:
operationId: createEncounter
tags:
- Encounters
summary: Create a professional encounter.
description: >-
Creates an encounter that Candid uses to generate and submit one or more
insurance claims.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EncounterCreate'
responses:
'200':
description: The created encounter.
content:
application/json:
schema:
$ref: '#/components/schemas/Encounter'
'422':
description: Validation error.
/encounters/v4/{encounter_id}:
get:
operationId: getEncounter
tags:
- Encounters
summary: Get an encounter.
parameters:
- name: encounter_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The requested encounter.
content:
application/json:
schema:
$ref: '#/components/schemas/Encounter'
'404':
description: Encounter not found.
/eligibility/v2:
post:
operationId: submitEligibilityCheck
tags:
- Eligibility
summary: Submit an encounter eligibility check.
description: >-
Runs a real-time eligibility check against a payer to confirm active
coverage and surface patient benefit detail.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EligibilityCheckRequest'
responses:
'200':
description: Eligibility result (270/271 response detail).
content:
application/json:
schema:
$ref: '#/components/schemas/EligibilityCheckResponse'
/pre-encounter/coverages/v1/check_eligibility:
post:
operationId: checkCoverageEligibility
tags:
- Eligibility
summary: Check eligibility for a stored coverage.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EligibilityCheckRequest'
responses:
'200':
description: Eligibility result.
content:
application/json:
schema:
$ref: '#/components/schemas/EligibilityCheckResponse'
/charge_captures/v1:
post:
operationId: createChargeCapture
tags:
- Charge Capture
summary: Create a charge capture.
description: >-
Captures a charge with diagnoses and service lines that later bundles
into an encounter for claim assembly.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeCaptureCreate'
responses:
'200':
description: The created charge capture.
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeCapture'
get:
operationId: getAllChargeCaptures
tags:
- Charge Capture
summary: Get all charge captures.
parameters:
- name: limit
in: query
schema:
type: integer
- name: page_token
in: query
schema:
type: string
responses:
'200':
description: A page of charge captures.
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeCapturePage'
/charge_captures/v1/{charge_capture_id}:
get:
operationId: getChargeCapture
tags:
- Charge Capture
summary: Get a charge capture.
parameters:
- name: charge_capture_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The requested charge capture.
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeCapture'
/payers/v3:
get:
operationId: getAllPayers
tags:
- Payers
summary: Get all payers.
parameters:
- name: limit
in: query
schema:
type: integer
- name: search_term
in: query
schema:
type: string
- name: page_token
in: query
schema:
type: string
responses:
'200':
description: A page of payers.
content:
application/json:
schema:
$ref: '#/components/schemas/PayerPage'
/payers/v3/{payer_uuid}:
get:
operationId: getPayer
tags:
- Payers
summary: Get a payer.
parameters:
- name: payer_uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The requested payer.
content:
application/json:
schema:
$ref: '#/components/schemas/Payer'
/fee-schedules/v3/service-line/{service_line_id}/match:
get:
operationId: getFeeScheduleMatch
tags:
- Fee Schedules
summary: Get the rate that matches a service line.
description: >-
Returns the fee-schedule rate matching the dimensions of a service line,
or no result when no rate matches.
parameters:
- name: service_line_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The matching rate, if any.
content:
application/json:
schema:
$ref: '#/components/schemas/MatchResult'
/insurance_adjudications/v1/{insurance_adjudication_id}:
get:
operationId: getInsuranceAdjudication
tags:
- Insurance Adjudications
summary: Get an insurance adjudication (ERA / remit).
description: >-
Returns the insurance adjudication, i.e. the 835 electronic remittance
advice detail for a claim including payments and adjustments.
parameters:
- name: insurance_adjudication_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The requested insurance adjudication.
content:
application/json:
schema:
$ref: '#/components/schemas/InsuranceAdjudication'
/events/v1:
get:
operationId: scanEvents
tags:
- Events
summary: Scan billing lifecycle events.
description: >-
Returns events ordered by modification time, used to drive webhook-style
notifications as encounters, claims, and remits change state.
parameters:
- name: limit
in: query
schema:
type: integer
- name: event_types
in: query
schema:
type: string
- name: page_token
in: query
schema:
type: string
responses:
'200':
description: A page of events.
content:
application/json:
schema:
$ref: '#/components/schemas/EventPage'
/events/v1/{event_id}:
get:
operationId: getEvent
tags:
- Events
summary: Get an event.
parameters:
- name: event_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The requested event.
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: >-
OAuth bearer token obtained from POST /auth/v2/token. Send as
`Authorization: Bearer <access_token>`.
schemas:
AuthGetTokenRequest:
type: object
required:
- client_id
- client_secret
properties:
client_id:
type: string
description: Your application's Client ID.
client_secret:
type: string
description: Your application's Client Secret.
AuthGetTokenResponse:
type: object
properties:
access_token:
type: string
description: JWT bearer token.
expires_in:
type: integer
description: Token lifetime in seconds.
token_type:
type: string
example: Bearer
EncounterCreate:
type: object
required:
- external_id
- patient_authorized_release
- benefits_assigned_to_provider
- provider_accepts_assignment
- billable_status
- patient
- responsible_party
- billing_provider
- diagnoses
- place_of_service_code
properties:
external_id:
type: string
description: Client-specified unique identifier for the encounter.
patient_authorized_release:
type: boolean
benefits_assigned_to_provider:
type: boolean
provider_accepts_assignment:
type: boolean
billable_status:
type: string
enum:
- BILLABLE
- NOT_BILLABLE
responsible_party:
type: string
enum:
- INSURANCE_PAY
- SELF_PAY
- UNKNOWN
date_of_service:
type: string
format: date
place_of_service_code:
type: string
description: Place of service code, e.g. "02" for telehealth.
patient:
$ref: '#/components/schemas/Patient'
billing_provider:
$ref: '#/components/schemas/BillingProvider'
rendering_provider:
$ref: '#/components/schemas/RenderingProvider'
diagnoses:
type: array
items:
$ref: '#/components/schemas/Diagnosis'
service_lines:
type: array
items:
$ref: '#/components/schemas/ServiceLine'
Encounter:
type: object
properties:
encounter_id:
type: string
format: uuid
external_id:
type: string
date_of_service:
type: string
format: date
patient:
$ref: '#/components/schemas/Patient'
billing_provider:
$ref: '#/components/schemas/BillingProvider'
diagnoses:
type: array
items:
$ref: '#/components/schemas/Diagnosis'
service_lines:
type: array
items:
$ref: '#/components/schemas/ServiceLine'
claims:
type: array
items:
$ref: '#/components/schemas/Claim'
status:
type: string
created_at:
type: string
format: date-time
EncounterPage:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Encounter'
page_token:
type: string
nullable: true
Claim:
type: object
properties:
claim_id:
type: string
format: uuid
status:
type: string
description: Current claim processing status.
clearinghouse_claim_id:
type: string
nullable: true
payer:
$ref: '#/components/schemas/Payer'
Patient:
type: object
properties:
external_id:
type: string
first_name:
type: string
last_name:
type: string
date_of_birth:
type: string
format: date
gender:
type: string
address:
$ref: '#/components/schemas/Address'
BillingProvider:
type: object
properties:
organization_name:
type: string
npi:
type: string
tax_id:
type: string
address:
$ref: '#/components/schemas/Address'
RenderingProvider:
type: object
properties:
first_name:
type: string
last_name:
type: string
npi:
type: string
Diagnosis:
type: object
properties:
code_type:
type: string
example: ABK
code:
type: string
description: ICD-10 diagnosis code.
ServiceLine:
type: object
properties:
service_line_id:
type: string
format: uuid
procedure_code:
type: string
description: CPT / HCPCS procedure code.
quantity:
type: string
charge_amount_cents:
type: integer
diagnosis_pointers:
type: array
items:
type: integer
date_of_service:
type: string
format: date
ChargeCaptureCreate:
type: object
required:
- external_id
- data
properties:
external_id:
type: string
status:
type: string
data:
$ref: '#/components/schemas/EncounterCreate'
ChargeCapture:
type: object
properties:
charge_capture_id:
type: string
format: uuid
external_id:
type: string
status:
type: string
data:
$ref: '#/components/schemas/EncounterCreate'
ChargeCapturePage:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/ChargeCapture'
page_token:
type: string
nullable: true
EligibilityCheckRequest:
type: object
properties:
payer_id:
type: string
provider:
$ref: '#/components/schemas/BillingProvider'
subscriber:
$ref: '#/components/schemas/Patient'
service_type_codes:
type: array
items:
type: string
date_of_service:
type: string
format: date
EligibilityCheckResponse:
type: object
properties:
eligibility_check_id:
type: string
format: uuid
active_coverage:
type: boolean
benefits:
type: array
items:
type: object
properties:
name:
type: string
coverage_level:
type: string
amount_cents:
type: integer
raw_271:
type: object
description: Raw 271 eligibility response payload.
Payer:
type: object
properties:
payer_uuid:
type: string
format: uuid
payer_id:
type: string
description: External payer / CPID identifier.
payer_name:
type: string
PayerPage:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Payer'
page_token:
type: string
nullable: true
MatchResult:
type: object
properties:
rate_id:
type: string
format: uuid
rate_cents:
type: integer
matched:
type: boolean
InsuranceAdjudication:
type: object
description: 835 electronic remittance advice (ERA) detail.
properties:
insurance_adjudication_id:
type: string
format: uuid
payer:
$ref: '#/components/schemas/Payer'
claims:
type: array
items:
type: object
properties:
claim_id:
type: string
format: uuid
paid_amount_cents:
type: integer
adjustments:
type: array
items:
type: object
properties:
group_code:
type: string
reason_code:
type: string
amount_cents:
type: integer
check_number:
type: string
paid_date:
type: string
format: date
Event:
type: object
properties:
event_id:
type: string
format: uuid
event_type:
type: string
description: e.g. claim.updated, encounter.created, remit.received.
resource_id:
type: string
format: uuid
created_at:
type: string
format: date-time
data:
type: object
EventPage:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Event'
page_token:
type: string
nullable: true
Address:
type: object
properties:
address1:
type: string
address2:
type: string
nullable: true
city:
type: string
state:
type: string
zip_code:
type: string