Platform Documentation
Complete feature reference for WeSellTours — a multi-tenant travel booking SaaS platform.
Platform Overview
WeSellTours enables tour operators, DMCs, and travel agencies to create branded booking storefronts selling multiple service types from a single dashboard. The platform supports multi-vendor marketplaces, Stripe Connect payments, and white-label storefronts.
Supported Service Types
Operator Onboarding Operator
Signup Wizard
A 5-step guided signup flow at /operator/signup:
- Step 1 — Account: Full name, email, password
- Step 2 — Business: Business name, phone, subdomain (with live availability check), country
- Step 3 — Services: Select which services to enable (hotels, tours, cars, boats)
- Step 4 — Plan: Choose Free, Professional, or Business
- Step 5 — Complete: Stripe Connect onboarding prompt
Subdomain validation checks minimum length (3 chars), reserved words (www, api, admin, app, etc.), and uniqueness in real-time via /operator/api/check-subdomain/:subdomain.
Setup Wizard
After signup, a 4-step setup wizard at /operator/setup:
- Branding: Business name, description, primary/secondary/accent colours
- Contact: Email, phone, WhatsApp, street address, city, country
- Services: Toggle hotels, tours, cars, boats on/off
- Payment: Bank transfer details (bank name, account, branch), cash-on-arrival toggle
Completing the final step sets the tenant status to active and launches the storefront.
Operator Dashboard Operator
The main dashboard at /operator/dashboard displays:
- Total service count across all types
- Individual counts per service type (hotels, tours, cars, boats)
- Total bookings and pending bookings
- Total revenue (aggregated from all bookings)
- Stripe Connect status banner (not connected / pending / active)
- Trial period banner with days remaining
- Quick action cards linking to create new services
- Storefront preview link (subdomain URL)
The sidebar navigation links to service management pages, bookings, settings, subscription, storefront preview, and logout.
Service Listings Management Operator
Operators manage all service types through the admin panel at /admin/*. Each service type has full CRUD operations:
| Service | List | Create | Edit | Delete |
|---|---|---|---|---|
| Hotels | /admin/hotels | /admin/hotels/create | /admin/hotels/:id/edit | DELETE /admin/hotels/:id |
| Tours | /admin/tours | /admin/tours/create | /admin/tours/:id/edit | DELETE /admin/tours/:id |
| Cars | /admin/cars | /admin/cars/create | /admin/cars/:id/edit | DELETE /admin/cars/:id |
| Boats | /admin/boats | /admin/boats/create | /admin/boats/:id/edit | DELETE /admin/boats/:id |
| Events | /admin/events | /admin/events/create | /admin/events/:id/edit | DELETE /admin/events/:id |
| Spaces | /admin/spaces | /admin/spaces/create | /admin/spaces/:id/edit | DELETE /admin/spaces/:id |
| Flights | /admin/flights | /admin/flights/create | /admin/flights/:id/edit | DELETE /admin/flights/:id |
Additional listing features:
- Availability calendar: Per-service date management with block/unblock, per-date pricing, and capacity tracking at
/admin/:serviceType/:serviceId/availability - Categories: Hierarchical categories per service type with CRUD and bulk operations at
/admin/categories/:service - Attributes: Custom attributes with terms per service type at
/admin/attributes/:service - Locations: Reusable location management with soft-delete and recovery at
/admin/locations - Media library: Upload, organise into folders, bulk delete at
/admin/media - Flight extras: Airline management, airport management (with bulk import), seat type configuration
Booking Management Operator
Manage bookings at /admin/bookings:
- View all bookings with filters by status and service type
- Booking detail view with customer info, pricing breakdown, payment status, and status history
- Update booking status (pending, confirmed, processing, completed, cancelled, rejected) with notes
- Pagination and sorting
Booking statuses
| Status | Description |
|---|---|
pending | Awaiting payment or confirmation |
confirmed | Payment received or manually confirmed |
processing | Being fulfilled |
completed | Service delivered |
cancelled | Cancelled by customer or operator (refund issued if paid via Stripe) |
rejected | Rejected by operator |
Settings & Branding Operator
Configure your storefront at /operator/settings with tabbed sections:
- General: Business name and description
- Branding: Primary, secondary, and accent colours (colour picker)
- Contact: Email, phone, WhatsApp, full address (street, city, state, country, zip code)
- Social Media: Facebook, Instagram, Twitter/X, YouTube, LINE URLs
- SEO: Meta title, description, keywords, Google Analytics ID, Facebook Pixel ID
- Payments: Stripe Connect status and onboarding, bank transfer details, cash-on-arrival toggle
Additional admin settings
Platform-wide settings at /admin/settings cover site name, logo, favicon, default currency, and feature toggles.
Payments & Stripe Connect Operator
Stripe Connect onboarding
Operators connect their Stripe account via the Account Links API (Standard accounts):
/operator/stripe/connect/authorize— Initiates onboarding, redirects to Stripe/operator/stripe/connect/callback— Return from Stripe, syncs account status/operator/stripe/connect/status— JSON endpoint returning connection state/operator/stripe/connect/disconnect— Soft-disconnect
The dashboard shows a wizard banner until Stripe is fully connected (charges enabled + payouts enabled).
Payment methods
- Stripe: Card payments via PaymentIntent with connected account. Platform commission applied as
application_fee_amount - Wallet: Customer wallet credit (can be combined with Stripe for partial payment)
- Bank transfer: Offline — booking stays pending until manually confirmed
- Cash on arrival: Auto-confirmed, customer pays in person
Platform commission model
| Plan | Platform Commission |
|---|---|
| Free | 0.5% per booking |
| Starter | 0.3% per booking |
| Professional | 0% |
| Business | 0% |
Commission is collected via Stripe's application_fee_amount on each PaymentIntent. Operators on Professional plans and above pay no platform commission.
Webhook
Stripe Connect webhooks are handled at /webhooks/stripe-connect (raw body parsing, before JSON middleware).
Subscription Plans Operator
Manage your subscription at /operator/subscription. Plans include usage limits and feature flags:
- Listings limit: Max number of services across all types
- Bookings/month: Monthly booking cap
- Team members: Number of staff accounts
- Storage: Media upload storage
- Features: Custom domain, white-label, API access, advanced analytics, priority support, custom emails, multi-language
All new accounts start with a 14-day trial. Usage tracking displays current counts vs plan limits.
Content Management Operator
CMS features accessible via the admin panel:
- Pages: Create and publish custom pages at
/admin/pages— displayed at/page/:slugon the storefront - News/Blog: Articles with categories, featured images, and SEO at
/admin/news. Categories managed at/admin/news-categories. Displayed at/news - Menus: Navigation menu configuration at
/admin/menus - Tags: Tagging system at
/admin/tags - Newsletters: Subscriber management, status updates, export at
/admin/newsletters - Languages & Translations: Multi-language UI support with import at
/admin/languagesand/admin/translations
Advanced Features Operator
User management
Full user CRUD at /admin/users — create, edit, delete, change role, change status, reset password.
Roles & permissions
Custom roles with permission arrays at /admin/roles. Assign roles to users.
Review moderation
Moderate customer reviews at /admin/reviews — approve or reject pending reviews.
Coupons
Create discount codes at /admin/coupons with:
- Percentage or fixed amount discount
- Minimum order amount, maximum discount cap
- Usage limits (total and per-user)
- Applicable to specific service types, services, or vendors
- Start/end dates and active status
Wallet management
Admin wallet tools at /admin/wallets — view balances, add credit, deduct funds.
Vendor payouts
Manage vendor payout requests at /admin/payouts — approve, reject, mark as paid.
Enquiries
View and reply to customer enquiries at /admin/enquiries.
Verification requests
Review identity/business verification documents at /admin/verifications.
System logs
View and clear system logs at /admin/logs.
Tools
Admin tools at /admin/tools — clear cache, reindex data.
Vendor Dashboard Vendor
Vendors (service suppliers invited by operators) have a dedicated dashboard at /vendor/dashboard showing:
- Total earnings (90% of paid bookings after commission)
- Total and pending bookings
- Active service counts per type
- Average rating and total review count
- Recent bookings (last 5)
- Pending payout balance
Vendor Service Management Vendor
At /vendor/services, vendors can:
- View all their listed services across types (hotels, tours, cars, boats)
- Filter by service type, status, or search by title/description
- Sort by newest, oldest, price (low/high)
Service creation and editing is done via the admin panel routes (/admin/*) with vendor-scoped access — vendors only see and manage their own listings.
Bookings & Enquiries Vendor
Bookings
At /vendor/bookings:
- View bookings for vendor's services with filters (status, service type, date range)
- Update booking status with notes
- Booking status email sent to customer on update
- Stats showing pending, confirmed, completed, and cancelled counts
- Pagination (20 per page)
Enquiries
At /vendor/enquiries:
- View customer enquiries with status filtering
- Mark as read, reply (with email notification), close
- Unread/pending count displayed
Vendor Payouts Vendor
At /vendor/payouts:
- View available balance (total earnings minus paid and pending payouts)
- Request a payout with amount validation
- Configure payout method (bank transfer or PayPal) at
/vendor/payouts/setup - Track payout status: requested → approved → processing → paid (or rejected)
Browsing & Search Customer
Storefront browsing
Customers browse operator storefronts via subdomain or slug-based URLs. Each storefront shows only services enabled and belonging to that tenant:
- Homepage with featured services
- Service listing pages with pagination (12 per page), sorting (featured, newest, price), and filtering (location, price range, type/category)
- Service detail pages with gallery, pricing, reviews, and related services
- Contact page
Search
Unified search across all service types at /search — searches title and description with optional type and price filters.
Booking Flow Customer
Creating a booking
The booking flow at /bookings/create/:serviceType/:serviceId supports all 7 service types with service-specific pricing logic:
- Hotels: Room price × nights × rooms
- Tours: (Adult price × adults) + (child price × children)
- Cars: Daily rate × days
- Boats: Daily or hourly rate
- Events: Ticket price × count (supports free events)
- Spaces: Hourly or daily pricing
- Flights: Seat price per passenger
Tax calculation: 7% VAT applied to subtotal after any discount.
Coupon support
Customers can apply coupon codes at checkout via /bookings/apply-coupon. Validates code, expiry, service type, and usage limits.
Payment
At /bookings/:id/payment, customers select a payment method:
- Stripe: Creates a PaymentIntent via
/bookings/:id/create-payment-intent, confirms via/bookings/:id/confirm-payment - Wallet: Deducts from wallet balance (can combine with Stripe)
- Bank transfer: Booking stays pending until operator confirms
- Cash on arrival: Auto-confirmed
After payment, a confirmation page displays at /bookings/:id/confirmation with booking code and details.
Cancellation
Customers can cancel pending or confirmed bookings at /bookings/:id/cancel. Stripe refunds are issued automatically for Stripe-paid bookings. Wallet credits are refunded if used.
Customer Account Customer
Authentication
- Register at
/auth/register(with rate limiting: 5 per hour) - Login at
/auth/login(with rate limiting: 10 per 15 minutes) - Social login: Google OAuth, Facebook OAuth
- Forgot password with email reset token
- Email verification
Profile
At /user/profile — update name, phone, address, date of birth, gender, bio. Change password at /user/change-password.
My bookings
At /user/bookings — view all bookings with status filtering, stats (total, upcoming, completed, cancelled).
Wishlist
At /user/wishlist — save and manage favourite services.
Reviews
At /user/reviews — view submitted reviews with status, ratings, and vendor replies.
Wallet
At /wallet:
- View balance and transaction history
- Top up wallet at
/wallet/topup - Pay for bookings from wallet
- Check balance via
/wallet/balance
Messages
At /messages:
- View conversations (direct, booking-related, support, group)
- Send/receive messages with attachments
- Mark as read, search, unread count
- Create new conversations
Notifications
At /user/notifications — view and manage notification preferences.
Verification
Submit identity/business verification documents for review.
Multi-Tenancy
Tenant routing
The platform supports two tenant routing modes:
- Subdomain:
paradise.yourdomain.com— identified via host header parsing - Custom domain: Verified custom domains via DNS (CNAME/TXT records) with SSL support
- Slug-based:
yourdomain.com/:tenantSlug/hotelsfor path-based routing
The tenant middleware (identifyTenant) runs on every request, resolving tenant from host or path and attaching branding, theme, settings, and contact info to the request/response context.
Data isolation
Every service listing, booking, review, and enquiry is scoped to a tenant. The admin panel and vendor panel filter all queries by tenant or vendor ID.
Tenant cache
Tenant lookups are cached in-memory with a 5-minute TTL. Cache is cleared when tenant settings are updated.
Storefront branding
Each tenant storefront uses custom branding from res.locals: name, logo, primary/secondary/accent colours, favicon. CSS variables are generated from the tenant's theme configuration.
REST API
Public and authenticated API endpoints at /api/*:
Authentication
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/login | Login, returns JWT (7-day expiry) |
| POST | /api/auth/register | Register new user, returns JWT |
| GET | /api/auth/me | Get authenticated user (requires JWT) |
Listings (public)
| Method | Endpoint | Filters |
|---|---|---|
| GET | /api/hotels | city, stars, minPrice, maxPrice, page, limit |
| GET | /api/tours | city, category, minPrice, maxPrice |
| GET | /api/cars | city, carType, minPrice, maxPrice |
| GET | /api/boats | city, boatType, minPrice, maxPrice |
| GET | /api/flights | from, to, date, airline |
| GET | /api/news | category, page, limit |
| GET | /api/search | q, type, limit |
| GET | /api/gateways | Available payment methods |
Each listing endpoint also has a detail route: /api/:type/:id.
Authenticated endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/bookings | List user's bookings |
| POST | /api/bookings | Create booking |
| POST | /api/wishlist/toggle | Add/remove wishlist item |
| GET | /api/wishlist | Get wishlist |
| POST | /api/reviews | Submit review (pending moderation) |
| GET | /api/reviews/:type/:id | List approved reviews |
| POST | /api/enquiries | Submit enquiry (no auth required) |
Platform Administration Superadmin
Superadmin panel at /superadmin for platform-wide management:
Dashboard
Platform overview with total tenants, active tenants, total users, total bookings, total revenue, MRR, subscription breakdown, monthly revenue chart (12 months), and tenant growth trend.
Tenant management
- List, create, view, edit, and delete tenants
- Activate/suspend tenants
- Manage custom domains per tenant (add, remove, verify)
Billing & plans
- Invoice management — view, mark as paid
- SaaS plan CRUD — create, edit, activate/deactivate plans
User management
- View all platform users
- Change roles, block/unblock, impersonate users
Analytics, settings, and logs
- Platform analytics dashboard
- Platform-wide settings configuration
- System log viewer with clear functionality
Email Notifications
The email service supports SMTP and SendGrid providers with tenant-branded layouts:
- Welcome email on registration
- Operator welcome email with getting-started guide
- Booking confirmation and payment receipt emails
- Booking status update emails
- Enquiry notification emails
- Payout status emails
- Password reset and email verification emails
Emails use tenant branding (colours, name, logo) when sent from a tenant context.