Invoicing

Issue AR invoices to your customers, collect online via Stripe, track aging - without bookkeeping ledger setup.

Overview

Customers

Invoicing → Customers. Add a customer with a display name, email, billing address, default currency, and default payment terms. Edits use optimistic concurrency - if a teammate is editing the same row, you get a clean conflict warning instead of overwriting their changes.

Each customer card shows aggregated AR balance, open invoices, and recent payments. There is no chart of accounts to configure - balances are computed from posted invoices and recorded payments.

Invoices

  1. New invoice → pick a customer, add line items (description, quantity, unit price, optional tax rate). Add optional discount, shipping, header tax, notes, and terms.
  2. Save draft to come back later. Drafts are fully editable.
  3. Post to finalise the invoice number and lock edits. Posting may route through an approval policy if you've configured one.
  4. Send emails the customer a branded PDF plus the hosted pay link.
  5. Mark paid records a manual payment (cash, bank transfer, ACH, wire, check, or other) - useful when the customer pays outside of card. Supports partial payments.
Customers can pay online via the hosted pay page without ever logging in - works great on mobile.

Invoice lifecycle

Every invoice moves through these states:

Payment collection

Invoicing → Payment Collection. Click Connect Stripe - opens Stripe Connect Express onboarding in a new tab. Once Stripe approves the account and enables charges, the panel flips green and every new invoice automatically gets a hosted pay link. Payouts go directly to your Stripe-linked bank account on Stripe's schedule. SoftSolz takes a 0% platform fee - we only earn from your monthly Invoicing subscription.

If you'd rather not take card payments, leave Stripe unconnected and pick Bank transfer on each invoice. Add your bank details to the invoice so the customer knows where to send the money, then come back and Mark paid when the funds land.

Customer portal

From any customer's detail page, click Send portal access. SoftSolz issues a short-lived link the customer can use to view their invoice history, download PDFs, and pay outstanding balances - all without creating an account. The token expires automatically and can be reissued at any time.

Get paid from your own website

Beyond invoices, you can let customers pay a custom amount straight from a button on your own website - handy for deposits, ad-hoc charges, "pay what you owe" links, or a simple buy button.

  1. Connect Stripe first. This only works once you've connected Stripe Connect (see Payment collection above) and finished onboarding. Until then the button won't be able to take payments.
  2. Your developer adds a Pay button. Using your workspace API key, their code asks SoftSolz to create a secure payment page for the amount you choose.
  3. The customer pays on a Stripe-hosted page. They're sent to Stripe's checkout, enter their card, and come back to your site afterwards.
  4. The money lands in your Stripe account. Payments go directly to your connected Stripe account - SoftSolz takes a 0% platform fee. The payment shows up under Payments alongside everything else.
This is a developer feature - your technical team sets up the button once. The step-by-step API guide lives on the developer site.

Don't have a developer? Create a Payment Link right inside SoftSolz - no code, no API key, nothing technical. You get a shareable web address you can paste anywhere: a button on your website, an email, an invoice reminder, a social post, or a QR code.

  1. Connect Stripe first. Payment Links only work once you've connected Stripe Connect and finished onboarding (see Payment collection above). Until that's done the link can't take payments.
  2. Create the link in the app. Go to Invoicing, add a Payment Link, give it a title and an optional description. Choose one of two types:
    • Fixed amount - e.g. a "Pay £50" button where the price is set by you.
    • Let the customer enter the amount - "pay what you want" / "pay what you owe", with an optional minimum you can set.
  3. Copy and share it. Copy the link and paste it as a normal button or text link on your own site, in an email, or anywhere you like - no script to embed, no developer needed.
  4. The customer pays on a secure Stripe page. They open your link, see your business name and logo, and pay by card on Stripe's hosted checkout.
  5. The money lands in your Stripe account. Funds go directly to your connected Stripe account - SoftSolz takes a 0% platform fee. The payment appears under Payments as a website payment, alongside everything else.
Payment Links are the no-code option - anyone on your team can create one. The developer "Pay button" above is only needed if you want to set the amount dynamically from your own software.

Payments

Invoicing → Payments. Shows every successful card payment, manual payment recorded against an invoice, refund, and dispute. Click a payment to see the originating invoice, customer, payment method, and any Stripe charge / payment-intent ids. Payments taken from a button on your own website (or a no-code Payment Link) appear here too.

Refunds

Open any settled payment and click Refund. Pick the amount (full or partial), an optional reason, and submit. The refund flows back through Stripe automatically for card payments, or records as a manual outgoing entry for bank-transfer payments.

Refunding reduces the invoice's amount paid and rolls its status back - paid drops to partially_paid, and a fully-refunded invoice returns to sent or overdue depending on the due date. Refunds above a configurable threshold can be routed through an approval policy.

Credit notes

When you want to reduce a customer's balance without sending money back (a goodwill adjustment, a quantity dispute, a renegotiated price), open the invoice and click Issue credit note. Enter the amount and an optional reason. SoftSolz allocates a sequential CN-#### credit-note number and applies the amount against the invoice's outstanding balance. Credit notes can also route through an approval policy.

Recurring

Invoicing → Recurring. Pick one or more existing posted invoices to use as templates, choose a cadence (weekly, monthly, quarterly, yearly, or a custom cron expression), and set due-in-days. The scheduler generates a fresh draft on each cycle - review and send, or flip the template to auto-send.

Approvals

Define policies under Approvals → Policies. Policies match against resource type (invoice.post, invoice.refund, invoice.write_off, invoice.credit) and an amount threshold, then route the action to one or more approvers in sequence with an SLA. Examples:

Pending approvals show up in Approvals → Inbox; you can delegate to a colleague while you're on leave.

AR aging

Invoicing → Reports → AR Aging. Outstanding balance bucketed by days overdue: current, 1-30, 31-60, 61-90, 90+. Click a bucket to drill into the invoices behind it. Pick a custom "as of" date to see how aging looked in the past. Export to CSV for sharing.

Payment reminders

Open an unpaid invoice and click Send reminder to push a follow-up email immediately. The reminder uses your branded template and includes the hosted pay link. Reminder sends are recorded on the invoice's timeline and emit a invoicing.invoice.reminder_sent webhook.

Sandbox

Every live workspace gets a paired sandbox workspace. Toggle between Live and Sandbox in the workspace switcher at the top of the sidebar. Sandbox tenants:

Use sandbox to rehearse new approval policies, try recurring schedules, or test API integrations before going live.


Reference

Building a deeper integration? See the developer guide for endpoints and events: