08.31.2026
Today’s release includes the following updates:
ui
- Moving a batch of claims between queues — Batch actions → Move claims to queue on the Revenue worklist — has been reworked end to end. The action used to run behind a browser pop-up that showed no progress and reported no outcome, so a large or failed move looked the same as a successful one.
- Several performance improvements make the move itself considerably faster.
- A dialog replaces the browser pop-ups, and names how many claims match your current filters — every matching claim, not only the rows shown in the table. When nothing matches, it tells you there is nothing to move.
- A spinner runs while the claims are counted and again while they are moved, and the dialog can’t be dismissed part-way through a move.
- One run moves up to 2,000 claims by default, which an admin can change with the
MAX_BATCH_CLAIM_QUEUE_MOVEsetting in the config section below. When more than that match, the result says how many are left, so you can repeat the action to work through them. - The outcome is reported when the move lands — including when it doesn’t finish — and the claim table refreshes as you close the dialog.
bugfix
- Fixed an issue where electronic remittances stopped posting automatically for insurers configured with two or more entries in their “Accept remittances from” list. The payment never posted and the claim was left commented “coverage with remit payer id not found in claim”, so staff only noticed when a balance looked wrong. Remittances for these insurers now post as expected.
- Imaging result codes are now normalized as results are ingested, so a code carrying stray or doubled spaces no longer makes FHIR
ObservationandDiagnosticReportreads and searches fail with a 500 error. - Fixed an issue where the rendered report PDF that Health Gorilla delivers alongside a lab’s real results created an empty lab value and lab test on the patient’s chart. Only the exact name “PDF Report” was recognized as the attachment, so variants such as “Clinical PDF Report” or “Enhanced PDF Report” came through as results. The attachment is now recognized however it is named.
config
- Canvas can now keep a security audit trail of sign-ins, chart access, and clinical data changes, and stream it to your own SIEM. The trail is recorded in the OCSF standard, and its events carry opaque identifiers only — never patient or provider names, dates of birth, or clinical values. It can be read as a retained, read-only view inside Canvas, or exported to an HTTPS endpoint you nominate. Off by default; reach out to Canvas support to enable it for your instance and to set the retention period, the endpoint, and whether identifiers are sent directly or as a keyed hash. Read more.
- Admins can now set a new instance-wide Constance config setting,
MAX_BATCH_CLAIM_QUEUE_MOVE, that caps how many claims one run of Batch actions → Move claims to queue will move. The cap is what keeps a very large move performant: instead of one action taking on an unbounded amount of work, a big queue is moved in batches. Defaults to 2,000; when more claims match your filters, the action reports how many remain and you run it again to move the next batch.
sdk
- Charting from your own application has always meant building the API yourself. Not anymore.
CommandAPIturns any Canvas command into an HTTP endpoint in five lines — you declare the route and who may reach it, and Canvas handles reading the request, validating it against the command, and writing it to the chart. Writing Commands Over HTTP takes you from nothing to your first working endpoint. - Eight more commands now carry additional validation on the record they point at: the id must name a record belonging to the same patient as the
note_uuidyou pass — or, when the command names no note, as thecommand_uuidyou pass. A record on any other patient’s chart is refused, and the error names the id that failed:- Lab Review, Imaging Review, Referral Review and Uncategorized Document Review — every id in
report_idsmust name a report that is still awaiting review and is on that patient’s chart. A single foreign report among otherwise valid ones rejects the whole command. - Resolve Condition —
condition_id. - Stop Medication —
medication_id. - Remove Allergy —
allergy_id. - Update Goal —
goal_id.
- Lab Review, Imaging Review, Referral Review and Uncategorized Document Review — every id in
- The Remove Allergy command’s
narrativenow accepts up to 512 characters. - Answering a questionnaire from a plugin no longer means fetching the questions and branching on each one’s type: pass an
answerslist and the command works out the rest. It works on the Questionnaire command and the three built on it — Review of Systems, Structured Assessment and Physical Exam. Read more.