openapi: 3.2.0 info: title: Reference Patient Refunds 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: Patient Refunds paths: /api/patient-refunds/v1: get: operationId: getMulti 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: - Patient Refunds 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: - Patient Refunds 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' allocation_restrictions: type: array items: $ref: '#/components/schemas/type_financials_AllocationRestrictionCreate' description: 'Optional restrictions constraining which claims this refund''s credit can be auto-allocated to (e.g. billing provider NPI). Restriction (type, value) pairs must be unique. When omitted, the refund is unrestricted. Refunds created from an existing payment inherit that payment''s restrictions instead.' 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: - Patient Refunds 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: - Patient Refunds 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: - Patient Refunds 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_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_commons_EncounterExternalId: type: string title: EncounterExternalId 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_AllocationId: type: string format: uuid title: AllocationId 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_AllocationRestrictionType: type: string enum: - billing_provider_npi - service_facility_id description: The dimension along which a payment's auto-allocation can be restricted. title: AllocationRestrictionType type_financials_Allocation: type: object properties: allocation_id: $ref: '#/components/schemas/type_commons_AllocationId' amount_cents: type: integer target: $ref: '#/components/schemas/type_financials_AllocationTarget' earmark: $ref: '#/components/schemas/type_financials_BalanceEarmark' description: The active earmark created by this allocation, if any. Only present when this allocation created an earmark for future auto-allocation and the earmark has not been deleted. allocated_on: type: string format: date-time required: - amount_cents - target title: Allocation type_patient-refunds_v1_PatientRefund: type: object properties: patient_refund_id: $ref: '#/components/schemas/type_patient-refunds_v1_PatientRefundId' organization_id: $ref: '#/components/schemas/type_commons_OrganizationId' source_internal_id: type: string refund_source: $ref: '#/components/schemas/type_financials_PatientTransactionSource' amount_cents: type: integer patient_external_id: $ref: '#/components/schemas/type_commons_PatientExternalId' refund_timestamp: type: string format: date-time refund_note: type: string allocations: type: array items: $ref: '#/components/schemas/type_financials_Allocation' invoice: $ref: '#/components/schemas/type_commons_InvoiceId' refund_reason: $ref: '#/components/schemas/type_financials_RefundReason' required: - patient_refund_id - organization_id - refund_source - amount_cents - patient_external_id - allocations title: PatientRefund type_commons_ClaimId: type: string format: uuid title: ClaimId type_commons_PatientExternalId: type: string title: PatientExternalId type_financials_BalanceEarmark: type: object properties: id: type: string format: uuid target: $ref: '#/components/schemas/type_financials_AllocationEarmarkType' description: The target for this earmark (date of service or external encounter ID) amount_earmarked_cents: type: integer description: The amount earmarked in cents for future allocation created_by_allocation_id: $ref: '#/components/schemas/type_commons_AllocationId' description: The ID of the allocation that created this earmark required: - id - target description: 'Represents an active balance earmarking record that holds allocated funds for future auto-allocation. Earmarks are created when funds are allocated but should be held for a specific encounter or date of service. Only active (non-deleted) earmarks are returned.' title: BalanceEarmark type_commons_ProviderId: type: string format: uuid title: ProviderId type_commons_SortDirection: type: string enum: - asc - desc title: SortDirection type_commons_EncounterId: type: string format: uuid title: EncounterId type_patient-refunds_v1_PatientRefundId: type: string format: uuid title: PatientRefundId 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_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_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_patient-refunds_v1_PatientRefundsPage: type: object properties: prev_page_token: $ref: '#/components/schemas/type_commons_PageToken' next_page_token: $ref: '#/components/schemas/type_commons_PageToken' items: type: array items: $ref: '#/components/schemas/type_patient-refunds_v1_PatientRefund' required: - items title: PatientRefundsPage type_commons_PageToken: type: string title: PageToken type_commons_ServiceLineId: type: string format: uuid title: ServiceLineId type_financials_RefundReason: type: string enum: - OVERCHARGED - ENTERED_IN_ERROR - TRANSFER title: RefundReason 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_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_patient-refunds_v1_PatientRefundSortField: type: string enum: - refund_source - amount_cents - refund_timestamp - refund_reason - refund_note title: PatientRefundSortField 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_EntityNotFoundErrorMessage: type: object properties: id: type: string required: - id title: EntityNotFoundErrorMessage type_commons_OrganizationId: type: string format: uuid title: OrganizationId type_commons_UnprocessableEntityErrorMessage: type: object properties: message: type: string title: UnprocessableEntityErrorMessage 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_AllocationRestrictionCreate: type: object properties: restriction_type: $ref: '#/components/schemas/type_financials_AllocationRestrictionType' restriction_value: type: string description: For billing_provider_npi, the NPI. For service_facility_id, the organization service facility ID. required: - restriction_type - restriction_value description: 'Constrains which claims a payment''s credit can be auto-allocated to. Restrictions of the same restriction_type are OR''d together (any value may match); different restriction_types are AND''d (every type present must match). A payment with no restrictions can be allocated to any claim.' title: AllocationRestrictionCreate type_commons_UnauthorizedErrorMessage: type: object properties: message: type: string title: UnauthorizedErrorMessage type_financials_PatientTransactionSource: type: string enum: - MANUAL_ENTRY - CHARGEBEE - SQUARE - STRIPE - ELATION - CEDAR - HEALTHIE - REALLOCATION - PHREESIA - INSTAMED - SHERPA_HEALTH title: PatientTransactionSource securitySchemes: OAuthScheme: type: http scheme: bearer description: OAuth 2.0 authentication