Install & activate
Alnora is a standard WordPress plugin. The free core (alnora-clinic) is free to download from our site; Pro and Clinic add every advanced feature on top of it.
Install the Pro plugin
- After purchase you receive a alnora-clinic-pro.zip file and a licence key.
- In WordPress go to Plugins → Add New → Upload Plugin, choose the zip and click Install Now, then Activate.
- On activation Alnora creates its database tables, the Patients, Doctor and Receptionist roles, and a “Book an Appointment” page containing the booking shortcode.
- A new Alnora menu appears in the WordPress admin sidebar.
Already running the free version? Just install Pro on top — it detects the free plugin and takes over automatically. Your doctors, services and appointments are kept.
Licence, plans & updates
Pro and Clinic unlock identical features — the only difference is how many sites the licence covers (Pro = 1 site, Clinic = up to 3). Licensing is handled by Freemius, our checkout and licence provider.
Activate your licence
- After purchase, Freemius emails you a licence key and a link to download the Pro plugin.
- Install and activate the plugin (see Install & activate).
- Open Alnora → Account and click Activate licence, then paste your key — or use the activation prompt shown after the plugin is activated.
- Once activated, every Pro feature unlocks and the plan name (Pro or Clinic) shows on the Account screen.
Updates
With an active licence, Pro updates appear automatically under Plugins in WordPress, just like any other plugin — no manual downloads needed. Keep the licence active to keep receiving them.
Managing your sites
Your licence covers a set number of activations (Pro = 1, Clinic = up to 3). You manage them from your Freemius account:
- See which sites are using the licence and how many activation slots are left.
- Moving to a new site? Deactivate the licence on the old site first — from Alnora → Account → Deactivate, or from your Freemius account — so you don’t use up a slot.
- Download invoices and manage your subscription / renewals from the same account.
An active licence is required for Pro to run. Your subscription renews automatically, so it just keeps working. If a renewal isn’t paid the licence lapses and the Pro features stop working until you renew — renewing reactivates them immediately.
Free, Pro & switching between them
Alnora comes in two editions that are the same product — they share the same code, database tables, roles and settings, so you can move between them without losing anything:
- Free — the core plugin, installed from WordPress.org. It updates from WordPress.org like any other free plugin.
- Pro / Clinic — the free core plus every advanced feature, delivered through Freemius with your licence. It updates automatically while the licence is active.
Run one edition at a time on a site. Alnora deliberately won’t run Free and Pro together — activating one deactivates the other — because they share the same code, tables and admin menu. Keep a single edition active per site.
Upgrading from Free to Pro
Install Pro on top of the free plugin (see Install & activate). It detects the free version, takes over automatically and keeps all your doctors, services and appointments — then activate your licence (see Licence, plans & updates).
Switching from Pro back to Free
If you ever move a site from Pro down to the free edition, remove Pro completely first — deactivating on its own is not enough:
- Open Alnora → Account → Deactivate to release your licence from this site, so you don’t use up an activation slot.
- Go to Plugins and Deactivate, then Delete the Pro plugin — don’t leave it merely deactivated.
- Install and activate the free plugin from WordPress.org. Your data is untouched.
Free version still showing a “Pro” plan, or offering a “Pro” update? That’s leftover licence information Freemius stored on the site — it happens when Pro was only deactivated (not deleted), or when both editions were installed on the same site at once. Because the two editions are the same Freemius product, the licence record can linger and the free plugin reads it. Deactivate the licence and delete the Pro plugin as above; the free version then shows no plan and updates only from WordPress.org. If it still appears, contact support and we’ll help you clear the residual licence data.
First-run setup checklist
A sensible order to get a clinic live in about 15 minutes:
- Alnora → Settings → General — set the clinic name, timezone, currency and language.
- Alnora → Doctors — add at least one doctor and set their working hours.
- Alnora → Services — add the services patients can book, with duration and price.
- Alnora → Settings → Booking rules — set slot interval and how far ahead patients can book.
- Settings → Email & reminders — set the “From” name/address and reminder lead time.
- Open the “Book an Appointment” page and place a test booking.
Everything else (payments, SMS, calendar sync, telehealth) can be switched on later from the relevant settings tab.
Booking & portal pages (shortcodes)
Alnora is embedded with two shortcodes (each also available as a Gutenberg block):
[alnora_booking] — the patient-facing booking wizard.
[alnora_portal] — the patient self-service portal (appointments, documents, account).
Tell Alnora which page holds each shortcode
Under Alnora → Shortcodes, map each shortcode to the page that contains it. Alnora uses these to build links in emails (e.g. the cancellation link) and the portal — so keep them pointing at the page that actually has the shortcode.
The “Book an Appointment” page is created for you on activation, so the booking page is usually set already.
Embedding & pre-filtering
Drop [alnora_booking] onto any page or use the Alnora Booking Form block. The wizard walks the patient through: location → doctor → service → date & time → details.
Pre-filter with attributes
Restrict the form by ID using the optional doctor, service and location attributes. Each accepts a single ID or a comma-separated list:
[alnora_booking doctor="3"] — only Dr #3.
[alnora_booking service="1,2,5"] — only these services.
[alnora_booking location="2" doctor="3,4"] — combine any attributes.
Auto-skip: any step whose options narrow to a single choice is skipped automatically. So if doctor, service and location each resolve to one, the form opens straight on the date & time step.
Locations follow the doctor: when you pre-filter by doctor, only the locations those doctors actually work at are offered — so a patient can’t pick a branch where nobody is available. A doctor with no locations assigned is treated as working everywhere. If just one location is left, the location step disappears.
Searching doctors & services
If your booking form lists a lot of doctors or a long service menu, you can let patients type instead of scrolling. Turn on Doctors search and/or Services search under Alnora → Settings → General → Feature toggles — each is a separate switch, so you can enable whichever list is long.
- A search box appears above the list on that step, and filters as the patient types.
- Doctors search matches the doctor’s name, specialisation, sub-specialisation and category.
- Services search matches the service name and its category.
- The box only appears when there are at least two options to search through.
Working with the category filter
Search and the category filter narrow the list together rather than fighting each other: the chips filter first, and the search looks within the selected category. Switching category clears the search box, so you never land on an empty list because of a term you had forgotten was there.
With only a handful of doctors or services, leave these off — a search box over a short list adds a step rather than saving one. Both are off by default.
Booking rules
Under Alnora → Settings → Booking rules you control how the calendar behaves. The first day of the calendar week follows your site’s own Settings → General → Week Starts On, so it always matches the rest of WordPress.
- Slot interval (min) — the granularity of time slots (e.g. 15, 30).
- Min. advance (hours) — how soon before an appointment a patient may still book.
- Max. advance (days) — how far into the future booking is allowed.
- Min. cancellation notice (hours) — how late a patient may cancel from the portal.
Recurring tip: for monthly or multi-week repeats, make sure Max. advance (days) is large enough to cover the furthest date, or the later repeats fall outside the window and are skipped.
Form fields (core & custom)
The final “Your details” step collects exactly the information your clinic needs. Everything is managed under Alnora → Settings → Form, split into Core fields and Custom fields.
Core fields
These ship with Alnora. For each one you can edit its Label, and (where allowed) toggle Enabled and Required.
- Full name (
name) — always shown and always required.
- Surname (
surname) — an optional second box for the family name, off by default. Enable it and the booking form collects the surname separately; it is stored and shown together with the name everywhere (records, appointments, invoices, emails).
- Email (
email) — always shown and always required (confirmations are sent here).
- Phone (
phone) — optional field; toggle it on, and choose whether it’s required. Needed if you send SMS/WhatsApp reminders.
- Reason for visit (
reason) — optional free-text note; toggle on/off and required on/off. This note is kept private and is excluded from Zapier webhooks.
- Medical files (
medical_files) — lets patients attach files at booking; toggle on/off and required on/off. Uploads are saved to the patient’s medical record and shown in their portal. Custom File upload fields, by contrast, are stored with the appointment only — not added to the record or the portal.
Medical files options (shown when that field is enabled): Max size per file (MB) (1–64), Maximum number of files (1–20), File types mode — Allow only these or Block these — and the Extensions list (default pdf, jpg, jpeg, png, doc, docx).
Uploaded files are private. Anything patients upload — through Medical files or a custom File upload field — is kept in a protected location, not a public /wp-content/uploads/ URL, and opens only through a signed link for your staff and the patient it belongs to. Existing uploads are moved there automatically on update.
Custom fields
Add any extra fields you need with Add field. Each custom field has:
- Label — what the patient sees.
- Token ID — a unique id (e.g.
company_name) you can drop into email templates as {company_name}. Each id must be unique.
- Type — see the list below.
- Required — whether it must be filled in.
Field types
- Text — single line.
- Textarea — multi-line text.
- Dropdown — choose one from a list (needs Options).
- Checkboxes — choose several from a list (needs Options).
- Radio buttons — choose exactly one (needs Options).
- Phone — telephone input.
- Email — validated email input.
- Number — numeric input.
- Date — date picker.
- Time — time picker.
- Checkbox (yes/no) — a single tick box, e.g. for consent.
- File upload — one or more attachments.
Type-specific options
- Dropdown / Checkboxes / Radio — add each choice under Options (use Add option); remove any with the ✕.
- File upload — set Max size per file (MB), Maximum number of files, the File types mode (Allow only these / Block these) and the Extensions list.
Custom-field answers are saved with the appointment and shown on its record. Include them in emails individually with their {token_id}, or list them all at once with the {custom_fields} token.
Styling the widget
Match the booking form to your brand under Alnora → Customization.
- Font family — pick from Montserrat, Inter, Roboto, Open Sans, Lato, Poppins, Nunito, or load your own via a Custom… font name + embed URL.
- Font size — Small, Medium or Large.
- Colours — brand accents, backgrounds, borders, text and status colours.
- Corner radius — Sharp, Default, Rounded or Pill.
- Card shadow — depth of the widget’s cards.
Adding doctors
Go to Alnora → Doctors → Add doctor.
- Add a photo, name, specialisation and (optional) sub-specialisation and bio.
- Set the languages the doctor speaks, shown to patients on the doctor step.
- Save — the doctor immediately becomes selectable in the booking form (unless filtered out by a shortcode attribute).
Free, Pro and Clinic allow unlimited doctors.
Working hours, breaks & holidays
Each doctor has their own schedule, edited on the doctor’s profile.
- Working hours — set start/end times per weekday; days left empty are days off.
- Breaks — block lunch or admin time so no slots are offered then.
- Days off & holidays — block specific dates (vacation, public holidays).
The booking calendar only offers slots that fall inside working hours, outside breaks, away from blocked dates, and that aren’t already taken.
Team roles & permissions
Alnora adds three roles so each team member sees only what they should:
| What they can do | Administrator | Receptionist | Doctor |
| Appointments & patients | Full | Full | Own only |
| Add a booking (phone / walk-in) | ✓ | ✓ | Own diary |
| Send payment links | ✓ | ✓ | ✓ |
| Download the invoice PDF | ✓ | ✓ | ✓ |
| Issue refunds | ✓ | ✓ | — |
| Medical records | ✓ | — | ✓ |
| Clinic settings & configuration | ✓ | — | — |
Assign a role from the normal WordPress Users screen when creating or editing a user.
Doctor self-service
A user with the Doctor role can sign in and see their own information, without any access to the rest of the clinic:
- A read-only My profile page — their details, locations, working hours and days off.
- A My services page listing what they can be booked for.
- The Appointments list limited to their own bookings, not the whole clinic diary.
- The Record button and medical-record details, which reception never sees.
A doctor cannot change their own schedule, make themselves unbookable, or issue refunds. They are recognised automatically when their WordPress account uses the same email address as their doctor record, so there is no extra linking step.
Patients who register through the portal get the dedicated Patients role, which has no admin access at all.
Creating services
Go to Alnora → Services → Add service.
- Set a name, duration (used to size the slot) and price.
- Add an optional rich-text description (formatting and links) — patients open it in a “Read more” popup on the booking form. Services with no description simply don’t show the link.
- Choose the doctor who offers it — or leave it on All doctors to make it global.
Assigning & ordering
Services are filtered by doctor. After a patient picks a doctor, the form shows that doctor’s services plus any marked All doctors.
Single-option steps are skipped. If a doctor offers only one service, the service step is hidden and that service is selected automatically — so assign multiple services (or set them to “All doctors”) if you want patients to choose.
Drag services into the order you want patients to see them; that order is used in the booking form.
Multiple services per appointment
Turn on Settings → General → Multiple services. The service step then lets a patient select more than one service for a single appointment.
- The chosen services run back-to-back with one doctor, and the slot reserved is the sum of their durations.
- The price shown and charged is the sum of the selected services.
- Emails, invoices, the details popup and calendar events switch from “Service” to “Services” automatically, and invoices list each service on its own line.
With the toggle off, booking works exactly as before — one service per appointment.
Doctor & service categories
Open the Categories button next to Add doctor or Add service to create categories, then tick the categories each doctor or service belongs to.
- On the booking form, a category filter appears inside the doctor and service steps so patients can narrow down before choosing.
- The two steps are controlled separately under Settings → General → Feature toggles: Service category filter and Doctor category filter. Turn on whichever list is long, or both — they are independent.
- Empty categories are hidden, and if you have no categories the plain lists are shown as before.
- Any existing doctor specialisation is migrated into a category automatically the first time you upgrade.
For long lists you can pair this with
doctor & service search — the chips narrow the list first, and the search looks within the chosen category.
Running several locations
Enable Alnora → Settings → General → Multiple locations. The booking form then opens with a location step.
- Create each location with its name and address.
- Assign doctors to the locations they work at.
- Patients pick a location first; only that location’s doctors and availability are shown.
Photos & contact on the booking form
Give each branch a face on the location step. Open Alnora → Locations, edit a location and set a Location image (any image from your Media Library) — it appears above the branch name when a patient chooses where to book. The branch’s address, email and phone are shown there too, so a patient can see and contact the right site before committing.
Each of the image, address, email and phone is optional — fill in only what you want patients to see, and anything left blank is simply omitted from the card. These contact details appear on the booking form only; booking emails still show just the location name and address.
Locations in emails
Every email that mentions the location shows its name and address together — Location: Harley Street Clinic — 12 Harley St, London W1G 9PL — so patients know where to actually turn up, not just which branch they picked. The same applies to the {location} token in custom templates, so it works without editing them.
Keep each location’s address filled in — it’s optional, and a location without one falls back to showing just its name.
If only one location is assigned to a doctor, or one doctor to a location, the relevant step is skipped automatically. The Clinic plan licences up to 3 sites for multi-location groups.
Managing appointments
Alnora → Appointments lists every booking with powerful filtering.
- Search by reference, name, email or phone.
- Filter by status, doctor, location or date.
- Sort by any appointment column, and show or hide past appointments.
- Change an appointment’s status inline (confirmed, cancelled, completed…).
Appointments that belong to a recurring series are marked with an “R” badge.
Add a booking yourself
Take phone and walk-in bookings straight from the admin with Alnora → Add appointment. Search an existing patient or add a new one, choose the doctor, service, date and time, then set the status and payment status by hand. When your clinic runs more than one location, choosing the branch is required, so every desk booking is tied to a specific place, exactly as on the booking form. Only times the doctor is genuinely free are offered, exactly as on the booking form.
- A booking added this way behaves exactly like one the patient made themselves — the confirmation and clinic emails, SMS and WhatsApp, calendar entries, telehealth links and Zapier webhooks all go out as normal.
- No online checkout is ever started; if you want the patient to pay, send them a payment link afterwards.
- Appointment details show Added by, naming the staff member who entered the booking.
- This screen books a single visit. Recurring courses are made by the patient on the booking form, not from the admin.
A Clinic Doctor using this screen can only book into their own diary and their own locations. Reception and administrators can book for anyone.
Recurring appointments
Turn on Settings → General → Recurring appointments. A “Repeat” option then appears in the booking form.
Patient-booked only. Recurring courses are set up by the
patient on the booking form. The admin
Add appointment screen always creates a
single visit — to build a repeating course from the desk, add each visit on its own, or have the patient book the series themselves.
- The patient picks a frequency — Weekly, Every 2 weeks or Monthly — and how many times to repeat (1–12).
- The form then shows a live list of every upcoming visit — the exact dates and times, drawn from the doctor’s genuinely free slots (and the chosen location) — so the patient sees the whole plan before booking.
- The first appointment plus every repeat are booked together at that interval.
How each repeat date is chosen
Every repeat stays on the chosen cadence (weekly / fortnightly / monthly) and tries to keep the same time as the first appointment. When that exact slot isn’t free, it does not skip a whole period — it finds the nearest free slot instead:
- First it keeps the same day and moves to the closest free time on that day.
- If the whole day is unavailable, it rolls forward to the closest following day (up to 6 days) that has a free slot — so the weekly / fortnightly / monthly spacing is preserved and never overtakes the next repeat.
- A repeat is dropped only if nothing is free anywhere in that window (rare). Every appointment in the series shows an “R” badge in the Appointments list.
The patient sees these shifted dates in the preview before booking, so there are no surprises. And if one of those slots is taken while they’re still filling in the form, the booking is stopped so they can re-check the dates — rather than being quietly moved or double-booked.
Set Max. advance (days) (Booking rules) high enough to cover the furthest repeat, or later dates fall outside the window.
Paying online for a series? A recurring online booking now charges the
whole course in one checkout — every visit is paid and confirmed together. See
Online payments & confirmation for the details.
Waitlist
Enable Settings → General → Waitlist. Patients who can’t find a suitable time can then join a waitlist.
- On the date & time step a “Can’t find a suitable time?” panel lets the patient enter a preferred date and contact details.
- When an appointment for that doctor and date is cancelled, the first waiting patient is automatically emailed that a slot opened.
- Review, manually notify or remove waiting patients under Alnora → Waitlist.
- Entries are removed automatically once the preferred date has passed.
Rescheduling an appointment
From Alnora → Appointments, open a booking’s More info panel and choose Reschedule. Pick a new date and time from the doctor’s genuinely free slots and confirm.
- The new time is validated against the doctor’s working hours, breaks and existing bookings — you can only pick a slot that’s really free.
- The patient is re-notified by email (and SMS/WhatsApp if enabled) with the new time.
- The clinic is notified too, so whoever keeps the diary sees the change — the notice carries both the new and the previous time.
- Google Calendar, Outlook and Zapier update automatically: the old event is removed and a new one is created; a telehealth link is re-issued where used.
- Payments are left untouched — rescheduling never re-charges or refunds.
Tailor both the patient’s reschedule email and the clinic’s own
Reschedule — clinic notification under
Settings → Notifications → Email templates, and the SMS/WhatsApp text under
Settings → SMS & WhatsApp → templates. Each has its own
send switch.
Patient records
Alnora → Patients holds a card for every patient — name, date of birth, contact details and visit history. A card is created automatically the first time someone books.
Open a card to see all of that patient’s past and upcoming appointments in one place.
Medical records (encrypted)
Enable Settings → General → Medical records. Each appointment then gets a private clinical record, encrypted at rest (AES-256) and stored on your own server.
- A “Record” button appears next to each appointment — click it to open the record editor for that visit.
- Store diagnosis, prescription, free-text notes and attached documents.
- Only Administrators and the treating Doctor can open a record.
Records never leave your server and are never sent to third parties, webhooks or analytics.
Prescription & diagnosis PDFs
From a patient’s medical record you can generate branded prescription and diagnosis PDFs in one click.
- The PDF shows your clinic name — or your clinic logo at the top when you add one under Settings → General (see branding).
- Documents are produced in the clinic language, with full Unicode support (including Cyrillic and accented characters) and automatic word-wrapping.
- The patient’s portal login details are printed on the prescription PDF (they were previously on the invoice).
Email the prescription to the patient
A translated Prescription email joins the others under Settings → Email, with an Attach prescription PDF option. You can send it two ways:
- By hand — a Send prescription email button on the medical record, which also shows when it was last sent and to whom.
- Automatically — tick send automatically when the appointment is completed to email it the moment you mark the visit Completed.
The email is only sent once a diagnosis or prescription has been added, and an automatic send never repeats one you already sent by hand.
Patient portal
Enable Settings → General → Patient portal and place [alnora_portal] on a page (then map it under Alnora → Shortcodes).
Patients log in to:
- View their upcoming and past appointments.
- Cancel an appointment (subject to your cancellation-notice rule) and book a new one.
- Download documents shared with them and manage their account details.
Portal access & passwords
A portal account is created automatically the first time a patient’s appointment is confirmed (while the portal is enabled). How patients get in:
- First confirmation email — the patient’s login details (a link to the portal and a one-time password) are included in the first confirmation email they receive.
- Resend on request — need to send them again? Open the patient in Alnora → Patients and use Resend login information — Alnora emails the patient a secure link to set a new password.
- Forgotten password — patients can help themselves from the portal login page: the “Forgot your password?” option emails them a secure, expiring link to set a new one.
For security, Alnora never stores a readable password. The one-time password is shown only once in that first email; every reset afterwards uses a secure, expiring link.
Portal patients get the restricted Patients role — no access to wp-admin.
CSV import
Move an existing clinic over quickly by importing patients and doctors from a spreadsheet.
- Export your current data to CSV.
- Use the import tool on the Patients / Doctors screens and map the columns.
- Review the preview, then import. Existing records are matched to avoid duplicates.
Stripe (card payments)
Go to Alnora → Settings → Payments.
- Sign in at dashboard.stripe.com and open Developers → API keys.
- Copy your Secret key and Publishable key into the Stripe fields.
- Turn on Enable Stripe (card payments) and save.
Stripe only appears if your clinic currency (Settings → General) is supported by Stripe. Unsupported currencies fall back to cash only.
PayPal
- At developer.paypal.com → Apps & Credentials, create a REST API app.
- Copy the Client ID and Secret into the PayPal fields.
- Set PayPal mode to Sandbox for testing or Live for real payments.
- Turn on Enable PayPal and save.
As with Stripe, PayPal only shows for currencies it supports.
Supported currencies
Whether a currency can take online payments depends on the gateway — Stripe and PayPal each support their own set. If a currency is supported by neither, only cash / pay on arrival is offered. The Payments settings page shows which gateways work for your chosen currency.
| Currency | Code | Stripe | PayPal |
| Europe |
| Euro | EUR | ✓ | ✓ |
| British Pound | GBP | ✓ | ✓ |
| Swiss Franc | CHF | ✓ | ✓ |
| Swedish Krona | SEK | ✓ | ✓ |
| Norwegian Krone | NOK | ✓ | ✓ |
| Danish Krone | DKK | ✓ | ✓ |
| Icelandic Króna | ISK | ✓ | — |
| Polish Zloty | PLN | ✓ | ✓ |
| Czech Koruna | CZK | ✓ | ✓ |
| Hungarian Forint | HUF | ✓ | ✓ |
| Romanian Leu | RON | ✓ | — |
| Bulgarian Lev | BGN | ✓ | — |
| Croatian Kuna | HRK | — | — |
| Serbian Dinar | RSD | — | — |
| Macedonian Denar | MKD | — | — |
| Albanian Lek | ALL | — | — |
| Bosnia-Herzegovina Convertible Mark | BAM | — | — |
| Moldovan Leu | MDL | — | — |
| Russian Ruble | RUB | — | — |
| Ukrainian Hryvnia | UAH | ✓ | — |
| Belarusian Ruble | BYN | — | — |
| Georgian Lari | GEL | ✓ | — |
| Turkish Lira | TRY | ✓ | — |
| Armenian Dram | AMD | ✓ | — |
| Azerbaijani Manat | AZN | ✓ | — |
| Middle East |
| Israeli New Shekel | ILS | ✓ | ✓ |
| UAE Dirham | AED | ✓ | — |
| Saudi Riyal | SAR | ✓ | — |
| Kuwaiti Dinar | KWD | ✓ | — |
| Bahraini Dinar | BHD | ✓ | — |
| Qatari Riyal | QAR | ✓ | — |
| Omani Rial | OMR | ✓ | — |
| Jordanian Dinar | JOD | ✓ | — |
| Lebanese Pound | LBP | ✓ | — |
| Syrian Pound | SYP | — | — |
| Iraqi Dinar | IQD | — | — |
| Iranian Rial | IRR | — | — |
| Yemeni Rial | YER | — | — |
| Afghan Afghani | AFN | — | — |
| Africa |
| Egyptian Pound | EGP | ✓ | — |
| Moroccan Dirham | MAD | ✓ | — |
| Tunisian Dinar | TND | — | — |
| Libyan Dinar | LYD | — | — |
| Algerian Dinar | DZD | — | — |
| Nigerian Naira | NGN | ✓ | — |
| South African Rand | ZAR | ✓ | — |
| Kenyan Shilling | KES | ✓ | — |
| Ghanaian Cedi | GHS | ✓ | — |
| Tanzanian Shilling | TZS | ✓ | — |
| Ugandan Shilling | UGX | ✓ | — |
| Ethiopian Birr | ETB | — | — |
| West African CFA Franc | XOF | ✓ | — |
| Central African CFA Franc | XAF | ✓ | — |
| Mauritian Rupee | MUR | ✓ | — |
| Botswana Pula | BWP | ✓ | — |
| Zambian Kwacha | ZMW | — | — |
| Rwandan Franc | RWF | — | — |
| Angolan Kwanza | AOA | — | — |
| Mozambican Metical | MZN | — | — |
| Namibian Dollar | NAD | — | — |
| Congolese Franc | CDF | — | — |
| Sudanese Pound | SDG | — | — |
| Somali Shilling | SOS | — | — |
| Gambian Dalasi | GMD | — | — |
| Malawian Kwacha | MWK | — | — |
| Seychellois Rupee | SCR | ✓ | — |
| Sierra Leonean Leone | SLE | — | — |
| Liberian Dollar | LRD | — | — |
| Swazi Lilangeni | SZL | — | — |
| Lesotho Loti | LSL | — | — |
| Burundian Franc | BIF | — | — |
| Djiboutian Franc | DJF | — | — |
| Guinean Franc | GNF | — | — |
| Malagasy Ariary | MGA | — | — |
| Mauritanian Ouguiya | MRU | — | — |
| Cape Verdean Escudo | CVE | — | — |
| São Tomé and Príncipe Dobra | STN | — | — |
| Eritrean Nakfa | ERN | — | — |
| South Sudanese Pound | SSP | — | — |
| Americas |
| US Dollar | USD | ✓ | ✓ |
| Canadian Dollar | CAD | ✓ | ✓ |
| Mexican Peso | MXN | ✓ | ✓ |
| Brazilian Real | BRL | ✓ | ✓ |
| Argentine Peso | ARS | ✓ | — |
| Chilean Peso | CLP | ✓ | — |
| Colombian Peso | COP | ✓ | — |
| Peruvian Sol | PEN | ✓ | — |
| Uruguayan Peso | UYU | ✓ | — |
| Paraguayan Guarani | PYG | — | — |
| Bolivian Boliviano | BOB | — | — |
| Venezuelan Bolívar | VES | — | — |
| Guatemalan Quetzal | GTQ | ✓ | — |
| Costa Rican Colón | CRC | ✓ | — |
| Panamanian Balboa | PAB | ✓ | — |
| Dominican Peso | DOP | ✓ | — |
| Honduran Lempira | HNL | — | — |
| Nicaraguan Córdoba | NIO | — | — |
| Cuban Peso | CUP | — | — |
| Jamaican Dollar | JMD | ✓ | — |
| Trinidad & Tobago Dollar | TTD | ✓ | — |
| Barbadian Dollar | BBD | — | — |
| Bahamian Dollar | BSD | — | — |
| Belize Dollar | BZD | — | — |
| East Caribbean Dollar | XCD | — | — |
| Haitian Gourde | HTG | — | — |
| Guyanese Dollar | GYD | — | — |
| Surinamese Dollar | SRD | — | — |
| Aruban Florin | AWG | — | — |
| Netherlands Antillean Guilder | ANG | — | — |
| Bermudian Dollar | BMD | — | — |
| Cayman Islands Dollar | KYD | — | — |
| Asia & Pacific |
| Japanese Yen | JPY | ✓ | ✓ |
| Chinese Yuan | CNY | ✓ | ✓ |
| Indian Rupee | INR | ✓ | — |
| Singapore Dollar | SGD | ✓ | ✓ |
| Hong Kong Dollar | HKD | ✓ | ✓ |
| Australian Dollar | AUD | ✓ | ✓ |
| New Zealand Dollar | NZD | ✓ | ✓ |
| South Korean Won | KRW | ✓ | — |
| New Taiwan Dollar | TWD | ✓ | — |
| Thai Baht | THB | ✓ | ✓ |
| Malaysian Ringgit | MYR | ✓ | — |
| Indonesian Rupiah | IDR | ✓ | — |
| Philippine Peso | PHP | ✓ | ✓ |
| Vietnamese Dong | VND | ✓ | — |
| Pakistani Rupee | PKR | ✓ | — |
| Bangladeshi Taka | BDT | ✓ | — |
| Sri Lankan Rupee | LKR | ✓ | — |
| Nepalese Rupee | NPR | ✓ | — |
| Myanmar Kyat | MMK | ✓ | — |
| Cambodian Riel | KHR | ✓ | — |
| Lao Kip | LAK | ✓ | — |
| Macanese Pataca | MOP | — | — |
| Brunei Dollar | BND | — | — |
| Mongolian Tögrög | MNT | ✓ | — |
| Kazakhstani Tenge | KZT | ✓ | — |
| Uzbekistani Som | UZS | ✓ | — |
| Kyrgyzstani Som | KGS | — | — |
| Tajikistani Somoni | TJS | — | — |
| Turkmenistani Manat | TMT | — | — |
| Maldivian Rufiyaa | MVR | — | — |
| Bhutanese Ngultrum | BTN | — | — |
| Fijian Dollar | FJD | — | — |
| Papua New Guinean Kina | PGK | — | — |
| Samoan Tala | WST | — | — |
| Tongan Paʻanga | TOP | — | — |
| Solomon Islands Dollar | SBD | — | — |
| Vanuatu Vatu | VUV | — | — |
| CFP Franc | XPF | — | — |
Counts: Stripe supports 78 of 149 currencies; PayPal supports 22. Every currency can still be used for cash / pay-on-arrival and on invoices.
Cash / pay on arrival
Turn on Enable cash / pay on arrival to let patients choose to pay in person. No online checkout runs — the booking is confirmed and marked to be paid at the clinic.
Online payments & confirmation
This is important to understand, because it changes when a clinic sees emails and calendar entries.
Nothing happens until the payment is captured
For online bookings (Stripe / PayPal), every booking side-effect is held until the payment actually goes through:
- Patient & clinic emails
- SMS / WhatsApp reminders
- Google Calendar / Outlook events
- Telehealth (Zoom / Meet) links
- Zapier webhooks
While the checkout is pending, none of these are created or sent. The moment payment is captured, they all fire at once.
Abandoned or failed checkout? The pending appointment is
removed automatically and the slot freed — no orphaned booking, no email, no calendar entry. This happens whether the patient cancels at the checkout or simply closes the tab; see
Unfinished payments.
Cash bookings are immediate
Cash / pay-on-arrival bookings are confirmed instantly, so all of the above fire right away at booking time.
Recurring + online payment
A recurring online booking is a single checkout that pays for and confirms the whole series:
- The checkout total covers every visit — the first appointment plus each repeat — at your per-visit amount (the full price, or the deposit if you use deposits).
- While the checkout is pending, no occurrence syncs — nothing on the calendar, Outlook, telehealth or Zapier for any of them.
- When the payment is captured, the entire series is confirmed and marked paid at once: every occurrence syncs to the calendars, generates its telehealth link and fires Zapier’s
appointment.created.
- Emails/SMS stay a single combined message for the series, showing the full amount — not one per date.
- If the checkout is abandoned, the first appointment and all still-unpaid occurrences in the series are deleted.
Per-visit refunds. Each occurrence gets its own payment record (all sharing the one transaction), so you can cancel and refund a single visit on its own without touching the rest of the series.
Unfinished payments
A patient who is sent to Stripe or PayPal holds their slot while they pay, so nobody else can book the same time from under them. If they never finish — they close the tab, lose signal, change their mind — that slot would otherwise stay blocked for good.
Alnora frees it for you. Set Alnora → Settings → Payments → Release unfinished payments after to the number of minutes a checkout may stay unfinished. The default is 30 minutes, the minimum is 15, and 0 means never release.
The payment is always checked first
Before anything is released, Alnora asks Stripe or PayPal what actually happened to that checkout:
- The patient paid — the booking is kept and marked paid, and the confirmation email, calendar entry and reminders all go out as normal. Nobody loses an appointment they have paid for, even if they never returned to your website.
- No payment — the booking is removed and the slot becomes bookable again. The patient is not emailed, because they were never sent a confirmation in the first place.
A PayPal payment the patient approved but never completed is collected at this point, so the clinic is paid rather than left out of pocket.
What is never released
Only a still-pending booking that was sent to an online checkout can be released. Bookings marked paid, deposit, cash, refunded or partially refunded are never touched, and neither are confirmed appointments, free services, or anything your team added by hand in the admin.
While a checkout is outstanding, the appointment shows an Awaiting payment label in the Appointments list, so your team can see why a pending booking is holding a slot and that it will clear itself.
If a payment arrives late. Should a payment come through after its slot was already released, Alnora
emails the clinic the reference, patient and amount so you can refund it or offer the patient another time. This alert needs an
admin notification email set and the
payment webhooks connected — with those in place, a late payment will not reach you unnoticed.
Why the 15-minute minimum? Card authentication (3-D Secure), bank redirects and PayPal approval regularly take a few minutes. A shorter window risks cancelling patients while they are still paying.
Freeing slots faster (optional)
Alnora checks for unfinished checkouts every few minutes on its own, so nothing needs configuring. If you also add the payment webhooks, Stripe and PayPal tell Alnora the moment a checkout expires or a payment is approved, and the slot is usually bookable again within seconds:
- Stripe — add
checkout.session.expired to your existing webhook.
- PayPal — subscribe to Checkout order approved and Payment capture completed.
Deposits
On the Payments tab, the Deposit section controls how much is collected online:
- Full amount — the patient pays the whole price up front.
- Percentage — set a value, e.g.
20 = 20%.
- Fixed amount — a flat deposit in your currency.
When you choose Fixed amount, an Always charge the full deposit option appears. Turn it on to collect the full deposit even when the chosen service is free or costs less than the deposit amount. When it’s off, the deposit is capped at the service price, as before.
When a deposit covers the whole price. If a fixed deposit is larger than the service price — a €10 deposit on a €5 service — the appointment is recorded as paid in full and reads “already paid”, not as a deposit with a balance still to collect.
Send the deposit or the full amount
When you email a payment link from the Payment popup, you can send the patient the deposit or invoice the full amount — a button for each. The patient sees which one they are paying, and a full payment is recorded as paid in full.
Collect the balance online after a deposit
Once a deposit is paid, the Payment popup shows the deposit taken and the balance still owed, with a Send balance link button that emails the patient a link to pay the rest by card or PayPal. The appointment is then marked paid. A refund can return the deposit and the balance together — even when they were paid on different methods, and across a whole recurring course.
How it works: a deposit applies to online payments only (Stripe / PayPal). The patient pays it to secure the booking, then settles the balance online later or at the clinic. If they pick “Pay in cash”, no deposit is taken and they pay the full amount in person.
Refunds
When a patient has paid online (Stripe or PayPal), you can refund them straight from Alnora — in full or in part — without leaving WordPress. The money goes back to the patient’s original card or PayPal account through the payment gateway.
Issue a refund
- Open Alnora → Appointments and click Payment on the booking.
- In the Refund box at the bottom of the popup you’ll see how much was paid and how much is still refundable.
- Leave the full amount for a full refund, or enter a smaller figure for a partial refund. You can refund again later, up to the total amount paid.
- Click Refund and confirm — Alnora requests the refund from the gateway immediately.
What the patient sees
- The payment status becomes Refunded or Partially refunded, shown in the Appointments list and on the invoice.
- The patient is emailed — and texted, if SMS/WhatsApp is on — that their refund is on the way, in their language. You can customise the wording under Settings → Notifications → Email templates → Payment refunded.
- The money usually takes 5–10 days to appear on the patient’s statement, depending on their bank.
Cancelling is not the same as refunding. Cancelling an appointment does not automatically return the money — this protects deposits and late-cancellation / no-show fees. You always decide whether, and how much, to refund from the Refund box. So a patient who cancels is refunded only once the clinic approves it.
After a full refund. A fully refunded appointment can’t be re-billed with a payment link. Trying to send one explains that it was refunded and asks you to cancel and rebook if the patient still wants the visit.
Cash bookings
Cash / pay-on-arrival bookings are never charged online, so there is nothing for Alnora to refund — handle those in person.
Refunds started from the Stripe or PayPal dashboard
If you prefer to refund directly in your Stripe or PayPal dashboard, Alnora keeps its own records in sync through a webhook — the appointment still shows as refunded here, with no double refund and no manual update:
- Stripe — in the Stripe dashboard add a webhook (pointing at the Alnora webhook URL shown on the Payments settings) subscribed to
checkout.session.completed and charge.refunded, then copy that endpoint’s Signing secret (starts with whsec_) into Settings → Payments → Stripe webhook signing secret. This lets Stripe securely confirm payments and record dashboard refunds here.
- PayPal — add a webhook subscribed to Payment capture refunded, then paste its Webhook ID into Settings → Payments → PayPal so Alnora can verify the event before recording it.
The Refund controls appear only when Payments are enabled and the booking has an online payment on record.
Invoices & payment links
After an appointment, Alnora generates a branded invoice PDF automatically — headed with your clinic name, or your clinic logo when you set one under Settings → General. It reflects what was paid online and what is due — including any refunded amount — in the clinic currency and language, and can be attached to the relevant email.
Email a patient a payment link
For a booking taken by phone, or one a doctor added by hand, you can email the patient a secure link to pay online rather than chasing them. Open Alnora → Appointments, click Payment on the booking, and choose Send payment link. The patient pays by card or PayPal on your own site and the appointment is marked paid automatically.
- The popup shows the amount due, the address the link will go to, and when a link was last sent — so nobody sends the same link twice.
- Choose how long a link stays valid under Settings → Payments → Invoices (seven days by default). Links expire on their own, and rescheduling an appointment invalidates any link already sent.
- Edit the wording under Settings → Email → Invoice / payment link.
What the invoice shows
Every invoice lists each service and the total, then a Status section: the amount, the payment method once money has been collected (Card, PayPal or Cash), and whether it is paid or still due. When you take a deposit, the deposit and the balance appear on their own lines — each with its own amount, method and status — so a patient who paid the deposit by card and the balance by PayPal sees both. Any refunded amount is shown too.
Attach the invoice to your emails
Each invoice email has an Attach invoice PDF switch under Settings → Email. Turn it on for the Invoice / payment link email to send the unpaid invoice with the request to pay, and for the Invoice / payment received email to send the paid invoice as a receipt.
Recurring courses. Each visit in a series gets its own invoice showing that visit’s amount, and all of them are attached to the payment emails — rather than one invoice for the whole course.
Payment links are sent by administrators and reception. Doctors can send links and download the invoice PDF, but issuing refunds stays with the front desk.
Telegram Bot
Send appointment messages over Telegram — free to send, with no phone number to manage. Go to Alnora → Settings → Telegram Bot.
Create your bot
- In Telegram, open a chat with @BotFather and send
/newbot, then follow the prompts to name your bot.
- BotFather replies with a bot token and your bot’s username — paste both into the fields here and save.
- Click Register Telegram webhook so Telegram can deliver patients’ connection requests (your site must be reachable over HTTPS).
How patients connect
Telegram cannot message someone by phone number, so each patient connects once. They tap Connect Telegram in their Booking received email or the Notifications tab of the patient portal, which opens your bot and links their account — after that, every message reaches them automatically. A patient who never connects is simply skipped.
Choose where the invite appears under Settings → Telegram Bot — in the booking-received email, in the patient portal, or both. Once a patient has connected, the invite is hidden so nobody is asked twice.
Message templates
Telegram has its own set of templates under Telegram templates (booking, confirmed, cancelled, rescheduled, reminder and refund), separate from your SMS & WhatsApp templates. Leave a field blank to use the built-in, translated default, and use {token} placeholders such as {clinic_name}, {when}, {doctor} and {service}. Each has its own Send this message switch.
Email & reminders
Under Alnora → Settings → Email & reminders:
- From name / From email — the sender patients see.
- Notify clinic at — the address that receives a copy of new bookings.
- Reminder lead time (hours) — how long before the appointment the reminder goes out.
- Email header — show your clinic name (default) or your clinic logo at the top of every patient email. Choosing the logo reveals a width control and drops the coloured header band so the logo sits on a clean background. The logo is the one set under Settings → General.
The email frame follows your Corner radius setting (Settings → Customization), so branded emails match the look of your booking widget.
Email templates & tokens
Every transactional email is fully editable on the same tab under Email templates. Leave a field blank to use the built-in default.
Which emails you can customise
Each template has its own subject and body. The set shown adapts to the features you have enabled:
- Booking received — to the patient, acknowledging their request.
- New booking — clinic notification — to the clinic, announcing a new request.
- Appointment confirmed — to the patient when you confirm (carries the portal login and telehealth link).
- Appointment cancelled — to the patient when an appointment is cancelled.
- Appointment rescheduled — to the patient when you move a booking to a new time (includes the previous time via
{old_when}).
- Reschedule — clinic notification — to the clinic when an appointment is moved, with both the new and the previous time.
- Appointment reminder — to the patient ahead of the visit.
- Cancellation — clinic notification — to the clinic when a patient cancels.
- Payment refunded — to the patient when you refund them (shown only when Payments are enabled).
- Prescription — to the patient with their prescription PDF attached, sent by hand from the record or automatically when the visit is completed (shown only when Medical records are enabled) — see prescription PDFs.
- Waitlist — a slot opened up — to a waiting patient when a slot frees up (shown only when the Waitlist is enabled).
Switching an email off
Each template has a Send this email checkbox. Untick it and that email stops going out, while every other email carries on as normal — useful if, say, your team doesn’t want the clinic’s own “new booking” copy in their inbox. A template that is switched off is marked Not sent in the list, so you can see it at a glance without opening it.
- Every email is on by default. Nothing changes until you untick something.
- The patient’s and the clinic’s copies are separate switches, so turning off one leaves the other alone.
- Switching an email off does not affect the equivalent SMS or WhatsApp message — those have their own switches.
Careful with “Appointment confirmed”: that email carries the patient’s portal login the first time their account is created. If you switch it off, patients won’t receive those details automatically — you can still send them from the patient’s profile with Resend login.
Use {placeholder} tokens for dynamic content — line breaks are preserved automatically. Common tokens include:
{patient_name}, {clinic_name}, {doctor}, {service}
{when}, {ref}, {email}, {phone}, {reason}
{meet_link} (telehealth), {cancel_url}, {custom_fields}
Payment and location tokens appear automatically when those features are enabled. The exact token list is shown above each template field in the admin.
{location} resolves to the location’s
name and address — see
multiple locations.
SMS & WhatsApp (Twilio)
SMS and WhatsApp reminders are sent through Twilio. Go to Alnora → Settings → SMS & WhatsApp.
- Create a free account at twilio.com.
- From the Twilio Console dashboard, copy your Account SID and Auth Token into the fields here.
- SMS: buy a Twilio phone number and set it as the sender.
- WhatsApp: set up the Twilio WhatsApp sandbox (or an approved sender) and follow the join step.
Trial accounts can only message verified numbers — add test numbers under Phone Numbers → Verified Caller IDs. For WhatsApp, each test phone must send the sandbox join keyword first. Reminders use the patient’s phone number and are localised to the clinic language.
Beyond reminders, Alnora also texts the patient for booking confirmations, reschedules and — when you refund a payment — a short refund notification, over the same SMS/WhatsApp channels.
Message templates
Under SMS & WhatsApp templates you can edit the wording of each message (booking, confirmed, cancelled, rescheduled, reminder and refund). One template drives both SMS and WhatsApp, so you never keep two copies in sync — leave a field blank to use the built-in, translated default. Use {token} placeholders such as {clinic_name}, {when}, {doctor} and {service} for dynamic content.
Switching a message off
Each template has a Send this message checkbox. Untick it to stop that message while leaving the others running — for example, keep the reminder but drop the booking acknowledgement. A switched-off template is marked Not sent in the list.
- Every message is on by default, so enabling SMS or WhatsApp never means re-ticking each event.
- Because one template serves both channels, the switch covers SMS and WhatsApp together.
- The matching email has its own separate switch — turning off a message doesn’t turn off the email.
Google Calendar
Push bookings to Google Calendar from Alnora → Settings → Calendar & telehealth.
- In Google Cloud Console, go to APIs & Services → Library, search for Google Calendar API and enable it.
- Create an OAuth client ID (Web application) and add the redirect URL shown on this settings page.
- Copy the Client ID and Client secret into the Google fields, then click Connect Google.
- Authorise access in the Google window. The status then shows Connected.
One-way sync + auto-delete: appointments are pushed out — an event is created when a booking is confirmed and removed when it’s cancelled. Alnora does not import events back the other way, so an event you add directly in Google Calendar will not block a booking slot. Keep availability in Alnora.
One clinic calendar, not per-doctor: the connection links a single account — your clinic’s — and every appointment, whichever doctor it is for, is added to that one calendar. Alnora does not connect each doctor’s own calendar separately.
If the connection drops: should Google revoke access (for example a password change, or a Testing-mode consent screen expiring after a week), the settings page shows a clear Disconnected — reconnect prompt instead of quietly failing, so sync can never stop silently. A brief network blip no longer tears down a working connection — just click Connect Google again to restore it.
Outlook / Microsoft 365
- In the Azure portal, register an application.
- Under Certificates & secrets → New client secret, copy the Value (not the ID) immediately — it’s shown only once.
- Copy the Application (client) ID from the Overview page and the secret value into the Microsoft fields, then click Connect Outlook.
One-way sync + auto-delete: just like Google, appointments are pushed out (created on confirm, removed on cancel) and external Outlook events are not imported back, so they don’t block slots.
Using both: Google and Outlook can be connected at the same time — each appointment is added to both calendars independently, and cancelling removes the event from both.
One clinic calendar, not per-doctor: like Google, this links a single account — your clinic’s — and all appointments land on that one calendar regardless of doctor. Individual doctors’ personal calendars are not connected.
If the connection drops: if Microsoft revokes access, the settings page shows a clear Disconnected — reconnect prompt rather than failing quietly, and a brief network blip won’t drop a working connection. Click Connect Outlook again to restore sync.
Telehealth (Zoom / Meet)
Auto-generate a video link for telehealth appointments under the Telehealth section of the Calendar tab.
Option A — Google Meet
- Connect Google Calendar first (Meet links are created on the calendar event, so that connection is required).
- Set Telehealth provider to Google Meet.
Option B — Zoom
- In the Zoom App Marketplace, create a Server-to-Server OAuth app.
- Copy the Account ID, Client ID and Client secret into the Zoom fields.
- Set Telehealth provider to Zoom.
A link is created only for telehealth-type appointments — in-person bookings are unaffected. The link is delivered via the {meet_link} email token.
Zapier webhooks
Connect Alnora to thousands of apps under Alnora → Settings → Zapier webhooks.
- In Zapier, create a Zap and choose the “Catch Hook” trigger — it generates a unique webhook URL.
- Paste the URL into the field for the event you want: created, confirmed, cancelled, rescheduled, completed, no-show, payment received or refunded. Each event can use its own Zap.
- Turn on Enable webhooks and place a test booking to let Zapier catch the sample.
Each webhook sends a JSON body with the event name, a timestamp and the appointment details (doctor, service, date/time, patient name, email and phone), plus the appointment’s location (name, address, email and phone). Payment events carry a readable payment method (Card / PayPal / Cash) and a per-charge breakdown — so when a booking is part-paid one way and settled another (say a Card deposit and a PayPal balance), each charge appears separately with its own gateway reference rather than being flattened into one. The refunded event also carries the amount and whether it was a full or partial refund.
Recurring courses: a paid recurring series fires a
payment-received event for
every visit in the course, each with its own amount — whether the course was paid at booking or later from an emailed
payment link — so a per-appointment Zap sees every visit. The patient still receives a single payment email.
Per-doctor routing: the payload includes the doctor, so a Zap can filter on it to send each appointment to a specific doctor’s calendar or app — the webhooks are one-way (Alnora → Zapier), so they push events out but don’t read anything back to block slots.
Privacy: the patient’s free-text “reason for visit” notes are intentionally excluded from webhooks and never sent off-site.
Online payments: for Stripe/PayPal bookings the
created hook fires only once the payment is captured, not while checkout is pending — see
Online payments & confirmation.
Revenue reports
Under Alnora → Reports you see what your clinic earned, net of refunds, without exporting anything.
Filter by date range
Every figure can be scoped to a period — this month, last month, last 30 days, last 12 months, this year, all time, or a custom from / to.
What you see
- Net revenue, with gross collected and refunds shown separately — so a refund lowers the total instead of being ignored.
- Paid appointments and the average per paid appointment (net revenue ÷ paid appointments).
- Net revenue broken down by month, by doctor and by payment method (Card, PayPal, Cash).
- Appointment counts for the period — completed, confirmed, cancelled and no-shows.
Export
The CSV export follows the selected range and adds a signed amount column (refunds negative), so a spreadsheet totals straight to net.
Money collected on an appointment that was later deleted still counts (it was really taken) and appears under a Removed appointments line in the by-doctor breakdown, so the totals always reconcile.
GDPR toolkit
Everything you need to stay compliant lives under Alnora → Settings → GDPR.
- Consent checkbox text — the wording shown on the booking form.
- Retention — how long inactive patient records are kept, and how long the Consent log and Access audit log entries are kept before daily clean-up (minimum 3 months; leave at 0 to keep entries forever).
- Data export — produce a copy of a patient’s data on request.
- Right to erasure — delete a patient’s data cleanly and verifiably.
- Audit log — a record of who accessed what, with patient name, staff member and IP address.
- Delete all data on uninstall — a safety switch for what happens to your data if the plugin is ever removed.
What happens to your data if you delete the plugin
The Delete all data when the plugin is uninstalled option (Settings → GDPR → Data) is off by default:
- Off (default) — deleting the plugin keeps your doctors, services, patients, appointments, medical records and settings, so they survive a reinstall.
- On — everything is permanently erased when the plugin is deleted.
Turn this on only if you truly want everything erased on delete — it cannot be undone. Deactivating the plugin never removes data; only deleting it with this switch on does.
Consent logging
When a patient ticks the consent box and books, Alnora logs the consent with the patient’s full name, timestamp and IP address. The same log also records erasures, so you always have a clean before/after trail for a patient’s data. This is available in the free version too, so even basic bookings are defensible.
The Consent log lives on the Alnora → GDPR page with a search box for quickly finding a patient, and can be auto-cleaned after a retention window you set under Settings → GDPR → Retention (minimum 3 months).
Access audit log
Every read, create, update, export and delete of a patient’s medical records is written to the Access audit log on the Alnora → GDPR page. Each entry shows the object, the patient’s full name, the action, the staff member who performed it, their IP address and the exact time — the record you would hand to a data-protection officer in an incident.
The log has its own search box, and — like the Consent log — can be auto-cleaned after a retention window you set under Settings → GDPR → Retention (minimum 3 months; leave at 0 to keep entries forever).
Languages
Set the patient-facing language under Alnora → Settings → General → Language. It controls the booking form, the patient portal, the emails patients receive, and their invoices/PDFs — including localised month names and a 24-hour clock for non-English languages.
- 13 languages ship built in (English, German, French, Spanish, Italian, Dutch, Polish, Czech, Swedish, Danish, Norwegian, Ukrainian, Russian).
- It does not change the WordPress admin, which stays in your site language.
Override any wording with a translation plugin such as Loco Translate — edit the “Alnora” text-domain strings for your language, and set your WordPress site language to match so the edits load.
Your language is not in the list? Ask us for it — choose the
Language request subject, tell us which language you need, and we will add it to a future release.
Currencies
Pick your currency under Settings → General → Currency. The chosen symbol is used everywhere prices appear. Alnora ships with 149 currencies, grouped by region:
Europe
Euro (EUR), British Pound (GBP), Swiss Franc (CHF), Swedish Krona (SEK), Norwegian Krone (NOK), Danish Krone (DKK), Icelandic Króna (ISK), Polish Zloty (PLN), Czech Koruna (CZK), Hungarian Forint (HUF), Romanian Leu (RON), Bulgarian Lev (BGN), Croatian Kuna (HRK), Serbian Dinar (RSD), Macedonian Denar (MKD), Albanian Lek (ALL), Bosnia-Herzegovina Convertible Mark (BAM), Moldovan Leu (MDL), Russian Ruble (RUB), Ukrainian Hryvnia (UAH), Belarusian Ruble (BYN), Georgian Lari (GEL), Turkish Lira (TRY), Armenian Dram (AMD), Azerbaijani Manat (AZN).
Middle East
Israeli New Shekel (ILS), UAE Dirham (AED), Saudi Riyal (SAR), Kuwaiti Dinar (KWD), Bahraini Dinar (BHD), Qatari Riyal (QAR), Omani Rial (OMR), Jordanian Dinar (JOD), Lebanese Pound (LBP), Syrian Pound (SYP), Iraqi Dinar (IQD), Iranian Rial (IRR), Yemeni Rial (YER), Afghan Afghani (AFN).
Africa
Egyptian Pound (EGP), Moroccan Dirham (MAD), Tunisian Dinar (TND), Libyan Dinar (LYD), Algerian Dinar (DZD), Nigerian Naira (NGN), South African Rand (ZAR), Kenyan Shilling (KES), Ghanaian Cedi (GHS), Tanzanian Shilling (TZS), Ugandan Shilling (UGX), Ethiopian Birr (ETB), West African CFA Franc (XOF), Central African CFA Franc (XAF), Mauritian Rupee (MUR), Botswana Pula (BWP), Zambian Kwacha (ZMW), Rwandan Franc (RWF), Angolan Kwanza (AOA), Mozambican Metical (MZN), Namibian Dollar (NAD), Congolese Franc (CDF), Sudanese Pound (SDG), Somali Shilling (SOS), Gambian Dalasi (GMD), Malawian Kwacha (MWK), Seychellois Rupee (SCR), Sierra Leonean Leone (SLE), Liberian Dollar (LRD), Swazi Lilangeni (SZL), Lesotho Loti (LSL), Burundian Franc (BIF), Djiboutian Franc (DJF), Guinean Franc (GNF), Malagasy Ariary (MGA), Mauritanian Ouguiya (MRU), Cape Verdean Escudo (CVE), São Tomé and Príncipe Dobra (STN), Eritrean Nakfa (ERN), South Sudanese Pound (SSP).
Americas
US Dollar (USD), Canadian Dollar (CAD), Mexican Peso (MXN), Brazilian Real (BRL), Argentine Peso (ARS), Chilean Peso (CLP), Colombian Peso (COP), Peruvian Sol (PEN), Uruguayan Peso (UYU), Paraguayan Guarani (PYG), Bolivian Boliviano (BOB), Venezuelan Bolívar (VES), Guatemalan Quetzal (GTQ), Costa Rican Colón (CRC), Panamanian Balboa (PAB), Dominican Peso (DOP), Honduran Lempira (HNL), Nicaraguan Córdoba (NIO), Cuban Peso (CUP), Jamaican Dollar (JMD), Trinidad & Tobago Dollar (TTD), Barbadian Dollar (BBD), Bahamian Dollar (BSD), Belize Dollar (BZD), East Caribbean Dollar (XCD), Haitian Gourde (HTG), Guyanese Dollar (GYD), Surinamese Dollar (SRD), Aruban Florin (AWG), Netherlands Antillean Guilder (ANG), Bermudian Dollar (BMD), Cayman Islands Dollar (KYD).
Asia & Pacific
Japanese Yen (JPY), Chinese Yuan (CNY), Indian Rupee (INR), Singapore Dollar (SGD), Hong Kong Dollar (HKD), Australian Dollar (AUD), New Zealand Dollar (NZD), South Korean Won (KRW), New Taiwan Dollar (TWD), Thai Baht (THB), Malaysian Ringgit (MYR), Indonesian Rupiah (IDR), Philippine Peso (PHP), Vietnamese Dong (VND), Pakistani Rupee (PKR), Bangladeshi Taka (BDT), Sri Lankan Rupee (LKR), Nepalese Rupee (NPR), Myanmar Kyat (MMK), Cambodian Riel (KHR), Lao Kip (LAK), Macanese Pataca (MOP), Brunei Dollar (BND), Mongolian Tögrög (MNT), Kazakhstani Tenge (KZT), Uzbekistani Som (UZS), Kyrgyzstani Som (KGS), Tajikistani Somoni (TJS), Turkmenistani Manat (TMT), Maldivian Rufiyaa (MVR), Bhutanese Ngultrum (BTN), Fijian Dollar (FJD), Papua New Guinean Kina (PGK), Samoan Tala (WST), Tongan Paʻanga (TOP), Solomon Islands Dollar (SBD), Vanuatu Vatu (VUV), CFP Franc (XPF).
Whether online payment is available depends on the currency — Stripe and PayPal each support a subset. If a currency isn’t supported by either, only cash / pay-on-arrival is offered, and the settings page tells you which gateways work for your choice.
Still stuck?
Pro and Clinic include priority email support — we usually reply within one business day. If you can’t find what you need here, contact us and we’ll be glad to help.