Understanding Ride Charges
This guide explains how ride charges are calculated and what customers see on their receipts. Whether you're a rider trying to understand your bill or an operator troubleshooting a pricing question, this article breaks down every component of a ride charge.
Overview
Every completed ride generates a detailed charge breakdown. Understanding these components helps operators explain charges to customers, verify pricing is working correctly, and troubleshoot billing questions.
What Customers See
When a ride ends, customers receive a receipt showing:
- Individual charge components (unlock, time, pause, distance)
- Any discounts applied (subscriptions, packages, promos)
- Dynamic pricing adjustments
- Final amount charged
What Operators See
The dashboard provides additional detail:
- Base charges before discounts
- Each discount source and amount
- Daily cap application status
- Complete billing audit trail
Charge Components
Unlock Fee
A one-time charge applied when the ride starts.
| Description | Example |
|---|---|
| Fixed fee to unlock the vehicle | $1.00 |
Customer Receipt: "Unlock Fee: $1.00"
When Applied: Always charged at ride start (unless covered by subscription/package)
How It's Calculated:
Unlock Fee = Pricing Rule's unlock_fee_cents / 100
Time Fee
Charges based on how long the customer actively rode.
| Description | Example |
|---|---|
| Per-minute rate × active minutes | 15 min × $0.39 = $5.85 |
Customer Receipt: "Time: 15 min × $0.39/min = $5.85"
How It's Calculated:
Active Minutes = Total Minutes - Pause Minutes
Time Fee = Active Minutes × Per-Minute Rate
Important
- Active time excludes paused time
- Minutes are rounded to whole numbers
- Partial minutes at ride end may round up
Pause Fee
Charges during paused portions of the ride.
| Description | Example |
|---|---|
| Pause rate × paused minutes | 5 min × $0.10 = $0.50 |
Customer Receipt: "Pause: 5 min × $0.10/min = $0.50"
How It's Calculated:
Pause Fee = Pause Minutes × Pause Per-Minute Rate
Note
If no pause rate is configured, the regular per-minute rate applies.
Distance Fee
Charges based on distance traveled (for distance-based pricing only).
| Description | Example |
|---|---|
| Per-km rate × kilometers | 8.5 km × $0.30 = $2.55 |
Customer Receipt: "Distance: 8.5 km × $0.30/km = $2.55"
How It's Calculated:
Distance Fee = Distance (km) × Per-KM Rate
Important
- Distance is tracked via GPS during the ride
- Only applies to vehicles with per-distance pricing
- A vehicle uses either time-based OR distance-based pricing, not both
The Complete Charge Breakdown
Base Subtotal
The sum of all raw charges before any adjustments:
Base Subtotal = Unlock Fee + Time Fee + Pause Fee + Distance Fee
Example:
Unlock: $1.00
Time: $5.85
Pause: $0.50
Distance: $0.00 (time-based pricing)
───────────────────
Subtotal: $7.35
After Benefits
Subscriptions and ride packages reduce the subtotal:
After Benefits = Base Subtotal - Subscription Discount - Package Discount
Example with subscription:
Base Subtotal: $7.35
Subscription Discount: -$5.00 (covered 10 min + unlock)
───────────────────────────────
After Benefits: $2.35
After Dynamic Pricing
Dynamic pricing adjustments (surge/discount) are applied next:
After Dynamic = After Benefits × Multiplier + Fixed Adjustment
Example with surge:
After Benefits: $2.35
Surge (25%): × 1.25 = $2.94
Fixed Surcharge: + $1.00
───────────────────────────────
After Dynamic: $3.94
After Promo Code
Promo code discounts are applied last:
After Promo = After Dynamic - Promo Discount
Example with promo:
After Dynamic: $3.94
Promo (20%): -$0.79
───────────────────────
After Promo: $3.15
Final Amount
The final charge respects daily caps and minimum prices:
Final = MIN(After Promo, Daily Cap)
Final = MAX(Final, Minimum Price) // Only if no benefits used
Understanding the Receipt
Complete Receipt Example
Here's what a customer might see for a premium e-bike ride:
═══════════════════════════════════════════════════
RIDE RECEIPT
═══════════════════════════════════════════════════
Vehicle: Premium E-Bike
Location: Downtown SF
Date: December 25, 2025
Duration: 25 minutes (20 active, 5 paused)
Distance: 6.2 km
─────────────────────────────────────────────────
CHARGES
─────────────────────────────────────────────────
Unlock Fee $1.50
Time (20 min × $0.49/min) $9.80
Pause (5 min × $0.15/min) $0.75
────────
Subtotal $12.05
─────────────────────────────────────────────────
DISCOUNTS & ADJUSTMENTS
─────────────────────────────────────────────────
Premium Member (20% unlock, 15% time) -$1.77
Weekly Pass (10 min covered) -$4.90
Weekend Surge (+15%) +$0.81
Promo Code RIDE20 (20%) -$1.24
────────
TOTAL CHARGED $4.95
═══════════════════════════════════════════════════
Payment: Visa ****1234
═══════════════════════════════════════════════════
Receipt with Free Unlock
When a customer uses one of their monthly free unlocks:
═══════════════════════════════════════════════════
RIDE RECEIPT
═══════════════════════════════════════════════════
Vehicle: Standard Scooter
Location: Midtown
Date: December 25, 2025
Duration: 12 minutes
Distance: 3.1 km
─────────────────────────────────────────────────
CHARGES
─────────────────────────────────────────────────
Unlock Fee $1.00
Time (12 min × $0.39/min) $4.68
────────
Subtotal $5.68
─────────────────────────────────────────────────
DISCOUNTS & ADJUSTMENTS
─────────────────────────────────────────────────
Elite Member - Free Unlock -$1.00
Elite Member (20% time) -$0.94
────────
TOTAL CHARGED $3.74
═══════════════════════════════════════════════════
Free unlocks remaining this month: 4 of 5
═══════════════════════════════════════════════════
Line Item Explanations
"Premium Member (20% unlock, 15% time): -$1.77"
- Loyalty tier discount for Premium members
- 20% off unlock fee: $1.50 × 0.20 = $0.30
- 15% off time charges: $9.80 × 0.15 = $1.47
- Total tier savings: $1.77
"Elite Member - Free Unlock: -$1.00"
- Monthly free unlock benefit used
- Elite tier includes 5 free unlocks per month
- Customer chose to use one of their remaining free unlocks
- Shows remaining count after ride
"Unlock Fee: $1.50"
- Base fee to unlock the vehicle
- Configured per vehicle model
- Can be covered by subscriptions/packages or tier benefits
"Time (20 min × $0.49/min): $9.80"
- Active riding time only
- 5 paused minutes excluded from this calculation
- Uses the per-minute rate for this vehicle
"Pause (5 min × $0.15/min): $0.75"
- Time the ride was paused
- Typically a lower rate than active time
- Encourages riders to end rather than pause indefinitely
"Weekly Pass (10 min covered): -$4.90"
- Subscription benefit applied
- Customer's subscription covered 10 of the 20 active minutes
- Saves the customer money while using their subscription
"Weekend Surge (+15%): +$1.07"
- Dynamic pricing rule applied
- 15% increase due to weekend demand
- Applied to the post-benefit subtotal
"Promo Code RIDE20 (20%): -$1.64"
- Customer applied a promo code
- 20% discount on the post-surge amount
- Applied last before final total
Daily Cap Protection
How Daily Caps Work
Daily caps protect customers from unexpectedly high charges in a single day.
Example:
- Daily Cap: $30.00
- First Ride: $12.00 (charged)
- Second Ride: $15.00 (charged)
- Third Ride: $10.00 → Only $3.00 charged (cap reached)
Cap Reduction Order
When a single ride exceeds the daily cap, charges are reduced in this order:
- Time fees - Reduced first
- Pause fees - Reduced second
- Distance fees - Reduced third
- Unlock fee - Reduced last (only if needed)
This ensures customers still pay for unlocking the vehicle when possible.
Example (Cap at $30, Ride Total $42):
Original Breakdown:
Unlock: $1.50
Time: $35.00
Pause: $3.50
Distance: $2.00
Total: $42.00
After Cap Applied:
Unlock: $1.50 (unchanged)
Time: $23.00 (reduced by $12)
Pause: $3.50 (unchanged)
Distance: $2.00 (unchanged)
Total: $30.00 (capped)
Receipt Indication
When daily cap is applied, receipts show:
Daily Cap Applied ✓
Maximum Daily Charge: $30.00
Minimum Price Behavior
How Minimums Work
Minimum prices ensure every ride generates baseline revenue.
Example:
- Minimum Price: $2.00
- Calculated Total: $1.20
- Final Charge: $2.00
When Minimums Don't Apply
Minimums are NOT applied when:
- Subscription benefits were used
- Ride package benefits were used
This protects customers who've already paid for their benefits.
Example with Subscription:
Base Subtotal: $5.00
Subscription Covers: -$5.00
Calculated Total: $0.00
Minimum Price: $2.00 (not applied - subscription used)
Final Charge: $0.00
Common Charge Scenarios
Scenario 1: Simple Ride (No Discounts)
Setup: Standard scooter, 10-minute ride
Unlock: $1.00
Time: 10 × $0.39 = $3.90
───────────────────────────
Total: $4.90
Scenario 2: Paused Ride
Setup: E-bike, 15 min (12 active, 3 paused)
Unlock: $1.50
Time: 12 × $0.49 = $5.88
Pause: 3 × $0.15 = $0.45
───────────────────────────
Total: $7.83
Scenario 3: Subscription Coverage
Setup: Weekly pass (60 min/day), 25-minute ride
Unlock: $1.00 (covered by subscription)
Time: 25 × $0.39 = $9.75 (covered by subscription)
Subscription Saves: -$10.75
───────────────────────────────────────────
Total: $0.00
Scenario 4: Partial Package Coverage
Setup: 10-minute bundle (8 min remaining), 15-minute ride
Unlock: $1.00 (covered by package)
Time: 15 × $0.39 = $5.85
Package Covers: -$4.12 (8 min × $0.39 + $1.00 unlock)
Remaining Time: 7 × $0.39 = $2.73
───────────────────────────────────────────────
Total: $2.73
Scenario 5: Surge + Promo Stack
Setup: $10 ride, 25% surge, 20% promo
Base: $10.00
Surge (25%): $10.00 × 1.25 = $12.50
Promo (20%): $12.50 × 0.80 = $10.00
───────────────────────────────────────
Total: $10.00
Scenario 6: Daily Cap Reached
Setup: $45 ride with $30 daily cap
Calculated: $45.00
Daily Cap: $30.00
───────────────────────────
Total: $30.00 (capped)
Scenario 7: Loyalty Tier Discounts
Setup: Premium tier member (20% unlock, 15% time), 15-minute ride
Unlock: $1.50
Time: 15 × $0.39 = $5.85
Subtotal: $7.35
Premium Tier:
Unlock (20%): -$0.30
Time (15%): -$0.88
Tier Discount: -$1.18
───────────────────────────────────
Total: $6.17
Scenario 8: Free Unlock + Tier Discount
Setup: Elite tier (5 free unlocks/month, 20% time discount), using free unlock
Unlock: $1.00
Time: 10 × $0.39 = $3.90
Subtotal: $4.90
Elite Tier:
Free Unlock: -$1.00 (1 of 5 used)
Time (20%): -$0.78
Tier Discount: -$1.78
───────────────────────────────────
Total: $3.12
Troubleshooting Charges
Customer Says "I Was Overcharged"
-
Review the ride details:
- Check actual duration vs. customer's expectation
- Verify pause time was tracked correctly
- Confirm vehicle model and its pricing
-
Check for dynamic pricing:
- Was there a surge active during the ride?
- What was the adjustment percentage?
-
Verify benefits:
- Did they have an active subscription?
- Were package allowances available?
- Was the ride at the correct location?
-
Check promo code:
- Was a promo code applied?
- Did it fail validation (expired, limit reached)?
Customer Says "My Subscription Didn't Apply"
-
Verify subscription status:
- Is it marked as 'active'?
- Has it expired?
-
Check location match:
- Is the subscription scoped to a different subaccount?
- Did the customer ride in the correct area?
-
Check allowances:
- Were daily allowances already used?
- Is it a
daily_limitsubscription that hasn't reset?
-
Review timing:
- Did the ride occur during the subscription period?
- Was there a gap between subscription purchase and ride?
Customer Says "My Promo Code Didn't Work"
-
Check code validity:
- Is the code active?
- Is the current time within valid_from and valid_until?
-
Check usage limits:
- Has the global limit been reached?
- Has this customer used their per-customer limit?
-
Check requirements:
- Did the ride meet the minimum amount?
- Is the code scoped to a different location/vehicle?
-
Check application type:
- Is it a wallet credit code used on a ride?
- Is it a ride code used on a subscription purchase?
Charge Shows $0 But Customer Was Charged
This usually indicates a partial charge or hold:
-
Check alreadyChargedCents:
- Was a hold amount captured at ride start?
- The final shows $0 because the hold covered it
-
Review payment history:
- Look for a prior hold/authorization
- The "charge" may have been the hold release
Technical Details
Calculation Precision
All calculations are performed in cents (integers) to avoid floating-point errors:
// Correct (in cents)
timeFeeCents = perMinuteCents * minutes // 39 * 10 = 390
// Display (convert to dollars)
timeFeeDollars = timeFeeCents / 100 // 390 / 100 = $3.90
Rounding Rules
- Minutes are rounded to whole numbers
- Distance is preserved to 3 decimal places
- Final charges are rounded to whole cents
Audit Trail
Every ride stores its complete pricing breakdown:
{
"base": {
"unlockFeeCents": 100,
"timeFeeCents": 390,
"pauseFeeCents": 0,
"distanceFeeCents": 0,
"subtotalCents": 490
},
"subscription": {
"discountCents": 200,
"purchaseId": "..."
},
"package": null,
"dynamic": {
"multiplier": 1.0,
"adjustmentCents": 0
},
"promo": null,
"totals": {
"baseSubtotalCents": 490,
"subscriptionDiscountCents": 200,
"packageDiscountCents": 0,
"dynamicAdjustmentCents": 0,
"promoDiscountCents": 0,
"finalCents": 290,
"amountDueCents": 290
}
}
Customer Communication Templates
Explaining a Charge
"Hi [Name], I've reviewed your ride on [date]. Here's the breakdown:
- Unlock fee: $X.XX
- Time (X minutes): $X.XX
- [Any discounts/adjustments]
Total charged: $X.XX
Is there anything specific about these charges I can clarify?"
Explaining a Surge
"Hi [Name], your ride included a [X%] surge pricing adjustment. This was active due to [high demand/weather/time of day] during your ride. The surge added $X.XX to your base fare of $X.XX."
Explaining a Cap
"Hi [Name], good news! Your ride was capped at our daily maximum of $X.XX. Without the cap, the ride would have been $X.XX. This saved you $X.XX."
Explaining Subscription Coverage
"Hi [Name], your [subscription name] covered [X minutes/the unlock fee] on this ride. Your subscription saved you $X.XX on this trip. You have [X minutes/unlocks] remaining for today."
Need Help?
For billing and charge questions, contact support@levyelectric.com.