Experiences
Sell tours, classes, and workshops with recurring time slots, a public booking page, Stripe checkout with fees and tips, waivers, and a waitlist.
Experiences are for anything you sell by the session to the public — a walking tour, a cooking class, a tasting, a workshop, a guided hike. You describe it once, set a recurring schedule, and VendorStreet generates bookable time slots on a public page where guests pick a time, pay, and get a confirmation.
Unlike markets, where vendors book spots from you, experiences sell directly to guests. If you run both, they live side by side in one organization and roll up into the same reports.
Find them under Settings → Organization → Experiences, or at /admin/organization/experiences.
What do I need before I start?
Connect your payouts. Every experience on VendorStreet is a paid booking that runs through Stripe — there is no free-booking path, and the price must be greater than zero. If Stripe isn’t connected, guests trying to book will be turned away at checkout.
Set this up first under Settings → Organization → Payouts. See Payments & Payouts.
How do I create an experience?
Use the Create a new experience card — “Set up the tour and pricing details.”
Describing it
- Name — what guests see.
- Slug — the URL-safe short name that appears in your public link. Lowercase letters, numbers, and hyphens only. Must be unique.
- Short description — the one-liner on the listing page.
- Full description — the detail on the experience page. There’s a ✨ Generate button that drafts a couple of sentences for you from the name and a few details; treat it as a starting point and edit it into your own voice.
Where it happens
- City, State, Country
- Meeting point — where guests actually turn up. Be precise; this is the field that generates the most day-of phone calls when it’s vague.
- Location — an optional saved location from your organization’s locations list.
- Instructor — an optional staff member, which also drives per-instructor utilization in your reports.
How it runs
- Duration label — the human-readable version (“About 2 hours”).
- Duration (minutes) — the real number, used to compute each slot’s end time. Required before you can generate slots.
- Default capacity — how many guests per session. Must be at least 1.
- Min attendees — the floor below which the session isn’t viable. Set it above 1 and you’ll get a notification (in-app and by email) when a session starting within about two days is still short of it, telling you the confirmed count and linking to the session so you can cancel it or run it anyway. The alert arrives once per session. Nothing is ever cancelled automatically — the call is yours, and a minimum of 1 is treated as “no minimum” and never alerts.
What it costs
- Price (cents) — note the unit.
4500is $45.00. Must be greater than zero. - Currency — defaults to USD.
Booking policy
- Booking cutoff (hours) — how close to start time guests can still book. This is a hard gate: once a session is inside its cutoff it stops appearing in the guest’s time picker, and a checkout attempted against it is refused before any payment is taken. A cutoff of
0still blocks a session that has already started. - Cancellation window (hours) — how far ahead a guest can cancel themselves for a full refund.
Then choose how to finish:
- Save as draft — stores it privately. Nothing is public, and you don’t need an active membership to draft.
- Create and go live — publishes it immediately, exactly as before. This is the go-live moment, so it requires an active operator membership.
If you’re still writing copy, deciding a price, or waiting on a schedule, save the draft and take it live when you’re ready.
What do draft, live, paused, and archived mean?
Every experience is in one of four states, shown as a chip next to its name in Existing experiences:
| State | Who can see it | What you can do next |
|---|---|---|
| Draft | You only | Take live, or archive |
| Live | Public — listed and bookable | Pause, or archive |
| Paused | Nobody new — hidden from your public pages | Resume, or archive |
| Archived | Nobody | Nothing — this is permanent |
The controls sit on each row: Take live, Pause, Resume, and Archive, each asking you to confirm first.
Pausing stops new bookings; it does not touch the ones you’ve already sold. Guests who have booked keep their seats and their confirmations, the session still runs, and you can still cancel and refund them normally. What changes is that the experience disappears from your public listing and its page stops selling — useful when your guide is ill, when you’re sold out through a busy month, or while you rework the pricing. Resume when you want.
Archiving is permanent. An archived experience is hidden from new bookings forever and cannot be un-archived — if you might want it back, pause it instead. As with pausing, bookings already made still stand and remain refundable.
Taking anything live — from draft or from paused — requires an active operator membership. Drafting, editing, pausing, and archiving are always free.
Can I change an experience after creating it?
Yes. Click Edit details on the row to change the name, short and full descriptions, price, default capacity, duration, booking cutoff, cancellation window, and min attendees.
Changing the price only affects future bookings. Guests who have already booked keep the price they paid — repricing never retroactively charges or refunds anyone. The same is true of capacity and policy changes: they apply to bookings made from that point on.
Two things the edit form deliberately leaves alone: the slug (changing it would break links you’ve already shared) and the schedule (slots are managed separately, below).
How do I set up sessions and time slots?
Experiences use a two-level model: you define a schedule (a recurrence pattern), and VendorStreet materializes it into individual slots that guests book.
Under Experience schedules, create a schedule with:
- Start date and End date — the range to generate across.
- Start time — the time of day each session begins.
- Days of week — toggle the days it runs.
- Capacity override — a different capacity for these sessions than the experience default.
- Blackout dates (optional) — comma-separated
YYYY-MM-DDdates to skip. Holidays, closures, your vacation.
Creating the schedule generates the slots immediately. Each slot’s end time is computed from your Duration (minutes), and times resolve in your organization’s timezone.
To change a pattern, edit the schedule and click Generate slots again.
This is the one to be careful with: regenerating deletes and rewrites every slot for that schedule. It’s not an incremental update. If any of the schedule’s sessions already have bookings, regeneration is refused — that guard protects your guests’ confirmed sessions, but it also means the time to get the pattern right is before bookings arrive. Generation is also capped at 365 days, so build a year at a time.
If what you actually need is to change one session rather than the whole pattern, don’t regenerate — use the per-session actions below.
Can I change just one session?
Yes. Each schedule lists the sessions it generated, with how full each one is, and every session can be acted on by itself — you don’t have to regenerate the whole pattern to deal with one bad morning.
Capacity — set a different number of seats for that one session. The room is smaller today, or a second guide turned up. You can’t set it below the number of seats already sold; VendorStreet refuses and tells you the count, so cancel those bookings first if you really need to shrink it.
Close — take a session off sale without cancelling it. Use this when it filled up by word of mouth, or you want to hold the last seats back. Existing bookings are untouched: the session still happens, guests keep their seats, nobody is refunded. It disappears from the public booking page immediately, and a guest who still has the old page open can’t book it either. Reopen puts it back on sale.
Cancel session — the weather one. This cancels the session, refunds every guest who paid for it, and emails them. You’ll be asked to confirm against the real numbers first: how many bookings, how many guests, and exactly how much is about to be refunded. You can add a reason (“Storm warning — the harbour is closed”) and it goes into the email to guests.
A few things worth knowing about cancelling:
- It’s permanent. A cancelled session can’t be reopened or re-capacitied — you’ve refunded the guests and told them it’s off. If it turns out to be on after all, generate a new session.
- The rest of the schedule is untouched. Only that one session is affected.
- One failed refund doesn’t stop the others. If your payment provider refuses a particular refund, the remaining guests still get theirs, and the failure is flagged for review rather than swallowed. You’ll see a warning saying how many failed. Once the problem is sorted, click Cancel session again — it retries only the refunds still outstanding and won’t refund anyone twice.
- Waitlisted guests aren’t told a spot opened, because it didn’t. The session is gone.
Where do guests book?
Two public pages, no login required:
- Your listing page —
/<your-org-slug>/experiences, showing everything you offer with a View experience button on each. - The experience page —
/<your-org-slug>/experiences/<experience-slug>, with the description, details, and the booking form.
On the experience page, guests use the Book a time slot card — “Select an available date and provide your details.” They choose a Time slot, enter their Full name, Email, and Quantity, pick any add-ons, accept the Waiver if you’ve published one, and click Continue to payment.
How does checkout work?
Guests are redirected to Stripe Checkout. The booking is created in a pending state and held for 30 minutes while they pay — that capacity is reserved for them and released automatically if they don’t complete.
When payment succeeds, the booking is confirmed. If a guest abandons checkout, the page tells them plainly: “Checkout canceled — your seat wasn’t booked. You can try again below.”
Confirmation isn’t shown on the experience page — guests get their own booking page at /booking/<booking-id>, which reads the real payment status rather than trusting the redirect. That page shows Confirmed, Pending payment, Cancelled, or Cancelled · refunded, and it’s where guests go to cancel.
Capacity is enforced at the moment of booking, counting both paid bookings and live holds. If a session fills while someone is mid-checkout, they’ll get a clear “not enough capacity” message rather than an oversold session.
Can I add a service fee or tips?
Yes. Experiences can carry the same optional checkout charges as venue seats, configured in the experience’s “Checkout charges” card:
- A fixed service fee — a per-experience override, or a per-model default set once under organization settings. It shows as its own line and flows to you.
- Tipping — off by default. Turn it on with optional preset percentages, or a compulsory floor the buyer can add to, plus a custom note like “100% of gratuities go to your guide.” Tips are never taxed.
- A card processing surcharge and sales tax via Stripe Tax also apply.
On these sales you are the merchant of record — your name is on the buyer’s statement, you bear Stripe’s fee, and you collect and remit sales tax. Sales tax adds $0 until you register your jurisdictions in Stripe (Settings → Tax → Registrations). Full detail and a worked line-item breakdown are in Checkout Charges.
Can I add a waiver?
Yes. Use the Waiver card to write your waiver text and click Save waiver. Once published, guests must tick “I have read and accept the waiver” before they can proceed to payment.
How does the waitlist work?
When a session is full — or a guest just wants to be told if something opens — they use the Join the waitlist link on your experience page. They get: “You’re on the waitlist — we’ll email you if a spot opens.”
When a booking is cancelled, VendorStreet automatically emails the earliest person waiting for that slot, telling them a spot has opened. It’s first-come, first-served from there — the email is a notification, not a reservation.
You can see your waitlist in the operator Waitlist card. It’s read-only: there’s no manual promote or remove, and no way to convert a waitlist entry directly into a booking.
How do cancellations and refunds work?
Guests cancel from their booking page at /booking/<booking-id>, which tells them the policy: “You can cancel up to [N] hours before the session for a full refund” — the number you set as Cancellation window (hours). Past that window, self-service cancellation is refused and they’re pointed at your organization to sort it out directly.
You can cancel and refund any paid booking at any time using Cancel & refund, regardless of the cancellation window. Refunds go back through Stripe, including reversing the transfer and the platform fee.
Cancelling also triggers the waitlist notification for that slot.
What else ships with experiences?
- Bookings roster, grouped by session — your guest list for each date.
- Performance card with revenue collected, guests, upcoming sessions, upcoming occupancy, repeat customers, and per-instructor utilization. More in Reporting & KPIs.
- Add-ons attached per experience, priced server-side with inventory enforcement. See Add-ons.
Common gotchas
- Price is in cents.
45is forty-five cents, not forty-five dollars. - Regenerating slots wipes and rewrites them. Never a partial update — and it’s refused entirely once any session has bookings.
- Guests get three automatic emails you never have to send: a confirmation on payment, a reminder about 48 hours before the session, and a feedback request after it. One caveat: the times in these emails currently render in UTC, not your organization’s timezone — worth mentioning to guests in your description until that’s fixed.
- Duration (minutes) is mandatory for slot generation even though it looks optional next to the friendly duration label.
- “Create and go live” publishes immediately. Use Save as draft if you’re not ready to sell.
- Archiving cannot be undone. Pause instead if there’s any chance you’ll want it back.
- Pausing doesn’t cancel anything. It stops new bookings; existing guests keep their seats. If you need a session called off, cancel and refund those bookings yourself.
- No free experiences. Price must exceed zero.
- No operator-side booking creation. You can’t add a guest manually — everyone goes through the public checkout.
- Stripe must be connected, or guests hit a wall at payment.
- Add-ons must share the experience’s currency. A mixed-currency booking is rejected before checkout, so price your add-ons in the experience’s currency from the start.
Next steps
- Add-ons — sell extras at checkout
- Checkout Charges — service fee, tips, and sales tax
- Payments & Payouts — connect Stripe and get paid
- Reporting & KPIs — occupancy, revenue, and repeat guests