<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom" >
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <link href="https://docs.canvasmedical.com/release-notes.xml" rel="self" type="application/atom+xml" />
  <link href="https://docs.canvasmedical.com/" rel="alternate" type="text/html" />
  <updated>2026-09-04T16:30:31-07:00</updated>
  <id>https://docs.canvasmedical.com/release-notes.xml</id>

  
  
  

  
    <title type="html">Canvas Medical Release Notes</title>
  

  
    <subtitle>Build powerful EMR customizations and integrations with Canvas Medical’s developer tools. Explore documentation on the Server Side SDK, FHIR API, and implementation guides. Stay updated on the latest product enhancements to streamline healthcare workflows and optimize clinical operations.</subtitle>
  

  

  
  
  
  
  
  
    <entry>
      

      <title type="html">09.03.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-347-0/" rel="alternate" type="text/html" title="09.03.2026" />
      <published>2026-09-03T00:00:00-07:00</published>
      <updated>2026-09-02T21:20:17-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-347-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-347-0/"><![CDATA[<p><span class="tag-ui">ui</span></p>

<div>
  <div>• Prescribers can now review and sign a prescription without an SPI (Surescripts Prescriber Identifier) number on file.
    <div>
      <div>◦ SPI is only needed to transmit a prescription electronically through Surescripts, so it no longer blocks review and sign for prescribers who don’t transmit that way, such as direct-integration or compounding workflows.</div>
      <div>◦ A prescription whose prescriber has no SPI still offers no send action. The same applies to Refill and Adjust Prescription.</div>
      <div>◦ An NPI number is still required to sign, and controlled-substance prescribing is still gated by EPCS enrollment.</div>
    </div>
  </div>
</div>

<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue in the appointment scheduling modal where free-text fields would grey out and lose the cursor mid-word while a scheduling plugin was installed, sometimes discarding characters. Reason for Visit, Comments, Event Title, and any text field a plugin adds now stay editable while the form refreshes.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now <a href="/sdk/handlers-embedded-applications/#docked-applications">dock an application</a> in a persistent pane on an edge of the screen: left, right, top, or bottom.
    <div>
      <div>◦ The pane stays mounted as staff move around Canvas, so it keeps its state instead of being rebuilt on every page. <code>on_context_change()</code> hands it each new page’s context, and the pane reloads only if the plugin asks it to.</div>
      <div>◦ A plugin decides who gets a pane. <code>visible()</code> is asked per staff member, so a dock can be scoped to a team or a role rather than appearing for everyone once the plugin is installed.</div>
      <div>◦ Staff resize a pane by dragging its divider or with the arrow keys, and Canvas remembers the size each pane was left at. A plugin can resize its own pane too, collapse it to a thin rail, or remove it.</div>
      <div>◦ Up to two panes can share an edge. Left and right panes together take at most half the window’s width, and top and bottom panes at most half its height.</div>
    </div>
  </div>
  <div>• Plugins can now drive their own automations in a note, rather than clinicians having only the ones built into Canvas. A plugin adds an <a href="/sdk/handlers-action-buttons/#note-body-automations">action button</a> in the new <code>NOTE_BODY_AUTOMATION</code> location, and it appears in the note body’s <code>/</code> menu alongside the native commands, marked with a plug icon.
    <div>
      <div>◦ It is an ordinary action button, so <code>handle()</code> can return any effects. What the location is meant for is a <a href="/sdk/effect-batch-originate/">BatchOriginateCommandEffect</a> with <code>replace_line=True</code>, which originates a set of <a href="/sdk/commands/">commands</a> onto the line the clinician typed the trigger on.</div>
      <div>◦ <code>visible()</code> decides who sees an entry and where. Its context carries the signed-in staff member alongside the note and the patient, so an entry can be limited to particular staff as well as to particular notes or patients. <code>PRIORITY</code> orders it within the menu.</div>
    </div>
  </div>
  <div>• Four more records are now readable through the SDK data module, covering the Surescripts change and cancel workflows:
    <div>
      <div>◦ <a href="/sdk/data-prescription-change-response/">PrescriptionChangeResponse</a>: the approve or deny recorded against a change request, with the response type, the status, and the response detail fields.</div>
      <div>◦ <a href="/sdk/data-prescription-change-request/">PrescriptionChangeRequest</a>: the pharmacy’s incoming change request, with its medication codings and the prescription it relates to.</div>
      <div>◦ <a href="/sdk/data-cancel-prescription/">CancelPrescription</a>: a request to cancel a patient’s prescription, with the prescription, the patient, the note, the message, and the status.</div>
      <div>◦ <a href="/sdk/data-cancel-prescription-response/">CancelPrescriptionResponse</a>: the response to a cancel request, linked one to one to the request that produced it.</div>
    </div>
  </div>
  <div>• Fixed an issue where a self-pay coverage reported a stale <code>Failed</code> <a href="/sdk/data-coverage/#eligibility-status">eligibility status</a> to plugins. A self-pay coverage now reports <code>NOT_APPLICABLE</code>, and the stale response behind it is never surfaced.</div>
  <div>• Fixed an issue where a field a plugin adds to the appointment scheduling modal with <a href="/sdk/appointment-metadata-create-form-effect/"><code>editable=False</code></a> was still editable. The flag had never taken effect; it now makes the field read-only.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="ui" />
      
        <category term="bugfix" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[• Prescribers can sign a prescription without an SPI number; only sending needs it.
• Scheduling-modal free-text fields no longer grey out or drop characters.
• Plugins can dock a pane to any screen edge.
• Plugins can add their own automations to the note body "/" menu.
• Data module adds prescription change and cancel records.
• Self-pay coverages report NOT_APPLICABLE, not a stale Failed.

See full notes: https://docs.canvasmedical.com/release-notes/1-347-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">09.01.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-346-0/" rel="alternate" type="text/html" title="09.01.2026" />
      <published>2026-09-01T00:00:00-07:00</published>
      <updated>2026-09-01T08:58:26-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-346-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-346-0/"><![CDATA[<p><span class="tag-ui">ui</span></p>

<div>
  <div>• Questionnaires now support a <strong>Date</strong> question type, alongside single select, multi select and free text.
    <div>
      <div>◦ When building a questionnaire, choose Date for a question in the Questionnaire Builder, or set the question’s <code>responses_type</code> to <code>DATE</code> in the Google Sheets import.</div>
      <div>◦ When filling one out in a note, the question renders as a date picker in the Questionnaire, Review of Systems, Structured Assessment and Physical Exam commands.</div>
      <div>◦ The captured date carries through charting and carry-forward.</div>
    </div>
  </div>
</div>

<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue in the Canvas Remote app where capturing insurance card images failed when adding a new coverage. The front and back capture steps now load for a coverage that has just been started.</div>
  <div>• Discharging an inpatient note now records one discharge and one lock in the note’s state history, plus a signature for note types that require one. Previously the lock was written three times, so the state history showed duplicates and plugins subscribed to <a href="/sdk/events/"><code>NOTE_STATE_CHANGE_EVENT_CREATED</code></a> were notified of the same lock three times.</div>
</div>

<p><span class="tag-api">api</span></p>

<div>
  <div>• The FHIR API now carries Date questions.
    <div>
      <div>◦ A <a href="/api/questionnaire/">Questionnaire</a> declares one as <code>"type": "date"</code>.</div>
      <div>◦ A <a href="/api/questionnaireresponse/">QuestionnaireResponse</a> answers it with a <code>valueDate</code>, an ISO 8601 calendar date, on both read and create.</div>
    </div>
  </div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• A questionnaire can declare a <code>DATE</code> question, and a plugin can answer one.
    <div>
      <div>◦ Set <code>responses_type: DATE</code> on the question in the questionnaire’s YAML template, the one your plugin’s <code>CANVAS_MANIFEST.json</code> points at. See <a href="/sdk/questionnaires/">Questionnaires</a>.</div>
      <div>◦ Answer it from the <a href="/sdk/commands/#questionnaire">Questionnaire</a> command. An <code>answers</code> entry takes the date as an ISO 8601 <code>YYYY-MM-DD</code> string, while the question’s own <code>add_response(date=...)</code> also accepts a <code>datetime.date</code>.</div>
    </div>
  </div>
  <div>• Five more records are now readable through the SDK data module, each of them the record behind a command:
    <div>
      <div>◦ <a href="/sdk/data-plan/">Plan</a>: what the <a href="/sdk/commands/#plan">Plan</a> command records, with its narrative.</div>
      <div>◦ <a href="/sdk/data-follow-up/">FollowUp</a>: what the <a href="/sdk/commands/#followup">Follow Up</a> command records, including the requested appointment date and type, the reason for the visit, and the comments to the patient and to staff.</div>
      <div>◦ <a href="/sdk/data-reason-for-visit/">ReasonForVisit</a>: what the <a href="/sdk/commands/#reasonforvisit">Reason for Visit</a> command records, with its narrative and codings, alongside the configured codings an instance offers.</div>
      <div>◦ <a href="/sdk/data-remove-allergy-event/">RemoveAllergyEvent</a>: what the <a href="/sdk/commands/#removeallergy">Remove Allergy</a> command records, with the allergy removed, the patient, the note and the rationale.</div>
      <div>◦ <a href="/sdk/data-resolve-condition-event/">ResolveConditionEvent</a>: what the <a href="/sdk/commands/#resolve-condition">Resolve Condition</a> command records, with the condition resolved, the patient, the note and the rationale.</div>
    </div>
  </div>
  <div>• Fixed an issue where calling <code>find()</code> with a value set on <a href="/sdk/data-family-history/">FamilyHistory</a> or <a href="/sdk/data-immunization/">ImmunizationStatement</a> records raised an error instead of returning results. These value-set lookups now work.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="ui" />
      
        <category term="bugfix" />
      
        <category term="api" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[• Questionnaires support a Date question type across the builder, chart, FHIR API and SDK.

bugfix

• Canvas Remote captures insurance cards on a new coverage.
• Discharging an inpatient note logs one lock, not three.

sdk

• Data module adds Plan, FollowUp, ReasonForVisit, RemoveAllergyEvent, ResolveConditionEvent.
• Value-set lookups fixed on family history and immunizations.

See full notes: https://docs.canvasmedical.com/release-notes/1-346-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.31.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-345-0/" rel="alternate" type="text/html" title="08.31.2026" />
      <published>2026-08-31T00:00:00-07:00</published>
      <updated>2026-08-30T20:03:12-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-345-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-345-0/"><![CDATA[<p><span class="tag-ui">ui</span></p>

<div>
  <div>• Moving a batch of claims between queues — <strong>Batch actions → Move claims to queue</strong> 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.
    <div>
      <div>◦ Several performance improvements make the move itself considerably faster.</div>
      <div>◦ 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.</div>
      <div>◦ 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.</div>
      <div>◦ One run moves up to 2,000 claims by default, which an admin can change with the <code>MAX_BATCH_CLAIM_QUEUE_MOVE</code> setting 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.</div>
      <div>◦ The outcome is reported when the move lands — including when it doesn’t finish — and the claim table refreshes as you close the dialog.</div>
    </div>
  </div>
</div>

<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• 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.</div>
  <div>• Imaging result codes are now normalized as results are ingested, so a code carrying stray or doubled spaces no longer makes FHIR <code>Observation</code> and <code>DiagnosticReport</code> reads and searches fail with a 500 error.</div>
  <div>• 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.</div>
</div>

<p><span class="tag-config">config</span></p>

<div>
  <div>• 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. <a href="https://help.canvasmedical.com/articles/3718661267-security-audit-trail-and-siem-export">Read more.</a></div>
  <div>• Admins can now set a new instance-wide Constance config setting, <code>MAX_BATCH_CLAIM_QUEUE_MOVE</code>, that caps how many claims one run of <strong>Batch actions → Move claims to queue</strong> 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.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Charting from your own application has always meant building the API yourself. Not anymore. <a href="/sdk/handlers-simple-api-commands/"><code>CommandAPI</code></a> turns 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. <a href="/guides/writing-commands-over-http/">Writing Commands Over HTTP</a> takes you from nothing to your first working endpoint.</div>
  <div>• Eight more <a href="/sdk/commands/">commands</a> now carry additional validation on the record they point at: the id must name a record belonging to the same patient as the <code>note_uuid</code> you pass — or, when the command names no note, as the <code>command_uuid</code> you pass. A record on any other patient’s chart is refused, and the error names the id that failed:
    <div>
      <div>◦ <a href="/sdk/commands/#labreview">Lab Review</a>, <a href="/sdk/commands/#imagingreview">Imaging Review</a>, <a href="/sdk/commands/#referralreview">Referral Review</a> and <a href="/sdk/commands/#uncategorizeddocumentreview">Uncategorized Document Review</a> — every id in <code>report_ids</code> must 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.</div>
      <div>◦ <a href="/sdk/commands/#resolve-condition">Resolve Condition</a> — <code>condition_id</code>.</div>
      <div>◦ <a href="/sdk/commands/#stopmedication">Stop Medication</a> — <code>medication_id</code>.</div>
      <div>◦ <a href="/sdk/commands/#removeallergy">Remove Allergy</a> — <code>allergy_id</code>.</div>
      <div>◦ <a href="/sdk/commands/#updategoal">Update Goal</a> — <code>goal_id</code>.</div>
    </div>
  </div>
  <div>• The <a href="/sdk/commands/#removeallergy">Remove Allergy</a> command’s <code>narrative</code> now accepts up to 512 characters.</div>
  <div>• Answering a questionnaire from a plugin no longer means fetching the questions and branching on each one’s type: pass an <code>answers</code> list 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. <a href="/sdk/commands/#questionnaire">Read more.</a></div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="ui" />
      
        <category term="bugfix" />
      
        <category term="config" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[ui

• Batch claim queue moves: faster, with progress and a cap.

bugfix

• ERA remittances post for multi-payer insurers.
• Malformed imaging codes no longer 500 FHIR reads.

config

• Security audit trail with SIEM export.

sdk

• CommandAPI turns any command into an HTTP endpoint.
• Eight commands reject another patient's record.
• Questionnaire takes an answers list.

See full notes: https://docs.canvasmedical.com/release-notes/1-345-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.27.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-344-0/" rel="alternate" type="text/html" title="08.27.2026" />
      <published>2026-08-27T00:00:00-07:00</published>
      <updated>2026-08-27T12:52:55-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-344-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-344-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Several improvements to the patient portal login workflow:
    <div>
      <div>◦ Invite and password-reset links no longer show “Expired link” when the link is still good. A link stays usable for its full lifetime and is spent only when the password is actually set.</div>
      <div>◦ When a different account is signed in on the same browser, an invite or reset link now names that as the reason and offers a one-click “Sign out and continue” that reopens the same link, rather than reporting the link as expired.</div>
      <div>◦ Patients who open the portal at a URL without a trailing slash, such as <code>/app</code>, now reach the portal instead of a 403 Forbidden.</div>
    </div>
  </div>
  <div>• Fixed an issue where signing in to the patient portal and then opening a page in Canvas gave a bare 403 error with nothing to act on — most often hit while testing the portal in a non-production environment. That page now explains that the portal session is in the way, and signs you out to the page you were headed for.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• <a href="/sdk/data-vital-sign-reading/">Vital sign readings</a> are now available in the SDK data module — the records behind the <a href="/sdk/commands/#vitals">Vitals</a> command. Plugins can read a patient’s readings along with each individual measurement — the sign, its LOINC code, the value and the units — through the reading’s <code>signs</code>.</div>
  <div>• The <a href="/sdk/commands/#immunize">Immunize</a> command is now available in the SDK, so plugins can record a vaccine administered during a visit and the lot it came from. The instance’s vaccine catalog and its lot inventory are readable as <a href="/sdk/data-vaccine/">Vaccine and VaccineLot</a>, and supplying a lot fills in the manufacturer and expiration date for you.</div>
  <div>• The <a href="/sdk/commands/#laborder">Lab Order</a> command’s <code>comment</code> is now limited to 128 characters.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[bugfix

• Patient portal login:
  ◦ Invite and reset links no longer show a false "Expired link".
  ◦ A link opened under another account offers a sign-out.
  ◦ /app now reaches the portal.
• Improved login for staff testing the portal.

sdk

• Vitals and Vaccines added to the data module.
• The Immunize command added to the commands module.
• The Lab Order comment is capped at 128 characters.

See full notes: https://docs.canvasmedical.com/release-notes/1-344-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.26.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-343-0/" rel="alternate" type="text/html" title="08.26.2026" />
      <published>2026-08-26T00:00:00-07:00</published>
      <updated>2026-08-24T19:49:10-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-343-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-343-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Printouts, note headers and outbound lab and imaging orders now report the patient’s recorded sex at birth. Previously any value other than Male read as “female”, including Other, Unknown and blank.</div>
  <div>• Coverages with the “Patient” payer now show “No eligibility check applies” rather than a failed eligibility check, and no longer send eligibility requests to the clearinghouse. A self-pay coverage that had already collected failed checks no longer reports them as failures.</div>
  <div>• Requests to the Claim.MD clearinghouse now time out instead of waiting indefinitely when Claim.MD accepts a connection and then stops responding. An eligibility check that times out records “coverage verification timed out” rather than leaving the check unresolved, and claim submissions, remittance retrieval and payer list refreshes are bounded the same way.</div>
  <div>• Fixed an issue where a signed lab review that used “Send via patient app” showed “Error loading command” in place of the review when the note was reopened. These reviews now reopen correctly.</div>
  <div>• Admin CSV imports, such as Fee Schedule → Import, no longer fail with a 500 error when you confirm the upload.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Four more records are now readable through the SDK data module, three of them the records behind commands:
    <div>
      <div>◦ <a href="/sdk/data-procedure/">Procedure</a> — what the <a href="/sdk/commands/#perform">Perform</a> command records, with its CPT codings.</div>
      <div>◦ <a href="/sdk/data-family-history/">FamilyHistory</a> — what the <a href="/sdk/commands/#familyhistory">Family History</a> command records, one per relative, with the relative’s relation and its condition codings.</div>
      <div>◦ <a href="/sdk/data-history-present-illness/">HistoryOfPresentIllness</a> — what the <a href="/sdk/commands/#historyofpresentillness">History of Present Illness</a> command records.</div>
      <div>◦ <a href="/sdk/data-eligibility-response/">EligibilityRequest and EligibilityResponse</a> — the coverage eligibility check sent to a payer and what came back, including the payer’s errors and the parsed response. Both are reachable from a <a href="/sdk/data-coverage/">Coverage</a>, which also gains an <code>eligibility_status</code>.</div>
    </div>
  </div>
  <div>• Plugins can now subscribe to coverage eligibility <a href="/sdk/events/#eligibility-responses">events</a>:
    <div>
      <div>◦ <code>COVERAGE_ELIGIBILITY_RESPONSE_CREATED</code> fires when a response is first recorded, and <code>COVERAGE_ELIGIBILITY_RESPONSE_UPDATED</code> when an existing one changes.</div>
      <div>◦ One of <code>COVERAGE_ELIGIBILITY_RESPONSE_ACTIVE</code>, <code>_INACTIVE</code> or <code>_FAILED</code> fires alongside it, carrying the status the check resolved to.</div>
      <div>◦ The event context carries the coverage, the patient, the status, and the payer’s errors on a failure.</div>
    </div>
  </div>
  <div>• The SDK <a href="/sdk/commands/">commands</a> module enforces more validations, each reported when the command is written rather than failing later:
    <div>
      <div>◦ The <a href="/sdk/commands/#prescribe">Prescribe</a>, <a href="/sdk/commands/#refill">Refill</a> and <a href="/sdk/commands/#adjustprescription">Adjust Prescription</a> commands check four fields against what can be transmitted to a pharmacy:
        <div>
          <div>◦ <code>sig</code> — up to 1000 characters.</div>
          <div>◦ <code>note_to_pharmacist</code> — up to 210 characters.</div>
          <div>◦ <code>refills</code> — from 0 to 99.</div>
          <div>◦ <code>quantity_to_dispense</code> — greater than zero. Fractional quantities such as <code>0.5</code> — half a tablet, or 0.5 mL of a suspension — are still valid, so the bound is exclusive rather than a minimum of one.</div>
        </div>
      </div>
      <div>◦ The <a href="/sdk/commands/#updatediagnosis">Update Diagnosis</a> command’s <code>background</code> and <code>narrative</code> accept up to 2048 characters.</div>
      <div>◦ The <a href="/sdk/commands/#closegoal">Close Goal</a> command validates <code>goal_id</code>, and fails when the goal doesn’t exist or belongs to another patient.</div>
    </div>
  </div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[bugfix

• All printouts now report the recorded sex at birth.
• Self-pay coverages show "No eligibility check applies".
• Clearinghouse requests now time out instead of hanging.
• Lab reviews sent via the patient app reopen correctly.

sdk

• Procedure, family history, HPI and eligibility records readable.
• Events for eligibility responses.
• Five commands now validate more fields.

See full notes: https://docs.canvasmedical.com/release-notes/1-343-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.24.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-342-0/" rel="alternate" type="text/html" title="08.24.2026" />
      <published>2026-08-24T00:00:00-07:00</published>
      <updated>2026-08-20T17:46:37-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-342-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-342-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where committing a <a href="/sdk/commands/#poclabtest">Point of Care Lab Test</a> did not add the CPT charge configured on the test’s template to the billing footer of the note, so the visit could be under-billed. The charge is now added when the command is committed, whether that happens in the chart or from a plugin.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• The SDK data module now reaches a patient’s <em>signed</em> consent documents, where previously only the blank template was available. <a href="/sdk/data-patient-consent/">PatientConsent</a> gains:
    <div>
      <div>◦ <code>documents</code> — the signed <a href="/sdk/data-patient-administrative-document/">PatientAdministrativeDocument</a> records.</div>
      <div>◦ <code>active_document</code> — the current signed document.</div>
      <div>◦ <code>document_references</code> — the <a href="/sdk/data-document-reference/">DocumentReference</a> records behind them.</div>
    </div>
  </div>
  <div>• The SDK data module now reaches a goal’s update history alongside the goal itself. <a href="/sdk/data-goal/">UpdateGoal</a> is the record behind the <a href="/sdk/commands/#updategoal">Update Goal</a> and <a href="/sdk/commands/#closegoal">Close Goal</a> commands, and three accessors list them:
    <div>
      <div>◦ <code>goal.updates</code> — the updates and closures recorded against a goal.</div>
      <div>◦ <code>patient.updategoals</code> — those recorded for a <a href="/sdk/data-patient/">Patient</a>.</div>
      <div>◦ <code>note.updategoals</code> — those recorded on a <a href="/sdk/data-note/">Note</a>.</div>
    </div>
  </div>
  <div>• <a href="/sdk/canvas_cli/#canvas-validate"><code>canvas validate</code></a> and <a href="/sdk/canvas_cli/#canvas-install"><code>canvas install</code></a> now catch two more constructs the <a href="/sdk/sandboxing-and-allowed-imports/#forbidden-constructs">sandbox</a> rejects. Both used to pass validation on your machine and then fail once the plugin reached the instance; the error now names the alternative that works. <em>(requires Canvas CLI 0.198.1 or newer)</em>
    <div>
      <div>◦ Any call to <code>type()</code>, not just the three-argument form used for dynamic class creation — use <code>isinstance(x, SomeClass)</code> to test a type, or <code>x.__class__.__name__</code> to read its name.</div>
      <div>◦ Augmented assignment to an attribute (<code>obj.attr += v</code>), which is rejected even on classes your plugin defines itself — write <code>obj.attr = obj.attr + v</code> instead.</div>
    </div>
  </div>
  <div>• The <a href="/sdk/commands/#changemedication">Change Medication command</a> now validates <code>medication_id</code> when you edit an existing command, not only when you originate a new one. An id that isn’t a valid UUID, or that matches no active medication on the patient’s chart, fails validation.</div>
  <div>• Some commands now validate their string fields against the maximum length the chart accepts, and raise a validation error when a value exceeds it. The error names the field, so an over-long value is caught in your plugin instead of being accepted and then rejected later, away from the plugin that sent it.
    <div>
      <div>◦ The <a href="/sdk/commands/#allergy">Allergy command’s</a> <code>narrative</code> accepts up to 512 characters.</div>
      <div>◦ The <a href="/sdk/commands/#familyhistory">Family History command’s</a> <code>note</code> accepts up to 512 characters.</div>
      <div>◦ The <a href="/sdk/commands/#imagingorder">Imaging Order command’s</a> <code>additional_details</code> and <code>comment</code> accept up to 1024 characters.</div>
      <div>◦ The <a href="/sdk/commands/#immunizationstatement">Immunization Statement command’s</a> <code>comments</code> accepts up to 255 characters.</div>
      <div>◦ The <a href="/sdk/commands/#medicationstatement">Medication Statement command’s</a> <code>sig</code> accepts up to 1000 characters.</div>
    </div>
  </div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[bugfix

• Committing a POC Test now adds CPT charge to the note's billing footer.

sdk

• PatientConsent exposes a patient's signed consent documents.
• UpdateGoal exposes a goal's update/closure history.
• canvas validate catches two more constructs the sandbox rejects.
• Length limits enforced on five command fields; Change Medication ensures medication is active for that patient.

See full notes: https://docs.canvasmedical.com/release-notes/1-342-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.19.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-341-0/" rel="alternate" type="text/html" title="08.19.2026" />
      <published>2026-08-19T00:00:00-07:00</published>
      <updated>2026-08-19T04:00:06-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-341-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-341-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where choosing “Send via patient app” as the patient communication method left a report review stuck. Sign stayed greyed out with “Please select a report” even though a report was attached, the review never saved, and it could only be cleared by reloading the page. On a lab review the patient was still notified that their results were ready, even though nothing had been recorded in the chart. Reviews now sign and save normally.</div>
  <div>• “Send via patient app” is now offered only on lab reviews, the one review type that supports it, so it no longer appears on imaging, referral, or uncategorized document reviews. It also now appears when reviewing a lab report from the panel, matching the patient chart.</div>
  <div>• Providers on a touch screen can now act on a medication in the Medications section of the patient summary, on the left-hand side of the patient chart. Tapping a medication there opens its detail, where Stop, Adjust, and Refill are full-size buttons and the medication name stays readable. Tapping a medication before its details had finished loading no longer blanks the patient summary. On a mouse or trackpad, including an iPad with a keyboard attached, the buttons continue to appear on the row on hover.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• The <a href="/sdk/effect-patient/#managing-patient-contacts">Patient</a> effect now allows you to manage your patient’s contacts — emergency contacts, next-of-kin, and other related persons. A contact either holds the person’s details inline, or points at another Canvas patient, which is how two patients are linked to each other. Contacts are added, modified, and removed one at a time: unlike the <a href="/api/patient/">FHIR Patient API</a>, where a contact left out of an update message is deleted, a contact you leave out here is untouched, and removing one is always explicit.</div>
  <div>• The following were added to the SDK data module so plugins can read those contacts back:
    <div>
      <div>◦ <a href="/sdk/data-patient/#patientcontactperson">PatientContactPerson</a> lists a patient’s contacts.</div>
      <div>◦ <a href="/sdk/data-patient/#patientcontactcategory">PatientContactCategory</a> links each contact to its relationship codings.</div>
      <div>◦ <a href="/sdk/data-patient/#contactcategory">ContactCategory</a> lists the codings the instance defines.</div>
    </div>
  </div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[bugfix

• Fixed a bug with the "Send via patient app" workflow of a lab review.
• Improve medication management in the Patient Summary section on touch screen.

sdk

• The Patient effect lets you manage your patient's contacts, and link two patients.
• PatientContactPerson, PatientContactCategory and ContactCategory added to the data module.

See full notes: https://docs.canvasmedical.com/release-notes/1-341-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.17.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-340-0/" rel="alternate" type="text/html" title="08.17.2026" />
      <published>2026-08-17T00:00:00-07:00</published>
      <updated>2026-08-17T03:36:33-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-340-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-340-0/"><![CDATA[<p><span class="tag-ui">ui</span></p>

<div>
  <div>• A controlled substance can no longer be sent for a patient whose sex at birth isn’t recorded as male or female. This covers the Prescribe, Refill and Adjust Prescription commands, both in Canvas — where the send action is no longer offered — and through the SDK, where <code>send()</code> reports “eRx unavailable, patient sex at birth must be male or female”. Previously the send failed downstream with nothing to point the prescriber at the cause.</div>
  <div>• Imaging order, Lab Review, lab report and Referral printouts now accurately reflect the patient’s recorded sex at birth, including “Other” and “Unknown”.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• The <a href="/sdk/data-plugin-command/#plugincommand">PluginCommand</a> data model now holds one row per custom command. Rows left over from the old content-versioned keys are consolidated when this release is deployed, and <code>schema_key</code> now always matches the <code>command_key</code> declared in the plugin’s manifest.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="ui" />
      
        <category term="sdk" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[ui

• Prevents sending a controlled substance — Prescribe, Refill or Adjust Prescription — when a patient's sex at birth is Other or Unknown
• Imaging order, lab review and referral printouts accurately show patient's sex at birth

sdk

• PluginCommand table now has one row per custom command, schema_key matching command_key.

See full notes: https://docs.canvasmedical.com/release-notes/1-340-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.13.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-339-0/" rel="alternate" type="text/html" title="08.13.2026" />
      <published>2026-08-13T00:00:00-07:00</published>
      <updated>2026-08-12T18:44:32-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-339-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-339-0/"><![CDATA[<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now get from a <a href="/sdk/data-document-reference/#the-related-object">DocumentReference</a> to the record it was generated from — the originating Lab Report, Invoice, Educational Material, and so on — and from any of those records back to the document reference that carries its file.</div>
  <div>• The <a href="/sdk/commands/#assess">Assess command</a> now checks that the condition it references belongs to the patient whose chart is being written to. Referencing a condition from another patient, or one that doesn’t exist, returns a clear validation error instead of being charted silently or failing with a generic error.</div>
  <div>• The Assess command’s <a href="/sdk/commands/#assess"><code>narrative</code></a> and the Diagnose command’s <a href="/sdk/commands/#diagnose"><code>today_assessment</code></a> now accept up to 2048 characters.</div>
</div>

<p><span class="tag-ui">ui</span></p>

<div>
  <div>• After a Canvas release is deployed, any tab that was already open now shows a banner across the top of the page: “An update is available for Canvas. Please click here to reload the page.” Previously that tab kept running the older build and could fail with unexplained errors.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="sdk" />
      
        <category term="ui" />
      

      
      
        
        
      
      
        <summary type="html"><![CDATA[sdk

• Plugins can now access a record's DocumentReference, and the record a DocumentReference came from.
• The Assess command now rejects a condition that belongs to another patient.
• Assess narrative and Diagnose today_assessment now allow 2048 characters.

ui

• An already-open tab now offers to reload after a release deploys, instead of failing with unexplained errors.

See full notes: https://docs.canvasmedical.com/release-notes/1-339-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.12.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-338-0/" rel="alternate" type="text/html" title="08.12.2026" />
      <published>2026-08-12T00:00:00-07:00</published>
      <updated>2026-08-11T18:50:18-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-338-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-338-0/"><![CDATA[<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• The following were added to the SDK data module:
    <div>
      <div>◦ <a href="/sdk/data-patient-administrative-document/">PatientAdministrativeDocument</a> exposes the administrative documents on a patient’s chart, along with their document coding and a <code>document_url</code> for the file itself.</div>
      <div>◦ <a href="/sdk/data-uncategorized-clinical-document/#uncategorizedclinicaldocument">UncategorizedClinicalDocument</a> gains a <code>code</code> property, so plugins can read the document’s coding.</div>
    </div>
  </div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[sdk


  • The following were added to the SDK data module:
    
      ◦ PatientAdministrativeDocument exposes the administrative documents on a patient’s chart, along with their document coding and a document_url for the file itself.
      ◦ UncategorizedClinicalDocument gains a code property, so plugins can read the document’s coding.

See full notes: https://docs.canvasmedical.com/release-notes/1-338-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.11.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-337-0/" rel="alternate" type="text/html" title="08.11.2026" />
      <published>2026-08-11T00:00:00-07:00</published>
      <updated>2026-08-10T19:18:58-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-337-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-337-0/"><![CDATA[<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now restrict which note types the New Note button offers for a given patient, and hide the button entirely when none are permitted, using the new <code>allowed_new_note_types</code> attribute on the <a href="/sdk/effect-patient-timeline/#restricting-note-creation">Patient Timeline</a> effect. This affects note creation only — existing notes and the timeline’s note type filter still show every note type.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[sdk


  • Plugins can now restrict which note types the New Note button offers for a given patient, and hide the button entirely when none are permitted, using the new allowed_new_note_types attribute on the Patient Timeline effect. This affects note creation only — existing notes and the timeline’s note type filter still show every note…

See full notes: https://docs.canvasmedical.com/release-notes/1-337-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.06.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-335-0/" rel="alternate" type="text/html" title="08.06.2026" />
      <published>2026-08-06T00:00:00-07:00</published>
      <updated>2026-08-05T19:20:18-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-335-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-335-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where the patient chart’s Goals “Active/Closed” filter classified goals incorrectly. The filter now classifies each goal by its most recent update, so a goal that was updated while active and later closed no longer appears under “Active” or sorts by an outdated due date.</div>
  <div>• Fixed an issue where installing, updating, or reinstalling a plugin could temporarily block a user’s IP address with a site-wide “403 Forbidden” while the plugin reloaded. Requests to plugin endpoints no longer count toward that block.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• The following were added to the SDK data module:
    <div>
      <div>◦ <a href="/sdk/data-imaging/#accessing-the-report-file">ImagingReport</a> gains a <code>document_url</code> property, so plugins can read the file attached to an imaging report.</div>
      <div>◦ <a href="/sdk/data-care-team/#careteammembership">CareTeamMembership</a> gains a <code>service_provider</code> property, so plugins can read a patient’s external care team members (e.g. an external PCP) and their contact info with <code>membership.service_provider.business_fax</code>. It resolves through the new <code>organizational_entity</code> relationship and the new <a href="/sdk/data-organizational-entity/">OrganizationalEntity</a> data module.</div>
      <div>◦ <a href="/sdk/data-educational-material/">EducationalMaterial</a> exposes Educational Material command data — the article’s title and abstract, the language it was shared in, and the languages it is available in. The article PDF itself is reached through <a href="/sdk/data-document-reference/">DocumentReference</a>.</div>
    </div>
  </div>
  <div>• Plugins can now control which items appear in the provider (hamburger) menu via the new <a href="/sdk/layout-effect/#provider-menu-configuration">ProviderMenuConfiguration</a> effect. For example, a scheduling plugin can hide the native Schedule item so it no longer renders in the menu.</div>
  <div>• Running <a href="/sdk/canvas_cli/#canvas-validate"><code>canvas validate</code></a> no longer reports library-owned handler classes in hidden directories (e.g. <code>.venv/</code>) as unreferenced, so plugin authors stop seeing spurious validation warnings. <em>(requires Canvas CLI 0.191.1 or newer)</em></div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed an issue where the patient chart’s Goals “Active/Closed” filter classified goals incorrectly. The filter now classifies each goal by its most recent update, so a goal that was updated while active and later closed no longer appears under “Active” or sorts by an outdated due date.
  • Fixed an issue where installing, up…

See full notes: https://docs.canvasmedical.com/release-notes/1-335-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.05.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-334-0/" rel="alternate" type="text/html" title="08.05.2026" />
      <published>2026-08-05T00:00:00-07:00</published>
      <updated>2026-08-04T20:26:56-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-334-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-334-0/"><![CDATA[<p><span class="tag-api">api</span></p>

<div>
  <div>• When a FHIR request is inserting a command into a specific note by passing that note’s ID in the extension, Canvas now checks that the note is not in a deleted or cancelled state. If the note has been deleted or canceled, you get a clear 422 telling you which note it was, instead of the 502 you would have seen before.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now build and maintain your own directory of <a href="/sdk/data-serviceprovider/">service providers</a> — the external providers picked when referring a patient, ordering imaging, adding an external care team member, or sending a fax.
    <div>
      <div>◦ Three new effects create, update, and deactivate providers: <a href="/sdk/effect-service-provider/">Service Provider effects</a>.</div>
      <div>◦ Four new <a href="/sdk/events/#other-events">events</a> let you customize two contact searches that plugins could not reach before:
        <div>
          <div>◦ <code>FAX__RECIPIENT__PRE_SEARCH</code> and <code>FAX__RECIPIENT__POST_SEARCH</code> — the fax recipient list.</div>
          <div>◦ <code>PATIENT_PROFILE__EXTERNAL_CARE_TEAM__PRE_SEARCH</code> and <code>PATIENT_PROFILE__EXTERNAL_CARE_TEAM__POST_SEARCH</code> — a patient’s external care team.</div>
        </div>
      </div>
      <div>◦ Providers you create are not searched automatically. To offer them in the Refer, Imaging Order, fax, or care team searches, handle that surface’s search event and return them yourself — the guide walks through <a href="/guides/customize-search-results/#offering-your-own-providers-alongside-the-directory">Offering your own providers alongside the directory</a>.</div>
      <div>◦ The <a href="/sdk/data-serviceprovider/">ServiceProvider</a> data module gains five fields:
        <div>
          <div>◦ <code>npi</code> — the provider’s NPI.</div>
          <div>◦ <code>direct_address</code> — the provider’s Direct (secure messaging) address.</div>
          <div>◦ <code>is_active</code> — <code>False</code> once a provider is deactivated; the record is kept, not deleted.</div>
          <div>◦ <code>is_customer_managed</code> — <code>True</code> for providers created through the new effects.</div>
          <div>◦ <code>science_contact_id</code> — the shared directory contact the provider came from, if any.</div>
        </div>
      </div>
      <div>◦ It also gains two helpers, <code>as_search_result()</code> and <code>as_search_contact()</code>, which shape a provider for the search surfaces so you do not have to build those payloads yourself.</div>
    </div>
  </div>
  <div>• The SDK <a href="/sdk/commands/#vitals">Vitals command</a> now supports the Supplemental Oxygen field added to the Vitals command in the previous release, so plugins can record whether a patient continuously depends on high-flow or low-flow oxygen, or uses oxygen intermittently.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="api" />
      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[api


  • When a FHIR request is inserting a command into a specific note by passing that note’s ID in the extension, Canvas now checks that the note is not in a deleted or cancelled state. If the note has been deleted or canceled, you get a clear 422 telling you which note it was, instead of the 502 you would have seen before.


sdk


 …

See full notes: https://docs.canvasmedical.com/release-notes/1-334-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.04.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-333-0/" rel="alternate" type="text/html" title="08.04.2026" />
      <published>2026-08-04T00:00:00-07:00</published>
      <updated>2026-08-04T07:27:32-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-333-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-333-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed several issues with snoozing protocol cards that come from plugins. Quality measure protocol cards now show the Snooze button when the plugin allows snoozing, snoozing from the card now applies to the protocol you snoozed instead of appearing to do nothing, and the patient’s protocol list refreshes with the updated state right away.</div>
  <div>• Fixed an issue where a questionnaire launched by an automation kept carrying answers forward after carry-forward had been turned off for that questionnaire — including when a new version was uploaded with carry-forward disabled, or the questionnaire was archived. Automations now use the questionnaire’s current carry-forward setting instead of the setting that was in effect when the automation was created.</div>
</div>

<p><span class="tag-ui">ui</span></p>

<div>
  <div>• The Vitals command now includes a “Supplemental Oxygen” field, so you can record a patient’s ongoing dependence on oxygen alongside the rest of their vitals.
    <div>
      <div>◦ It’s a single-select with three options: “Continuously depending on high oxygen flow”, “Continuously depending on low oxygen flow”, and “Intermittent oxygen consumption”.</div>
      <div>◦ Your selection is recorded as a coded LOINC value (question 88658-0, answer list LL4908-1) rather than as free text, and it appears on the committed command and in note printouts alongside the other vitals.</div>
      <div>◦ The resulting observation can be read through the FHIR <a href="/api/observation/">Observation</a> endpoint, where it is returned as a <code>valueCodeableConcept</code>. Supplemental oxygen cannot be created through that endpoint.</div>
      <div>◦ The SDK’s <a href="/sdk/commands/#vitals">Vitals command</a> does not support this field yet — plugin support is coming soon.</div>
    </div>
  </div>
  <div>• For instances with the <code>ENABLE_COLLAPSED_NOTES</code> Constance config setting turned on, opening a patient’s chart no longer auto-expands a note. A note opens only when you click it, create it, or follow a direct link to it. Commands inserted from a quality protocol recommendation now open in a note you can see, instead of landing in a collapsed background note where they appeared to vanish. The setting is off by default and an admin can turn it on under General Configuration; charts on instances without it are unaffected.</div>
  <div>• The “Submit a support ticket” link has been removed from the help menu. Support requests are now handled through either the in-app support chat bubble or the <a href="https://help.canvasmedical.com">Help Center</a>.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now subscribe to calendar and calendar-event lifecycle <a href="/sdk/events/#calendars">events</a> — <code>CALENDAR_CREATED</code>, <code>CALENDAR_UPDATED</code>, <code>CALENDAR_DELETED</code>, <code>CALENDAR_EVENT_CREATED</code>, <code>CALENDAR_EVENT_UPDATED</code>, and <code>CALENDAR_EVENT_DELETED</code> — to react when a <a href="/sdk/data-calendar/">calendar</a> or one of its events is created, changed, or removed.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="ui" />
      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed several issues with snoozing protocol cards that come from plugins. Quality measure protocol cards now show the Snooze button when the plugin allows snoozing, snoozing from the card now applies to the protocol you snoozed instead of appearing to do nothing, and the patient’s protocol list refreshes with the updated sta…

See full notes: https://docs.canvasmedical.com/release-notes/1-333-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">08.03.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-332-0/" rel="alternate" type="text/html" title="08.03.2026" />
      <published>2026-08-03T00:00:00-07:00</published>
      <updated>2026-08-02T14:25:38-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-332-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-332-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where delegating patient communication on a Review, Image, or Refer command could fail to create the follow-up task when no team was set up to own it. These commands now always create the delegated task and assign it using a clear fallback order: the responsible team when one exists, otherwise the patient’s care team lead, and if there is no care team lead, the staff member who signed the command.
    <div>
      <div>◦ Review commands (lab, imaging, uncategorized document, and consult report review) assign the task to a team with the “Communicate diagnostic results to patient” responsibility.</div>
      <div>◦ Image and Refer commands assign the task to a team with the “Coordinate referrals for a patient” responsibility.</div>
    </div>
  </div>
  <div>• Fixed an issue where changing an uncategorized clinical document’s type to a Lab or Imaging Report — whether from the patient chart or in Data Integration — left the original document active in the review queue, creating a duplicate. The original document is now retired automatically, the reviewer’s “to review” badge count updates immediately, and the edit-report modal no longer gets stuck open after switching a document’s type.</div>
  <div>• Fixed an issue where a patient’s Care Team summary appeared empty when all of the patient’s care team members were external. External care team members now show in the chart’s Care Team summary.</div>
</div>

<p><span class="tag-ui">ui</span></p>

<div>
  <div>• The Refill Requests panel’s assignee filter has several improvements:
    <div>
      <div>◦ It’s now multi-select, so you can combine options instead of choosing just one.</div>
      <div>◦ Its individual staff options now list only prescribers — the staff members a refill request can actually be assigned to.</div>
      <div>◦ Your care team is now its own filter option, split out from the “Me” and “Me and my teams” options. The refill requests badge count reflects this change.</div>
    </div>
  </div>
  <div>• The Ignore action is now available on all refill requests, not just suspected duplicates.</div>
  <div>• Labels applied to tasks — including the system-generated “Chart PDF” and “Batch Statements” labels and labels created through the FHIR API — are now scoped to the Tasks module, so they appear and are selectable in the Tasks label filter. Existing labels continue to work everywhere as before.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now show a notification badge — a count (capped at “99+”) with a bolded label — on a <code>provider_menu_item</code> scoped application’s item in the provider menu (the navigation sidebar, also called the hamburger menu), using the new <a href="/sdk/effect-application-notification-badge/">Application Notification Badge</a> effect or the <a href="/sdk/handlers-applications/#notification-badges"><code>compute_notification_badge</code></a> hook on the Application handler.</div>
  <div>• Plugins can now create, update, and mark lab reports as entered-in-error, and attach lab results (tests and values) to an existing report, through the new <a href="/sdk/effect-lab-report/">Lab Report effect</a> — supporting workflows where a report is created first and its results arrive later, such as async OCR.</div>
  <div>• Plugins can now redirect the user to an internal Canvas page or an approved external URL after an action such as signing a note, opening the destination in the same tab or a new tab, using the new <a href="/sdk/effect-redirect/">Redirect effect</a>.</div>
  <div>• Marking an appointment as no-showed from the calendar appointment card’s status dropdown now fires the <code>APPOINTMENT_NO_SHOWED</code> plugin event, so plugins that respond to no-shows trigger as expected. Previously this only fired when marking the no-show from the patient chart.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="ui" />
      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed an issue where delegating patient communication on a Review, Image, or Refer command could fail to create the follow-up task when no team was set up to own it. These commands now always create the delegated task and assign it using a clear fallback order: the responsible team when one exists, otherwise the patient’s ca…

See full notes: https://docs.canvasmedical.com/release-notes/1-332-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">07.29.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-331-0/" rel="alternate" type="text/html" title="07.29.2026" />
      <published>2026-07-29T00:00:00-07:00</published>
      <updated>2026-07-28T20:18:57-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-331-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-331-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where opening a note whose type hadn’t finished loading could crash the entire patient chart. The affected note now shows a contained error message instead, and the rest of the chart keeps working.</div>
  <div>• Commands marked “entered in error” no longer appear on a printed note or the generated full-chart PDF. They remain in the audit-trail PDF stamped to the note footer when the note is locked.</div>
  <div>• Long entries in the “Reviewed:” sections of a printed or PDF note (for example medications, conditions, and allergies) now wrap to the next line instead of being cut off at the right edge of the page.</div>
</div>

<p><span class="tag-ui">ui</span></p>

<div>
  <div>• Uncategorized clinical document / Medical Documents reviews can now be delegated to another staff member or team — with instructions and, optionally, consent to apply the original reviewer’s signature — and routed back to the original reviewer. <a href="https://help.canvasmedical.com/articles/2240101532-command-uncategorized-document-review#delegating-an-uncategorized-document-review">Learn more</a>.</div>
  <div>• Long annotations in a command’s autocomplete dropdown are now shortened with an ellipsis and reveal their full text on hover.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now block the Create Coding Gap, Validate Coding Gap, Assess Coding Gap, Defer Coding Gap, and Change Medication commands at commit time by returning a validation error from a <code>{COMMAND}__POST_VALIDATION</code> handler. See <a href="/sdk/effect-command-validation/">Command Validation</a>.</div>
  <div>• Plugins can now read Change Medication records — to a medication’s directions (sig) — through the new <a href="/sdk/data-change-medication/">ChangeMedication</a> data model, queryable by a stable identifier and reachable from a patient’s or medication’s records.</div>
  <div>• Plugins can now read document-review delegations through the new <a href="/sdk/data-document-review-delegation/">DocumentReviewDelegation</a> data model and subscribe to the <a href="/sdk/events/#document-review-delegation"><code>DOCUMENT_DELEGATED</code></a> event, which fires when an uncategorized document review is delegated.</div>
  <div>• Plugins reading a staff member’s <code>top_clinical_role</code> or <code>top_role_abbreviation</code> through the <a href="/sdk/data-staff/#staff">Staff</a> data model now get the provider’s highest-ranking clinical role (and its credential abbreviation) when they hold more than one, instead of an arbitrarily chosen role.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="ui" />
      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed an issue where opening a note whose type hadn’t finished loading could crash the entire patient chart. The affected note now shows a contained error message instead, and the rest of the chart keeps working.
  • Commands marked “entered in error” no longer appear on a printed note or the generated full-chart PDF. They r…

See full notes: https://docs.canvasmedical.com/release-notes/1-331-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">07.27.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-330-0/" rel="alternate" type="text/html" title="07.27.2026" />
      <published>2026-07-27T00:00:00-07:00</published>
      <updated>2026-07-24T09:28:40-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-330-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-330-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where recent edits to a letter or message in the patient’s timeline could be lost when you kept typing while an earlier edit was still saving. Edits now save reliably, and letters are always saved before being faxed or printed — so faxed or printed letters no longer go out with content missing or blank.</div>
  <div>• Fixed an issue where opening or bookmarking the patient portal login URL directly could show a “This page isn’t working” error. The login page now loads correctly.</div>
  <div>• Fixed an issue where scheduling availability could drop calendar holds and staff shift data when a connected Google Calendar’s cached events hadn’t been refreshed in about a month. Availability now refreshes the calendar automatically instead of falling back to incomplete data.</div>
  <div>• Fixed an issue where a refill denial could fail to send back to the pharmacy when the original refill request had a missing or zero quantity. Denials now transmit reliably in this case.</div>
  <div>• Fixed an issue where prescriptions the pharmacy had confirmed receiving could stay stuck showing as pending. Their status now reflects that the pharmacy accepted them.</div>
  <div>• When e-prescribing a prescription fails unexpectedly, the error recorded on the prescription is now a short, readable message.</div>
</div>

<p><span class="tag-ui">ui</span></p>

<div>
  <div>• Diagnosis text and ICD-10 codes are now shown in bold in the Assessment section of note printouts for the Assess, Diagnose, Change Diagnosis, Assess Coding Gap, and Resolve Condition commands.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Plugins can now read incoming refill requests — including their medication codings and the prescriptions that respond to them — through the <a href="/sdk/data-refill-request/">RefillRequest</a> data model.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="ui" />
      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed an issue where recent edits to a letter or message in the patient’s timeline could be lost when you kept typing while an earlier edit was still saving. Edits now save reliably, and letters are always saved before being faxed or printed — so faxed or printed letters no longer go out with content missing or blank.
  • Fi…

See full notes: https://docs.canvasmedical.com/release-notes/1-330-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">07.23.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-329-0/" rel="alternate" type="text/html" title="07.23.2026" />
      <published>2026-07-23T00:00:00-07:00</published>
      <updated>2026-07-22T18:44:39-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-329-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-329-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where certain imported C-CDA documents could fail to display in the C-CDA viewer. Documents whose sections omit a display name — a pattern used by some external EHRs — now render correctly.</div>
</div>

<p><span class="tag-ui">ui</span></p>

<div>
  <div>• Letters created through the Letter API now appear in the patient’s chart automatically, without requiring a page refresh — consistent with how notes created through the Note API already behave.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="ui" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed an issue where certain imported C-CDA documents could fail to display in the C-CDA viewer. Documents whose sections omit a display name — a pattern used by some external EHRs — now render correctly.


ui


  • Letters created through the Letter API now appear in the patient’s chart automatically, without requiring a pa…

See full notes: https://docs.canvasmedical.com/release-notes/1-329-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">07.22.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-328-0/" rel="alternate" type="text/html" title="07.22.2026" />
      <published>2026-07-22T00:00:00-07:00</published>
      <updated>2026-07-21T19:35:33-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-328-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-328-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where adding, removing, or switching a claim’s primary insurance could reprice line items to an outdated fee schedule rate, or to a single unit’s charge on line items with more than one unit. Line items now reprice to the rate in effect on each line item’s date of service — the payer-specific rate when insurance applies, or the self-pay rate when it doesn’t — multiplied by the billed units.</div>
  <div>• Fixed an issue where plugin application drawer icons could appear as a broken-image placeholder instead of the icon after a chart had been open for several minutes. Icons now load reliably.</div>
</div>

<p><span class="tag-ui">ui</span></p>

<div>
  <div>• The lab requisition form no longer displays the “Canvas Medical” header or the patient signature and payment-authorization section. It now presents a medical-necessity certification and an electronic signature block with the ordering provider and order date, consistent with the imaging requisition form.</div>
</div>

<p><span class="tag-sdk">sdk</span></p>

<div>
  <div>• Fixed an issue where a patient’s default practice location and default provider set through the <a href="/sdk/effect-patient/">Patient effect</a> were silently ignored — the effect returned success but the values were never saved. Both are now saved to the patient’s record whenever they’re included in a create or update.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="ui" />
      
        <category term="sdk" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed an issue where adding, removing, or switching a claim’s primary insurance could reprice line items to an outdated fee schedule rate, or to a single unit’s charge on line items with more than one unit. Line items now reprice to the rate in effect on each line item’s date of service — the payer-specific rate when insuran…

See full notes: https://docs.canvasmedical.com/release-notes/1-328-0/]]></summary>
      

      
      
    </entry>
  
    <entry>
      

      <title type="html">07.21.2026</title>
      <link href="https://docs.canvasmedical.com/release-notes/1-327-0/" rel="alternate" type="text/html" title="07.21.2026" />
      <published>2026-07-21T00:00:00-07:00</published>
      <updated>2026-07-20T20:07:03-07:00</updated>
      <id>https://docs.canvasmedical.com/release-notes/1-327-0</id>
      
      

      
      
        <content type="html" xml:base="https://docs.canvasmedical.com/release-notes/1-327-0/"><![CDATA[<p><span class="tag-bugfix">bugfix</span></p>

<div>
  <div>• Fixed an issue where assigning a task in a filtered queue reset the list to the first page. Assigning a task now keeps your place in the list.</div>
</div>

<p><span class="tag-api">api</span></p>

<div>
  <div>• Preferred names (nicknames) received through integrations are now trimmed of surrounding whitespace, and a preferred name containing only whitespace (e.g. a single space) is stored as empty instead of a blank space.</div>
</div>]]></content>
      

      
      
      
      
      

      <author>
          <name></name>
        
        
      </author>

      
        
      

      
        <category term="bugfix" />
      
        <category term="api" />
      

      
      
        
      
      
        <summary type="html"><![CDATA[bugfix


  • Fixed an issue where assigning a task in a filtered queue reset the list to the first page. Assigning a task now keeps your place in the list.


api


  • Preferred names (nicknames) received through integrations are now trimmed of surrounding whitespace, and a preferred name containing only whitespace (e.g. a single space) …

See full notes: https://docs.canvasmedical.com/release-notes/1-327-0/]]></summary>
      

      
      
    </entry>
  
</feed>
