Adding seats in Stripe produced a refund instead of a charge
A coupon on a back-dated Stripe subscription can make a seat increase come out negative, so expanding customers get paid instead of billed.
Working notes
Write-ups of things that go wrong in Stripe and return success while doing it. Each one covers the symptom, what Stripe is actually doing, where to look to confirm it, and how to put the money back.
A coupon on a back-dated Stripe subscription can make a seat increase come out negative, so expanding customers get paid instead of billed.
Usage-based invoices come out short when meter events go unattributed. The failure points between your event and the invoice line, and how to reconcile them.
Open Stripe invoices stack on a single customer while each one stays individually valid. Where the extras come from and how to clear them without losing the real one.
Stripe takes amounts in the currency's minor unit, so a hardcoded multiply by 100 breaks JPY, KRW and the currencies Stripe special-cases. How to find and repair it.
A Stripe coupon can be attached, valid and unexpired while discounting nothing, because its applies_to product list matches no line on the invoice.
The subscription in Stripe and the access your own code grants are two separate records, and nothing reconciles them. What drifts, how to check it yourself, and why Murphy does not cover this one.
When Stripe dunning stops, next_payment_attempt is null and no event announces it. The reasons a retry never happens, and how to find the invoices it left behind.
Murphy checks for the ones in this list against your own Stripe account, and the first report covers the invoices you already have.