Update a draft invoice. Only draft invoices can be edited.
Update a draft invoice. Only draft invoices can be edited.
https://app.softsolz.uk/api/v1/services/invoicing/invoices/{id}Recent Requests
Kept only in this browserPath Params
idstringrequiredHeaders
AuthorizationstringrequiredBearer token: `Bearer sk_live_...` (or `sk_test_...` for sandbox). A login token will not work here.
Body Params
customer_idintegerActive customer id in this workspace.
linesarray of objectsLine items (at least one).
issue_datestringIssue date; defaults to today (UTC).
due_datestringDue date; defaults to issue_date + customer terms.
currencystring3-letter currency; defaults to the customer currency or USD.
discountnumberFlat discount applied after tax (default 0).
shipping_amountnumberShipping added after tax+discount (default 0).
header_tax_rate_pctnumber | nullWhen set, total tax = subtotal * pct/100 and per-line tax is ignored.
po_numberstring | nullPO number; omit to auto-allocate per customer.
notesstring | nullNotes shown on the invoice.
termsstring | nullPayment terms text.
payment_methodstring | nullHow the customer pays. "stripe" makes the invoice payable online and needs Stripe connected in Invoicing first. "bank_transfer" needs bank_details. When omitted, stripe is used if Stripe is connected, otherwise bank_transfer.
bank_detailsstring | nullWhere the customer should send a bank transfer, printed on the invoice. Required for bank_transfer invoices unless show_bank_details is false.
show_bank_detailsbooleanWhether bank_details are printed on the invoice. Defaults to true.
Response
Response Body
idintegerInvoice id.customer_idintegerCustomer id.invoice_numberstringHuman invoice number.issue_datestringIssue date (YYYY-MM-DD).due_datestringDue date (YYYY-MM-DD).currencystringISO 4217 currency code.subtotalstringDecimal amount as a numeric string (NOT minor units).tax_totalstringTotal tax, numeric string.totalstringInvoice total, numeric string.amount_paidstringAmount paid so far, numeric string.statusstringInvoice status.linesarray of objectsInvoice line items.paymentsarray of objectsRecorded payments; payments[].id is the payment_id used when issuing a refund.created_atstringCreation timestamp.updated_atstringLast update timestamp.Request
curl --request PUT \ --url https://app.softsolz.uk/api/v1/services/invoicing/invoices/{id} \ --header 'Authorization: Bearer sk_live_your_key' \ --header 'Content-Type: application/json' \ --data '{ "lines": [ { "description": "Consulting, January", "quantity": 10, "unit_price": 10, "tax_rate": 20 } ], "issue_date": "2026-01-15", "due_date": "2026-02-14", "currency": "GBP", "discount": 0, "shipping_amount": 0, "header_tax_rate_pct": 20, "po_number": "PO-2026-001", "notes": "Thank you for your business.", "terms": "Net 30", "payment_method": "bank_transfer", "bank_details": "Acme Ltd, sort code 12-34-56, account 12345678", "show_bank_details": true}'Credentials
Sent as a Bearer token and used in the samples above and in Try it. Kept only in this browser tab until you close it. Use an sk_test_ key to stay in your sandbox.
Response · 200
{ "data": { "id": 1001, "customer_id": 42, "invoice_number": "INV-0007", "issue_date": "2026-01-15", "due_date": "2026-02-14", "currency": "GBP", "subtotal": "100.00", "tax_total": "20.00", "total": "120.00", "amount_paid": "0.00", "status": "sent", "lines": [ { "description": "Consulting, January", "quantity": 10, "unit_price": 10 } ], "payments": [], "created_at": "2026-01-15T09:55:00.000Z", "updated_at": "2026-01-15T09:55:00.000Z" }}