Resources
No-Show Follow-Up in Canvas Medical
By Federico Ruiz Cassarino, CEO and founder, Puppeteer AI · · 6 min read
A no-show follow-up is only as good as its definition of a no-show. Contact the wrong group and you're apologising to people who cancelled properly, or chasing appointments that were never real.
Canvas gives you enough resolution to get this right, which not every EHR does. The work is in reading its statuses precisely.
The nine statuses, and what separates them
A Canvas appointment carries a status drawn from a fixed set: proposed, pending, booked, arrived, checked-in, fulfilled, cancelled, noshow, and entered-in-error.
Four of these matter for follow-up, and three of the four are routinely confused.
- noshow. The one you want. The appointment was booked, the time passed, the patient didn't come and didn't cancel.
- cancelled. Not a no-show. The patient told you. Depending on when they told you it might still be worth a conversation, but it's a different conversation, with different framing, and mixing the two is how a recovery campaign starts sounding accusatory to people who did the right thing.
- entered-in-error. The appointment shouldn't exist. Someone booked it by mistake and it was retracted. Not a cancellation and not a missed visit, but an administrative correction, and anyone in this bucket should never be contacted about it.
- fulfilled. The visit happened and is closed out. Straightforward, and worth naming because it's the state your recovered patients should end up in.
That leaves proposed, pending, booked, arrived and checked-in describing appointments that are upcoming, in progress, or awaiting confirmation. None of them are terminal.
Filter on noshow alone and the campaign is honest. Filter on "not fulfilled", the shortcut people reach for, and you will contact patients whose appointment is next Tuesday.
arrived and checked-in are not redundant
These two look like duplicates and aren't. arrived means the patient is physically there. checked-in means the front desk has processed them.
For no-show purposes the gap rarely matters. For measuring it does: an appointment sitting at arrived long after its start time usually means a workflow that stalled, not a clinical delay, and it's a signal that gets lost if you collapse the two states into "showed up."
Reading a patient's history
Follow-up needs context. Someone who missed one visit in two years and someone who has missed four in six months warrant different handling, and Canvas will tell you which is which.
The query is patient-scoped with a date range: GET /Appointment?patient=Patient/{id}&date=ge{start}&date=le{end}.
The date key appears twice rather than taking a range object, once carrying a ge prefix for the lower bound and once le for the upper. An HTTP client that quietly folds repeated query keys into one will send a single bound, hand back a far larger result set than you asked for, and give no sign that anything went wrong.
What comes back is a FHIR bundle, with the appointments listed under entry and each one wrapped in its own resource.
From that history you can derive the things that actually shape the outreach: how many prior no-shows, whether they've rebooked before, whether the pattern is concentrated in one provider or one time of day. That last one is more actionable than it sounds. A patient who only misses 8am slots isn't unreliable, they're unavailable in the morning, and the right response is a different appointment time rather than a firmer reminder.
A no-show is not a portable concept
If you run more than one EHR, or you're comparing systems, it's worth knowing how unusual Canvas's precision here is.
Canvas gives no-show its own status, distinct from cancellation and distinct from an erroneous booking. Medplum, also FHIR, does the same and adds a waitlist state on top. Healthie takes a different route entirely: appointment state is a free-form string field alongside a separate confirmation boolean, so "missed" is whatever string your practice settled on rather than a value the API guarantees.
And athenahealth has no no-show status at all. Its appointment states are single characters, and a missed visit ends up indistinguishable from a cancellation unless something outside the status field records the difference.
The practical consequence: a no-show report built on one EHR does not mean the same thing as the identical report built on another, and the numbers are not comparable across systems even when both say "no-show rate." Anyone benchmarking a multi-site organisation running mixed EHRs is measuring at least two different things.
On Canvas specifically, the definition is clean enough that the number is trustworthy, as long as staff mark it consistently, which is the constraint that survives every EHR.
The follow-up decision, honestly
Not every no-show should be contacted, and the useful distinctions are ones Canvas gives you the data for:
- First-time, otherwise reliable. Rebook offer. This is the group where recovery rates are highest and the conversation is easy.
- Repeat, with a pattern. Worth a human call rather than an automated message, and worth changing what you offer rather than repeating it.
- Repeat, no pattern, no response. At some point continued outreach costs more than it recovers. Deciding where that point is a practice policy question, not a technical one, but the data to make the call is in the appointment history.
- cancelled or entered-in-error. Not this campaign.
What you need on your side
- Canvas API credentials. For your organization.
- A trigger. An appointment doesn't become a no-show at a moment Canvas announces. It becomes one when staff mark it. Your follow-up runs off that status change, so you need either a scheduled sweep for recently-marked no-shows or an event feed you subscribe to.
- Contact history. So a patient isn't messaged twice about the same missed visit by two different workflows.
- A rebooking path. Which means slot availability. That's the
/Slotand/Schedulepair covered in filling cancelled appointments on Canvas.
Honest limits
- The status depends on staff marking it. An appointment nobody attended and nobody updated stays
bookedforever. Practices with inconsistent front-desk habits will have a no-show rate that looks better than reality, and a follow-up campaign that silently misses people. - There's no reason attached. Canvas records that the appointment was missed, not why. Anything about transport, cost, or the patient forgetting comes from asking them.
- No waitlist state. Canvas's status set carries no
waitlistvalue, so the patients you'd offer a recovered slot to can't be marked as waiting inside the EHR. - Timing is a judgment call. The API tells you when the appointment was, not when the patient realised they'd missed it. Same-day outreach recovers more and annoys more; the balance is yours to find.
Sources
About the author
Federico Ruiz Cassarino is the CEO and founder of Puppeteer AI, the company behind Recupra. He works with clinic operators on the scheduling and outreach problems that decide how much of a practice's booked capacity turns into revenue. Connect on LinkedIn.