advanced
rider-score
settings
weights

Weights and Settings

Every configurable knob in Rider Score - weights, thresholds, tier rules, ladder rules, reward caps, helmet TTL, Safe Ride Check.

Levy Fleets TeamMay 18, 202610 min read

Weights and Settings

Every important knob in Rider Score is per-subaccount. The defaults are conservative; the levers below let you reshape the system for your fleet's risk profile, pricing model, and rider demographics.

Navigation

All settings live at Dashboard > Rider Score > Settings. Sub-tabs: General, Weights, Tiers, Ladder rules, Helmet selfie, Safe Ride Check, Reward budget.

General settings

subaccount_rider_score_settings row.

SettingDefaultDescription
enabledfalseMaster toggle. Off means no scoring, no rewards, no interventions.
cold_start_min_rides3Number of scored rides before the rider exits Beginner tier.
min_ride_seconds60Rides shorter than this do not contribute to rolling score.
min_ride_meters200Rides shorter than this do not contribute to rolling score.
window_days90Rolling-score window.
halflife_days30EWMA halflife inside the window.
reward_cap_cents_per_rider_month1000 ($10)Per-rider monthly wallet credit cap across all tiers.
monthly_subaccount_budget_cents25000 ($250)Fleet-wide monthly cap.
appeal_sla_days7Operator SLA for resolving appeals.
insurance_webhook_urlnullv4 only - per-subaccount webhook for rider_score_events.
insurance_webhook_secretnullv4 only - HMAC secret for webhook signatures.

Weights

rider_score_weights row.

WeightDefaultRange
speed_compliance200-100
parking_compliance150-100
geofence_violation150-100
hard_brake100-100
throttle_aggression100-100
clean_end100-100
helmet_verified100-100
sidewalk_event10 (effective 0 until CV ships)0-100
open_violation_penalty5 per0-25
open_intervention_penalty2 per0-10

Thresholds:

ThresholdDefaultWhat it does
hard_brake_threshold_mps23.5Deceleration above this counts as a hard brake event
throttle_high_pct85Throttle position above this counts as "aggressive" for the throttle-aggression %
geofence_decay_minutes30Mid-ride geofence violations decay linearly to 0 weight at this many minutes after they happened

We recommend leaving the defaults for the first 4 weeks after enabling. Adjust based on the Distribution histogram - if too many riders are clustered in At Risk or Bronze, your penalty weights are too high.

Tiers

rider_score_tiers rows (one per tier per subaccount, six default tiers).

For each tier, the editable fields are:

FieldUsed for
min_score, max_scoreScore range
unlock_discount_pctDiscount at ride start
ride_discount_pctDiscount at ride end
free_unlock_count_per_monthFree unlocks per calendar month
per_ride_credit_centsAuto wallet credit per qualifying scored ride
monthly_credit_cap_cents_per_riderPer-tier cap (composed with subaccount cap)
price_uplift_pctAt Risk tier only - positive uplift
badge_colorHex color for the tier badge
perksJSONB of customer-facing perk strings

See Reward Tiers for the full structure.

Ladder rules

rider_intervention_rules row. JSONB with the ladder configuration.

FieldDefaultDescription
step1_threshold70Score below this triggers step 1
step2_consecutive_count2Number of consecutive sub-60 rides for step 2
step2_threshold60Score floor for step 2
step3_threshold50Score below this OR an open violation triggers step 3
step4_threshold40Score below this triggers step 4 (throttle cap)
step5_threshold30Score below this triggers step 5 (price uplift)
step5_ride_count10Number of rides the uplift applies to
step5_uplift_pct25Uplift percentage
step6_threshold20Score below this OR 3 unpaid violations triggers step 6
step6_unpaid_violation_count3Threshold for step 6 violation trigger
step6_lockout_hours1687 days
step7_repeat_window_days60If step 6 fired within this many days, step 7 fires
step7_requires_manual_reviewtruePermanent ban gated behind operator approval (recommended on)

See Intervention Ladder for what each step actually does.

Helmet selfie

SettingDefaultDescription
helmet_discount_unlock_fee_cents50 ($0.50)Cents off the unlock fee per verified ride
helmet_ttl_hours24Verification validity window
helmet_single_usefalseIf true, the verification is consumed at first unlock
helmet_unlocks_silver_for_beginnerstrueCold-start riders with a verified selfie get Silver-tier perks

Storage retention is fixed: image deleted at ttl_expires_at + 30 days unless a dispute references it.

Safe Ride Check

SettingDefaultDescription
reaction_window_enabledtrueEnable the night-window trigger
reaction_window_start_local22:00Trigger window start (local time)
reaction_window_end_local04:00Trigger window end (wraps midnight - handled in code)
reaction_median_threshold_ms450Max median reaction time to pass
reaction_max_misses1Max misses to pass
reaction_test_round_count5Number of rounds
reaction_test_timeout_ms3000Per-round timeout
reaction_repeat_hours6Do not re-prompt the same rider within this many hours of a pass
reaction_random_trigger_pct0Random unlocks (any time) that get the test - keep low
reaction_appeal_trigger_enabledfalseRequire a pass before resolving a step-6 lockout appeal

See Reaction-Time Safe Ride Check for the full flow.

Reward budget

The budget governs how much money Rider Score is allowed to issue as wallet credit per month.

SettingDefaultDescription
monthly_subaccount_budget_cents25000 ($250)Hard fleet-wide cap
monthly_subaccount_soft_warning_pct80When we hit this % of the cap, an in-dashboard warning surfaces
reward_cap_cents_per_rider_month1000 ($10)Per-rider cap, composed with per-tier cap

When the fleet budget is exhausted for the month, new rewards are recorded as status='skipped_budget' instead of being issued. They are NOT retroactively granted when the month rolls over.

How to change settings safely

  1. Toggle changes (enable/disable, ladder step on/off) take effect immediately.
  2. Threshold changes (weights, tier thresholds, ladder thresholds) only affect future scores. Existing trip scores keep their weights_snapshot and do not retroactively change.
  3. Rolling score recomputes overnight using the new weights via the rider-score-recompute cron. Tier reassignments are pushed to riders as push notifications.
  4. Hard config changes (e.g. changing the window from 90 days to 60 days) trigger a one-time full recompute across the subaccount on the next cron run.

API surface

EndpointNotes
GET/PUT /api/dashboard/rider-score/settingsGeneral settings
GET/PUT /api/dashboard/rider-score/weightsWeights and thresholds
GET/PUT /api/dashboard/rider-score/tiersTier rows
GET/PUT /api/dashboard/rider-score/rulesLadder rules

All four endpoints require operator role permissions, RLS-scoped to your subaccount.

Crons that read these settings

CronFrequencyReads
/api/cron/rider-score-recomputeNightlyAll settings - full recompute, expires stale interventions
/api/cron/rider-score-insurance-dispatchEvery 10 minInsurance webhook URL, secret
/api/cron/helmet-verification-cleanupDailyHelmet TTL, storage retention

If any of these are missing from your vercel.json, the operator setup checklist will surface a warning at Settings > Health.


Next

See Troubleshooting if a setting change does not appear to take effect. See Rider-Facing Experience to understand what the rider sees when you change a setting.

Running a fleet on this hardware?

Levy Fleets runs scooters, e-bikes, mopeds and golf carts on the IoT hardware you already have, with integration pages for 29 vendors including Segway, Okai, Omni, Queclink, Invers and Comodule. Keyless unlock, geofencing, rider payments and rider support are included, and the Managed plan is a share of revenue with no per-vehicle software fee.