Portal Payments and Documents (Customer Portal)
Last updated October 16, 2026 · Owners, admins, and office staff
Once your portal is live, customers can pay invoices online, approve estimates, and view documents and photos you’ve shared. This article covers the operator side of all three: turning on online payments (and optionally passing the processing fee to the customer), sharing documents and photos to the portal, and how estimate approvals reach you. For the customer’s-eye view, see the customer quickstart.
Before you start
- The portal must be enabled and Stripe must be connected with Charges enabled green. See Set Up the Customer Portal and Stripe Connect explained.
- Payment and passthrough settings live on Settings → Customer Portal → Payments; document defaults live on the Support & Legal tab.
Online payments
Turn payments on under Settings → Customer Portal → Payments (the tab only shows its options after Stripe is connected):
- Allow online payment — the master switch for the Pay button in the portal.
- Credit and debit cards and/or US bank accounts (ACH) — which methods you accept. ACH has lower fees and is worth enabling for larger invoices.
- Minimum payment — the smallest amount a customer can pay online, in cents (default 100 = $1.00).
Customers open an invoice, click Pay, pick a saved card or bank (or add one), and can pay the full balance or a partial amount. Card money reaches your bank in about 2 business days; ACH takes 5–7. Payouts, refunds, and disputes all happen in your Stripe Dashboard — see Stripe Connect explained.
Passing the processing fee to the customer (surcharge)
Optionally, you can add Stripe’s processing fee on top of the invoice so you net the full amount. Under Settings → Customer Portal → Payments, turn on Charge customer the processing fee, then choose whether it applies to card payments, ACH, or both, and adjust the fee rates if your Stripe pricing differs from the defaults. A live preview shows exactly what a customer would pay on a sample invoice, and you can edit the disclosure text customers see at checkout.
Read the legality warning shown next to the toggle. Surcharging credit cards is restricted or prohibited in several US states and is subject to card-network rules. You are responsible for confirming it’s legal where your customers are. The portal does not tell debit cards from credit cards, so when the fee applies to card payments it is added to debit cards too; if you need to exempt debit, leave card surcharging off. Talk to your accountant or attorney if unsure. Full detail: Stripe Connect, fee passthrough.
Auto-pay is not available yet
There is no auto-pay in the portal today. Customers can save a payment method and pay in two clicks, but they cannot set invoices to charge automatically. There is intentionally no auto-pay toggle in the portal settings — don’t tell customers auto-pay is coming as a specific date, and don’t promise automatic charging. See Known gaps in v1.
Sharing documents to the portal
Customers can view and download documents, but only ones you have flagged for them, they can’t upload anything. Today a document is shared with the “Show in portal” checkbox in one place:
- Mail merge runs (single-customer) — a “Share with customer’s portal” option on the mail merge run detail page.
To manage what a customer can currently see, open their Customer Summary → Portal docs tab. It lists every shared document, when it was first viewed and how many times, and gives you a Revoke button per document. Revoking hides it from the customer immediately; the underlying file is never deleted.
Two portal-wide defaults help here:
- “Show in portal” defaults to ON for new documents (Settings → Customer Portal → Support & Legal) makes the checkbox start checked so you don’t forget to share. It’s off by default — you actively choose what’s shared.
- The Documents visibility toggle must be on for customers to see the Documents section at all.
Known gap: the “Show in portal” checkbox is only on mail merge runs. Contract attachments and customer file attachments can’t be shared to the portal yet. To get a letter or agreement in front of a customer through the portal, send it as a single-customer mail merge run. Tracked in Known gaps in v1.
Sharing job photos to the portal
Crew photos stay private to your team until you mark them visible. Open a job’s photo page (Share Photos with Customer, reached at /JobPhotos/Manage?jobId=…), and for each photo click Share with customer (or Stop sharing to pull it back). Shared photos appear in the customer portal’s Photos section and in the work-completed email, if you’ve enabled that under Customer Comms. The Photos section is always its own link in the portal’s top navigation (it’s never tucked into a dropdown, unlike some other sections) — but shows nothing until you share at least one photo, so it’s safe to leave on.
Estimate approvals
If Estimates is on in Visibility, customers can review an estimate and approve it with an e-signature. Two things to know:
- Approving does not automatically create a job. When a customer approves, you’re notified in your activity feed and by email; you then convert the accepted estimate to a job with one click. This is deliberate so nothing lands on your schedule without your say-so.
- You can require a deposit at acceptance. Set default deposit terms on the Payments tab (or override per estimate). If a deposit is “required,” the customer signs and pays the deposit in one step to complete acceptance; the deposit sits as an unapplied payment until you apply it to an invoice. While it is unapplied, the customer sees it as credit on account on their portal dashboard and Invoices page, beside their balance (it is not subtracted from what they owe until you apply it). Until the deposit is paid, the signed estimate shows as Awaiting deposit in their portal.
Once signed, the estimate is locked against edits until you void the acceptance, so the signed record always matches what the customer agreed to.
What happens next
Payments recorded through the portal show up in your Sales/Payments views and, if you allow Payment history, in the customer’s Payments section. Approved estimates wait in your activity feed for you to convert. Revoked documents disappear from the customer’s Documents tab on their next page load.
Tips & best practices
- Enable ACH for big invoices — the fee is capped, so it’s dramatically cheaper than card on large amounts.
- Confirm surcharge legality for your state before turning it on, and keep the disclosure text clear.
- Turn on “Show in portal” default if you routinely want documents shared — you can still uncheck per document.
- Don’t refund a “still unpaid” ACH invoice, bank payments take up to 4 business days to settle and show as processing until then. While one is processing, the customer can still pay whatever it leaves of the balance (for example the rest by card), but not the amount already on its way. See Portal troubleshooting.
Troubleshooting
- No Pay button for the customer — check Allow online payment is on, Stripe is fully green, at least one payment method is allowed, and the invoice balance clears the minimum. Full checklist in Portal troubleshooting.
- A shared document isn’t showing — confirm the Documents section is on in Visibility, the customer’s Portal access is on, and the document isn’t revoked on the Portal docs tab.
- Can’t share a contract document or file attachment, that’s the known gap above; send it as a mail merge run instead.
- Customer paid but the invoice still shows unpaid — usually ACH settlement lag; a nightly reconciliation job also catches any missed webhook within 24 hours. Details in Portal troubleshooting.
Related articles
- Customer Portal Overview — what customers can do, at a glance
- Set Up the Customer Portal — enable payments and choose visibility
- Inviting Customers to the Portal — grant access so customers can pay and approve
- Stripe Connect explained (full) — payouts, fee math, refunds, disconnecting
- Customer quickstart (customer-facing) — how paying and approving looks to the customer
- Known gaps in v1 — no auto-pay, no uploads, contract-attachment checkbox gap