diff --git a/activities/group-bookings.mdx b/activities/group-bookings.mdx index 8b23e15..9241549 100644 --- a/activities/group-bookings.mdx +++ b/activities/group-bookings.mdx @@ -8,10 +8,20 @@ Group bookings let a single customer book on behalf of multiple participants — ## How group bookings work -1. The organizer selects an activity session and specifies the number of participants. -2. They complete payment for all places in a single transaction. -3. After payment, the organizer is prompted to fill in individual participant details (names, contact information, and any custom fields). -4. Each participant's details are stored against the booking and visible in your [bookings dashboard](/activities/managing-bookings). + + + The organizer selects an activity session and specifies the number of participants. + + + They complete payment for all places in a single transaction. + + + After payment, the organizer is prompted to fill in individual participant details (names, contact information, and any custom fields). + + + Each participant's details are stored against the booking and visible in your [bookings dashboard](/activities/managing-bookings). + + Capacity is reserved at the time of booking. If an organizer books 10 places, those 10 spots are immediately deducted from the session's available capacity. @@ -28,24 +38,70 @@ After a group booking is paid, the organizer can fill in participant details at The organizer receives a link where they can enter each participant's name and any required information. + + Set up both triggers together — an immediate reminder and a follow-up a few days before the session. This gives organizers flexibility while ensuring you have the details you need. + + ## Waivers for group bookings If the activity requires a [waiver](/customers/waivers), each participant needs to complete it individually. The organizer can share the waiver link with participants, or you can set up a [waiver reminder workflow](/integrations/workflows#waiver-and-waitlist-triggers) to notify participants directly. You can check waiver completion status for each participant from the [booking details](/activities/managing-bookings#booking-details). + + Waivers are not transferable between bookings. Even if a participant completed a waiver for a previous session, they may need to complete a new one for the current booking depending on your waiver settings. + + ## Add-ons for groups -[Add-ons](/activities/activities#add-ons) configured as **per-person** are multiplied by the number of participants. Add-ons configured as **per-booking** are charged once regardless of group size. +[Add-ons](/activities/activities#add-ons) behave differently based on their configuration: + +| Add-on type | Behavior | +| --- | --- | +| **Per-person** | Charged for each participant in the group. A 10-person group with a per-person add-on is charged 10 times. | +| **Per-booking** | Charged once regardless of group size. Useful for equipment that the whole group shares. | + +## Pricing for groups + +Group bookings are priced per participant using the activity's standard ticket prices. If you want to offer discounted rates for larger groups, you can: + +- Create a [discount code](/pricing/discount-codes) with a minimum participant requirement +- Use [tiered pricing](/pricing/discount-codes#tiered-discounts) to automatically reduce the per-person cost at higher quantities +- Offer a group-specific [activity pass](/pricing/activity-passes) for regular group organizers ## Managing group bookings From the [bookings dashboard](/activities/managing-bookings), you can: - View all participants and their details -- Add or remove participants (subject to capacity) +- Add or remove participants (subject to available capacity) - Check waiver status for each participant -- Process partial refunds if participants cancel +- Edit participant information after the booking is created +- Process partial refunds if individual participants cancel + +### Reducing group size + +If a participant drops out, you can remove them from the group booking. This frees up their capacity for other customers. You can then process a partial [refund](/activities/cancellations-and-refunds) for the removed participant — either to the original payment method, as [store credit](/pricing/gift-cards), or as cash. + +### Increasing group size + +If the organizer wants to add more participants after the initial booking, you can add them directly from the booking details, provided the session has available capacity. The organizer is charged for the additional participants. + +## Troubleshooting + + + + Check whether [workflow reminders](#collecting-participant-details) are configured. You can also manually send the participant details link from the booking details page. + + + + Verify that the waiver link was sent to the correct email address. The organizer can reshare the link, or you can resend the waiver notification from the booking details. + + + + All group places count toward the session's total capacity. If the session shows as full, check whether the group booking was counted correctly. Each participant in a group uses one capacity slot. + + ## Related guides @@ -56,4 +112,10 @@ From the [bookings dashboard](/activities/managing-bookings), you can: Set up reminders for group organizers. + + Process partial refunds for group changes. + + + Create group discounts with minimum participant rules. + diff --git a/customers/family-accounts.mdx b/customers/family-accounts.mdx index d49583a..84b7838 100644 --- a/customers/family-accounts.mdx +++ b/customers/family-accounts.mdx @@ -1,7 +1,7 @@ --- title: Family accounts description: Manage family members under a single account for shared bookings and memberships. -keywords: ['family accounts', 'family members', 'shared bookings', 'parent account', 'children'] +keywords: ['family accounts', 'family members', 'shared bookings', 'parent account', 'children', 'dependents'] --- Family accounts let customers group related people — such as children, partners, or dependents — under a single account. This simplifies booking for families and enables features like shared memberships and restricted activity passes. @@ -17,13 +17,32 @@ A customer account can have multiple family members linked to it. Each family me The primary account holder manages the family — adding members, making bookings, and handling payments on behalf of everyone. +## Adding family members + +Customers can add family members from their account on your [booking page](/getting-started/booking-page). For each family member, they enter: + +- **Name** — first and last name +- **Contact details** — email or phone (optional, depending on the member's age) +- **Relationship** — how the member relates to the account holder + +Staff can also add family members from the [customer profile](/customers/overview) in the dashboard. + + + There is no limit to the number of family members that can be linked to a single account. + + ## Booking for family members -When a family member makes a booking, they can select which family members are attending. Each selected member: +When a customer with family members makes a booking, they can select which family members are attending. Each selected member: - Counts toward the session's [capacity](/activities/activities#capacity-and-availability) - Has their own waiver completion tracked individually - Can have [per-person add-ons](/activities/activities#add-ons) applied +- Appears as a named participant in the booking details + + + When a customer books for multiple family members in the same session, it works like a [group booking](/activities/group-bookings) — all participants are included in one transaction. + ## Memberships and passes @@ -38,6 +57,16 @@ Family members can hold their own [memberships](/pricing/memberships) and [activ When purchasing a membership for specific family members, Sailia checks whether any of the selected users already hold that membership. If a duplicate is found, the purchase is blocked. +### How membership discounts apply + +When a family with active memberships books an activity: + +1. Sailia identifies which family members are attending. +2. For each attending member, it checks whether they hold a membership with a linked [discount](/pricing/discount-codes#membership-discounts). +3. The discount is applied only to the ticket for the qualifying member — not to other family members. + +This means a family where one child has a membership and another does not will see the discount applied to only one ticket. + ## At the point of sale When processing a [POS transaction](/point-of-sale/overview), staff can link the sale to a customer account to: @@ -45,6 +74,27 @@ When processing a [POS transaction](/point-of-sale/overview), staff can link the - See all family members and select who is attending - Auto-apply [membership discounts](/pricing/discount-codes#membership-discounts) for eligible family members - Redeem [activity passes](/pricing/activity-passes) assigned to specific members +- View waiver status for each family member before the activity starts + +## Waivers for family members + +Each family member must complete [waivers](/customers/waivers) individually. The primary account holder can complete waivers on behalf of minors or dependents. Waiver status is tracked per family member per booking, so you can see at a glance who has completed their forms. + +## Troubleshooting + + + + Verify the customer has a registered [account](/customers/customer-accounts) (not a guest checkout). Family members can only be added to full customer accounts. + + + + Check that the specific family member (not just the account holder) holds the qualifying membership. Membership discounts apply per individual, not per account. + + + + Purchases must be made separately for each family member. If the system blocks the purchase, one of the selected members may already hold that membership. Check the **Memberships** tab on the [customer profile](/customers/overview). + + ## Related guides @@ -52,6 +102,9 @@ When processing a [POS transaction](/point-of-sale/overview), staff can link the View and manage customer profiles and accounts. + + How self-service accounts work. + Set up recurring membership plans. diff --git a/customers/newsletter-forms.mdx b/customers/newsletter-forms.mdx index db31a5d..733cae1 100644 --- a/customers/newsletter-forms.mdx +++ b/customers/newsletter-forms.mdx @@ -1,7 +1,7 @@ --- title: Newsletter signup forms description: Embed a newsletter signup form on your website to grow your subscriber list. -keywords: ['newsletter', 'signup form', 'email list', 'marketing', 'embed form'] +keywords: ['newsletter', 'signup form', 'email list', 'marketing', 'embed form', 'subscribe'] --- You can embed a newsletter signup form on your website so visitors can subscribe to your mailing list directly. Sailia generates the embed code for you — copy it and paste it into your site's HTML. @@ -10,6 +10,8 @@ You can embed a newsletter signup form on your website so visitors can subscribe When a visitor fills in your embedded form and submits it, they are automatically added to your audience in Sailia. You can then reach them through [marketing campaigns](/customers/marketing) and [automated workflows](/integrations/workflows). +The form collects the visitor's name and email address. No payment information or account creation is required — the form is purely for newsletter subscriptions. + ## Get the embed code @@ -34,18 +36,68 @@ When a visitor fills in your embedded form and submits it, they are automaticall The embed code is a self-contained HTML snippet. It works on any website that allows custom HTML, including WordPress, Squarespace, Wix, and static sites. +## Where to place the form + +For best results, place the newsletter form where visitors are most likely to engage: + +- **Homepage** — in a sidebar or footer section to capture general interest +- **Blog or news page** — near content that demonstrates your expertise +- **Contact page** — visitors already looking to engage with your business +- **Booking confirmation page** — after a customer has completed a booking (if your website supports this) + + + Avoid placing the form in a pop-up or modal that interrupts the browsing experience. Inline forms embedded directly into the page tend to perform better. + + ## After embedding Once the form is live on your website: -- **New subscribers** appear in your audience automatically. -- You can segment and target subscribers using audience filters when sending campaigns. -- Subscribers can unsubscribe through the link included in your marketing emails. +- **New subscribers** appear in your audience automatically +- You can segment and target subscribers using audience filters when sending [campaigns](/customers/marketing) +- Subscribers can unsubscribe through the link included in your marketing emails +- Duplicate submissions (same email address) do not create duplicate audience entries + +## Platform-specific instructions + + + + Use a **Custom HTML** block in the WordPress block editor. Paste the embed code into the block and publish the page. If you are using a page builder plugin (like Elementor or WPBakery), look for an HTML or code widget. + + + + Add a **Code** block to your page. Paste the embed code and save. Squarespace may require a Business plan or higher to embed custom code. + + + + Use the **Embed Code** > **Custom Element** or **HTML iframe** widget. Paste the embed code into the widget settings. Position the widget where you want the form to appear. + + + + Open your HTML file in a text editor. Paste the embed code at the location where you want the form to appear, then upload the updated file to your hosting provider. + + If the copy button does not work in your browser, select the code manually from the text area and copy it with your keyboard. +## Troubleshooting + + + + Check that the embed code was pasted into an area that supports custom HTML. Some website builders require a specific block type (like "Custom HTML" or "Code") rather than a regular text block. Also confirm that you saved and published the page after pasting. + + + + Verify the form is using the correct embed code from your Sailia account. If you copied code from a different account or an older version, it may not be linked correctly. Regenerate the code and re-embed it. + + + + Your website's CSS styles may override the form's default styling. Check your website's theme for conflicting styles on form elements, buttons, or input fields. + + + ## Related guides @@ -55,4 +107,7 @@ Once the form is live on your website: Set up triggered email sequences for your subscribers. + + Embed your full booking page alongside newsletter forms. + diff --git a/docs.json b/docs.json index a6ea5cf..2119308 100644 --- a/docs.json +++ b/docs.json @@ -18,12 +18,12 @@ "pages": [ "index", "getting-started/overview", + "getting-started/key-concepts", "getting-started/setup-checklist", "getting-started/account-settings", "getting-started/booking-page", "getting-started/embedding", - "getting-started/locations", - "getting-started/faq" + "getting-started/locations" ] }, { @@ -40,14 +40,19 @@ ] }, { - "group": "Customers and marketing", + "group": "Customers", "pages": [ "customers/overview", "customers/customer-accounts", "customers/family-accounts", "customers/waivers", "customers/file-uploads", - "customers/notifications", + "customers/notifications" + ] + }, + { + "group": "Marketing", + "pages": [ "customers/marketing", "customers/newsletter-forms" ] @@ -99,6 +104,14 @@ "integrations/accounting-sync", "integrations/adventuro" ] + }, + { + "group": "Help and reference", + "pages": [ + "getting-started/faq", + "getting-started/troubleshooting", + "getting-started/data-privacy" + ] } ] }, diff --git a/getting-started/data-privacy.mdx b/getting-started/data-privacy.mdx new file mode 100644 index 0000000..375c999 --- /dev/null +++ b/getting-started/data-privacy.mdx @@ -0,0 +1,126 @@ +--- +title: Data privacy and security +description: How Sailia handles customer data, payment security, and privacy compliance. +keywords: ['data privacy', 'security', 'GDPR', 'data protection', 'customer data', 'PCI compliance'] +--- + +Sailia is designed to help you manage customer data responsibly. This page explains what data is collected, how it is stored, and the tools available to help you meet your privacy obligations. + +## What data Sailia collects + +Sailia stores customer information needed to process bookings, manage accounts, and communicate with your customers. + +| Data type | Purpose | Where stored | +| --- | --- | --- | +| **Name and email** | Booking confirmations, [workflow emails](/integrations/workflows), account login | Sailia | +| **Booking history** | Visible to customers and staff on the [customer profile](/customers/overview) | Sailia | +| **Payment details** | Card numbers and payment credentials | [Stripe](/payments/stripe) (not stored in Sailia) | +| **Membership and pass status** | Tracks active subscriptions and remaining sessions | Sailia | +| **Waiver responses** | Signatures, checkboxes, text, and [file uploads](/customers/file-uploads) | Sailia | +| **Profile images** | Optional photos uploaded by customers | Sailia | +| **Staff notes** | Internal notes on [customer profiles](/customers/overview#notes) — not visible to customers | Sailia | +| **Tracking events** | [Booking tracking](/integrations/booking-tracking) data sent to GTM or PostHog | Third-party analytics provider | + +## Payment security + +All card payments are processed through [Stripe](/payments/stripe), which is PCI DSS Level 1 certified — the highest level of payment security certification. Sailia never stores, processes, or has access to full card numbers. When customers enter payment details: + +1. Card data is sent directly to Stripe's servers. +2. Stripe returns a secure token that Sailia uses for the transaction. +3. Recurring payments for [memberships](/pricing/memberships) and [instalment plans](/payments/instalments) use Stripe's tokenized billing. + + + Because Sailia never handles raw card data, your PCI compliance scope is minimized. You do not need to complete a full PCI Self-Assessment Questionnaire for using Sailia. + + +## Customer accounts and consent + +When customers create an [account](/customers/customer-accounts) on your booking page, they provide their information voluntarily. Customers can: + +- **View their data** — booking history, memberships, passes, and waivers are visible in their account +- **Update their details** — customers can edit their name, email, and contact information +- **Manage marketing preferences** — subscribers can unsubscribe from [marketing emails](/customers/marketing) through the link included in every campaign + +### Guest checkout + +Customers who book as guests (without creating an account) provide only the information required to complete the booking. Their details are stored against the booking record but they do not have a login to manage their data. + +## Waivers and document storage + +[Waivers](/customers/waivers) can collect sensitive information including signatures, health declarations, and uploaded documents. This data is: + +- Stored securely against the individual booking +- Accessible only to staff with appropriate [permissions](/staff/permissions) +- Linked to the specific participant who completed the waiver + + + If your waivers collect health or medical information, check your local regulations for any additional data handling requirements that may apply. + + +## Staff access controls + +Sailia's [permission system](/staff/permissions) lets you control which staff members can access sensitive data: + +| Permission | What it controls | +| --- | --- | +| **View other user profiles** | Access to customer profiles, booking history, and notes | +| **Financial dashboard** | Access to payment data, payouts, and financial reports | +| **Staff management** | Access to other staff members' profiles and timesheets | +| **Communications** | Access to send emails and manage marketing campaigns | + + + Follow the principle of least privilege — give staff only the permissions they need for their role. See [permissions reference](/staff/permissions) for detailed recommendations. + + +## Data in integrations + +When you connect third-party integrations, data may be shared with external services: + +| Integration | Data shared | +| --- | --- | +| [Stripe](/payments/stripe) | Payment amounts, customer email, product details | +| [Xero](/integrations/accounting-sync) | Payout amounts, invoice line items, VAT categories | +| [Google Tag Manager / PostHog](/integrations/booking-tracking) | Booking events, session IDs, product names | +| [Adventuro](/integrations/adventuro) | Activity details, availability, booking confirmations | +| [Automated workflows](/integrations/workflows) | Customer name, email, booking details (via merge fields) | + + + Review the privacy policies of each third-party service you connect. You are responsible for ensuring these integrations comply with your local data protection regulations. + + +## Data exports + +Sailia provides several [export options](/payments/reporting) for extracting your data: + +- **Booking exports** — all booking records with customer details +- **Financial exports** — payment and payout data +- **Customer exports** — customer profiles and contact information +- **Donation exports** — donation records with [Gift Aid](/payments/donations) details +- **Timesheet exports** — staff timesheet entries + +Exports are generated as CSV files that you can download from the dashboard. + +## Best practices + +- **Review staff permissions regularly** — remove access for staff who no longer need it +- **Use waivers for consent** — add a consent checkbox to your [waiver templates](/customers/waivers) for activities that require explicit data consent +- **Monitor marketing subscribers** — respect unsubscribe requests and keep your [audience list](/customers/marketing) clean +- **Secure your account** — use a strong password for your Sailia admin account +- **Audit integrations periodically** — disconnect integrations you no longer use to minimize data sharing + +## Related guides + + + + Control what each staff member can access. + + + Collect consent and signed documents. + + + How payment data is handled securely. + + + How customers manage their own data. + + diff --git a/getting-started/key-concepts.mdx b/getting-started/key-concepts.mdx new file mode 100644 index 0000000..c65fd86 --- /dev/null +++ b/getting-started/key-concepts.mdx @@ -0,0 +1,101 @@ +--- +title: Key concepts +description: Definitions of the core terms and concepts used throughout Sailia. +keywords: ['glossary', 'key concepts', 'terminology', 'definitions', 'terms'] +--- + +This page defines the key terms you will encounter when using Sailia. Refer back here if you come across an unfamiliar concept in the documentation. + +## Activity types + +| Term | Definition | +| --- | --- | +| **Course** | A scheduled, recurring activity with set times — for example, a weekly surf lesson. Courses have [sessions](/getting-started/key-concepts#session) that customers book into. | +| **Hire** | An equipment rental with a start and end time — for example, kayak hire for two hours. Hires track individual items and their availability. | +| **Event** | A one-off or recurring occasion — for example, a beach cleanup or a birthday party. Events work similarly to courses but are typically non-repeating. | + +All three activity types share the same booking, payment, and scheduling system. See [Activities](/activities/activities) for setup instructions. + +## Booking terms + +| Term | Definition | +| --- | --- | +| **Session** | A specific date and time slot for an activity. Customers book a session, not an activity directly. | +| **Capacity** | The maximum number of participants allowed in a session. Capacity is shared across all [sales channels](#sales-channels). | +| **Group booking** | A single transaction where one person (the organizer) books on behalf of [multiple participants](/activities/group-bookings). | +| **Waitlist** | A queue for a fully booked session. When a spot opens, the next person on the [waitlist](/activities/waitlists) is notified. | +| **Add-on** | An optional extra that can be attached to a booking — either **per-person** (charged per participant) or **per-booking** (charged once). | +| **Basket** | The collection of items a customer has selected before completing payment at checkout. | + +## Sales channels + +Bookings can come from multiple sources: + +| Channel | Description | +| --- | --- | +| **Online** | Customers book through your [booking page](/getting-started/booking-page). | +| **Point of sale (POS)** | Staff process walk-in bookings and sales through the [POS terminal](/point-of-sale/overview). | +| **Adventuro** | Bookings from the [Adventuro marketplace](/integrations/adventuro) (if connected). | + +All channels share real-time capacity, so a session cannot be overbooked. + +## Customer terms + +| Term | Definition | +| --- | --- | +| **Customer account** | A login that lets customers manage bookings, memberships, and waivers on your [booking page](/customers/customer-accounts). | +| **Guest checkout** | Completing a booking without creating an account. The customer provides only the information needed for the transaction. | +| **Family account** | A customer account with linked [family members](/customers/family-accounts) — each member has their own profile, booking history, and waiver status. | +| **Audience** | Your list of email subscribers, used for [marketing campaigns](/customers/marketing). | +| **Waiver** | A digital form with text blocks, checkboxes, signature fields, and file uploads that customers complete before an activity. See [Waivers](/customers/waivers). | + +## Pricing terms + +| Term | Definition | +| --- | --- | +| **Membership** | A recurring subscription plan billed through Stripe. Members receive benefits like auto-applied [discounts](/pricing/discount-codes#membership-discounts). See [Memberships](/pricing/memberships). | +| **Activity pass** | A prepaid bundle of sessions. Customers purchase a pass and redeem it against eligible activities. See [Activity passes](/pricing/activity-passes). | +| **Discount code** | A code that reduces the price of a booking or product. Supports fixed, percentage, and [tiered pricing](/pricing/discount-codes). | +| **Gift card** | A stored-value code that customers redeem at checkout. Also created when you issue a [refund as store credit](/activities/cancellations-and-refunds). See [Gift cards](/pricing/gift-cards). | +| **Instalment plan** | A payment schedule that splits a booking's cost into multiple payments over time. See [Instalment plans](/payments/instalments). | + +## Payment terms + +| Term | Definition | +| --- | --- | +| **Stripe** | The payment processor that handles all card payments in Sailia. See [Payments and Stripe](/payments/stripe). | +| **Payout** | A transfer from Stripe to your bank account, containing the net amount from processed payments minus fees. | +| **MOTO payment** | A mail-order / telephone-order payment where staff enter a customer's card details manually through the POS. | +| **Store credit** | A [gift card](/pricing/gift-cards) balance issued as a refund alternative. Available immediately for the customer to use. | +| **Gift Aid** | A UK tax scheme allowing charities to claim extra on [donations](/payments/donations). Customers declare their eligibility at checkout. | + +## Staff and operations terms + +| Term | Definition | +| --- | --- | +| **Permission group** | A set of access controls assigned to staff. See [Permissions reference](/staff/permissions). | +| **Auto timesheet** | A timesheet entry automatically generated from a scheduled booking, including setup and pack-down time. See [Auto daily timesheets](/staff/auto-timesheets). | +| **Timesheet invoice** | A payment request submitted by staff based on their timesheet entries. See [Timesheet invoices](/staff/timesheet-invoices). | +| **Till shift** | A POS session that tracks cash payments and provides shift-level reporting. See [Point of sale](/point-of-sale/overview). | +| **Location** | A physical site where you run activities. Used to organize schedules, POS terminals, and card readers. See [Locations](/getting-started/locations). | + +## Integration terms + +| Term | Definition | +| --- | --- | +| **Workflow** | An automated action (email or SMS) triggered by a specific event. See [Automated workflows](/integrations/workflows). | +| **Trigger** | The event that starts a workflow — for example, "new booking" or "membership past due." See [Workflow triggers](/integrations/workflow-triggers). | +| **Merge field** | A placeholder in a workflow message that is replaced with real data at send time — for example, `{{customer.first_name}}`. | +| **Accounting category** | A label that maps products to tax rates and Xero account codes. See [Taxes and VAT](/payments/taxes). | +| **Booking tracking** | Events fired during the booking flow for analytics tools like [GTM or PostHog](/integrations/booking-tracking). | + +## Related guides + + + + See how all the pieces of Sailia fit together. + + + Get your account configured step by step. + + diff --git a/getting-started/locations.mdx b/getting-started/locations.mdx index 42317c6..d4393fe 100644 --- a/getting-started/locations.mdx +++ b/getting-started/locations.mdx @@ -14,6 +14,7 @@ If you run activities at multiple venues — for example, a beach site and a lak - **Assign POS terminals** to the correct venue so staff use the right card reader - **Register card readers** at the location where they are physically installed - **Track timesheets** with location data on each entry +- **Organize your booking page** so customers see activities grouped by venue If you operate from a single site, you still have one default location. You do not need to set up additional locations unless you expand. @@ -37,16 +38,39 @@ If you run activities at multiple venues — for example, a beach site and a lak Once you have locations configured, you can assign them to: -| Item | Where to assign | -| --- | --- | -| **Activities** | In the activity settings — determines which location the session appears under in the schedule | -| **POS terminals** | In the POS terminal configuration — links the terminal to a physical venue | -| **Card readers** | When [registering a reader](/point-of-sale/card-readers#register-a-card-reader) — each reader belongs to one location | -| **Staff timesheets** | Automatically recorded based on the booking's location | +| Item | Where to assign | Effect | +| --- | --- | --- | +| **Activities** | In the activity settings | Determines which location the session appears under in the schedule | +| **POS terminals** | In the POS terminal configuration | Links the terminal to a physical venue for [grid layout](/point-of-sale/overview#grid-layout) and card reader pairing | +| **Card readers** | When [registering a reader](/point-of-sale/card-readers#register-a-card-reader) | Each reader belongs to one location and processes payments for that site | +| **Staff timesheets** | Automatically recorded | Based on the booking's assigned location | ## Filtering by location -The [schedule view](/activities/managing-bookings#schedule-filters) includes a location filter. When you have multiple locations configured, use it to narrow the schedule to sessions at a specific site. +The [schedule view](/activities/managing-bookings#schedule-filters) includes a location filter. When you have multiple locations configured, use it to narrow the schedule to sessions at a specific site. This is especially useful for staff who only work at one location — they can filter the schedule to see only their relevant sessions. + +## Location-specific POS setup + +Each location can have its own POS configuration: + +- **Grid layout** — customize the [POS grid](/point-of-sale/overview#grid-layout) to show products and activities relevant to each venue +- **Card readers** — register separate [card readers](/point-of-sale/card-readers) for each location +- **Till shifts** — manage [till shifts](/point-of-sale/overview#till-shifts) independently per location + + + When setting up a new location, start by assigning activities and configuring the POS grid before going live. This ensures staff have everything they need from day one. + + +## Editing and removing locations + +You can rename a location or update its details at any time from the location settings. If you need to remove a location: + +1. Reassign any activities, POS terminals, and card readers to a different location. +2. Delete the location from the settings page. + + + Removing a location does not delete the bookings or timesheets associated with it. Historical data is preserved, but the location filter will no longer include the removed site. + ## Related guides @@ -57,4 +81,10 @@ The [schedule view](/activities/managing-bookings#schedule-filters) includes a l Register card readers at specific locations. + + Filter the schedule by location. + + + Configure your business settings. + diff --git a/getting-started/troubleshooting.mdx b/getting-started/troubleshooting.mdx new file mode 100644 index 0000000..4b6fe17 --- /dev/null +++ b/getting-started/troubleshooting.mdx @@ -0,0 +1,137 @@ +--- +title: Troubleshooting +description: Solutions for common issues with bookings, payments, card readers, emails, and integrations. +keywords: ['troubleshooting', 'problems', 'issues', 'fix', 'help', 'support', 'error'] +--- + +This page collects solutions for the most common issues you may encounter when using Sailia. If your issue is not listed here, contact [support](mailto:support@sailia.com). + +## Bookings + + + + Cancellations free up capacity immediately. If spots still show as sold out, check whether other bookings were made between the cancellation and your check. Verify you are looking at the correct session date and time in the [schedule view](/activities/managing-bookings#schedule-filters). + + + + Common causes include: + - **Payment failure** — the customer's card was declined. Ask them to try a different payment method. + - **Session full** — another customer may have booked the last spot. Check whether [waitlists](/activities/waitlists) are enabled so they can register interest. + - **Browser issue** — ask the customer to clear their browser cache or try a different browser. + - **Waiver blocking checkout** — if a [waiver](/customers/waivers) is required, the customer must complete it before proceeding. + + + + Verify the [location filter](/activities/managing-bookings#schedule-filters) is set correctly. If you have multiple [locations](/getting-started/locations), the schedule may be filtered to a different site. Also check the date range — bookings only appear on the dates they are scheduled for. + + + + Open the booking from the [bookings dashboard](/activities/managing-bookings) and edit the session date or time. If the session they need is full, you can increase capacity temporarily or [cancel and rebook](/activities/cancellations-and-refunds). + + + +## Payments and refunds + + + + Card refunds processed through [Stripe](/payments/stripe) take 5-10 business days to appear. The exact timing depends on the customer's bank. If it has been longer than 10 business days, check the refund status in your Stripe dashboard. + + + + This can happen with [instalment plans](/payments/instalments) where only the first payment needs to succeed. Check the booking's payment status in the [bookings dashboard](/activities/managing-bookings). If the initial payment failed, the booking should not have been confirmed — contact support if this occurred. + + + + Stripe sends payouts on a regular schedule (usually daily or weekly). Check your payout schedule in the [financial dashboard](/payments/reporting). New Stripe accounts may have a longer initial payout delay. Verify your bank details are correct in your Stripe account settings. + + + + Verify the [gift card](/pricing/gift-cards) has a remaining balance. Check that the code has not expired and was entered correctly (codes are case-sensitive). If the card was issued as store credit from a [refund](/activities/cancellations-and-refunds), confirm the refund was processed successfully. + + + +## Emails and notifications + + + + Ask the customer to check their spam or junk folder. You can resend the confirmation from the [booking details](/activities/managing-bookings) at any time. If the issue persists, verify the customer's email address is correct on their [profile](/customers/overview). + + + + Check that the [workflow](/integrations/workflows) is enabled and the trigger conditions are met. Verify the workflow has an email or SMS action configured. If using merge fields, ensure they are formatted correctly — an invalid merge field can prevent the message from sending. + + + + Check whether multiple [workflows](/integrations/workflows) are triggered by the same event. For example, both a "new booking" workflow and a "booking confirmation" workflow could send overlapping messages. Review your active workflows and disable any duplicates. + + + +## Card readers and POS + + + + Check that the reader is powered on and connected to the internet (Wi-Fi or ethernet). If the reader shows as offline, restart the device. If the registration code is invalid, restart the reader to generate a new code. See [card reader setup](/point-of-sale/card-readers#troubleshooting) for detailed steps. + + + + The decline comes from the customer's bank, not from Sailia. Ask the customer to try a different card or payment method. If all card payments are failing, check your internet connection and verify the [card reader](/point-of-sale/card-readers) is properly registered. + + + + Verify the [POS grid layout](/point-of-sale/overview#grid-layout) is configured for the correct [location](/getting-started/locations). Each location can have its own grid layout. If products are missing, check that they are published and assigned to the correct selling channel. + + + +## Memberships and passes + + + + Stripe handles recurring payment retries automatically. If all retries fail, the membership may be paused or cancelled depending on your Stripe settings. A warning banner appears on the customer's **Memberships** profile tab with a **Complete Payment** button that opens the Stripe customer portal. You can also set up a **Membership past due** [workflow](/integrations/workflows) to notify the customer automatically. + + + + Sailia prevents duplicate memberships for the same person on the same plan. Check whether the [family member](/customers/family-accounts) already has an active membership. If they do, the purchase is blocked intentionally. + + + + Verify that the [activity pass](/pricing/activity-passes) is not expired, has remaining redemptions, and the booked activity is included in the pass's eligible activities. If the pass has **Single user only** enabled, confirm the correct family member is included in the booking. + + + + Check the code's [usage limits](/pricing/discount-codes#usage-limits), product eligibility, and date restrictions. Verify the customer's basket meets all conditions (minimum items, activity combination, etc.). Usage is counted per item, not per basket. + + + +## Integrations + + + + Confirm that [Sync to Xero](/integrations/accounting-sync) is toggled on, the payout was created after you enabled syncing, the payout status is paid, and your Xero connection is active. See [Xero troubleshooting](/integrations/accounting-sync#troubleshooting). + + + + Check that your [Google Tag Manager or PostHog](/integrations/booking-tracking) container ID is entered correctly in your account settings. Verify the tracking script is loading on your booking page by checking your browser's developer tools for network requests. + + + + Verify your [Adventuro integration](/integrations/adventuro) API key is active and correctly configured. Check that the activities you want listed are published and have available sessions. Contact Adventuro support if the API key was recently regenerated. + + + +## Still need help? + +If you cannot find a solution above, contact the Sailia support team at [support@sailia.com](mailto:support@sailia.com). Include: + +- A description of the issue +- The affected booking or customer reference (if applicable) +- Screenshots of any error messages +- The steps you have already tried + + + + Answers to common questions about Sailia features. + + + Review and update your account configuration. + + diff --git a/index.mdx b/index.mdx index 59df78d..dc63a5f 100644 --- a/index.mdx +++ b/index.mdx @@ -15,6 +15,9 @@ Find guides and references for every part of Sailia — from taking bookings and A step-by-step checklist to get your account ready to take bookings. + + Definitions of the core terms used throughout Sailia. + Configure your business profile, payments, and integrations. @@ -27,9 +30,6 @@ Find guides and references for every part of Sailia — from taking bookings and Set up locations when you operate from more than one site. - - Answers to common questions about setting up and using Sailia. - ## Activities and scheduling @@ -61,7 +61,7 @@ Find guides and references for every part of Sailia — from taking bookings and -## Customers and marketing +## Customers @@ -82,6 +82,11 @@ Find guides and references for every part of Sailia — from taking bookings and Understand the emails Sailia sends and how to customize them. + + +## Marketing + + Grow your subscriber list and reach customers with campaigns. @@ -184,13 +189,19 @@ Find guides and references for every part of Sailia — from taking bookings and -## API and developer tools +## Help and reference + + Answers to common questions about Sailia features. + + + Solutions for common issues with bookings, payments, and more. + + + How Sailia handles customer data and payment security. + Explore the Sailia API endpoints. - - Record and query metered usage events across your account. - diff --git a/pricing/memberships-and-passes.mdx b/pricing/memberships-and-passes.mdx deleted file mode 100644 index b9d0ecf..0000000 --- a/pricing/memberships-and-passes.mdx +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: Memberships and activity passes -description: Offer recurring memberships and prepaid activity pass bundles to your customers. -keywords: ['memberships', 'activity passes', 'recurring billing', 'prepaid passes', 'subscription'] ---- - -Memberships and activity passes give customers flexible ways to pay for your activities beyond one-off bookings. Memberships provide ongoing access with recurring billing, while activity passes let customers prepay for a bundle of sessions. - -## Memberships - -Memberships are recurring subscription plans that give customers access to benefits like discounted bookings, exclusive activities, or automatic discounts at checkout. - -### Create a membership plan - - - - Navigate to your memberships section and select **Create Membership**. - - - Enter the membership name, description, and recurring price. Choose a billing interval (monthly, quarterly, or yearly). - - - Define what members receive. This typically includes a [membership discount](/pricing/discount-codes#membership-discounts) that auto-applies at checkout. - - - Make the membership available on your booking page for customers to sign up. - - - -### Plan visibility - -By default, all membership plans are visible on your public booking page. You can hide a plan so that it no longer appears to customers browsing online, while keeping it available for staff to sell through the [point of sale](/point-of-sale/overview). - -To hide a plan, open the plan settings and set **Visible** to **No**. Hidden plans: - -- Do not appear on your public booking page -- Remain available in the point of sale, so staff can still sign customers up in person -- Can be made visible again at any time - -This is useful when you want to offer a plan exclusively through in-person sales, phase out a plan without archiving it, or temporarily remove a plan from your website while keeping it sellable at the counter. - - - Hiding a plan does not affect existing members. Customers who are already subscribed continue their membership as normal. - - -### Membership discounts - -When you link a [discount code](/pricing/discount-codes#membership-discounts) to a membership, it is automatically applied whenever the member checks out. Membership discounts are always auto-applied and stackable, so members can combine their membership benefit with other promotional codes. - -You can configure how long the associated Stripe coupon lasts: - -- **Forever** — the discount applies for the entire membership duration -- **Time-limited** — the discount applies for a specified number of months - -### Viewing membership details - -When you open a member's detail page, the header displays the **membership name** and **plan name** — for example, "Gold Membership (Annual)." This makes it easy to identify which product and billing tier each member is on, especially when you offer multiple plans under the same membership. - -The detail page also shows the **current billing period** as a date range (e.g., "01/04/2026 – 01/05/2026") alongside the billing interval. If the billing cycle has a start date but no end date yet, only the start is shown. - -On a customer's profile, the **Memberships** tab lists all active memberships with the same membership and plan name labels, the current billing period, any attached add-ons, and the member users. - -### Billing - -Memberships are billed through Stripe. When a customer signs up: - -1. A Stripe subscription is created with the configured billing interval. -2. Payments are collected automatically on each billing cycle. -3. If a payment fails, Stripe's retry logic attempts to collect again. - -The **Renewal date** on your subscription settings page indicates when the next billing cycle begins. - -### Past-due payments - -When a membership payment fails and the subscription becomes past due, Sailia displays a warning banner on the customer's **Memberships** profile tab. The banner reads "Action required — One or more subscriptions are past due" and includes a **Complete Payment** button. - -Clicking **Complete Payment** opens the Stripe customer portal, where the customer (or a staff member on their behalf) can update the payment method and settle the outstanding balance. - -You can also set up an [automated workflow](/integrations/workflows#membership-triggers) using the **Membership past due** trigger to send an email or SMS when a payment fails. This lets you proactively notify the customer and include a direct link to resolve the issue, without waiting for them to log in and see the banner. - - - The banner appears automatically whenever at least one of the customer's memberships has a past-due status. It disappears once all outstanding payments are resolved. - - -### Adding members from the same family - -Multiple members of the same family can hold the same membership, as long as each person is only added once. When you purchase a membership for specific family members, Sailia checks whether any of the selected users are already on that membership. If one or more of them are, the purchase is blocked with an error. - -This means you can buy the same membership for different family members in separate transactions. For example, if a parent purchases a membership for one child, they can later purchase the same membership for a sibling — but they cannot re-purchase it for a child who is already a member. - -### Membership add-ons - -Add-ons let you attach optional extras to a membership plan. Customers can subscribe to add-ons when they sign up, or you can add them to an existing membership later. Each add-on can be one-time or recurring, and you can set a maximum quantity per member. - -#### Create and link an add-on - - - - Navigate to the membership plan you want to add extras to. - - - Select **Link Add-on**. You can create a new add-on or link an existing one. Enter the add-on name, an optional description (up to 150 characters), and choose whether billing is **recurring** (charged each billing cycle) or **one-time**. - - - Set the price for the add-on. Optionally set a **max quantity** to cap how many units a member can subscribe to. - - - -Add-ons are billed through Stripe alongside the membership subscription. Recurring add-ons follow the same billing interval as the membership plan. - -#### Add an add-on to an existing member - -You can attach add-ons to an active membership at any time. When you add an add-on to an existing member, Stripe prorates the charge for the current billing cycle by default. - -### Migrating memberships - -If you are switching to Sailia from another membership system, you can bulk-import your existing members. The migration process creates families, users, and membership instances from your import data. - -During migration, you can also assign add-ons to each imported membership instance. This means members keep their existing add-on subscriptions when they move to Sailia — there is no need to manually re-add them after import. - -Each row in your import data can include: - -- **Plan ID** — the Sailia membership plan to assign the member to -- **Billing cycle dates** — the current billing period start and end -- **Member number** — an optional custom member number to preserve from your old system -- **Add-ons** — a list of add-on selections, each with a membership add-on ID and quantity -- **Note** — an optional note attached to the membership instance - - - Add-ons included during migration must already be linked to the target membership plan in Sailia. Create your membership plans and link the relevant add-ons before running the import. - - -## Activity passes - -Activity passes are prepaid bundles that give customers a set number of sessions to use over time. They are ideal for regular attendees who want a better per-session price. - -### Create an activity pass - - - - Navigate to your activity passes section and select **Create Pass**. - - - Enter the pass name, description, and upload an optional image. - - - Set the price, max redemptions, and expiry. Expiry can be a number of months after purchase or a fixed date. - - - Choose which activities the pass can be redeemed against. Optionally enable **Single user only** to restrict the pass to one family member (see below). - - - Choose whether the pass is available to anyone or restricted to membership holders. If members-only, select which memberships are eligible. - - - -### Single user only - -By default, an activity pass can be used by any participant in a booking. When you enable **Single user only**, the pass is locked to a specific family member chosen at the time of purchase. - -- During checkout, the buyer selects which family member the pass is assigned to. -- Only bookings that include that specific user will have the pass discount applied. -- Confirmation emails display the name of the restricted user so both you and the customer know who the pass belongs to. -- If the pass is also restricted to certain memberships, only family members who hold a qualifying membership can be selected. - -This is useful when you want to ensure a pass is non-transferable — for example, a 10-session pass that should only be used by one child rather than shared across the family. - -### Redeeming a pass - -When a customer with an active pass books an eligible activity, they can apply the pass at checkout instead of paying the full price. Each booking deducts uses from the pass balance based on the number of participants. For example, a booking with three participants deducts three uses. - -Activity pass discounts stack with other discounts, so customers can combine a pass with promotional codes or membership benefits. - -## Accounting - -If you use [Xero accounting sync](/integrations/accounting-sync), assign accounting categories to your membership plans and activity passes. This ensures revenue is categorized correctly on Xero invoices. - -## Discounts - -Both memberships and activity passes are eligible for [discount codes](/pricing/discount-codes). When creating a discount, enable **Memberships** or **Activity passes** under product eligibility to allow the discount to apply. - -## Troubleshooting - - - - Stripe handles recurring payment retries automatically. If all retries fail, the membership may be paused or cancelled depending on your Stripe settings. When a payment is past due, a warning banner appears on the customer's **Memberships** profile tab with a **Complete Payment** button that opens the Stripe customer portal. You or the customer can use this to update the payment method and retry the charge. You can also configure a **Membership past due** [workflow](/integrations/workflows#membership-triggers) to automatically email or text the customer when this happens. - - - - Sailia prevents duplicate memberships for the same person on the same plan. Check whether the family member already has an active membership. If they do, the purchase is blocked intentionally. - - - - Verify that the pass is not expired, has remaining redemptions, and the booked activity is included in the pass's eligible activities. If the pass has **Single user only** enabled, confirm the correct family member is included in the booking. - - - -## Related guides - - - - Create discounts for memberships and passes. - - - How Stripe handles membership billing. - -