- Shipped
- November 12, 2026 at 9:51 PM UTC
- Author
- Kamo
- Commit
- d07517a
The public invoice's /pay takes an optional amount. InvoiceCardPayments checks it against the balance read fresh: a positive amount in whole cents, from 1.00 (PART_MINIMUM) up to what is due — never the page's figures; a refused amount answers 400 INVALID_AMOUNT and opens nothing. A retail order's invoice is only ever paid whole (its card payment is the order's own payment, which moves the order to Paid), and a subscription invoice keeps the platform's whole-balance checkout. The public view says whether part payments are offered (payPartMinimum). BillingService still closes any open page before opening another, so one page per invoice holds. A part payment returns to ?paid=part.
