Skip to content

Patient Procedure Transactions V1 — Developer Guide

Reference: Patient Procedure Transactions (V1) Endpoint Documentation


Patient procedure transactions represent procedure charges posted to the patient ledger. This is a read-only endpoint — procedure transactions are created and managed through the clinical and scheduling workflows, not directly through the financial API.

ledgerType values available on this endpoint:

ValueDescription
PatientProcedureLedgerA standard procedure charge posted to the patient ledger

GET — Bulk List Patient Procedure Transactions

Returns a paginated list of patient procedure transaction entries filtered by the provided criteria.

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

Parameters

ParameterInRequiredTypeDescription
Organization-IDheaderYesstringThe organization ID
filterqueryYesstringFilter criteria (see filter keys below)
responseFieldsqueryNostringComma-delimited list of fields to include, or ALL
pagequeryNostringPage number for pagination
pageSizequeryNostringNumber of records per page
lastIdqueryNostringLargest transaction ID from the previous page, used for efficient date-filter pagination

Filter Keys

Filter KeyOperatorsExample
id->?filter=id->[123,124]
ledgerType==, !=?filter=ledgerType==PatientProcedureLedger
patient.id==, ->?filter=patient.id==789
provider.id==?filter=provider.id==456
transactionDate>, <, >=, <=?filter=transactionDate>=2025-01-01
location.id==, !=, ->?filter=location.id==123 or ?filter=location.id==ALL
lastModified>, <, >=, <=?filter=lastModified>=2025-01-01

Important: A valid filter is required on every request. If no date-limiting filter is provided, one will be automatically applied using transactionDate >= <1 year ago> (or the organization's creation date if more recent). Use lastId (not page) when paginating over date-filtered results for best performance.

Example Requests

Fetch all procedure charges for a specific patient:

GET /api/v1/transactions/procedures?filter=patient.id==12000006542062

Fetch procedure charges for a location within a date range:

GET /api/v1/transactions/procedures?filter=transactionDate>=2025-01-01,transactionDate<=2025-03-31,location.id==123

Fetch procedures modified since a date across all locations:

GET /api/v1/transactions/procedures?filter=lastModified>=2025-01-01,location.id==ALL&pageSize=100&lastId=5000

GET — Patient Procedure Transaction by ID

Returns a single patient procedure transaction by its ID.

Parameters

ParameterInRequiredTypeDescription
transactionIdpathYesintegerThe ID of the procedure transaction
Organization-IDheaderYesstringThe organization ID
responseFieldsqueryNostringComma-delimited list of fields to include, or ALL

Example Request

GET /api/v1/transactions/procedures/100000042301

Response Structure

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

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

For bulk responses, data is an array and the response also includes:

FieldTypeDescription
meta.paginationobjectPagination metadata (page, pageSize, total)

data Object — Patient Procedure Transaction Fields

FieldTypeRead-OnlyDescription
idintegerYesUnique transaction ID
typestringYesAlways "Transaction"
ledgerTypestringYesPatientProcedureLedger
amountnumberYesProcedure charge amount
ownershipstringYesPATIENT or GUARANTOR
transactionDatestring (date)YesDate of the procedure (YYYY-MM-DD)
entryDatestring (date-time)YesCreation timestamp
lastModifiedstring (date-time)YesLast modification timestamp
isAutomaticallyPostedbooleanYesSystem-posted flag
isActivebooleanYesActive/cancelled status
isPartialPaymentbooleanYesWhether this is a partial payment
notestringYesNotes on the procedure charge
metBasicnumberYesDeductible met — basic
metPreventivenumberYesDeductible met — preventive
metMajornumberYesDeductible met — major
metOrthonumberYesDeductible met — ortho
previousTransactionobjectYesRef to replaced record
replacedByTransactionobjectYesRef to replacement record
patientobjectYes{ id }
locationobjectYes{ id }
providerobjectYes{ id }
organizationLedgerTypeobjectYes{ id }
patientProcedureobjectYes{ id } — linked clinical procedure record
insuranceClaimobjectYes{ id } — linked insurance claim, if applicable
transactionTagsobjectYes{ orderIndex: { id } }
distributionsarrayYes[{ chargeId, appliedAmount, isActive }] — applied payment/adjustment allocations

Streaming

Patient procedure transactions are streamable via StreamAPI webhooks (SNS). Events are published under the TransactionV1 domain type, shared with all other transaction sub-types.

Routing Key Format

organizationId.locationId.TransactionV1.operationType

Example Routing Keys

Listen for all transaction events (all sub-types) across all locations:

66d22762060811049b50d085.*.TransactionV1.*

Operations Emitted

OperationWhen
CREATEWhen a procedure charge is posted to the ledger
DELETEWhen a procedure charge is deleted

Filtering by ledgerType: All transaction sub-types share the TransactionV1 domain. Filter on ledgerType == PatientProcedureLedger in the event payload to identify procedure charge events specifically.


Errors & Warnings Reference

HTTP Status Code Errors — click to expand

400 — Bad Request

The request filter or parameters are invalid or cannot be processed. A filter is required on every bulk GET request.


401 — Unauthorized

MessageAuthentication is required and has failed or has not been provided.
WhyMissing, expired, or malformed Bearer token.
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 caller is not permitted to read procedure transactions for this organization.
FixConfirm credentials and organization access with your integration administrator.

404 — Not Found

MessageThe requested resource is either missing or does not exist.
WhyNo procedure transaction exists for the given ID within your organization.
FixConfirm the transactionId is correct and belongs to your organization.

408 — Request Timeout

MessageThe server timed out while processing the request.
WhyHigh server load or an overly broad filter.
FixNarrow filter criteria and retry.

429 — Too Many Requests

MessageRate limit exceeded.
WhyToo many requests in a short period.
FixImplement exponential backoff. See the rate limiting guide.

500 — Internal Server Error

MessageAn unexpected error occurred.
FixRetry. If the issue persists, contact support with the request details and timestamp.

Field-Level Validation Errors — click to collapse

filter

Error: Missing or invalid filter.

WhyThe filter parameter was omitted, left empty, or used an unsupported key or operator.
FixProvide at least one valid filter key and value, e.g. ?filter=lastModified>=2025-01-01.