Help center

Welcome to Micali.online

Micali.online is a reservation and booking platform. This guide explains who can do what, the building blocks of a booking setup — events, services, procedures and memberships — and the exact steps to publish them so visitors can book.

User roles

Every person who interacts with Micali.online falls into one of these roles. Roles control what someone can see, edit, and approve.

Root admin

The owner of an account. Configures everything: connectors (email, SMS), forms, message templates, memberships, services and events. Can invite and manage other users in the account, including other admins.

Admin (Manager)

Day-to-day manager of the account. Can create and manage events, services and memberships, approve reservations, and invite team members. Cannot change account-wide setup such as connectors or root-admin users.

Team member

Front-line staff. Sees only the events and services they are assigned to and can work with reservations attached to them. Cannot create accounts, users, or change the public booking setup.

Visitor (Guest)

The customer who books a slot. Reaches the account through its public subdomain, browses available events and services, fills in the booking form and receives confirmation messages. A visitor never sees other visitors’ reservations.

What each role can do

Capability Root admin Admin Team member Visitor
Manage connectors (email, SMS, SMTP)
Set up the AI connection
Invite & manage admins
Mailing lists & bulk email
Invite team members
Create events, services, memberships
Work on reservations they are assigned to
Book a slot
Tip. Roles are scoped to a single account. The same person can be a root admin in one account and a team member in another — log in once and switch accounts from the top bar.

Account

An account represents a company or organisation that owns the booking setup — the salon, the studio, the clinic. Each account has its own public subdomain (for example yourname.micali.online) where visitors land to make a booking.

An account holds all the pieces a visitor interacts with: the memberships they can buy, the services and procedures they can book, the events they can sign up for, and the forms they fill in along the way.

Where replies go

Set a reply-to address on the account and every message Micali.online sends on your behalf carries it, so a visitor who simply hits reply reaches the inbox you actually read. Leave it empty and replies go back to whatever address the mail was sent from. It is one setting for all your templates, not something to repeat on each one.

Colours

There are 28 colour themes. An account picks one for everybody, and any individual can override it for themselves — your own choice wins over the account’s, and the account’s over the standard one. It changes the app you and your team work in; it does not restyle your public booking page.

Events

An event is a time slot — or a series of time slots — that visitors can sign up for. Use events for classes, group sessions, workshops, performances and any other reservation that is tied to a fixed start time.

Template events vs. classic events

Events come in two flavours:

  • Template event — a reusable blueprint. Templates are never shown to visitors; they exist so you can spin up many real events with the same settings (capacity, form, messages, etc.) without re-entering everything.
  • Classic event — a real, bookable event. A classic event can be created from scratch or linked to a template, in which case it inherits the template’s configuration.

Key settings to know

  • Capacity — how many visitors can join one slot, and whether each visitor can bring “friends” (extra entities). Set minimum and maximum participants. Capacity is counted in seats, not bookings: one visitor bringing two friends takes three of them.
  • Signup deadline — the latest moment a visitor can book. If left empty, bookings stay open until the event starts.
  • Auto-confirmation — whether reservations are accepted instantly or wait for admin approval.
  • Allowed memberships — restrict who can book by limiting the event to specific memberships. If you leave this empty, anyone can book.
  • Waiting list — when the event is full, new visitors can be placed on a waiting list and notified automatically when a slot opens up.
  • Messages — pick which message templates are sent for booking confirmation, payment reminders, cancellations, attendance reminders, and waiting-list updates. Each event has its own slot for every purpose, so you can mix and match templates per event.
  • Responsible person — the team member who owns the event. They are the one Micali.online writes to when something needs attention, they are who %responsible_person% resolves to in your messages, and they are pre-selected to handle conversations about it. An individual date can name someone else, which is how you cover a colleague’s week without touching the event itself.
  • Attachments — files that travel with the event, up to 8 MB each. They are stored exactly as uploaded: nothing is resized or cropped, so a floor plan or a scanned form stays readable.
Forms. An event can require a form to be filled in at booking time. The same mechanism is used to capture details of every participant — every entity attached to the reservation must have at least a name.

Services & procedures

Services are for one-to-one bookings where the visitor picks a time that works for them. Think of a hair salon, a private lesson, a consultation, or a treatment.

How services and procedures relate

  • A service is the container — the offering as a whole (for example, “Hair Salon Downtown”). It has a name, description, location, address and timezone.
  • A procedure is one specific thing you can book inside that service (for example, “Haircut — 30 minutes”, “Colouring — 90 minutes”). A service can have many procedures.
  • Availability is the calendar of time windows when visitors can choose to book. You set these per service.
  • Slot spacing decides how often a booking can start inside those windows — every 5, 10, 15, 20, 30, 60 or 120 minutes, 15 by default. It is one setting for the whole service: what a visitor is offered and what you can book them into are the same grid, so nothing can be booked by you that they could not have booked themselves.

On the public page, a visitor first picks a service, then a procedure, then an open time slot — and finally fills in any required form.

Automated messages

Each procedure can be wired to four message templates — one for the moment a booking is created, one for confirmation, one for denial, and a reminder before the appointment. Choose the templates per procedure so different services can speak in different tones.

When to choose services over events. Use services when each visitor picks their own time. Use events when everyone signs up for the same fixed time.

Rooms

Rooms are shared spaces that only people you approve can book — a meeting room, a studio, a desk, a practice room. Unlike a service, the visitor does not book your time for something you offer; they reserve the room for as long as they need it, within the rules you set.

Who can book: flags

A flag is a label you give people — Employees, Management, Members. One person can carry several flags, and a room lists the flags allowed to book it; any one of them is enough. A room with no flag can be booked by your team only.

Invite people on Rooms → Access: paste their email addresses, pick the flags and send the invitation. There is no password — they sign in with a one-time code sent to that address.

A signed-in visitor who opens a visible room they cannot book yet can ask for access. The room’s responsible people approve (which gives them the room’s flags) or decline, and the visitor gets an email either way.

For a coworking space, or a room anybody may use, switch the room to Anyone who signs in. Keep in mind that anyone can sign in with any email address.

Visible or hidden

A visible room shows its photos, description, capacity, hours and rules to anyone with the link, but booking still needs signing in and a flag. A hidden room answers “not found” to everyone who cannot book it, so even a leaked link reveals nothing. There is no public list of all rooms: people reach a room through your booking page or its own link. You can switch visibility straight from the Rooms list.

Key settings

  • Hours — when the room can be booked, per weekday, with several ranges a day if needed. Your team can book outside them.
  • Preparation and cleanup — minutes the room stays blocked before and after every booking (0 = none).
  • Time grid — how often a booking can start and end, for example every 15 minutes.
  • Rules for visitors — the longest booking, the minimum break between one person’s own bookings (so two 2-hour bookings back to back cannot get around a 2-hour limit) and how many days ahead. They apply only to what visitors book themselves.
  • Confirm automatically — on: the booking is confirmed at once. Off: it waits until a responsible person confirms or declines it.
  • Shared calendar — off, titles, or titles with names. It decides what the people who may book the room see on taken times; nobody else ever sees it.
  • Responsible people — team members who hear about new bookings, cancellations and access requests, and decide them. With nobody chosen, admins are told.

How a visitor books a room

On the room page the visitor signs in, picks a day in the calendar, then a free start time — taken times stay in the grid, greyed out — and finally the length, what the booking is for and an optional note. Each step has its own address, so reloading the page keeps their place. Their room bookings appear under My bookings, where they can cancel until the booking starts.

Working with room bookings

Rooms → Calendar shows the week for one room or all of them, with the bookings waiting for confirmation on top. Click an empty time to book for someone (by email) or to block the room internally; click a booking to confirm, decline, move, rename or cancel it. Your own bookings skip the rules for visitors and the hours, but can never overlap another booking. A booking can repeat every workday, every week or every two weeks for up to a year — dates that are already taken are skipped and listed. The Visitors page has a Rooms tab with each room’s bookings, and the All visitors list shows everyone’s flags.

Automated messages

Each room chooses which message template goes out when: the booking waits for confirmation, is confirmed (with a calendar file attached), is declined, is cancelled by the visitor, is cancelled by you, is moved to another time, and a reminder a set number of hours before. Your first room gets ready-made templates you can edit.

Rooms or services? Use services when a visitor books your time for a treatment, a lesson or a consultation. Use rooms when a known group of people shares a space and simply needs to reserve it.

Memberships

A membership is a pre-paid plan that a visitor purchases — a punch card, a monthly subscription, a season pass. Use memberships to bill in advance and to control who is allowed to book certain events.

What a membership defines

  • Price & currency — what the visitor pays.
  • Usage limits — maximum number of uses and/or maximum duration in days. Leave a limit empty, or set it to 0, and it counts as unlimited.
  • Availability window — when the membership can be purchased (available_from and optional available_to).

How memberships gate events

By itself, a membership is just a product visitors can buy. To use it as a gate, link it to one or more events as an allowed membership. After that, only visitors holding that membership can book the event.

By default a credit is only spent once someone confirms the visitor actually turned up — the seat waits on the present switch in the visitor list. Two settings can waive that, at two different levels: the plan can say this membership always consumes a credit, and an individual event can say this event consumes a credit even without attendance. Either one on its own is enough.

So a no-show costs the visitor a credit when the plan or the event says it should, and costs nothing when neither does — in which case the credit simply sits there until a manager marks the visitor present.

Following one visitor’s membership

Open a visitor’s membership and you get the list of every booking that has spent a credit from it, with the date each one was counted. When someone asks why they have three visits left instead of four, that list is the answer.

You can also change the allowance for that one person without touching the plan everyone else is on — give a replacement class after a cancellation, or correct a miscount. Set their starting number, or add and subtract from it as you go; each change is recorded with who made it, so an adjusted balance can always be explained later.

How a membership gets used

When a visitor with a valid membership books something the membership covers, it is applied for them by default — they do not have to remember to pick it, and you do not have to attach it afterwards. Applying it is not the same as spending it: the credit is reserved at that moment and only counted once attendance is settled, by the rules described above.

Automated membership messages

Memberships can trigger four message templates:

  • After each usage — confirm that a credit was spent and how many remain.
  • Before the end date — a heads-up a configurable number of days before the membership expires.
  • On expiry — sent when the membership ends.
  • Low remaining uses — sent when the visitor’s remaining credits drop below a threshold you set.

Forms

A form is the set of questions a visitor answers while booking. Build it once and attach it wherever you need the answers — an event, a service, a membership, or each individual participant on a reservation.

What you can ask

Each field has a label, a type and an internal name. The available types are:

Text and long text, number, choice (radio buttons or a dropdown), and date, time or date & time.

The internal name matters. It is the stable key your answers are stored under, so keep it steady once people have started answering. Renaming a field starts its history over: old answers stay readable in the responses list, but they no longer line up with the new field.

Forms for each participant

When a booking can include companions, an event can ask for the details of every participant rather than just the person booking. That form must contain a field named name — it is what identifies each participant in your lists.

Returning visitors don’t retype

When someone who has answered a form before books again, their last answers to that same form are filled in for them. It is matched on the form, not on where they answered it — so two events sharing one form pre-fill from each other, and the most recent answer always wins.

An old answer is only reused if it still fits the field as it is defined today. A field that has since been removed or renamed, a choice that is no longer on the list, a number now out of range — all start empty instead. Carrying such a value silently would be worse than a blank: the visitor would see nothing in the box while the stale answer was still submitted.

Reading the answers. Every submission is kept with the booking it belongs to, and the whole set is browsable under Forms → the form’s responses. Managers also see a booking’s answers on the booking itself, and can correct them there.

Message templates

A message template is a reusable piece of text that the platform sends to visitors at the right moment — booking confirmation, payment reminder, attendance reminder, expiry warning, and so on. Define a template once at the account level and reference it from every event, service procedure or membership that should use it.

One template, three channels

Each template has slots for an email version (subject + body), an SMS version (subject + body) and a push notification (title + body). Fill in one, two or all three — at least one of them must be present when you save.

What you leave blank is simply not used:

  • If the email body is empty, no email is sent when this template is triggered.
  • If the SMS body is empty, no SMS is sent when this template is triggered.
  • If the push body is empty, no push notification is sent when this template is triggered.

Alongside the text, each template carries a send email and a send SMS switch, both on by default. Turning one off keeps the wording exactly as you wrote it but stops that channel going out — useful to pause SMS for a month without retyping it later. You can flip them straight from the templates list. Push has no switch: it always goes out when the template has push text, because it is the only channel that reaches a visitor who has given you neither an email address nor a phone number.

A channel also needs somewhere to land. Email is skipped for a visitor with no email address and SMS for a visitor with no phone number, no matter how the switches are set.

How delivery works. Email is handled by Micali.online’s built-in internal mailer by default — no setup needed to start sending visitor emails. You only need to configure an email connector (SendGrid, SMTP or Gmail SMTP) if you want messages to leave your own domain or branded sender. SMS, on the other hand, has no internal fallback and is delivered only once you configure Twilio under Connectors. Push needs no connector at all — the visitor subscribes from their own browser or from the app added to their home screen, and simply receives nothing until they do.

Placeholders you can use

Templates support simple variables that get replaced with real data at send time. You can put any of these inside subject or body, on either channel:

PlaceholderReplaced with
%visitor_first_name%The visitor’s first name.
%visitor_last_name%The visitor’s last name.
%visitor_name%The visitor’s full name.
%visitor_email%The visitor’s email address.
%account_name%The account / business name.
%event_name%The name of the event being referenced.
%event_start_at%Event start time, in the account’s timezone and locale.
%event_location%Event location string.
%service_name%Service name (for service messages).
%service_start_at%Start time of the booked appointment.
%procedure_name%The chosen procedure inside the service.
%responsible_person%Name of the staff member responsible, or the fallback name set on the template.
%membership_name%The membership plan’s name (membership messages only).
%membership_end_date%The date the visitor’s membership ends, in the account’s format.
%membership_remaining_uses%How many uses the visitor has left on that membership.

Placeholders that don’t apply to a particular message (for example, %event_name% in a service reminder) are simply left empty.

Where templates are used

Most of the time a template is picked up automatically from the entity that triggers the message. Here is the full list of slots.

On an event

  • Booking created — sent the moment a visitor submits a reservation.
  • Confirmation — sent when the reservation is confirmed (manually or automatically).
  • First-time confirmation — sent instead of the usual confirmation when this is the visitor’s first booking for the event, so newcomers can get a warmer welcome than regulars.
  • Payment missing — payment reminder, with one or two configurable lead times (first and second reminder, in hours before the event).
  • Attendance reminder — sent a configurable number of hours before the event.
  • Cancellation — sent when the visitor cancels.
  • Account cancellation — sent when an admin cancels the visitor’s reservation.
  • Waiting list — added — sent when the visitor is placed on the waiting list.
  • Waiting list — promoted — sent when a slot opens up and the visitor is allowed to book.

On a service procedure

  • Booking created — sent when the visitor submits the request.
  • Confirmation — sent when the appointment is approved.
  • First-time confirmation — sent instead of the usual confirmation when this is the visitor’s first booking for the service.
  • Denial — sent when the request is rejected.
  • Reminder — sent before the appointment.

On a membership

  • After each usage — sent every time a credit is spent.
  • Before end date — sent a configurable number of days before the membership expires.
  • On expiry — sent when the membership reaches its end date.
  • Low remaining uses — sent when the number of remaining credits falls below the threshold you set.
Quick start with defaults. Every account can seed a starter set of templates in its default language with one click. They cover all of the slots above and are safe to edit afterwards — you only need to write your own templates if the defaults don’t fit your tone.

AI

Micali.online can answer your questions about the app, help you write, and generate the messages your visitors receive. All of it is optional and none of it sends anything to a visitor without you seeing it first.

Ask AI

An assistant inside the app that knows both how Micali.online works and what is in your own account, so you can ask “how do I stop this event appearing publicly?” or “which of my memberships expire this month?” and get an answer about your setup. The conversation is private to your account and kept for seven days.

Which AI does the work

A root admin picks the connection under AI in the account settings. There are two ways to run it:

  • Your own key — paste an API key from ChatGPT or Gemini. You pay your provider directly, and there is no charge from Micali.online for it.
  • Built in — use Micali.online’s own connection with nothing to set up.

A key you paste is stored write-only: the app will show you a masked preview and can reveal it back to you, but it is never handed out through the API. You can test the connection before saving and see how much you have used.

Writing assistant

Next to most longer text boxes — an event or service description, your business description, a chat reply to a customer — sit two buttons. Polish improves what you have already written; Generate writes a first draft from a short brief. Both show the result in a dialog for you to accept or reject, so nothing is ever silently overwritten.

Polish never translates. It answers in whatever language you wrote in, even if the app itself is set to another one — so a Slovak description stays Slovak while you are working in English. Generate follows the language of your brief, unless you ask it for something else.

AI-written visitor messages

A message template can carry a prompt instead of fixed wording, on any of its channels. The text is then written fresh at send time from the prompt plus that booking’s details, so every visitor gets something specific rather than one sentence with their name slotted in.

Keep the static text filled in as well. It is the fallback: if generation fails, or the account has no AI connection, the static wording is sent instead and the visitor never notices.

Which language visitors get. Generated visitor messages follow the account’s language, falling back to the visitor’s. That is deliberate — the template’s surrounding email chrome is written in the account’s language, and a message that switched language halfway through would read as a mistake.
Your own assistant, on your own data. Besides the AI inside the app, you can connect Claude or ChatGPT to Micali.online itself and ask them about your bookings from wherever you already are — see Claude & ChatGPT (MCP).

Claude & ChatGPT (MCP)

Micali.online runs an MCP server. Connect it once to Claude or ChatGPT and you can ask about your bookings in ordinary language — “who hasn’t paid for Saturday?” — without opening the app at all. The assistant runs on your own AI subscription, sees only what you can see yourself, and can be cut off from your profile at any moment.

How to connect

Four steps, about a minute, and there is no key or password left lying anywhere afterwards.

  1. Copy the address

    In the app open Profile → AI connections and copy the address with the Copy button. It is https://mcp.micali.online — the whole address, with nothing after it.

  2. Add it as a custom connector

    In Claude or ChatGPT, open the connector settings and add a new custom connector, pasting that address as its URL. Nothing else is needed — no API key, no client id, nothing to register with us first. Anything else that speaks MCP connects the same way: Claude Code, Codex, Cursor.

  3. Choose manager or guest, then sign in

    Our own sign-in page opens. Pick Manager to work on an account you run, or Guest to see your own reservations. Type the email address you already use in Micali.online and enter the 6-digit code that arrives. It is the same sign-in as the app: the assistant never sees your code, and you never hand it a password.

  4. Ask something

    The connector appears in the assistant’s tool list and is ready. A good first question is a boring one: “what have I got on this week, and who still hasn’t paid?”

No code arrived? Use the address you are already registered with — this page deliberately never creates a new account, and it looks identical either way, so an unknown address simply produces no email. Guests: use the address you booked with.

What you can ask as a manager

The assistant is given thirty-seven tools and chooses between them itself, so there are no commands to learn. What is worth knowing is the outline of what it can reach:

  • Events and dates — the list, with how full each date is, and the whole setup of one event: capacity, deadlines, payment, confirmation.
  • Bookings — who is signed up for a date, with contact details and the confirmed / paid / attended state. Can be narrowed to one date, or to only the unpaid or unconfirmed ones.
  • Waiting list — who is queued for a free seat, longest wait first.
  • Guests — search by name, email or phone, and then one person’s profile with their memberships and recent bookings.
  • Membership plans — what you sell, at what price, with what limit, and how many people hold one right now.
  • Services and appointments — what you offer, and who has an appointment booked in a given period.
  • Rooms — the rooms and who can book them, the bookings in a period and the ones waiting for confirmation, access flags and the people who carry them, and access requests. It can also set up a room, book it for someone once or repeatedly, confirm, decline, move or cancel a booking, give people a flag with an invitation, and approve a request.
  • Booking forms — the extra questions guests answer, field by field, and building or rewriting one from a description.
  • Feedback questionnaires and their results — the survey sent after an event or an appointment, the score per question, and every individual answer with who gave it and what it was about.
  • Bookings waiting to be confirmed — guests who filled the form but never clicked the link in their email, and confirming one on their behalf.
  • The people who manage the account — who they are and what role they hold, inviting someone, changing a role, removing them.
  • The account setup itself — name, contact details, address, timezone, language, formats, booking subdomain, social links.
  • Changing the state of a booking — confirmed, paid, attended.
  • Cancelling a booking on a guest’s behalf.
  • Creating and changing what you offer — events and their dates, services, membership plans, forms, questionnaires. Not only reading the setup but writing it: “set up a beginners’ course, Mondays at six for eight weeks, twelve places” is one request.

Twenty-two of the thirty-seven only read; fifteen can change something. The split matters because your assistant asks you before running anything in the second group, and never asks for the first — so questions stay quick and changes stay deliberate.

In practice it answers questions like “how many places are free next week?”, “has she any visits left on her pass?”, “who missed last Friday’s class?”, “mark Peter’s Saturday as paid”, “add three more dates to the Tuesday course”, “what did people say in the feedback last month?”. It finds the account, the event and the booking for itself — you never have to name an identifier.

What a guest can ask

Guests connect in exactly the same way, choosing Guest on the sign-in page, and get five tools of their own:

  • the organisations they are registered with,
  • their own reservations — events, appointments and room bookings, upcoming ones by default,
  • their memberships, with visits used and visits left,
  • a search for dates they can book, including how many places are free,
  • cancelling their own booking — an event booking respecting the deadline the organiser set, a room booking any time before it starts.

How to disconnect

Access you cannot withdraw with one button is not access worth granting. Every connection is listed on your profile with the day it was made and when it was last used.

  1. Open the list

    Profile → AI connections, the same place the address is. Guests have the same section on their own profile.

  2. Press Disconnect

    The Disconnect button next to the assistant you want to cut off, then confirm in the dialog.

  3. It is gone immediately

    That one connector loses access at once. Everything else stays untouched — the app in your browser stays signed in, and so does every other assistant you have connected. You can add the same one again later; it simply goes through the sign-in once more.

A connection you forget about ends by itself. The access token lasts five hours and the assistant renews it silently, but renewing stops after 90 days.

What the assistant deliberately cannot do

Letting an AI reach guest data is a decision that deserves visible edges. These are ours.

  • It never sees more than you do. Every single call re-checks that you really administer that account. There is no “currently open account” it could lean on, and therefore no way to talk it into someone else’s data.
  • Team members are switched off for now. A team member sees only the events and services assigned to them, and that limit would have to be rebuilt inside each of the twenty-eight tools separately. Until it is built in, the connector refuses their sign-in with a clear reason rather than handing over a half-correct view.
  • Anything that cannot be undone is declared destructive. The protocol lets each tool state whether it only reads and whether its effect can be undone, and Claude and ChatGPT ask you before running anything in the second group. Cancelling a booking is marked destructive — it deletes the row, messages the guest and offers the freed place to the first person waiting — and so are deleting an event, a service, a plan, a form or a questionnaire, and removing someone from the account. Those tools also instruct the assistant to read back what is about to go, in words, and wait for an explicit yes.
  • It obeys the same rules you do. The tools that change something do not carry their own version of the rules — they run the very same code the app runs when you click the button. So an admin who is not a root admin cannot rename the business through the assistant either, nobody can remove their own access, deleting an event still writes to everyone booked on it, and a new manager still gets the ordinary invitation email.
  • We never see your conversation. The assistant runs on your subscription and talks to you directly. On our side we see only the individual tool calls that arrive — the same thing we would see if you were clicking around the app. The text of your questions and its answers never reaches us.
It costs nothing. The MCP server is part of Micali.online for every account and has no price of its own. The AI runs on your own Anthropic or OpenAI subscription, so there is no model cost on our side to pass on to you.

Public vs. Active — what each flag means

Events, services and memberships share two on/off switches. They look similar but they answer two different questions.

Active

Internal switch. Active means the item is in use inside your account. Inactive items disappear from team-member lists and from day-to-day workflows, but they stay in the database with all their history. Use it to retire something without losing the data.

Public

Visitor-facing switch. Public means the item shows up on your public subdomain so visitors can find and book it. Non-public items are still visible to admins, but visitors will not see them — useful for staging something before launch.

Combinations and what they mean

Active Public What happens
On On Fully live. Admins manage it and visitors can book it.
On Off In use internally only — for example, an event you’re still drafting or a service you accept by phone but not on the public page.
Off On Hidden everywhere. Inactive items are not published even when the public flag is on.
Off Off Retired. Kept for historical reporting; no one can see or book it.
For events specifically. Public bookability also requires the event to be a classic event (not a template) and to have at least one upcoming date. A past-only event will not appear publicly even if both flags are on.
For memberships specifically. The availability window matters too: a membership becomes visible only between available_from and available_to (if set).

Webhooks

Webhooks let Micali.online notify your own systems the moment something happens inside an account — a new visitor, a booking, a membership payment. Configure one or more listener URLs per account, pick the events you care about, and Micali.online posts a JSON payload to each URL whenever they fire. Perfect for syncing bookings into a CRM, triggering downstream automations, or building dashboards on top of your reservation data.

Who can configure them

Only root admins can create, edit and delete webhook listeners. Admins and team members cannot see or change them. Webhooks live alongside the other integrations — open Connectors → Webhooks to manage them.

Events you can listen to

Each listener is bound to a single event type. Add several listeners — even pointing at the same URL — to receive more than one event type. The catalog of currently emitted events is:

  • visitor.created — a new visitor signed up in the account.
  • visitor.updated — an existing visitor profile was updated.
  • event_booking.created — a visitor booked an event slot.
  • event_booking.confirmed — an event booking was confirmed (manually or automatically).
  • event_booking.cancelled — an event booking was cancelled.
  • service_booking.created — a visitor booked a service slot.
  • service_booking.confirmed — a service booking was confirmed.
  • service_booking.cancelled — a service booking was cancelled.
  • membership.assigned — a membership was assigned to a visitor.
  • membership.paid — a visitor membership was marked as paid.
  • membership.ended — a visitor membership reached its end date.

What gets sent

Each delivery is a single HTTP POST to your URL with a JSON body. The following headers always accompany the request:

  • Content-Type: application/json — the body is always JSON-encoded.
  • User-Agent: micali-webhooks/1.0 — identifies the sender.
  • X-Micali-Event: <event_type> — repeats the event type so you can route without parsing the body.
  • Authorization — present only when you configure authentication on the listener (see below).

Payload shape

All payloads share the same envelope:

  • event — the event type (same value as the X-Micali-Event header).
  • occurred_at — ISO-8601 timestamp of when the trigger ran.
  • resource — the kind of object inside data: event_booking, service_booking or visitor_membership.
  • data — a snapshot of the resource, including its public ID, current status flags, and the visitor’s contact details (email, first and last name, phone). Event and service bookings also include the linked event or service/procedure block; membership payloads include the membership name and public ID.

Identify objects across deliveries by their public_id — that’s the stable, human-shareable identifier we use everywhere else in the platform.

Authentication

Pick an authentication scheme so your receiver can verify the request originated from Micali.online:

  • None — no Authorization header is sent. Use only when your endpoint is otherwise protected (signed URL, IP allow-list, private network).
  • Basic — username and password are sent as the standard Authorization: Basic ... header.
  • Bearer token — the token you provide is sent as Authorization: Bearer <token>. Stored encrypted at rest and never returned by the API once saved.

Delivery and retries

Delivery is asynchronous and runs through the platform’s background job queue. If the receiver returns a non-2xx status (or the request fails outright), the job retries with exponential backoff — starting at 60 seconds, doubling each time, and capped at one hour between attempts. After ten failed attempts the delivery is marked as failed and dropped. Listeners that are disabled or deleted between the trigger and the actual delivery are silently skipped.

Tip. Build your receiver to be idempotent. A delivery can arrive more than once after a retry, so deduplicate on the resource’s public_id plus the event type before mutating state on your side.

Getting started

The fastest way to go from an empty account to a bookable page is to let the setup interview build it for you.

The setup interview

A root admin of a new account is offered an interview that asks about the business in plain language — what you offer, whether people come in groups at a fixed time or book their own slot, how long things take, when you are open, who works with you — and then creates the whole setup in one go: services and their procedures, opening hours, events and their dates, your business name and category, your public subdomain, your address on the map, whether bookings need approving, which reminders go out, and invitations for your staff.

You do not have to finish in one sitting. Your answers are saved as you go, so closing the tab and coming back later picks up where you stopped. You can also dismiss the interview entirely and build everything by hand — it is offered once, not enforced.

What to check afterwards

The interview leaves everything switched on and ready, but two things are worth a look before you send anyone the link: open your public subdomain in a private browser window to see exactly what a visitor sees, and skim the message templates it seeded so the wording sounds like you.

If you started in a demo

The demo you can open from the website without signing up is a real, working account with a short life — it is deleted once it expires, along with anything you set up in it. Confirm your email address and it becomes an ordinary account instead, keeping everything you have already built. If you have spent an evening arranging your week in a demo, do that before you close the tab.

About your subdomain. The address you pick is reviewed before it goes live, so there is a short wait between asking for it and it working. Until then your booking page is still reachable through the account’s own link.

Signing in

Nobody at Micali.online has a password. Everyone signs in with a code sent to their email, and managers can add a faster way on top of that.

Managers

Enter your email address, and a short code arrives by email. Type it in and you are signed in for the session. If you were heading somewhere specific — a link from a notification, say — you land on that page rather than the dashboard.

The four-digit PIN

Once you are signed in you can set a PIN for the browser you are using. From then on that browser only asks for the four digits instead of the emailed code, for 30 days. It is per browser: setting a PIN on your phone does nothing for your laptop.

Three wrong guesses and the browser stops being trusted — it goes back to asking for an emailed code, and the PIN alone will not get in. The 30 days are counted from when you set it up and are not extended by using it.

Add it to your home screen

Both the manager app and your visitors’ booking page can be added to a phone’s home screen, where they open like an app. This is also what makes push notifications possible on iPhones — there, notifications only work once the page has been added to the home screen.

Visitors

Visitors sign in the same way, with a code to their email, on your own subdomain. A visitor who has never booked with you before is simply created on the spot the first time they sign in.

Everyone needs a first name. Anyone below root admin is asked for theirs right after signing in and cannot skip it — their name appears next to the bookings and messages they handle, so a blank one would leave your team unable to tell who did what.

The dashboard

The first screen after signing in, in three views. The tabs remember which one you chose, so pick the one that matches how you work.

  • Calendar — a full week laid out as a grid, with every event and service slot in place and overlapping ones side by side. You can page through weeks and make the rows taller or shorter to fit a dense day.
  • Agenda — a simple list of what is coming up, one slot after another. This is the one that works best on a phone.
  • Overview — summary cards: what is next, what needs confirming, recent form answers.

Working straight from the calendar

Clicking a slot in the calendar does more than open it. On a slot with room you can book a visitor into it there and then; on an empty one you can share it, open its visitor list, or remove that time entirely if you are not running it.

The numbers count seats, not bookings. One visitor bringing two friends shows as three, because that is what fills the event. The exception is the waiting list, which counts people — there is no seat reserved yet to count.

Managing bookings

Everything after a visitor has signed up: adding people yourself, approving them, moving them, and recording who actually turned up.

Adding someone yourself

Not every booking arrives through the public page — people phone, or catch you in person. Add them by email address: if that address is already one of your visitors it is matched to them, and if it is new the visitor is created. You can set how many seats they take, add their companions, and fill in the form answers on their behalf.

Approving and declining

If the event or procedure does not confirm automatically, new bookings wait for you. Approving one sends the confirmation message; declining sends the denial message, where the procedure has one set. A booking made by someone with no earlier booking can send a different, warmer message than the one your regulars get.

Moving a booking

Plans change, and a visitor should not have to cancel and rebook. An event booking can be moved to another date of the same event or to a different event entirely; a service booking can be moved to another slot or another procedure. Capacity at the destination is re-checked as the move happens, and the seat it frees goes to whoever is first on the waiting list.

Marking who turned up

Once a date has started, every confirmed booking asks one question: did this person come? Answering it is not just record-keeping. Present is what spends a credit from a membership, unless the plan or the event is set to count the booking regardless of attendance; Did not attend gives the seat and the credit back. Until you answer, the credit sits reserved and the visitor’s remaining count does not move.

There are several places to answer it — from a whole class in one tap to a single booking, or from the membership side:

  • The bookings list. Open Visitors → Events, pick the event and look at the confirmed bookings of a past date (the reminder email links straight there). A Presence column appears as soon as the date has started — it is not there for future dates, because there is nothing to answer yet. Each row has a green tick for present and a red cross for did not attend; tap the answer that is lit to take it back. Present Did not attend
  • Everyone present. The header of each date has an Everyone present button. It fills in only the bookings that have no answer yet, so anyone you already marked as absent stays absent. Everyone present
  • A selection. Tick the rows you want and use Mark selected present or Mark selected absent — handy when most of the class came and a few did not.
  • From your phone. On the dashboard, the Agenda view shows a small Attendance pill on every event that has started — amber with a count while answers are missing, green once everyone is answered. Tap it and a panel lists the confirmed bookings with the same present / did-not-attend buttons and an Everyone present shortcut, so you can take the register while people are still in the room.
  • One booking. Open the booking from the list (the pencil icon) and use the Was present switch on its detail page, next to the visitor’s form answers and notes.
  • From the membership. Open Memberships, pick the plan, then the member — the number in the usage column opens their Membership usage page. Every accepted booking waiting on attendance is listed there with a Confirm presence / Did not attend pair, and the members list shows how many of each member’s bookings are still waiting. This is the same answer as everywhere else, just grouped by member, which is the natural place when you are checking how many credits someone has left. Confirm presence Did not attend

Admins can answer for any event. A team member can answer only for the events they are responsible for — everywhere else the buttons are greyed out.

You do not have to remember. When an event has finished and bookings are still waiting on attendance, Micali.online emails whoever is responsible for that date with a link straight to the right list — and only for the bookings where confirming actually changes something.

Payment

Bookings carry a paid flag you switch yourself; Micali.online does not take the money. What it will do is chase it: an event can send a payment reminder once or twice before the date, and only to visitors who are confirmed, still unpaid, and not covered by a membership.

Taking the list elsewhere

Bookings export to a CSV file, for events and for services, so you can hand a register to whoever needs one, add up a month in a spreadsheet, or keep your own copy. It is the list as you have filtered it, not a fixed report.

Awaiting confirmation

Bookings a visitor filled in on your public pages while signed out. Nothing is reserved until they open the link we emailed them — this page is where you see what is still in flight, how much of it never arrives, and where you can step in when the visitor cannot.

How a booking ends up here

A visitor who is not signed in fills in the whole thing — the slot, the seats, their contact details, any form you attached — and is not asked for a code first. Submitting it parks the booking and sends them a single-use confirmation link. Until they open that link nothing exists in your account: no visitor, no booking, no form answer, and no seat is held. That is deliberate — someone typing a stranger’s address can never fill up your event.

The link lasts 24 hours, or until the slot starts, whichever comes first. Opening it proves the address, signs the visitor in and creates the booking through the ordinary rules — capacity, waiting list, signup deadline, your approval — so they get the same answer they would have got booking signed in. If they hold a membership the event accepts, that is the moment they are asked which one to spend.

A visitor who is already signed in never comes through here. They book directly, and there is nothing left for them to confirm.

Nobody has to wait for the email either. Signing in to your booking page shows a Waiting for your confirmation card listing everything parked under that address, each with a Confirm button. Confirming there and opening the mail afterwards anyway is harmless — the link simply reports that it is already confirmed.

What the page shows

Open Awaiting confirmation in the sidebar. Four numbers sit at the top, and the first three are also filters:

  • Waiting for confirmation — the link is still valid and the visitor can still use it.
  • Never confirmed — the link expired unused. This is the number worth watching: it is interest you had and did not keep.
  • Confirmed — became real bookings.
  • Confirmation rate — the share of links that were used. Only links that have run their course are counted, so the ones still in flight do not drag it down all day.

Below them is a bookings-per-day chart: every booking your account took, with this funnel drawn inside it. A booking made by a signed-in visitor, or one you added yourself, never passes through the funnel, so the two inner lines are always a slice of the taller one. The type filter narrows both; the text search narrows the table only, so looking one person up does not redraw your volume as theirs.

Admins and root admins only — the same bar as your visitors list, because until the link is opened these contact details are not proven to belong to the person who typed them.

Confirming for a visitor

The mail went to spam, the link lapsed unread, or they rang the desk instead. Confirm for them sits on every row that is not confirmed yet — expired ones included, which is mostly why the button is there — and books it exactly as the link would have. The rules still decide the outcome: if the event is full the visitor goes on the waiting list, if it needs approving it lands in your approvals, and if the deadline has passed nothing is booked and you are told why. Confirm for them

One thing differs from the visitor’s own click: no prepaid plan is spent, because nobody was asked which one to use. Attach one to the booking afterwards if it should count against a plan.

Every booking made this way records the admin who confirmed it, and the row shows their name.

Knowing it happened

When a booking is parked, a notification arrives in the bell straight away — team members see it too, even though they cannot open this page. It links to the event or service the visitor was aiming at, because there is no booking to link to yet.

Not the same as waiting for your approval. A booking that needs approving is a real booking, holding its seat, waiting on you — you will find it under Managing bookings. A booking on this page is waiting on the visitor, and holds nothing.
These rows do not last. An unconfirmed booking is deleted a week after its link expires, and a confirmed one a month after it was used — keeping somebody’s name, phone number and form answers for a booking that never happened is the wrong thing to do by default. Deleting a row never touches the booking it created. The chart says so too: days older than that window are shaded, because their pending line was emptied by the clean-up rather than by anything a visitor did.

Sharing a date & time

Sometimes you want to send someone a specific slot — “this Thursday at six” — instead of your whole schedule and a hope they pick correctly.

Every place you can share a single slot gives you both a link and a QR code, ready to print or send:

  • On an event’s schedule, next to any upcoming date.
  • On the visitors screen, where you can pick any upcoming date of an event — including one nobody has booked yet.
  • On a service, where you choose the procedure, the day, and the time from the same availability your visitors see.
  • On the calendar and the agenda, straight from the slot itself.

What the visitor gets

The link opens your booking page already on that exact slot, with the other dates out of the way, so there is nothing to choose and nothing to get wrong. If the slot is full they are offered the waiting list for it instead.

A booking button on your website

Put a booking button on your own website. It floats in a corner of every page, and a click lets visitors book your events and services right there — or takes them to your booking page.

Setting it up

Open Website widget in the side menu (root admins only). Choose the button text, its color, the corner it sits in, what a click does and the language of the booking window, try it in the preview, and copy the code.

Paste the code into your website just before the closing </body> tag, on every page where the button should appear. Most website builders (WordPress, Wix, Webflow, Squarespace…) have a place for custom code or an HTML block.

The settings live in the code. Changing them in Micali.online does not touch a button that is already on your website — copy the code again and replace the old one. Your last choices are remembered, so you do not have to set everything up again.

Your own button. Any link or button on your website with the data-micali-open attribute opens the booking window as well, and a developer can call MicaliWidget.open(), MicaliWidget.close() or MicaliWidget.toggle(). The widget code has to be on the page for this to work. If you would rather show only your own buttons, turn on Hide the floating button: the code then draws no button in the corner, and the booking window opens only from your buttons.

A button after the booking. On the Website widget page you can add a button that the booking window shows once a visitor sends a booking — with your own text, color and JavaScript. Nothing runs by itself: your code runs on your website only when the visitor clicks the button (for example to open your payment), and the window then closes. For developers, the page also receives micali:booked and micali:action events with the booking’s kind, id, name and start time — never the visitor’s personal details. With the booking page instead of the window, the booking happens on Micali.online and your website does not see it.

What a click does

  • Booking window — a window opens on your page with a calendar: events by date, services by procedure, day and time. The visitor fills in their details and the booking form, and confirms.
  • Booking page — opens your Micali.online booking page in a new tab, with everything on it, including memberships and rooms.

What the visitor gets

Visitors are not signed in inside the window, so a booking made there works like one made on your booking page without signing in: it becomes valid once they open the link we email them, and they pick any memberships on that confirmation page. Until then it waits under Awaiting confirmation.

The code is tiny and only draws the button. The booking window loads when someone clicks it, so the button does not slow your website down.

Your visitors

Everyone who has ever booked with you, plus anyone you have added, in one list you can search, import into and mail.

Importing a list you already have

Upload a CSV and say which column is which — Micali.online does not care about the column order or what the file calls them. Addresses already in your account are linked rather than rewritten, so importing a list that overlaps with your existing visitors will not overwrite anyone’s details.

The import runs in the background and reports what it did, so a large file does not tie up the screen. There is a ceiling of 500 newly added visitors per day, which is deliberate: it is high enough for a real customer list and low enough that a mistaken upload cannot run away with itself. Anything over the limit is reported back rather than dropped, and re-importing the same file the next day picks it up.

Mailing lists

A mailing list is a saved group of visitors you can write to again and again. Fill it by picking people by hand, or by choosing events and services and a period — everyone who booked those in the last fortnight, the last year, or ever.

A list is a snapshot, not a running query. Once someone is on it they stay until you take them off. A list built from “the last two weeks of yoga” does not quietly empty itself a fortnight later — the people you reviewed are the people who get the mail. Re-running the import over a wider period only adds the newcomers.

Writing to them

You can mail a saved list, everyone on an event, or your whole account. Each message is sent individually, so one bad address cannot hold up the rest, and anyone without an email address is skipped — the count of those is shown before you start writing, not after you send.

The blacklist

Some people you would rather look at twice before letting in — the serial no-show, the one who books six places and brings one. Add their email address to the blacklist, with a note to yourself about why.

It is a second look, not a ban. A blacklisted person can still book; what they cannot do is slip through unnoticed. Their reservation is never confirmed automatically, even on an event that confirms everyone else instantly, and they are never promoted off a waiting list on their own. Somebody has to decide, every time. They are also flagged when you are assembling a mailing list, so you can leave them out of a mailshot without hunting for the name.

The list is keyed to the email address, not to the person’s record — so deleting the visitor and having them sign up again with the same address does not clear it.

Messages with visitors

A conversation is a thread between your team and one visitor. Either side can start it, and everything said stays attached to that person rather than scattered across whoever happened to answer their email.

How a thread starts

A visitor can write to you from their own booking page — about a reservation, or about nothing in particular. You can also open a thread yourself from their row in the visitors list, which is the right way to ask one person a question without turning it into an email everybody gets.

Who answers

Anyone in the account can read and reply, team members included. A conversation can be assigned to a particular person, and there is a mine filter showing what is assigned to you or what you have already replied to — so on a busy day two people are less likely to answer the same visitor twice.

Keeping the list short

Threads can be closed once they are dealt with and reopened if the visitor writes again, which keeps the list to what still needs a person.

Writing help. The AI assistant sits above the reply box too. It answers in the language you typed in, so a reply drafted in your own language stays there.

Feedback questionnaires

Ask the people who came what they thought, automatically, once the event or appointment is behind them.

Setting one up

Write the questions, attach the questionnaire to an event or a service, and say how long after the slot ends it should go out — immediately, the next morning, a few days later, whatever suits. Give it a name for your own use; visitors never see that, only the questions.

What the visitor gets

An email with the first question in it. Answering that one opens the rest on a page of its own — with no sign-in, no password, nothing to remember. The less you ask of someone at that moment, the more answers you get back.

One per booking

Each booking is asked exactly once, and the send is recorded. Somebody who comes to your Tuesday class every week is not asked to rate it every week.

Reading the answers

Responses collect against the questionnaire, so you can read them together rather than one email at a time. You can also send yourself a test copy first and see the whole thing exactly as a visitor will.

Write the questions in each language you serve. Every visitor is asked in their own, falling back to English where you have not supplied a translation — so one questionnaire covers a mixed audience without you running two.

Getting help

For questions this guide does not answer, or when something looks wrong in your account.

Opening a ticket

Admins and root admins can raise a ticket from inside the app, which is better than emailing because it arrives with your account attached — nobody has to ask you which business you are, and we can look at the actual setup you are describing.

How it goes on

A ticket is a conversation, not a form: replies from our side land in the same thread and you are notified by email, so the whole exchange stays in one place instead of fragmenting across a mail chain.

Before you write. The Ask AI assistant can see your account’s own data, so questions like “why can nobody book my Thursday class” are often answered instantly there — and if not, you will at least have narrowed it down before the ticket.

How to create an event and publish it

For root admins and admins. The goal: a visitor can land on your public page and book a slot.

  1. Open the Events page.

    Sign in to the app, choose the right account in the top bar, and open Events from the main menu.

  2. (Optional) Create a template first.

    If you’re going to run the same kind of event repeatedly, create it once as a template — capacity, form, messages and so on. New classic events can then inherit from it.

  3. Create a new classic event.

    Click New event, give it a name and description, set capacity (max participants, whether they can bring friends) and pick the booking form.

  4. Add one or more event dates.

    For each occurrence set the start time and, if needed, the signup deadline. Without at least one upcoming date the event cannot be booked.

  5. Restrict to memberships (optional).

    If only members can attend, add the required memberships under Allowed memberships. Leave empty to let any visitor book.

  6. Pick the messages.

    Choose templates for payment reminders, cancellations and the attendance reminder. Make sure the matching connector (SMTP, SendGrid or Twilio) is configured at the account level.

  7. Turn on Active.

    This makes the event live inside the account. It still won’t reach visitors until the next step.

  8. Turn on Public.

    Now the event appears on your public subdomain. Open the subdomain in a private browser window to verify everything looks right.

Common gotcha. If your event isn’t showing up publicly, check three things: it is a classic event (not a template), both Active and Public are on, and there is at least one date in the future.

How to create a service or procedure and publish it

For root admins and admins. The goal: a visitor can choose a procedure and book a free time slot.

  1. Open the Services page.

    From the app menu, choose Services. The list shows everything that belongs to the active account.

  2. Create the service.

    Click New service, enter the name, description, location, address and timezone. The timezone is important — all availability windows are interpreted in it.

  3. Add procedures.

    For each thing a visitor can book, create a procedure with a name and duration. Optionally set preparation time before the procedure and clean-up time after it so the calendar doesn’t double-book.

  4. Set availability.

    Define the recurring time windows when bookings are allowed (for example, Mon–Fri 9:00–17:00). Only slots inside an active availability window can be booked.

  5. Pick the booking form (optional).

    If you need information from the visitor at booking time — phone, allergies, notes — attach a form to the service.

  6. Turn on Active on the service and on each procedure.

    An inactive service hides everywhere; an inactive procedure stays in the database but doesn’t appear in the booking flow.

  7. Turn on Public on the service.

    Visitors now see the service on your public subdomain, with the available procedures and the next open slots.

How to set up a room people can book

For root admins and admins. The goal: the people you invite can sign in and book the room.

  1. Open the Rooms page.

    From the app menu, choose Rooms and click New room.

  2. Describe the room.

    Enter the name, the description, where it is and how many people it holds. After the first save you can add photos; the first one is the cover.

  3. Set when it can be booked.

    Add the hours for each weekday, the preparation and cleanup minutes, and the time grid.

  4. Set the rules for visitors.

    Choose the longest booking, the break between one person’s bookings and how many days ahead people can book. Leave a field empty for no limit.

  5. Choose who can book.

    Pick one or more flags (you can create one right there), decide whether bookings are confirmed automatically, and choose the responsible people and the shared calendar.

  6. Invite the people.

    On Rooms → Access, paste their email addresses, give them the flag and send the invitation. People who already book with you can simply be given the flag.

  7. Share the link.

    Copy the room link from the Rooms list, or let people find the room on the Rooms tab of your booking page. Switch on Visible to everyone if people without access should see the room too.

Nobody can book? Check that the room is active, has hours on that weekday, and has at least one flag the person actually carries — a room without flags is for your team only.

How to create a membership and publish it

For root admins and admins. The goal: a visitor can buy a membership and use it to book events.

  1. Open the Memberships page.

    From the app menu, choose Memberships.

  2. Create the membership.

    Click New membership, give it a name and a short description that explains what the visitor gets.

  3. Set price, currency and limits.

    Enter the price (in the smallest currency unit), the currency, the maximum number of uses and/or the duration in days. Leaving a limit empty means it is unlimited.

  4. Define when it can be purchased.

    Set available from (when it appears on the public page) and optionally available to (when it disappears). Useful for seasonal or limited-time offers.

  5. (Optional) Link it to events.

    If the membership should unlock specific events, open each event and add the membership under Allowed memberships.

  6. Turn on Active.

    The membership is now part of your account. Existing memberships of returning visitors keep working even when this is off.

  7. Turn on Public.

    Visitors see the membership on your public subdomain and can purchase it. Confirm by opening the subdomain in a private window.

After purchase. Depending on your setup, the membership may need to be marked as paid or confirmed by an admin before it counts as active for the visitor. You can review purchases under the visitor’s profile.

How to create a message template

For root admins and admins. Templates live at the account level — write them once and reuse them on any event, service or membership.

  1. Open the Message templates page.

    From the app menu, choose Message templates inside the active account.

  2. (Optional) Seed the defaults.

    If this is a fresh account, click Seed defaults to create a starter template for every supported slot in the account’s language. You can edit any of them afterwards.

  3. Create a new template.

    Click New template and give it a clear, internal name — for example, “Yoga class — payment reminder”. The name is only shown to your staff.

  4. Write the email version.

    Fill in the email subject and email body. Use placeholders like %visitor_first_name% and %event_start_at% wherever you want personalised values. Optionally set a sender name.

  5. Write the SMS version (optional).

    If you also plan to send this as SMS, fill in the SMS body. Keep it short — SMS providers charge per segment.

  6. Save the template.

    You need at least the name plus an email body or SMS body. The template now appears in the dropdowns on every event, procedure and membership form.

  7. Attach the template where you need it.

    Open the relevant event, service procedure or membership and pick the new template in the appropriate slot — for example, Attendance reminder on an event. Save and you’re done.

No connector, no message. A template will not reach the visitor unless email or SMS delivery is set up for the account.
  • Email — works out of the box. Micali.online ships with a built-in internal mailer, so visitor emails are delivered straight away without any setup. If you’d rather send from your own domain or branded sender, plug in SendGrid, SMTP or Gmail SMTP under the account’s Connectors screen and outgoing email will switch to your connector automatically.
  • SMS — requires Twilio. There is no internal SMS fallback, so SMS templates stay dormant until Twilio is configured.
  • Push — no connector to set up. It reaches only those visitors who have allowed notifications in their browser or added the booking page to their home screen, and is quietly skipped for everyone else.