Skip to content

Aging Balances V1 — Developer Guide

Reference: GetAgingBalances (V1) Endpoint Documentation


GET — Patient Aging Balance

This endpoint returns the aging balance for a single patient or guarantor. It is suited for real-time lookups — for example, displaying a patient's current balance during a visit or responding to a customer support inquiry.

Charges are bucketed by the number of days elapsed since the transaction date at the time the request is made. The four buckets are: 0–30 days (current), 31–60 days, 61–90 days, and 90+ days.

Looking to fetch balances for all patients in a location? Use the Aging Balances Report V1 endpoint instead.

Parameters

ParameterInRequiredTypeDescription
patientIdqueryYesintegerThe ID of the patient to retrieve a balance for
ownershipqueryNostringScope of the balance calculation. Enum: GUARANTOR or PATIENT. Defaults to PATIENT.

ownership Values

ValueDescription
PATIENTReturns the aging balance scoped to the individual patient only — their own charges and credits
GUARANTORReturns the aging balance scoped to the guarantor — includes charges and credits for all patients the guarantor is financially responsible for. Also includes pleasePayAmount and closeablePaymentPlanState.

Important Notes

⚠️ Rate Limited: This endpoint is rate limited. See the rate limiting guide for details.


Example Requests

Fetch balance for a specific patient (patient scope):

GET /api/v1/agingbalances?patientId=12000006542062&ownership=PATIENT

Fetch balance for a guarantor (includes all dependents, payment plan fields):

GET /api/v1/agingbalances?patientId=12000006542062&ownership=GUARANTOR

Response Structure

A successful 200 response returns the following top-level structure:

FieldTypeDescription
dataobjectThe aging balance object (see below)
warningsarrayNon-fatal warnings (operation still succeeded)
errorsarrayField-level or structural errors

data Object

Each field represents the aging balance for the requested patient or guarantor. All monetary values are in dollars, rounded to two decimal places.

Aging Buckets

Charges are distributed into aging buckets based on the number of days since the transaction date.

FieldTypeDescription
currentnumberTotal charge balance for transactions dated 0–30 days ago
currentInsurancePortionnumberEstimated insurance-responsible share of the 0–30 day charges
currentPatientPortionnumberPatient-responsible share of the 0–30 day charges (current - currentInsurancePortion - currentWriteOff)
currentWriteOffnumberWrite-off adjustments applied to 0–30 day charges
thirtyDaysnumberTotal charge balance for transactions dated 31–60 days ago
thirtyDaysInsurancePortionnumberEstimated insurance-responsible share of the 31–60 day charges
thirtyDaysPatientPortionnumberPatient-responsible share of the 31–60 day charges
thirtyDaysWriteOffnumberWrite-off adjustments applied to 31–60 day charges
sixtyDaysnumberTotal charge balance for transactions dated 61–90 days ago
sixtyDaysInsurancePortionnumberEstimated insurance-responsible share of the 61–90 day charges
sixtyDaysPatientPortionnumberPatient-responsible share of the 61–90 day charges
sixtyDaysWriteOffnumberWrite-off adjustments applied to 61–90 day charges
ninetyDaysnumberTotal charge balance for transactions dated more than 90 days ago
ninetyDaysInsurancePortionnumberEstimated insurance-responsible share of the 90+ day charges
ninetyDaysPatientPortionnumberPatient-responsible share of the 90+ day charges
ninetyDaysWriteOffnumberWrite-off adjustments applied to 90+ day charges

Totals

FieldTypeDescription
balancenumberNet outstanding balance: (current + thirtyDays + sixtyDays + ninetyDays) + suspendedCredits
insurancePortionnumberTotal estimated insurance-responsible balance across all aging buckets
patientPortionnumberTotal patient-responsible balance: balance - insurancePortion - writeOffAdjustments
writeOffAdjustmentsnumberTotal write-off adjustments across all aging buckets
suspendedCreditsnumberUnapplied credits on the account — payments or credits that have not yet been applied to an outstanding charge. These reduce the net balance.

Payment Plan Fields

These fields are only populated when ownership=GUARANTOR and an active payment plan exists for the guarantor.

FieldTypeDescription
pleasePayAmountnumberThe next scheduled payment amount due under the guarantor's active payment plan. 0 if no active payment plan exists.
closeablePaymentPlanStatebooleantrue if the guarantor has an active payment plan and conditions are met to close it (e.g. the last payment has been received). false otherwise.

Coverage

FieldTypeDescription
hasCoverageGapbooleantrue if a gap in insurance coverage was detected while calculating insurance portions for this patient. Indicates some charges may have no insurance coverage applied.

Errors & Warnings Reference


HTTP Status Code Errors — click to expand

These apply to all Aging Balances V1 endpoints.


400 — Bad Request

The request query parameters are invalid or cannot be processed. See the Field-Level Validation Errors section below for specific causes.


401 — Unauthorized

MessageAuthentication is required and has failed or has not been provided.
WhyNo valid auth token was sent, the token is expired, or the token is malformed.
FixProvide a valid Bearer token in the Authorization header.

403 — Forbidden

MessageThe request is understood, but it has been refused or access is not allowed.
WhyThe authenticated token does not have the required scope. Read operations require model:read.
FixRequest a token that includes the model:read scope.

404 — Not Found

MessageThe requested resource is either missing or does not exist.
WhyNo patient exists for the given patientId within your organization, or the ID is invalid.
FixConfirm the patientId is correct and belongs to your organization.

408 — Request Timeout

MessageThe server timed out while processing the request.
WhyThe server took too long to respond, often due to high server load.
FixRetry the request. If the issue persists, contact support with the request details and timestamp.

429 — Too Many Requests

MessageRate limit exceeded.
WhyYour client has made too many requests in a short period of time.
FixImplement exponential backoff and retry logic. Reduce request frequency. See the rate limiting guide.

500 — Internal Server Error

MessageAn unexpected error occurred.
WhyAn unhandled server-side error occurred.
FixRetry the request. If the issue persists, contact support with the request details and timestamp.

Field-Level Validation Errors — click to collapse

These errors are returned in the errors array of the response body alongside a 400 status code.


patientId

Error: Invalid patient ID.

WhyThe patientId query parameter was omitted, is 0, or is not a valid integer.
FixProvide a valid integer patientId greater than 0, e.g. ?patientId=12000006542062.

ownership

Error: Invalid value for ownership.

WhyThe ownership value provided is not a recognized enum.
FixUse one of the following valid values: GUARANTOR, PATIENT.