Hearts & Fire — Staged Deposit Payments Research
Date: March 31, 2026 Context: Client needs to collect deposits on custom furniture orders in stages (e.g., 25% upfront, 25% midpoint, 50% at completion on a $6K couch). Lightspeed R-Series is their POS.
Can Lightspeed Handle This?
No — not for the workflow they need.
Lightspeed R-Series has layaway/special order features with deposit collection, but they fall short:
| Feature | What It Does | Why It's Not Enough |
|---|---|---|
| Online deposits | Email customer a payment link when creating a special order/layaway | Single-shot request, not a series of milestones |
| Deposit requests | Collect partial payment upfront | Expire after 14 days, can't be modified or cancelled |
| Partial payments | Apply collected deposits at the register | Must be made in-person (per invoicing beta docs) |
| Layaway | Hold items with deposit, complete sale later | Designed for "take deposit at counter, pick up later" — not staged online collection |
What the API Has
The R-Series API exposes Sale, SalePayment, SpecialOrder, CreditAccount, and Workorder entities. But there's no documented workflow for "create an order, then programmatically collect 3 payments against it over weeks/months via a hosted payment page."
Recommended Solution: Stripe + Custom Deposit Tracker
Build a custom deposit tracker feature in the Vercel/React app that uses Stripe Checkout Sessions for payment collection.
Architecture
[Vercel App — Custom Deposit Tracker]
|
|— Store creates a "Custom Order" with:
| ├── Customer info
| ├── Order description + line items
| ├── Total amount
| └── Payment schedule (e.g., 25% / 25% / 50%)
|
|— For each milestone payment:
| ├── Generate Stripe Checkout Session for that amount
| ├── Email payment link to customer (via Stripe or custom)
| ├── Webhook confirms payment → update order status
| └── Dashboard shows paid / pending / overdue per milestone
|
|— Optional: Write completed payment back to Lightspeed
| via SalePayment API (for bookkeeping reconciliation)
Why Stripe
| Option | Verdict |
|---|---|
| Lightspeed deposits | Single-shot, 14-day expiry, no staged flow |
| Square Invoices | Has milestone billing but adds a second payment processor |
| Stripe Checkout Sessions | GA, great API, create payment pages on-demand, webhooks for status |
| Stripe Invoice Payment Plans | Perfect fit but currently in private preview |
Stripe Checkout Session Approach (Available Now)
For each milestone payment:
- Create a Checkout Session via Stripe API with the milestone amount
- Send the URL to the customer (Stripe can email a receipt, or send custom email)
- Listen for
checkout.session.completedwebhook to mark milestone as paid - Dashboard shows all custom orders with payment status per milestone
This is fully GA, well-documented, and battle-tested. No private preview access needed.
Stripe Invoice Payment Plans (Future Option)
If/when Stripe makes Invoice Payment Plans GA:
- Create one invoice with
amounts_duesplit into milestones - Stripe auto-emails reminders for each payment
- Customer returns to the same payment page for each installment
- Even cleaner UX — but requires private preview access today
What This Means for Scope
This is a separate feature from the Ecwid/Lightspeed eCom storefront integration. The e-commerce widget handles standard product sales. The deposit tracker handles custom orders with staged payments. They're independent systems that both live on the same Vercel app.
Not yet scoped in the quote. The current 12 hours for "Lightspeed Ecommerce" covers catalog/cart/checkout/shipping/search via the Ecwid widget. A custom deposit tracker would be additional scope.
Sources
- Taking deposits for special orders, layaways, and work orders
- What's new with credit account sales and deposits
- Managing deposits
- Creating a layaway
- Completing sales in the Partial Payments report
- Lightspeed R-Series API data model
- Stripe Invoice Payment Plans
- Stripe Checkout Sessions
- Stripe Payment Links