
A faster, more connected way to manage patient conversations.
Sending a patient a message used to take you away from the inbox entirely — now it doesn't. The message composer is built directly into the bottom of the episode panel, so you can write and send messages while keeping the full patient conversation in view above you.
What's different day-to-day:
No more navigating away to a separate page to send a message
You can read the patient's history and compose your reply at the same time
Everything you're used to is still there — templates, attachments, and contact method selection — just in one place
Messages you send appear immediately in the episode timeline, keeping the full picture in one view
You may not see this directly, but a number of improvements have been made to how the inbox handles work created by messages. When you send a patient a message containing a booking link, a form, or a reply prompt, the inbox now creates and tracks each of those as separate items — meaning nothing gets lost, and the right task lands in the right inbox view at the right time.
If a patient books an appointment, cancels, reschedules, or submits a form in response to your message, the episode will automatically re-surface in the inbox so it doesn't fall through the cracks.
Every interaction with a patient — messages sent, forms completed, appointments booked or cancelled — is now recorded directly in the episode. You get a full, chronological picture of what's happened without having to piece it together from different places.
Here's the updated flow from start to finish:
Open an episode in the inbox
The message composer is already there at the bottom of the panel — no button needed to navigate away
Write your message — apply a template, invite the patient to book, or attach a file as needed
Send — you stay in the episode, and the sent message appears in the timeline above
That's it. The previous workflow, where clicking 'Send' would load a full-page builder and remove the inbox from view entirely, is gone.

The tools for building a message have been consolidated into one compact input box. Whether you're sending from within an episode or elsewhere in the inbox, the experience now looks and works the same way.
Clearer link placement: Now when adding a link, we show a box that has an assignee option and a clearer way to remove the link from the message
Preset link text: When adding a link we have preset text to prompt the patient to access the link. Saving you time typing the same label against a link.
Availability window: We’ve added the ability to specify availability windows to your patient booking invitations. When creating a booking link, you can select a date range for the slot(s). This allows you to protect immediate appointment availability and empower patients to book further into the future or only provide slots for the current week. This update gives you more control over how you deliver online booking.
Preview questionnaires: You can now preview the form before sending it to the patient. Simply select the questionnaire link option via the message builder, choose your questionnaire, and you will be shown a preview of the questions before creating the link.
This means less clicking, less switching between views, and a more consistent experience across the board between the inbox and individual messaging.
The following are exactly the same as before:
All your existing message templates and content
Contact method options (SMS, email, and NHS App for NHS practices)
Booking and questionnaire links, Attachment support and patient replies
Permissions and access controls
Find out more about how the inbox works here.
Episodes now return real persisted tasks instead of synthetic tasks, and the inbox task payload has been enriched with new fields:
{
"tasks": [ /* real persisted tasks, not synthetic */ ],
"inbox_task": {
"name": "...",
"assignee": { ... },
"triggered_by": { ... }
}
}New task type: MessageCreated — message-originated actions are now a dedicated, queryable task type.
Link-specific episode behaviour:
Auto re-open episode? | Assignee behaviour | |
|---|---|---|
📋 Form / questionnaire | ✅ Yes (where applicable) | Applies form-flow assignee update |
📅 Booking | ✅ Yes (where applicable) | Applies booking-flow assignee update |
Summary of API-level changes:
Area | Change |
|---|---|
Episode tasks | Migrated from synthetic → real persisted tasks |
Task types | New |
Episode behaviour | Link-type-specific auto re-open + assignee logic |
Admin app | Enriched task payload with |
Public API (v2) | Same enrichment, real tasks returned |

Practice staff can now add internal notes directly within the inbox, making it easier to collaborate across teams and individuals. Whether handing off a conversation or providing additional context for a colleague, internal notes keep that communication in one place without it ever being visible to patients.
Notes are composed within a patient ticket on the inbox, with a simple text area and a clearly labelled "Internal note" toolbar so it's always clear what you're writing. Once submitted via the "Add note" button, the note is saved and attributed to the admin who created it.
To make way for internal notes:
We have moved the Close button to the top of the ticket next to the priority and assignee
You can now send a message by selecting the 3 dots to the right of the assignee button

The legacy diary will be retired on 9th March 2026. From that point, the new diary is your diary.
After running successfully alongside the legacy diary and delivering consistently accurate, real-time appointment data, we're making it the one and only diary view for all practices. Thank you to everyone that helped us work out the kinks, your feedback was extremely valuable!
What you need to do before we retire the legacy diary:
Begin using the BETA diary as your primary diary view.
Familiarise yourself with the layout and filtering options.
Let us know if you notice anything that does not look correct.
The new diary offers improved accuracy, better performance, and will form the foundation for future enhancements. We strongly encourage practices utilising the legacy diary to transition as soon as possible.
The new diary will only be available for Practices using EMIS or SystmOne. If your practice user Hero without this, you will continue to use the current (legacy) diary to manage appointments.
We’ve re-designed the view to prioritise clarity on what’s booked and what’s available. We’ve also restructured the layout to provide clearer labels and flagging so that at a glance, you can see whether a booking is via video or via telephone as well as lots more private practice specific labelling.
When the diary loads, you'll immediately see every practitioner with active sessions or appointments for the day.
Filter by location to get a clear view of who's active where, or drill down into a single practitioner's schedule. It's fast, it's clear, and it's built to grow.
We've just shipped one of the most-requested improvements to the diary: colour-coded badges and labels that tell you everything you need to know about a payment's status, instantly.
Here's what you'll now see on every appointment:
Payment status — colour-coded badges with clear labels for ‘Open’ (Unpaid) and ‘Paid’ invoices give you an immediate read on the billing state for any appointment, no digging required.
Payment method — if a patient has a payment method stored against their default Stripe customer, a badge will indicate this to help streamline your practice payment processes.
Insurance — insurance badges remain clearly visible for any patient with insurance details stored against their account.
Membership status — patients with active or paid memberships have a badge displaying ‘Member’ on the appointment, so your team always knows where they stand.
If you have any questions, please contact [email protected] and we’ll be happy to help.
We’ve recently made an improvement to our EMIS availability syncing to reduce unnecessary load and improve overall performance and stability. What this means for you:
In most cases, you should see faster and more reliable availability syncing.
As part of this change, we now sync a more focused set of appointment types/slot types, based on what’s needed for booking and availability.
If you notice a specific appointment type/slot no longer syncing correctly/missing availability when it previously did, please let us know so we can check whether that slot type has been filtered out from being synced with EMIS unintentionally.
The appointment type/slot type
When you last saw it working
We can then quickly review and, if needed, re-enable syncing for that slot type.
We will release a second update in the coming weeks, which will allow you the flexibility to turn on the EMIS sync on a slot type by slot type basis via our settings. This means the power is in your hands for which appointment types are synced, with performance increasing if you reduce the number of slot types you’re syncing with EMIS.

We're excited to announce the release of our new availability service that improves the speed and reliability of EMIS/S1 appointment syncs in Hero. We’ve upgraded how Hero reads availability from EMIS/S1 to make booking smoother and more reliable for both staff and patients.
Changes you make in EMIS/SystmOne - creating slots, adjusting times, cancelling sessions - now appear in Hero within minutes, not long delays.
This significantly reduces cases where:
A slot appears online for a patient to book, but it can’t be booked
Patients get incomplete bookings - where the booking doesn't sync to the EHR
If a sync fails or EMIS/SystmOne misses an update, Hero will fix it automatically on the next refresh.
You can change availability in EMIS/SystmOne and trust Hero to follow almost instantly.
Online booking becomes more dependable for patients.
Hero stays in sync throughout the day with no manual intervention.
You can now connect Hero to Pharmacierge so you prescribe and send private prescriptions through a single, integrated workflow. The app pulls prescriber and surgery details, supports comments, and captures only the minimal data needed to complete a safe, compliant prescription quickly.
Avoid rekeying, and give patients a better experience from prescription to delivery. Go to Apps → Pharmacierge to connect your account.
You can now dispense private prescriptions via Chemist4U directly from Hero. The integration streamlines prescriber lookup, ensures accurate GMC and surgery details in the payload, and keeps medication and codes aligned to practice standards.
This matters because you save time and reduce errors, with reliable updates on prescription status. Go to Apps → Chemist4U to connect your account.
QuickConsult V2: You can conduct and record faster, lighter consultations with a streamlined editor and better defaults
SignatureRx: You can configure and manage SignatureRx with a clearer layout and fewer clicks
Consultation coding: You can add SNOMED and attachment codes so records stay consistent across systems
Admin Portal: Give admin option to deselect prescriber (nullify) so you can clear the prescriber when it no longer applies
Admin Portal: Managing prescription states on a table so you can view, sort, and act on prescriptions at a glance
Admin Portal: Revamp SignatureRx app page for clearer setup and faster navigation
API: Add default attachment code for consultation adapter to keep records and external systems aligned
API: Add default attachment code for xml in Emis so attachments save with the correct code
API: Add EMISProxy client to availability service so you can route slot checks via a dedicated client
API: Add check_ehr_direct and check_hero_unavailable flags to /api/v1/slots/available/:uid so you can control direct EHR checks per request
API: Check slots_for_session if check_ehr_direct is true to confirm real-time availability
API: Create availability service client in Typescript and Ruby to standardize access across apps
API: GetPatientDemographics - call errors/timeouts investigation to improve reliability and timeouts handling
API: Logic to check slots_for_session in EMISProxy to ensure bookings use current EHR state
API: update XML for new consultation element to keep EMIS records structured and current
API: Add code element for attachments in consultations xml so downstream systems can classify files
Stripe: Remove “Subscriptions” and rename “Invoicing” to “Stripe” for clearer billing navigation
Database: Refactor patient object for tasks inside episodes list to simplify loading and reduce queries
Database: Refactor preload taskable associations for episodes to improve list performance
Database: Remove slots from the past to keep scheduling data current
Database: Remove unavailability from the past to declutter diaries and searches
Database: Store oc_submission_type on care_nav_submission for better reporting and auditing
Element: Prescription builder only needs minimal info on screen so you can prescribe faster with less clutter
Element: QuickConsult V2 delivers a streamlined consultation flow with clearer saving to record
Element: Add a SNOMED code to the consultation so you can code structured data at the point of care
Element: Attach a file to the consultation from device to enrich the clinical record
Element: Review content in quick consult being saved to record to ensure generated outputs meet clinical standards
Feedback: Front-end improvements from internal feedback for smoother navigation
Interface: Add loader/spinner to diary page so users see progress while data loads
Interface: Ensure BP readings display without spaces (e.g., 120mmHg) for consistency
Interface: Minimise suggested codes panel in quick consult with a collapse control to reduce noise
Interface: Order Prescription app table by name (alphabetical) to locate users faster
Interface: Update toast messages to accurately describe errors and next actions
Interface: Convert over to the new design for a more consistent UI
Performance: Investigate slow EMIS connections to lower timeouts and retries
Performance: Measure impact to verify improvements and guide next work
Performance: Monitor current calls and general performance within server to catch regressions early
Performance: Remove slots last updated much earlier than peers to prevent skewing sync
Performance: Synchronous EHR availability slot check to prevent booking into stale capacity
API: Fix the episode’s controller index so episode lists load reliably
API: Fix file name for attachments in consultation to preserve original names
API: GetMedicationIssues on prescription resolved to restore end-to-end prescribing
Appointment Booking: Issue booking appointments after new year now resolved
Bug: Booking/reservations bug on bookings.herohealth.net resolved
Bug: S1 – Attachments not saving correctly to record now save as expected
Bug: SignatureRx accounts not appearing in dropdown in edit mode now visible
Editor: Fix attachment not saving to record for consultations; files persist with the encounter
Editor: Quick consult element save-to-record error for S1 resolved
Forms: Basic health data form validations on patient side corrected to prevent incomplete submissions
Incident: App crashes from memory leak on api/inbox/tasks#index resolved; stability restored
Interface: Prescriber PIN dialog adds required terms statement for compliance
Interface: Empty CSV when downloading appointments fixed
Interface: Appointments table export restored
Interface: Stripe showing payment but invoice unpaid corrected

Accept Jersey mobile numbers for booking authentication so patients sign in reliably with their real number. The flow validates Jersey formats and uses the correct routing for SMS codes. You reduce duplicate records created when patients previously used multiple emails.
This matters because it improves access and keeps patient records consistent. Jersey support is on by default in Patient Services self‑booking. Review copy and settings in Settings → Patient Services. Available today on all plans.
Patient service: Update self-booking flow wording for security code to better explain Jersey support
Booking links: Patient-specific booking links now list appointment types alphabetically in the builder
Feedback: Adjust spacing on desktop confirmation screen based on NHS standards
Patient dashboard: Patient appointments list shows correctly without needing a status filter
Interface: Standardise table button order
Interface: Align table button behaviours across views
Interface: Support in-place editing for tables
Search: Filter out past slots from availability views
Settings: Update prescriber selection to write new admin name/email fields
Settings: Add a feature flag for Chemist4U
API: Fix completion check to use unique recipientId when counting BulkOperationExecution
API: Resolve XML long-text handling for save-to-record
API: Update practice group API to save User ID to prescription_partner_credentials
Appointment Booking: Restore appointments visibility in booking flows
Appointment Booking: Send correct reminders for telephone appointments
Batch Messaging: Show campaign cancellation list reliably
Batch Messaging: emails display correctly for partner batch messages
Billing: Mark paid invoices as completed, not draft
Bug: Align slot lengths between Hero and EMIS
Bug: Invoice transactions no longer show as draft
Database: Fix form response to read from correct data source table
Forms: Match EMIS questionnaire field order to the original form
Forms: Ensure forms save to EMIS reliably
Forms: Allow manual questionnaire saves without errors
Forms: Respect original form order for Questionnaire/Care Navigation responses
Forms: Prevent save when SNOMED codes are missing or misapplied across answers
General: Fix miscellaneous issues improving overall stability
General: Lewisham (Sexual Health) PG 212: Restore visible slots in Rails patient booking
Individual Messaging: Havering North PCN: Allow affected admin to send messages again
Notifications: Restore automated patient mailers
Partner Issue: Resolve webhook 404 responses
Patient services: Accept Jersey mobile numbers without errors
Patient services: Fix booking link so it works consistently with the QR code
Prescriptions: Prevent “error loading application” message in prescription builder

We're excited to introduce the new Match with EHR feature, designed to make reconciling patient registration even easier and improve data connectivity between Hero and your EHR system.
Visual indicators: Patients without valid EHR IDs now display an "unregistered" badge across all patient contexts
System-wide visibility: The unregistered status is visible in your inbox, appointments, communications; wherever a patient is in context.
Smart matching: The system automatically attempts to match patients based on demographic details
Confirmation process: When a potential match is found, you'll see a review screen displaying patient information before confirming the match.
One-click action: Simply click "Match with EHR" above the patient's name to initiate the process
Fallback Option: When automatic matching doesn't find a result, you can manually search using EMI ID
Easy Input: Enter the patient's EMI ID into the search box and click submit
Verification Step: The system displays patient information for final confirmation before establishing the link
Secure Matching: Click "Match" to complete the connection and unlock additional patient information
Reduces administrative overhead by identifying unlinked patients at a glance
Improves data accuracy through verified patient matching
Ensures comprehensive patient records by maintaining proper EHR connections
Streamlines workflow with accessible matching tools throughout the platform
The Match with EHR feature is now available across all patient contexts within Hero, including inbox, appointments, and communications.

We're excited to introduce team-based filtering to Hero's inbox system! This update eliminates the "everything goes to unassigned" problem by allowing you to organize and view messages by team.
A single navigation to mange your workflows
Quickly glance at the number of actionable items in each view or team
Filter your inbox by selecting specific teams
Quickly focus on requests, appointments and messages relevant to your team's wor