Card payment straight from the invoice link. The customer taps Pay, is sent to a hosted checkout for the outstanding balance (or a smaller deposit), and returns to the invoice. The payment is verified server-side, recorded against the invoice, and the balance and status update. The button is hidden entirely when the business has no processor connected.
Also called: pay by card · online payment · take a deposit online · credit card payment · stripe checkout
They can pay part of it now
A customer who can put down a deposit but not the whole draw pays the smaller amount, and the invoice records it as a partial payment with the remainder still owing. The checkout records whether it was a deposit or a full settlement. Materials get ordered on the deposit instead of waiting on a cheque in the post.
The invoice marks itself paid the moment they come back
On return, the checkout session is verified on the server with your own credentials and checked that it actually names this invoice and this business, and the amount recorded is the one the processor reports — never a figure the browser supplied. It works with nothing configured but an API key, so online payment is not something that starts working only once a webhook has been wired up correctly.
A closed tab, or a bank payment that clears on Thursday, still gets recorded
A signed callback from the processor records payments where the customer never came back, and a nightly sweep replays anything settled in the last three days that never reached an invoice. Recording is keyed on the checkout session, so the return trip, the callback and the sweep can all fire and the payment is still recorded once. Money in the bank against an invoice still reading unpaid is the reconciliation this removes.
- 1POST /api/client-portal/invoice/pay authorises on the invoice's portal token, refuses drafts and voids, and refuses an already-settled invoice.
- 2The amount defaults to the full balance and is clamped so a customer can never overpay past it.
- 3Return URLs are built from the host the customer is actually on, so a sub-account's own domain is preserved instead of bouncing to the apex.
- 4The route never names a provider — it goes through the payments port, so the invoice code does not know Stripe exists.
Card payment was left out of the first invoicing build on purpose, and adding it raised the obvious risk: a business with no payment processor connected showing its customers a Pay button that fails when pressed. Payment sits behind a switch, so a business without a processor gets a clean invoice and no button at all. Businesses on their own web address send customers back to the address they started on, rather than dropping them on the main site after they pay.
- Payment delayed by postal cheques and bank transfers.
- No way for a customer to pay the moment they read the invoice.
- Taking card details over the phone.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →