How to invoice customers and charge for post-booking add-ons

The booking is rarely the final number. The client books a 60-minute session and stays for 90. The car rental adds a GPS at pickup. The consultation turns into a consultation plus a report. The money owed at the end of a job is often more than the money agreed at checkout — and collecting that difference is where a lot of service businesses get sloppy, chasing it over text or just eating it.
This guide covers the clean version: how to change a booking after it's been made, and how to invoice the balance through whichever channel fits — Stripe online, a manual PDF, or Shopify.
Two things happen here, in order. First you update the order — add the add-ons or extras the customer actually took, which raises the amount due. Then you issue an invoice for that outstanding balance. The invoice goes out through a payment provider: Stripe (a hosted page the customer pays online), a manual PDF (bank transfer or cash), or Shopify (for Shopify-connected stores). Pick the channel once; the system handles numbering, delivery, and — for Stripe — marking it paid.
Step 1: Add the post-booking charges
A booking becomes an order the moment it's made. That order is editable after checkout, which is what makes post-booking charging possible at all.
The cleanest way to add a charge is an add-on — an optional extra attached to the service. Add-ons aren't only a checkout upsell; you can attach them to an existing order when the work changes. A deep-conditioning treatment the stylist talked the client into, a child seat added at car pickup, an extra hour on a studio rental — each is an add-on line on the order, with its own price and quantity.
Why add-ons rather than a loose charge
Adding the extra as a structured add-on line keeps the order honest: the line item, its price, and its quantity all show up on the invoice and in your reports. Staff can see exactly what was added and why, and the invoice math is automatic instead of a number someone typed into a text message.
Once the add-ons are on the order, the amount due goes up. If the customer already paid the original total at checkout via Stripe, the order now carries an outstanding balance equal to the extras. That balance is what you invoice.
Step 2: Set up your invoicing identity once
Before the first invoice goes out, set the details that appear on every invoice — you do this once.
Business legal name
The name that heads the invoice. This is your registered business name, not your storefront brand if they differ.
Tax ID and registration number
Your VAT/tax identifier and company registration number, where applicable, so the invoice is valid for the customer's books.
Invoice prefix
The prefix for sequential numbers, like INV-. Numbers are then allocated automatically and in order — INV-41, INV-42, INV-43 — with no gaps or duplicates.
Payment terms
Days until the invoice is due. Set 14 and every invoice's due date is calculated from its issue date automatically.
Footer notes
Any standing text — thank-you line, late-payment policy, remittance instructions — printed at the bottom of every invoice.
These are stored against your store, so every invoice you issue inherits them. You're not retyping your tax ID per invoice.
Step 3: Pick the channel and issue the invoice
An invoice is delivered through a payment provider, and the provider you choose decides how the customer pays. There are three real options for most businesses (plus cash for in-person records).
| Channel | How the customer pays | Best for |
|---|---|---|
| Stripe (hosted invoice) | Clicks a link, pays by card online; invoice auto-marks paid | Anyone who wants to be paid online without chasing |
| Manual PDF — bank transfer | Gets a PDF with your bank details, pays by transfer | B2B clients and businesses that pay by invoice |
| Manual PDF — cash | Pays in person; PDF is the record | In-person settlement you still want documented |
| Shopify | Pays through your connected Shopify store | Shopify-connected merchants keeping everything in Shopify |
Stripe: get paid online, hands-off
If you have Stripe connected, issuing a Stripe invoice creates a native hosted invoice — a Stripe-branded page with a pay button. The customer gets the link by email, pays by card, and the invoice transitions to paid on its own through Stripe's webhook. You don't mark anything manually, and the payment is recorded back against the order so your revenue stays reconciled.
This is the default to reach for: the customer added an extra, you issue a Stripe invoice for the difference, they tap pay, done.
Manual PDF: bank transfer or cash
For clients who pay by bank transfer — common in B2B — issue a bank-transfer invoice. The system renders a numbered PDF that includes your bank details (account name, bank, IBAN, SWIFT) so the customer knows exactly where to send the money, emails it to them, and stores it. A cash invoice works the same way without bank details, as a record of an in-person payment.
Set bank details first
A bank-transfer invoice will still issue if you haven't entered your bank details — but the PDF will simply omit the bank section, and the customer won't know where to pay. Configure the bank-transfer provider's details before sending the first one.
Shopify: keep it in your store
If you're a Shopify-connected merchant, issue the invoice through the Shopify channel and it's created against the matching Shopify order, so billing lives where the rest of your store's money does.
What happens after you hit issue
Issuing is asynchronous, and understanding the states saves confusion:
Draft
The invoice is created instantly with a snapshot of the order, customer, and line items, gets its sequential number and due date, and is queued for delivery. The snapshot is frozen — later edits to the order won't change an invoice you've already sent.
Sent
Delivery succeeded: the PDF was emailed (manual), or the Stripe/Shopify hosted invoice was created and the link sent.
Paid
Stripe only, and automatic. When the customer pays the hosted invoice, a webhook marks it paid and records the transaction against the order.
Failed → resend
If delivery fails — a bad email, a transient error — the invoice is marked failed with a reason, and a single resend re-queues it.
Because the invoice is built from an immutable snapshot, it always reflects what was owed at the moment you issued it. Add more add-ons next week and you issue a second invoice for the new balance; the first one stays exactly as the customer received it.
Invoicing in Opencals
Opencals turns every booking into an editable order, so you can add post-booking add-ons and then invoice the balance through Stripe (hosted, pays online, auto-reconciled), a manual numbered PDF for bank transfer or cash, or Shopify for connected merchants. Invoice numbering, due dates, PDF rendering, and Stripe payment reconciliation are handled for you. See orders, payments, and add-ons in the feature pages below.
Orders & Payments
Every booking becomes an order with payment tracking, refunds, and invoicing.
Add-ons
Attach extras to a booking — at checkout or after — as structured, billable line items.
Shopify integration
Issue invoices through your connected Shopify store and keep billing in one place.
Frequently Asked Questions
Early Access — 3 Months Free
Ready to transform your service business?
Join 150+ businesses already using Opencals. Get 3 months completely free with all features unlocked.