Skip to main content

Week of September 6: API keys and a developer reference, calendar subscriptions, role permissions at a glance

Your appointments can now show up in Apple Calendar, Outlook, or any calendar app that takes a subscription link. Session recordings now warn you before uploading silence and ask before running on past a session's end. Clinicians with full client list access read every note but change only their own, and the clinician levels have clearer names.

New

  • Start-time settings speak plainly. The old "Start Time Alignment" is now "Appointment start times": on the hour, on the half hour (9:00, 9:30), on the quarter hour, or based on service duration. The same wording appears in Online Booking, the availability setup, and each service's override.

  • Turn on telehealth in one click. Under Settings, Practice, a practice with no video location sees Telehealth: Off and a Turn on button that adds a Video Office ready for availability and appointments.

  • No more invisible 9 to 5. A clinician who never set hours now shows every day off in Online Booking, and nothing is bookable until hours are set. Before, an unset grid quietly offered Monday to Friday 9 to 5.

  • New practices start with their service list ready. The default services are created at sign-up instead of on the first page that needed them.

  • The availability schedule reads like your calendar. Same Today button, arrows, date title, and Month/Week/Day control in the same places, with a banner on top so you know you are editing availability. Each office marks its blocks with a soft color you can pick under Settings, Practice, edit location. On Settings, Online Booking, clinicians on availability blocks now see one Availability card instead of two.

  • The calendar's availability menu is now two short groups. Under the gear icon (it was a clock until this week), Calendar settings holds your availability schedule, Show or Hide availability, and Calendar sync and preferences. New client request settings holds New client status, a side panel with your Accepting new clients switch (turn it off and new clients stop seeing your open times on the booking page and the website widget; existing clients can still request; owners and managers see every clinician's switch there), and Appointment request settings, a side panel with the practice-wide request switch, a prescreener reminder, and whether new individuals and couples may request.

  • Client notes. Client Info has a Client notes box under Preferred language for non-clinical reference notes about a client, visible to everyone with access to the chart. Couples and families have it too. Imports from other systems put anything without a field of its own here, one labeled line each.

  • Race & Ethnicity, gender identity, and pronouns on the client record. Client Info's optional section now has a single Race & Ethnicity checklist (including Hispanic or Latinx and Middle Eastern or North African) with a details box, a gender identity field, and pronoun options that accept the client's own words when the list doesn't fit.

  • Preferred language on the client record. Client Info has a new Preferred language field, under Race & Ethnicity, so a client's language and any interpreter need are on the chart where you look for them. Imports from other systems fill it in automatically.

  • Apple Calendar and other apps. Settings → Calendar has a new Apple Calendar and other apps section. Click Create calendar link, copy the link, and add it to Apple Calendar, Outlook, or any app that can subscribe to a calendar by URL. Your appointments and blocked time appear there read-only, from 30 days ago to a year ahead, with client names shown as initials only. Cancelled appointments drop off on the app's next refresh. Reset link replaces the link if it is ever shared; Turn off stops it. Step-by-step setup for iPhone, Mac, Outlook and Google is in Apple Calendar and other apps. If you use Google Calendar, Google Calendar sync remains the faster, two-way option.

  • A recording that heard nothing tells you before uploading. If you stop a recording and the microphone never picked up speech, you now see "We didn't hear anything" with the option to check your device and record again, or upload anyway. Before, the silence went to transcription and came back an hour later as a failure. Earlier than that, a small Not hearing anything yet banner appears beside the level meter about 45 seconds into a quiet recording and clears itself when sound arrives.

  • "Still recording?" after a session ends. If a recording runs past the appointment's scheduled end and nothing has been heard for eight minutes, a prompt appears and the recording stops and processes on its own two minutes later unless you choose Keep recording. Recordings started without an appointment get the same prompt after twenty quiet minutes. This keeps a forgotten recording from capturing whatever happens in the room next.

  • See exactly what a role can do while you pick it. When you invite a team member or edit someone's role, a panel beside the checkboxes lists what each selected role can do — client care, billing, operations, supervision — and whether it covers the entire practice or just their clients. It updates as you change roles, and the additional permissions you grant appear underneath. The same list is checked automatically against the access rules the server enforces, so it cannot drift from what actually happens.

  • API keys and a developer reference. Practice owners can create API keys and connect their own software, or a trusted vendor, to their practice's data over a standard FHIR API. The key page is reached from the developer reference rather than the settings menu, so it never appears for practices that don't need it. Each key sees only that practice's clients, appointments, invoices, payments, and insurance coverage, never notes, transcripts, or questionnaire answers. Keys are read-only or read + write and can be revoked at any time. The reference, with authentication steps and examples, is at developer.practiceharbor.com; the help page is API access.

Improved

  • Requests has its own page. Appointment requests from new clients and from existing clients now share one Requests page in the left menu, with a warm-colored count of pending ones. Pending and Archived tabs, filters by clinician, client kind and source, Accept on the row, and a side panel with the full request. It replaces the request icon in the calendar header and the request card above the calendar; clicking a pending tile on the calendar opens the request.

  • Accepting a request starts with nothing ticked. The intake-document picker that opens after Accept no longer pre-selects your default questionnaires, consents, files, measures, or the demographics and card-on-file forms. You choose every item with the request in view. Sending intakes from a chart still starts from your defaults.

  • Accepting a new client books the time. Before, accepting a new-client request that named a time left it waiting for a second approval on the calendar. Accept now puts it on the calendar as booked.

  • A tidier calendar header. Month/Week/Day first, then the clinician filter, then a labeled Privacy toggle attached to the settings gear. Privacy on shows client names as initials for a shared screen, and now abbreviates calendar events the same way, including events synced from Google Calendar; the label tells you which state you are in.

  • Insurance payments list each session on its own line. When one claim covers several sessions for a client, the payment page used to show a single line dated with the first session and every code run together. It now shows one line per date of service with that session's codes, billed amount, insurance paid, and write-off, the way the payment report itself reads. When you edit the payment, the amounts still apply to the claim as a whole, and the per-session breakdown appears beneath in grey.

  • The CMS-1500 shows who rendered the service. The claim form's Box 31 now names the rendering clinician and Box 24J shows their NPI, on screen and in the PDF, so you can confirm which NPI a claim goes out under before you send it.

  • The payer list tells you where each enrollment stands. Settings → Payer Enrollment now shows two columns per payer, because payers can require a separate enrollment for each: Claim filing (whether you need an enrollment before sending claims electronically — most commercial payers say "No enrollment required", Medicaid plans often need one) and Payment report (your remittance enrollment, where Accepted is the goal). The statuses read in plain words — Submitted, Pending, Action required, Accepted — instead of the clearinghouse's own codes. The old ERA Auto-Post column is gone: remittances always post to the matching sessions once a payment report enrollment is accepted, and you can still record any payment by hand.

  • Clearer names for the clinician levels. The four clinician levels are Clinician with basic access, Clinician with billing access, Clinician with full client list access (formerly Standard Clinician), and Clinician with entire practice access. Under the Clinician checkbox they appear as Basic, Billing, Full client list, and Entire practice, each with a one-line description of what it does here. Nothing about anyone's access changed.

  • Claims now tell you whether the payer accepted or rejected them. Checking a claim's status first reads the clearinghouse's own record of what happened to it. A claim the payer has taken in for processing now shows Accepted; one the clearinghouse or payer turned back shows Rejected with the reason in plain words, so you can fix and resubmit the same day instead of discovering it weeks later. This works for every payer, including those whose real-time status line does not answer.

Fixed

  • Payment reports now match their claims. A payer that sends the claim number back in a different letter case, or writes dates in a different form, used to leave the payment sitting as "unmatched" with no claims to pick from. Matching now handles both, the payment is linked to the payer so the allocation list fills in, and a payment that was posted before a claim could be matched attaches to it on the next check instead of staying unallocated.

  • A bundled claim showed the whole payment on every session. On the client's Billing page, a claim covering two sessions showed the full insurance payment and write-off on each session. Each session now shows only its own share.

  • Editing an insurance payment no longer drops its payment report. Saving an edit on a payment that came from a payment report removed the link to that report, which also made the EOB download disappear. The link is kept now.

  • Add-on codes booked in advance stayed off the claim. If a session was booked with an add-on such as interactive complexity, the nightly step that readies charges for billing only readied the main service, so the claim went out without the add-on. Every charge on the session is readied now.

  • Awaiting Payment no longer lists sessions insurance already paid in full. When a client owes $0 on a session because insurance covered it, the invoice now closes as paid when you record the insurance payment or the payment report arrives, and the Billing dashboard's Awaiting Payment queue only shows invoices with a balance still due.

  • Creating a claim no longer stops to ask whether the client attended. Past sessions you did not cancel or mark as a no-show are treated as attended, the same way the calendar already shows them. Creating the claim is your confirmation. Mark no-shows before you file, as always.

  • New appointments take their length from the service. The New Appointment form now starts at your default service's duration from the Fee Schedule, and switching to a different service updates the end time to match, so a 15-minute consult no longer opens as 50 minutes. If you set the end time yourself, your time stays put when you change services.

  • New appointments default to the client's primary clinician. In a group practice, choosing a client on the New Appointment form now sets the clinician to that client's primary clinician, so a session booked for a colleague's client lands on the right calendar. If you pick a clinician first, your choice stays.

  • The New Appointment form leads with the client. The client search is now the first field, and the Clinician field sits under the time row, pre-filled from the client, followed by Location and Recurring. Group practices no longer pick a clinician from a dropdown before they can search for the client, and when only one person can be the clinician the field shows that name greyed out instead of a dropdown.

  • Your custom service rates now apply when you book your own sessions. If your practice set custom rates for you under Team → Edit member or you set them under My Rates, new appointments you schedule for yourself now start at those rates. Before, the practice's standard rate filled in for clinicians who could only book their own clients, and the custom rate only appeared when an owner or scheduler booked on their behalf. Sessions already on the calendar keep the fee they were booked with; edit the fee on the appointment to change it.

  • Practice owners can search any client when scheduling. On the New Appointment form, an owner's client search now covers the whole practice, with their own clients listed first, so a colleague's client can be found by name and the Clinician field fills in from that client's primary clinician. Clinicians with their own client list still see just their own clients.

  • Full client list access: reads every note, changes only their own. The Standard Clinician level could edit, sign, or unlock any colleague's note, which was never what the roles table said. These clinicians still see every client, schedule, and chart, still read every note, and still bill any client from that client's chart. They now change only the notes they wrote, and their Billing dashboard shows their own caseload. Owners, supervisors, and practice managers are unchanged.

  • Empty or silent recordings fail in seconds, with the real reason. A recording that came back from transcription with no speech used to sit on "transcribing" for about an hour and then fail with a message blaming the transcription service. It now fails within seconds and says no speech was detected. Related: a finished note produced up to three success toasts; it is now one.

  • Treatment plan showed "Unknown Diagnosis" for a diagnosis that was still on the chart. If a client's diagnoses were edited and re-saved right after a treatment plan was created, the full plan could lose track of them even though the plan's preview still listed the codes. The plan now finds the matching diagnosis on the chart on its own, and a diagnosis that truly no longer exists shows its last known name marked "no longer on chart" so you can re-select it. Deleting a diagnosis that a treatment plan still uses is now blocked from every place it can be deleted, with a note naming the plan.

  • Deleting something another record still depends on is now blocked, with the reason. The same kind of broken link could be created in a few other places, so those are closed too: marking a group member absent or removing them from a session when a progress note already exists for them, deleting a client contact who is the policyholder on an insurance coverage or has signed a treatment plan, deleting a note template that saved notes still use, and deleting a claim that has a write-off or a secondary claim built from it. Each shows a message saying what to handle first. Deleting a returned note also clears it from the Returned and Submitted counts, and a treatment plan's summary card shows the last known name of a diagnosis that was removed from the chart instead of an internal id. Turning off custom hours for a location now cleans up after itself, and keeps the hours on if a booked or blocked time still sits on them.

  • A payer that does not answer status requests no longer shows as an error. Some payers accept claims but never respond to real-time status checks. Check Status now reports what the clearinghouse knows and notes that the payer's line did not answer, instead of failing.

  • Filing under your own NPI no longer gets rejected. When a clinician bills under their own individual NPI, the claim listed them a second time as the rendering provider, which the clearinghouse rejects. That duplicate is now left off automatically.