Pricing tiers define how much your customers pay, what you hold as a deposit, when they can cancel for free, and how late returns get charged. Configure them at Shop Rentals → Pricing.
How rate selection works
Every tier can have four rates:
- Hourly
- Daily (24-hour blocks)
- Weekly (7-day blocks)
- Monthly (30-day blocks)
When the customer books, the pricing engine picks the cheapest combination for the duration. So if your hourly is $10 and your daily is $40:
- 1 hour → $10 (hourly wins)
- 6 hours → $40 (6 hours × $10 = $60, but daily caps at $40)
- 30 hours → $80 (2 days × $40 < 30 hours × $10)
- 7 days → $200 if you have a weekly rate; otherwise 7 × daily
You don't have to set all four rates. A typical bike-shop tier sets hourly + daily + weekly. Skip monthly unless you do long-term rentals.
Tier scope
Tiers can be scoped three ways:
- Specific vehicle model — applies only to that model. Use this if your premium e-bike costs more than your basic city bike.
- Vehicle type (bike / scooter / e-bike / moped) — applies to all vehicles of that type.
- All vehicles — leave model and type blank.
When a booking is created, the pricing engine looks up tiers in priority order: model match first, then type match, then default. The first match wins.
Required fields
| Field | Purpose |
|---|---|
| Name | What staff see in the dropdown |
| Currency | USD / EUR / etc. — must match your Stripe account |
| Hourly rate | Per-hour cents amount, optional but typically set |
| Daily rate | Per 24-hour block, almost always set |
| Deposit amount | Held on card at booking, released or charged at return |
| Free cancellation hours | Hours before pickup when full refund applies |
Deposits
The deposit is held, not charged, when a customer books. At return time:
- Condition OK → deposit auto-releases (Stripe
cancels the authorization) - Damage logged → operator can capture some or all of the deposit toward repair costs
- Late return → the late-fee adjustment is added to the booking total and can be charged from the deposit hold
For deposits to work end-to-end, the customer needs a saved payment method. The walk-in wizard prompts for one if not present; the public booking flow collects card details client-side.
Late return fees
Two fields control late-fee accrual:
- Late return grace minutes — how long after the scheduled return before the customer is "late." Default 60 minutes.
- Late return hourly rate — fee per hour past the grace window. We charge the rounded-up hours, not minutes.
The late-fee cron runs every 15 minutes and flags overdue reservations. It does not auto-charge. Your operator triggers the fee from the booking detail page with the "Apply late fee" banner. We do this on purpose — auto-charging late returns drives chargebacks. See Late returns.
Cancellation fee
Two fields control cancellation:
- Free cancellation hours — within this window before pickup, full refund (deposit returned, no fee).
- Cancellation fee % — percentage of base cost retained when canceling outside the free window.
The deposit's behavior on cancellation depends on the
non_refundable_deposit flag in the cancellation policy. If set, the
deposit is always retained as the cancellation fee floor.
When a customer cancels within the free window, the cancel API automatically refunds the paid deposit minus any fee — see Cancellation handling.
Distance / mileage overage
For e-bikes and mopeds, you can set:
- Included km per day — e.g., 30 km included
- Overage per km — e.g., $0.50 per km past the included quota
At return time the actual distance is computed (from IoT telemetry if available, or operator-entered). Overage is added to the final total. Most pure-bike shops leave these blank.
Group / tiered discounts
Pricing tiers support quantity-based discounts for group bookings via a JSON column on the tier:
[
{ "min_quantity": 5, "discount_percent": 10 },
{ "min_quantity": 10, "discount_percent": 20 }
]
A booking with quantity=7 gets the 10% threshold. With quantity=12,
the 20% threshold. The pricing engine picks the highest applicable
threshold; discounts don't stack.
The dashboard editor doesn't expose this column directly yet — set it via SQL or the database editor. See Group / tiered pricing for the full reference.
Editing a tier
Click any tier row in the table. You can update everything except the currency (deleting and recreating is the safe path if you're switching currency on an active tier).
Existing reservations lock in their pricing snapshot at the time of booking — editing a tier doesn't retroactively change anyone's price. Only future bookings see the new rates.
Common patterns
- Beach shop with one bike type. One tier, all-models scope, hourly + daily, $50 deposit, 24h free-cancel.
- Premium and budget side-by-side. Two tiers, each scoped to a specific model. The premium tier has higher rates and a higher deposit.
- Tour-day surcharge. One default tier plus one model-scoped tier for "Tour Day Cruiser" with peak-hour pricing.
- Long-term locker. A separate tier with a high weekly rate and a configured monthly rate for multi-week rentals.
What you can't do (yet)
- Time-of-day pricing (peak / off-peak) is not in tiers today. Workaround: separate tiers + manual swap.
- Seasonal price changes require manual edits. We don't have scheduled price effective dates.
- Coupon stacking — one promo code per booking, no double-stacking with group discounts.
These are on the roadmap; track them in the FAQ.