Invoicing

Send invoices to your customers, get paid by card through your own Stripe account or by bank transfer, and see what is still owed - with no bookkeeping setup.

Overview

Customers

Open Invoicing → Customers and press New customer at the top right. Only Display name is required. You can also add Email, Phone, Tax ID / VAT, a billing address, Default payment terms (days), Default currency and Notes. Picking a Country fills in the default currency for you. Press Save.

If a teammate saved the same customer while you were editing it, you get a clear conflict warning instead of overwriting their changes.

Balances come straight from your invoices and recorded payments, so there is no chart of accounts to set up. A customer with open invoices cannot be deactivated: void or settle those invoices first.

Invoices

Open Invoicing → Invoices and press New invoice at the top right. It walks you through three steps.

  1. Customer & dates - pick the customer, then check the issue date, due date, currency and PO number.
  2. Items & payment - add lines (description, unit price, quantity and an optional tax %), plus an optional discount, shipping, notes and payment terms. Under How will the customer pay? choose Online card payment (needs Stripe connected) or Bank transfer (you must add bank details, which are printed on the invoice).
  3. Review & send - check the preview and the branding shown on the invoice.

Press Save draft at any step to come back later. Drafts stay fully editable.

Press Issue & send to lock the invoice and email it to the customer with the PDF attached. A card-payment invoice also carries a Pay invoice button. If an approval policy matches, the button reads Submit for approval instead and the invoice waits for sign-off.

On a sent invoice, Record payment logs money that arrived another way (bank transfer, cash, cheque and so on). Part payments are fine.

Customers pay online from the link without logging in, and it works well on a phone.
Connect your email address first. Invoices, reminders and receipts go out from your own address, never from SoftSolz. Until one is connected, Send asks you to add it and nothing is emailed. See Email sending.

Invoice lifecycle

Every invoice moves through these states:

Payment collection

To take card payments you connect your own Stripe account once. On the Items & payment step of an invoice, pick Online card payment. If Stripe is not connected yet, press Set up. On the Connect Stripe page press Connect with Stripe, choose the country your business is based in, and finish the steps on Stripe. You need a real Stripe account for this.

When Stripe has checked your details and turned on charges, the page shows Ready to accept payments. From then on, card-payment invoices carry a pay link. The money goes straight to your Stripe account and on to your bank on Stripe's schedule. SoftSolz adds no fee on top of Stripe's: your SoftSolz plan already covers it.

If you would rather not take cards, leave Stripe unconnected and pick Bank transfer on each invoice. Add your bank details so the customer knows where to send the money, then press Record payment when the funds land. Save a bank account under Invoicing → Payments → Bank accounts and it fills in for you on new invoices.

Customer portal

Open a customer from Invoicing → Customers and find the Customer portal link card. Press Issue link, then Copy URL and send it to your customer yourself. The link opens a page listing every open invoice on their account, and they can pay each one, with no account or password.

The full link is shown only once, straight after you issue it. It keeps working until you press Rotate link (which replaces it) or Revoke.

Get paid from your own website

Payment buttons and links that are not tied to an invoice (deposits, one-off charges, "pay what you owe") belong to the Stripe Payments service, which uses the same Stripe connection. Install it from the Marketplace. A developer can also create a checkout for an amount their own software chooses, using an API key.

See Stripe Payments for the full guide.

A Payment Link is a web address for a fixed amount, or an amount the customer types in (with an optional minimum). You create it in Stripe Payments, not in Invoicing, and paste it as a normal link or button on your site, in an email or behind a QR code. No script and no developer are needed. The customer pays on Stripe's secure checkout and the money lands in your Stripe account.

Step by step: create a payment link.

Payments

Invoicing → Payments → Dashboard shows your Stripe balance (available and pending settlement), recent payments with any amount refunded, and payouts to your bank. It needs the Stripe Payments service installed and Stripe connected. Until then it shows a button to install Stripe Payments.

Payments against one invoice are listed on that invoice, under Activity.

Refunds

Open an invoice that has a payment on it and press Refund. Choose the Original payment, the refund amount (full or part), a method and an optional reason, then press Record refund.

Recording a refund here does not send money back. It updates the invoice so your records match. For a card payment, also refund the charge in your own Stripe dashboard. For a bank transfer, send the money back from your bank.

A refund lowers the amount paid and moves the status back: Paid becomes Partially paid, and a fully refunded invoice goes back to Sent or Overdue, depending on its due date. Refunds can need approval if you have set a policy for them.

Credit notes

To lower what a customer owes without sending money back (a goodwill gesture, a quantity dispute, a new price), open the invoice and press Issue credit. Enter the amount and an optional reason. Each credit note gets its own number, such as CN-0001, and the amount comes off the invoice's balance. Credit notes can need approval too.

Recurring

Invoicing → Recurring creates a recurring invoice template. Give it a Name, tick one or more invoices you have already sent to copy, choose a Cadence (weekly, monthly, quarterly, yearly, or custom with a schedule you type in), set Due in (days) and an optional start date.

On each run SoftSolz creates a fresh draft copy of every chosen invoice. Nothing is sent by itself: open the drafts, check them and press Issue & send. Drafts cannot be used as the source, so send the first invoice before you set up the template.

Approvals

Set rules under Invoicing → Approvals → Policies. A policy covers one kind of action: issuing an invoice, a refund, a write-off or a credit note. It can apply only above or below an amount, or in one currency. It then asks one or more roles to approve, one after another or at the same time, with an optional time limit and what to do when it runs out. For example:

Nobody can approve their own request unless you tick Self-approval on the policy. Voiding an invoice never needs approval.

Requests waiting for you appear in Approvals → Inbox. Use Approvals → Delegations to hand your approvals to a colleague while you are away.

AR aging

Invoicing → Aging Reports shows what is still owed, grouped by how many days overdue it is: Current, 1-30, 31-60, 61-90 and 91+. It is broken down by customer and by invoice. Change the As of date to see how it looked on an earlier day, and press Export CSV to share it.

Payment reminders

Open an unpaid invoice that has been sent and press Send reminder to email the customer a follow-up straight away. A card-payment invoice's reminder includes the pay link. The customer needs an email address, and the reminder goes from your own sending address. Each reminder also fires the invoicing.invoice.reminder_sent webhook.

Sandbox

Every live workspace has a paired sandbox. Open the workspace menu at the bottom of the sidebar and choose Switch to Sandbox mode, then Enter Sandbox. In the sandbox:

Emails still go out from any sending address you set up in the sandbox, so use your own email address as the customer while you test.

Test it step by step

These steps prove Invoicing works from start to finish. Try them in the sandbox first: open the workspace menu and choose Switch to Sandbox mode. The sandbox keeps its own data and settings, so set things up there too.

  1. Install Invoicing. Open Marketplace, find the Invoicing card and press Install, then Open. Do this as the workspace owner or an Admin. Other roles need the Invoicing permissions turned on under Members & access → Roles.
  2. Connect a sending address. Invoices are emailed from your own address. Add one under Marketplace → Email sending and verify it. See Email sending.
  3. Add yourself as a customer. Go to Invoicing → Customers, press New customer, type your own name and an email address you can read, and press Save. You should see the customer in the Customers list.
  4. Create the invoice. Go to Invoicing → Invoices, press New invoice, pick your customer and press Next. Add one line, for example "Test service", quantity 1, unit price 50. Under How will the customer pay? choose Bank transfer, type some bank details and press Next.
  5. Send it. Press Issue & send. You should see "Invoice issued and sent", the invoice shows as Sent, and the email with the PDF attached arrives in your inbox.
  6. Record the payment. Open the invoice, press Record payment, keep the full amount and confirm. The status changes to Paid, the payment shows under Activity, and a "Payment received" email arrives.
  7. Optional: pay by card. Connect Stripe as described in Payment collection. This needs a real Stripe account. In the sandbox, Stripe shows a test version of its sign-up that you can click through. Send a second invoice with Online card payment, press Pay invoice in the email and pay. In the sandbox, use Stripe's test card 4242 4242 4242 4242 with any future expiry date and any 3-digit code. The invoice turns Paid by itself.

For developers

In the sandbox, create an API key under Invoicing → Developer with the service.invoicing.invoices.create scope. Sandbox keys start with sk_test_. Then create a draft invoice for one of your customers. Use a customer id from the list customers call.

curl -X POST https://app.softsolz.uk/api/v1/services/invoicing/invoices \
  -H "Authorization: Bearer sk_test_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": 42,
    "currency": "GBP",
    "lines": [{ "description": "Test service", "quantity": 1, "unit_price": 50 }],
    "payment_method": "bank_transfer",
    "bank_details": "Bank: Example Bank, Account: 12345678"
  }'

A reply with "status": "draft" and a new invoice number means it worked, and the draft appears under Invoicing → Invoices. An invoice needs either Stripe connected ("payment_method": "stripe") or bank details ("payment_method": "bank_transfer" plus bank_details). Full details: Create a draft invoice.

If something goes wrong

What you seeWhat it means
Set up your email address when you send, or the code workspace_sender_requiredNo verified sending address is connected in this workspace (the sandbox has its own). Add one under Marketplace → Email sending and try again.
Online card payment needs Stripe set up first... (code PAYMENT_PATH_REQUIRED)Stripe is not connected, or Stripe has not finished checking your details. Finish Payment collection, or switch the invoice to Bank transfer.
Bank-transfer invoices need bank details... (code PAYMENT_PATH_REQUIRED)You chose Bank transfer but left the bank details empty. Add them on the Items & payment step.
Customer has no email address on file.The customer has no email, so nothing could be sent. Add one under Invoicing → Customers, then open the invoice and press Resend.

Reference

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