Quickstart: Unified Scheduling

Configure resources, appointment types, automated reminders, calendar sync, and embeddable booking pages — the full setup in 6 steps, in under 15 minutes.

1

Create Bookable Resources

CategoryExampleDefault capacityCommon config
**Staff**Personal trainer, dentist, hair stylist, sales rep1 booking/slotLinked to a CRM contact + identity
**Asset**Treatment room, conference room, tennis court1 booking/slotLinked to a location + amenities
**Group**Group fitness class, workshop, group therapyN bookings/slotCapacity 5–50, can be live or virtual
2

Configure Appointment Types

FieldWhat it doesExample
Name + descriptionCustomer-facing copy on the booking page"60-min Sports Massage"
DurationMinutes per appointment60, 90, 120
Required resourcesWhich resource(s) the booking consumes"Massage room + therapist"
PricingFree, fixed price, deposit, or pay-at-appointment$150 (or $30 deposit + $120 at session)
CapacityFor group sessions only"Yoga class — capacity 12"
Pre-booking bufferBlock customers from booking less than N hours in advance2 hours minimum
Booking horizonHow far ahead they can book60 days max
3

Set Up Email + SMS Reminders

No-shows are the #1 destroyer of appointment-based businesses. Automated reminders drop no-show rates by 50-70%.

Navigate to Admin → Scheduling → Notifications and enable:

  • Booking confirmation — instant email + optional SMS on booking creation
  • 24-hour reminder — email + SMS the day before
  • 1-hour reminder — SMS only (most people check texts more than email near appointment time)
  • Post-appointment follow-up — feedback request + rebooking prompt
  • Cancellation confirmations — closure for the customer + return-of-deposit confirmation

Each notification is templated and brandable. Variables available: {{customerName}}, {{appointmentTime}}, {{location}}, {{rescheduleUrl}}, {{cancelUrl}}, etc.

```typescript // Reminder templates are records on the appointment_reminders collection — // one record per timing + channel combination. Find the 24-hour email // reminder for a given appointment type, then update its copy: const { data: reminders } = await aeion.api.get( "/v1/appointment_reminders?where[timing][equals]=1440&where[channel][equals]=email&where[appointmentType][equals]=at_initial-consultation", );

await aeion.api.patch(/v1/appointment_reminders/${reminders[0].id}, { subject: "Tomorrow: {{appointmentType}} at {{appointmentTime}}", body: `Hi {{customerName}}, This is a friendly reminder that you have a {{appointmentType}} scheduled tomorrow at {{appointmentTime}}.

Location: {{location}} Address: {{locationAddress}}

Need to reschedule? {{rescheduleUrl}} Need to cancel? {{cancelUrl}}

We look forward to seeing you!, });

Timezone-aware delivery — the engine sends "1 hour before" based on the customer's local time, not yours. A customer in Tokyo gets their 1-hour reminder at 14:00 JST; a customer in NYC gets theirs at 14:00 EST. No manual timezone math.

4

Connect Calendar Sync

Two-way calendar sync keeps the appointment data in sync between Aeion and Google Calendar / Microsoft 365 / Apple Calendar. Bookings created in either system reflect in both.

Setup per resource:

  1. Authorize the calendar. Each staff resource clicks "Connect Google / Microsoft Calendar" in their profile — OAuth flow gets read+write scope.
  2. Configure sync direction. Default: bidirectional. Optional: read-only (block out Aeion based on external calendar, but don't push Aeion bookings out) — for staff who want to keep personal events private.
  3. Choose what syncs. All appointments / only customer-facing / only with specific tags. Per-resource setting.

Conflict prevention: if a staff member adds a personal event to their Google Calendar, the time becomes blocked in Aeion automatically. Customers can't double-book the staffer's time.

Per-customer calendar invites: every booking sends a .ics attachment to the customer with the appointment time + location. The customer clicks "Add to Calendar" and the appointment lands in their personal calendar without any manual entry.

5

Share Your Booking Page

Every appointment type gets a public booking URL: https://your-tenant.aeionos.com/book/<appointment-type-slug>. Share it as-is, or embed into your existing website.

Embed options:

```html <!-- Inline embed --> <iframe src="https://your-tenant.aeionos.com/book/initial-consultation?embedded=true" width="100%" height="600" frameborder="0" ></iframe>

<!-- Popup widget --> <script src="https://your-tenant.aeionos.com/embed.js"></script> <button data-aeion-booking="initial-consultation">Book Now</button> ```

White-label customization:

  • Logo + brand colors (Settings → Scheduling → Branding)
  • Custom domain (book.yourcompany.com via CNAME)
  • Remove all "Powered by Aeion" branding (Pro tier)
  • Custom CSS (Pro tier)

Pre-filled bookings — generate links pre-filled with customer info: ?firstName=Jane&lastName=Doe&email=jane@example.com. Useful when sending booking links from email campaigns where you already know the customer.

UTM + analytics — every booking link auto-appends tracking parameters. Booking analytics breaks out conversions by source / medium / campaign.

6

Monitor & Optimize

The Scheduling Analytics dashboard (Admin → Scheduling → Analytics) surfaces:

  • Booking funnel — visits → form starts → submissions → confirmed bookings
  • No-show rate — by appointment type, by day of week, by lead time
  • Utilization — % of available slots booked, per resource
  • Revenue — total booked + average per appointment + deposit conversion
  • Cancellation patterns — when do customers cancel, and why (if you collect reasons)
  • Rebooking rate — % of customers who book a second appointment

Cross-reference with CRM segments to identify which customer types have higher no-show or cancellation rates. Adjust deposit policies, reminder cadence, or booking-horizon rules accordingly.

A/B testing — Marketing's Wilson Score A/B engine works on appointment types too. Test "60-min Massage" vs "60-min Sports Massage" naming; let the engine pick the better-converting version.

Integration Recipes

CRM auto-create on booking. When a new email books for the first time, a CRM contact record is created automatically with their name, email, phone, and the appointment they booked. Marketing campaigns and follow-up sequences can target them immediately.

Commerce deposit handling. Booking-time deposits route through Aeion Commerce as a standard order. Refunds, cancellation-fee deductions, and revenue reconciliation all happen on the same engine your storefront uses.

SMS via Connect. All SMS reminders route through Aeion Connect's compliance-aware SMS pipeline — TCPA opt-in / out, quiet-hours enforcement, A2P 10DLC registration (US), GDPR consent (EU) all automatic.

Loyalty stacking. A loyalty member booking an appointment can automatically get a tier discount applied to the deposit. Stack with promotional discounts using the same precedence rules as e-commerce checkout.

Cancellation policy enforcement. Tiered cancellation policies (50% fee within 24h, 100% no-show) are evaluated automatically when a customer cancels. Fee charged to the original payment method via Stripe / Adyen / etc.

Group session waitlists. When a group class is full, customers can join the waitlist. If a slot opens (someone cancels), the next person on the waitlist is auto-promoted + emailed. No manual waitlist management.

Troubleshooting

Customer says they didn't get the confirmation email. Check the delivery status on the booking's detail page in the admin view. Common causes: (1) email landed in spam (suggest they whitelist your domain), (2) typo in email at booking (correct in admin + resend), (3) email provider quirks. The Resend Confirmation button is always available in the booking-detail admin view.

Resource shows as unavailable when it should be free. Three layers of availability evaluation: (1) default working hours, (2) availability overrides, (3) existing bookings, (4) synced external calendar events. Use Admin → Resources → Availability Inspector to see why a specific time slot is blocked.

Booking page shows wrong timezone. The page auto-detects the customer's timezone from their browser. If they manually override, that selection persists in the URL params. Resource working hours are stored in the resource's local timezone — make sure that's set correctly in Step 1.

Customer says calendar didn't sync. Check the calendar integration health in Admin → Scheduling → Integrations. Common causes: (1) OAuth token expired (re-authorize), (2) calendar account suspended on Google / Microsoft side, (3) read-only mode enabled (Aeion can't push). The Sync Now button forces a manual refresh.

Deposit charged but no booking exists. This is rare, but the system reconciles payments against bookings automatically every few minutes. If a payment was captured without a matching booking, it either completes the booking or refunds the deposit and alerts the admin — no manual cleanup required.

Frequently Asked Questions

Use Availability Overrides on each resource to block specific dates or define custom hours. Overrides supersede the weekly default. For shared holidays (e.g., Christmas) you can apply a tenant-wide closure via Settings → Scheduling → Closures, which updates all resources at once.

Yes. Set the appointment type to require multiple resources (e.g., Provider AND Room). The engine only shows slots when ALL required resources are simultaneously available. Useful for treatments needing both a therapist and a specific room.

Tiered policies (e.g., "50% fee within 24h, 100% no-show fee") are enforced automatically. Cancellations within the free window get full refund; within fee windows get the configured deduction; no-shows charge the full amount. All routed through Aeion Commerce + your payment provider.

Yes. Per appointment type, choose: free, fixed price (charged in full), deposit (e.g., $30 deposit + $120 at session), or pay-at-appointment. Stripe / Adyen / etc. handle the deposit hold and final capture.

First-write-wins with database-level atomic guards. The losing customer sees "This slot was just booked — please pick another" within a fraction of a second. No double-bookings possible.

Yes. Embed as inline iframe, popup widget, or build via the booking API into your own UI. The embed has zero-config domain whitelisting (works on any subdomain you own).

Appointment types can be marked "recurring-eligible". When booked, the customer chooses frequency (weekly, biweekly, monthly) and series length (e.g., 8 sessions). The engine books all slots upfront, holds them in the calendar, and respects holidays / cancellations on a per-session basis.

Yes. Set appointment type to "customer-only" — only customers with an existing CRM record (matched by email) can book. Useful for follow-up appointments, member-only services, or VIP scheduling.

Yes. When a group session reaches capacity, the booking form shows a Join Waitlist option. If someone cancels, the next person is auto-promoted with an email + SMS notification giving them 30 minutes to confirm or pass.

Yes. Create a Booking Page (Settings → Scheduling → Booking Pages) that bundles multiple appointment types into a single URL. Customer picks the service first, then the slot. Useful for therapists offering multiple modalities, salons with multiple services, etc.

Ready to streamline your scheduling?