beginner
shop-rentals
receipts
pdf

Receipt PDFs

Auto-generated reservation receipts with operator branding, line items, addons, tax, and payment summary

Levy Fleets TeamMay 7, 20263 min read

Every reservation has a downloadable PDF receipt accessible at /api/reservations/[id]/receipt. Includes operator branding, customer info, vehicle details, line items, taxes, and payment summary.

What's on the receipt

  • Operator name (your subaccount name)
  • Levy Fleets logo (if public/levyfleets-logo.png exists in the deploy)
  • Booking number
  • Generated-at timestamp

Customer block

  • Full name
  • Email (if provided)
  • Phone (if provided)

Rental block

  • Vehicle (number or model name)
  • Pickup datetime
  • Return datetime
  • Pickup location (if applicable)

Line items

  • Base rental
  • Each add-on with quantity × unit price = total
  • Promo discount (if any, as a negative line)
  • Adjustment / damage charge (if any)

Totals

  • Subtotal
  • Tax (with percentage shown if known)
  • Total (bold)
  • Amount paid (negative)
  • Refunded (if any, negative)
  • Balance due (bold, only if > 0)
  • Booking number + operator name
  • Centered, smaller font

Generating the receipt

Three ways:

Open in browser

Visit /api/reservations/[id]/receipt while logged in. The PDF renders inline (download or print from the browser).

From the booking detail

The booking detail page doesn't yet have a "Print receipt" button — queued. For now, manually visit the URL above.

Email to customer

Currently no automatic post-rental receipt email. Operators copy the receipt URL or download and attach manually.

A native "Email receipt" feature on the booking detail and an automatic post-completion receipt email are both on the roadmap.

When the receipt regenerates

The receipt PDF is generated on each request — no caching. So if you:

  • Change the customer's name → next download shows the new name
  • Refund the customer → refunded amount appears on next download
  • Apply a late fee → late fee appears as adjustment line

This is by design. Customers who saved an old PDF still have a historically-accurate snapshot, while new downloads reflect current state.

What's NOT on the receipt

  • Stripe charge IDs — internal-only, not customer-facing
  • Per-rider names for group bookings — only the lead booker
  • Refund reasons — refunds show as a totaled line, not itemized
  • Loyalty points earned — separate program
  • Marketing content — this is a tax/audit document, not a sales page

Operator branding

The header uses your subaccount name from subaccounts.name. To customize beyond:

  • Logo — replace public/levyfleets-logo.png (default) with your own. This affects all receipts globally; per-subaccount logo override is on the roadmap.
  • Header colors — currently fixed; per-subaccount theming is queued
  • Footer text — currently fixed to subaccount name

Currency

Pulled from the reservation's currency_code. The receipt uses locale-aware formatting (e.g., $1,234.56 for USD, €1.234,56 for EUR).

Multi-language

Receipts are English-only today. The frontend page can render in other languages but the PDF generator doesn't yet localize. Add to roadmap if you have non-English customers requesting localized receipts.

The receipt is sufficient for most consumer dispute resolution and small-claims paperwork. For tax filings:

  • Total includes tax (broken out as a line)
  • Refunds are shown if applied
  • Operator name + booking number make it auditable

For chargeback dispute evidence, attach the receipt PDF along with the signed waiver and any photos.

Reporting all receipts

To pull all receipts for a tax period, query reservations and generate on demand:

SELECT r.id, r.reservation_number, r.total_cents
FROM reservations r
WHERE r.subaccount_id = '<your-subaccount-id>'
  AND r.completed_at BETWEEN '2026-04-01' AND '2026-06-30'
  AND r.status = 'completed'
ORDER BY r.completed_at;

Then iterate and download each. A bulk-export tool is on the roadmap.

Common questions

Customer says the receipt is wrong

If a refund or adjustment was made after they downloaded, ask them to re-download. The latest version is always at the same URL.

Customer needs a paper receipt

Print from the browser. Most tablets and POS systems have a connected receipt printer; they can be set up to print from a "Print" button in the browser dialog.

Receipt has weird character formatting

Likely a font issue. Check the deployed font configuration. If the issue is in customer names with non-Latin characters, ensure the PDF renderer is using a font with extended Unicode support.

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.