Candid Health subpackage_patient-refunds.subpackage_patient-refunds/v1 API
The subpackage_patient-refunds.subpackage_patient-refunds/v1 API from Candid Health — 2 operation(s) for subpackage_patient-refunds.subpackage_patient-refunds/v1.
The subpackage_patient-refunds.subpackage_patient-refunds/v1 API from Candid Health — 2 operation(s) for subpackage_patient-refunds.subpackage_patient-refunds/v1.
openapi: 3.1.0
info:
title: API Reference subpackage_auth.subpackage_auth/default subpackage_patient-refunds.subpackage_patient-refunds/v1 API
version: 1.0.0
servers:
- url: https://pre-api.joincandidhealth.com
description: Production
- url: https://pre-api-staging.joincandidhealth.com
description: Staging
- url: https://sandbox-pre-api.joincandidhealth.com
description: CandidSandbox
- url: https://staging-pre-api.joincandidhealth.com
description: CandidStaging
- url: http://localhost:4000
description: Local
- url: https://api.joincandidhealth.com
description: Production
- url: https://api-staging.joincandidhealth.com
description: Staging
- url: https://sandbox-api.joincandidhealth.com
description: CandidSandbox
- url: https://staging-api.joincandidhealth.com
description: CandidStaging
- url: http://localhost:5050
description: Local
tags:
- name: subpackage_patient-refunds.subpackage_patient-refunds/v1
paths:
/api/patient-refunds/v1:
get:
operationId: get-multi
summary: Get patient refunds
description: 'Returns all patient refunds satisfying the search criteria AND whose organization_id matches
the current organization_id of the authenticated user.'
tags:
- subpackage_patient-refunds.subpackage_patient-refunds/v1
parameters:
- name: limit
in: query
description: Defaults to 100. The value must be greater than 0 and less than 1000.
required: false
schema:
type: integer
- name: patient_external_id
in: query
required: false
schema:
$ref: '#/components/schemas/type_commons:PatientExternalId'
- name: claim_id
in: query
required: false
schema:
$ref: '#/components/schemas/type_commons:ClaimId'
- name: service_line_id
in: query
required: false
schema:
$ref: '#/components/schemas/type_commons:ServiceLineId'
- name: billing_provider_id
in: query
required: false
schema:
$ref: '#/components/schemas/type_commons:ProviderId'
- name: unattributed
in: query
description: returns payments with unattributed allocations if set to true
required: false
schema:
type: boolean
- name: invoice_id
in: query
required: false
schema:
$ref: '#/components/schemas/type_commons:InvoiceId'
- name: sources
in: query
required: false
schema:
$ref: '#/components/schemas/type_financials:PatientTransactionSource'
- name: sort
in: query
description: Defaults to refund_timestamp
required: false
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefundSortField'
- name: sort_direction
in: query
description: Sort direction. Defaults to descending order if not provided.
required: false
schema:
$ref: '#/components/schemas/type_commons:SortDirection'
- name: page_token
in: query
required: false
schema:
$ref: '#/components/schemas/type_commons:PageToken'
- name: Authorization
in: header
description: OAuth authentication
required: true
schema:
type: string
responses:
'200':
description: Response with status 200
content:
application/json:
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefundsPage'
'403':
description: Error response with status 403
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnauthorizedError
content:
$ref: '#/components/schemas/type_commons:UnauthorizedErrorMessage'
required:
- errorName
- content
'422':
description: Error response with status 422
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnprocessableEntityError
content:
$ref: '#/components/schemas/type_commons:UnprocessableEntityErrorMessage'
required:
- errorName
- content
post:
operationId: create
summary: Create patient refund
description: 'Creates a new patient refund record and returns the newly created PatientRefund object.
The allocations can describe whether the refund is being applied toward a specific service line,
claim, or billing provider.'
tags:
- subpackage_patient-refunds.subpackage_patient-refunds/v1
parameters:
- name: Authorization
in: header
description: OAuth authentication
required: true
schema:
type: string
responses:
'200':
description: Response with status 200
content:
application/json:
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefund'
'403':
description: Error response with status 403
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnauthorizedError
content:
$ref: '#/components/schemas/type_commons:UnauthorizedErrorMessage'
required:
- errorName
- content
'404':
description: Error response with status 404
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- EntityNotFoundError
content:
$ref: '#/components/schemas/type_commons:EntityNotFoundErrorMessage'
required:
- errorName
- content
'422':
description: Error response with status 422
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- ReallocationWouldOverdraftError
content:
$ref: '#/components/schemas/type_financials:ReallocationWouldOverdraftErrorContent'
required:
- errorName
- content
requestBody:
content:
application/json:
schema:
type: object
properties:
amount_cents:
type: integer
refund_timestamp:
type: string
format: date-time
refund_note:
type: string
patient_external_id:
$ref: '#/components/schemas/type_commons:PatientExternalId'
allocations:
type: array
items:
$ref: '#/components/schemas/type_financials:AllocationCreate'
invoice:
$ref: '#/components/schemas/type_commons:InvoiceId'
refund_reason:
$ref: '#/components/schemas/type_financials:RefundReason'
raise_on_overdraft:
type: boolean
description: If true, the refund will be rejected if it would cause any account to be overdrafted. Defaults to false.
required:
- amount_cents
- patient_external_id
- allocations
/api/patient-refunds/v1/{patient_refund_id}:
get:
operationId: get
summary: Get patient refund
description: Retrieves a previously created patient refund by its `patient_refund_id`.
tags:
- subpackage_patient-refunds.subpackage_patient-refunds/v1
parameters:
- name: patient_refund_id
in: path
required: true
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefundId'
- name: Authorization
in: header
description: OAuth authentication
required: true
schema:
type: string
responses:
'200':
description: Response with status 200
content:
application/json:
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefund'
'403':
description: Error response with status 403
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnauthorizedError
content:
$ref: '#/components/schemas/type_commons:UnauthorizedErrorMessage'
required:
- errorName
- content
'404':
description: Error response with status 404
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- EntityNotFoundError
content:
$ref: '#/components/schemas/type_commons:EntityNotFoundErrorMessage'
required:
- errorName
- content
patch:
operationId: update
summary: Update
description: Updates the patient refund record matching the provided patient_refund_id.
tags:
- subpackage_patient-refunds.subpackage_patient-refunds/v1
parameters:
- name: patient_refund_id
in: path
required: true
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefundId'
- name: Authorization
in: header
description: OAuth authentication
required: true
schema:
type: string
responses:
'200':
description: Response with status 200
content:
application/json:
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefund'
'403':
description: Error response with status 403
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnauthorizedError
content:
$ref: '#/components/schemas/type_commons:UnauthorizedErrorMessage'
required:
- errorName
- content
'404':
description: Error response with status 404
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- EntityNotFoundError
content:
$ref: '#/components/schemas/type_commons:EntityNotFoundErrorMessage'
required:
- errorName
- content
'422':
description: Error response with status 422
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnprocessableEntityError
content:
$ref: '#/components/schemas/type_commons:UnprocessableEntityErrorMessage'
required:
- errorName
- content
requestBody:
content:
application/json:
schema:
type: object
properties:
refund_timestamp:
type: string
format: date-time
refund_note:
$ref: '#/components/schemas/type_financials:NoteUpdate'
invoice:
$ref: '#/components/schemas/type_financials:InvoiceUpdate'
refund_reason:
$ref: '#/components/schemas/type_financials:RefundReasonUpdate'
delete:
operationId: delete
summary: Delete patient refund
description: Deletes the patient refund record matching the provided patient_refund_id.
tags:
- subpackage_patient-refunds.subpackage_patient-refunds/v1
parameters:
- name: patient_refund_id
in: path
required: true
schema:
$ref: '#/components/schemas/type_patient-refunds/v1:PatientRefundId'
- name: Authorization
in: header
description: OAuth authentication
required: true
schema:
type: string
responses:
'200':
description: Successful response
'403':
description: Error response with status 403
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnauthorizedError
content:
$ref: '#/components/schemas/type_commons:UnauthorizedErrorMessage'
required:
- errorName
- content
'404':
description: Error response with status 404
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- EntityNotFoundError
content:
$ref: '#/components/schemas/type_commons:EntityNotFoundErrorMessage'
required:
- errorName
- content
'422':
description: Error response with status 422
content:
application/json:
schema:
type: object
properties:
errorName:
type: string
enum:
- UnprocessableEntityError
content:
$ref: '#/components/schemas/type_commons:UnprocessableEntityErrorMessage'
required:
- errorName
- content
components:
schemas:
type_financials:InvoiceUpdate:
oneOf:
- type: object
properties:
type:
type: string
enum:
- set
description: 'Discriminator value: set'
value:
$ref: '#/components/schemas/type_commons:InvoiceId'
required:
- type
- value
- type: object
properties:
type:
type: string
enum:
- remove
description: 'Discriminator value: remove'
required:
- type
discriminator:
propertyName: type
title: InvoiceUpdate
type_commons:EntityNotFoundErrorMessage:
type: object
properties:
id:
type: string
required:
- id
title: EntityNotFoundErrorMessage
type_financials:AllocationTarget:
oneOf:
- type: object
properties:
type:
type: string
enum:
- service_line
description: 'Discriminator value: service_line'
service_line_id:
$ref: '#/components/schemas/type_commons:ServiceLineId'
claim_id:
$ref: '#/components/schemas/type_commons:ClaimId'
encounter_id:
$ref: '#/components/schemas/type_commons:EncounterId'
required:
- type
- service_line_id
- claim_id
- encounter_id
- type: object
properties:
type:
type: string
enum:
- claim
description: 'Discriminator value: claim'
claim_id:
$ref: '#/components/schemas/type_commons:ClaimId'
encounter_id:
$ref: '#/components/schemas/type_commons:EncounterId'
required:
- type
- claim_id
- encounter_id
- type: object
properties:
type:
type: string
enum:
- billing_provider_id
description: 'Discriminator value: billing_provider_id'
billing_provider_id:
$ref: '#/components/schemas/type_commons:ProviderId'
required:
- type
- billing_provider_id
- type: object
properties:
type:
type: string
enum:
- appointment
description: 'Discriminator value: appointment'
appointment_id:
$ref: '#/components/schemas/type_commons:AppointmentId'
patient_external_id:
$ref: '#/components/schemas/type_commons:PatientExternalId'
required:
- type
- appointment_id
- patient_external_id
- type: object
properties:
type:
type: string
enum:
- unattributed
description: 'Discriminator value: unattributed'
required:
- type
discriminator:
propertyName: type
description: 'Allocation targets describe whether the portion of a payment is being applied toward a specific service line,
claim, billing provider, or is unallocated.'
title: AllocationTarget
type_commons:ClaimId:
type: string
format: uuid
title: ClaimId
type_commons:ProviderId:
type: string
format: uuid
title: ProviderId
type_commons:EncounterExternalId:
type: string
title: EncounterExternalId
type_commons:UnauthorizedErrorMessage:
type: object
properties:
message:
type: string
title: UnauthorizedErrorMessage
type_financials:NoteUpdate:
oneOf:
- type: object
properties:
type:
type: string
enum:
- set
description: 'Discriminator value: set'
value:
type: string
required:
- type
- value
- type: object
properties:
type:
type: string
enum:
- remove
description: 'Discriminator value: remove'
required:
- type
discriminator:
propertyName: type
title: NoteUpdate
type_commons:AppointmentId:
type: string
title: AppointmentId
type_financials:ReallocationWouldOverdraftErrorContent:
type: object
properties:
messages:
type: array
items:
type: string
description: 'Legacy field containing error messages as strings.
Deprecated - use allocation_details for structured data.
Will be removed in a future version after frontend migration.'
allocation_details:
type: array
items:
$ref: '#/components/schemas/type_financials:AllocationOverdraftDetail'
description: 'Structured details about which allocations would be overdrafted.
Each detail includes entity type, ID, and error message for table display.'
required:
- messages
description: 'Error content when a reallocation would cause an account to be overdrafted.
Contains both legacy string messages and new structured allocation details.'
title: ReallocationWouldOverdraftErrorContent
type_commons:PatientExternalId:
type: string
title: PatientExternalId
type_financials:AllocationTargetCreate:
oneOf:
- type: object
properties:
type:
type: string
enum:
- service_line_by_id
description: 'Discriminator value: service_line_by_id'
value:
$ref: '#/components/schemas/type_commons:ServiceLineId'
required:
- type
- value
- type: object
properties:
type:
type: string
enum:
- claim_by_id
description: 'Discriminator value: claim_by_id'
value:
$ref: '#/components/schemas/type_commons:ClaimId'
required:
- type
- value
- type: object
properties:
type:
type: string
enum:
- claim_by_encounter_external_id
description: 'Discriminator value: claim_by_encounter_external_id'
value:
$ref: '#/components/schemas/type_commons:EncounterExternalId'
required:
- type
- value
- type: object
properties:
type:
type: string
enum:
- billing_provider_by_id
description: 'Discriminator value: billing_provider_by_id'
value:
$ref: '#/components/schemas/type_commons:ProviderId'
required:
- type
- value
- type: object
properties:
type:
type: string
enum:
- appointment_by_id_and_patient_external_id
description: 'Discriminator value: appointment_by_id_and_patient_external_id'
appointment_id:
$ref: '#/components/schemas/type_commons:AppointmentId'
patient_external_id:
$ref: '#/components/schemas/type_commons:PatientExternalId'
required:
- type
- appointment_id
- patient_external_id
- type: object
properties:
type:
type: string
enum:
- unattributed
description: 'Discriminator value: unattributed'
required:
- type
discriminator:
propertyName: type
description: 'Allocation targets describe whether the portion of a payment is being applied toward a specific service line,
claim, billing provider, or is unallocated.'
title: AllocationTargetCreate
type_commons:UnprocessableEntityErrorMessage:
type: object
properties:
message:
type: string
title: UnprocessableEntityErrorMessage
type_commons:SortDirection:
type: string
enum:
- asc
- desc
title: SortDirection
type_commons:EncounterId:
type: string
format: uuid
title: EncounterId
type_commons:Date:
type: string
description: ISO 8601 date; formatted YYYY-MM-DD (i.e. 2012-02-01)
title: Date
type_commons:InvoiceId:
type: string
format: uuid
title: InvoiceId
type_financials:RefundReasonUpdate:
oneOf:
- type: object
properties:
type:
type: string
enum:
- set
description: 'Discriminator value: set'
value:
$ref: '#/components/schemas/type_financials:RefundReason'
required:
- type
- value
- type: object
properties:
type:
type: string
enum:
- remove
description: 'Discriminator value: remove'
required:
- type
discriminator:
propertyName: type
title: RefundReasonUpdate
type_financials:AllocationEarmarkType:
oneOf:
- type: object
properties:
type:
type: string
enum:
- date_of_service
description: 'Discriminator value: date_of_service'
value:
$ref: '#/components/schemas/type_commons:Date'
required:
- type
- value
description: Earmark for auto-allocation to an encounter with this specific date of service
- type: object
properties:
type:
type: string
enum:
- external_encounter_id
description: 'Discriminator value: external_encounter_id'
value:
$ref: '#/components/schemas/type_commons:EncounterExternalId'
required:
- type
- value
description: Earmark for auto-allocation to an encounter with this specific external ID (more specific than date of service)
discriminator:
propertyName: type
description: 'If enabled for your organization, defines how a patient prepayment allocation should be earmarked for future auto-allocation.
Earmarks hold the allocation until a matching encounter is created, then attempt to allocate to that encounter.
Only applicable for unattributed allocations.'
title: AllocationEarmarkType
type_commons:PageToken:
type: string
title: PageToken
type_financials:PatientTransactionSource:
type: string
enum:
- MANUAL_ENTRY
- CHARGEBEE
- SQUARE
- STRIPE
- ELATION
- CEDAR
- HEALTHIE
- REALLOCATION
- PHREESIA
- INSTAMED
- SHERPA_HEALTH
title: PatientTransactionSource
type_financials:AllocationCreate:
type: object
properties:
amount_cents:
type: integer
target:
$ref: '#/components/schemas/type_financials:AllocationTargetCreate'
earmark:
$ref: '#/components/schemas/type_financials:AllocationEarmarkType'
description: 'If enabled for your organization, optional earmarking configuration for patient prepayments.
When provided on unattributed allocations, holds the payment for future auto-allocation to matching encounters.'
required:
- amount_cents
- target
description: 'Allocations are portions of payments that are applied to specific resources, known as targets. Each allocation has
and amount, defined in cents, and a target.'
title: AllocationCreate
type_financials:RefundReason:
type: string
enum:
- OVERCHARGED
- ENTERED_IN_ERROR
- TRANSFER
title: RefundReason
type_financials:AllocationOverdraftDetail:
type: object
properties:
allocation_target:
$ref: '#/components/schemas/type_financials:AllocationTarget'
description: The allocation target that would be overdrafted (service_line, claim, unattributed, etc.)
patient_paid_amount_cents:
type: integer
description: The amount in cents that the patient has currently paid toward this target (available to reallocate from)
current_balance_cents:
type: integer
description: The current balance in cents on this entity before the reallocation
overage_amount_cents:
type: integer
description: The amount in cents by which the reallocation would overdraft (always positive)
error_message:
type: string
description: A descriptive error message explaining the overdraft condition
required:
- allocation_target
- patient_paid_amount_cents
- current_balance_cents
- overage_amount_cents
- error_message
description: 'Structured information about an allocation that would be overdrafted.
Provides entity-specific details to display in a table format.'
title: AllocationOverdraftDetail
type_commons:ServiceLineId:
type: string
format: uuid
title: ServiceLineId
securitySchemes:
OAuthScheme:
type: http
scheme: bearer
description: OAuth 2.0 authentication