beginner
shop-rentals
waivers
agreements

Creating a Rental Agreement Template

Build a customizable rental waiver with sections, variable substitution, and per-rider signing — required before you can rent legally

Levy Fleets TeamMay 7, 20267 min read

Every shop rental should ship with a signed rental agreement before the customer rides off. This guide walks through creating a template once; after that, every booking can issue a fresh signing link in two clicks.

Templates live at Agreements in the dashboard sidebar (under Car Sharing — agreements are shared between Shop Rentals and Car Sharing).

Why templates, not flat text

Templates support variable substitution so the same template renders personalized agreements for every booking — name, booking number, pickup date, etc. — without you copy-pasting anything.

They also have sections so a customer reading on their phone can scroll through clearly headed parts of the agreement instead of one wall of legalese.

The frontmatter you fill in

FieldPurpose
NameInternal label and what customers see ("Rental Agreement")
VersionIncrement when you make material changes — old signed copies stay tied to the version they signed
BodyThe intro paragraph(s)
SectionsArray of {heading, body, required} blocks
Vehicle type(Optional) Restrict template to a single type — bike, scooter, e-bike, moped
LocaleDefault en. For other languages, create separate template versions
Toggle flagsinclude_liability_waiver, include_damage_policy, include_insurance_disclosure, include_arbitration_clause
ActiveInactive templates don't appear in the walk-in waiver picker

Variable substitution

Use {{variable_name}} anywhere in the body or section bodies. Available variables:

  • {{rider_name}} — customer's full name (or first + last if full_name not set)
  • {{customer_name}} — synonym
  • {{customer_email}} — customer's email
  • {{booking_number}} — reservation number (no #, just the integer)
  • {{pickup_date}} — formatted as M/D/YYYY in the customer's locale
  • {{pickup_time}} — formatted as H:MM AM/PM
  • {{return_date}} — formatted as pickup_date
  • {{subaccount_name}} — your shop's name

Unrecognized variables render as empty strings (not the literal {{ }}).

Body: "I, {{rider_name}}, agree to the following terms for booking
       #{{booking_number}} on {{pickup_date}}."

Sections:
  1. Liability Waiver
     "I assume all risks of injury or damage during this rental..."
     required: true

  2. Damage Policy
     "I am responsible for any damage I cause beyond normal wear and
      tear. Damage charges will be assessed by {{subaccount_name}}..."
     required: true

  3. Insurance Disclosure
     "Damage insurance is optional and covers up to $X per claim..."
     required: false

  4. Helmet & Safety Equipment
     "I will wear a helmet at all times while operating the rental."
     required: true

  5. Return Conditions
     "I will return the rental in clean, working condition by
      {{return_date}}. Late returns incur fees as disclosed..."
     required: true

  6. Arbitration Clause
     "Any dispute arising from this rental will be resolved..."
     required: true

Mark sections required for legally important parts. The signing UI shows the heading visibly for required sections.

Activating the template

Once the template body and sections are filled in, mark Active and save. Inactive templates don't appear:

  • In the walk-in wizard's waiver picker
  • In the booking detail page's "Issue signing link" buttons
  • In the agreements list shown to customers via the manage-link

You can have multiple active templates — bike shops sometimes have separate templates for adults vs. minors, or for hourly vs. multi-day rentals.

Versioning

When you make a material change (new clause, updated arbitration language), increment the version number. Existing signed agreements stay permanently bound to the version they signed; future bookings get the new version.

This matters for legal traceability. If a customer signed v1 and you update to v2, the v1 signature is still valid for that customer's specific booking.

Locales

Templates are scoped to a single locale. To support customers in multiple languages:

  1. Create one template per language (set the locale field accordingly)
  2. The template-resolution helper picks the right one based on the customer's preferred language

Most US shops only need en. Add es, fr etc. if your customer base calls for it.

What's signed in detail

When the customer signs, we capture:

  • Typed name — their full legal name as they typed it
  • Signature image — if they drew with a finger/stylus (web canvas)
  • Signer IP — for audit
  • Signer device — user agent string (iOS Safari, Android Chrome, etc.)
  • Timestamp — UTC, server-side, immutable
  • Rendered body + sections — snapshotted at sign time so the agreement renders identically forever even if the template is later edited

This bundle constitutes a signed agreement record sufficient for most rental disputes.

After signing

The signed agreement appears on the booking detail page with a green "Signed" badge, the typed name, and the signed-at timestamp. Operators can also click through to the rendered PDF (auto-generated for some template types).

For per-rider waivers in group bookings, see Per-rider waivers. For the operator workflow of sending a signing link, see Issuing a signing link.