Processing partial and full refunds
How to issue a refund via Stripe from the order detail page, when to use partial versus full refunds, and how the audit trail is preserved in the refunds collection.
VeloCMS refunds are issued through Stripe, not by hand. From Admin > Orders, open the order that needs a refund and click the 'Issue Refund' button. A modal asks for the refund amount and a reason (either a preset — duplicate, fraudulent, requested_by_customer — or a free-form note). Submit the modal and the refund is created via the Stripe API using your tenant's configured Stripe key.
Quick start — issuing your first refund
Go to Admin > Orders and use the search bar to find the order by order ID, email address, or product name. Click the order row to open the detail page. In the top-right corner of the order card, you'll see the 'Issue Refund' button — it's only visible for orders in 'completed' or 'processing' status, not for orders already refunded. Click it, enter the amount, pick a reason, and confirm. The refund appears in Stripe within seconds; the customer receives a confirmation email automatically.
Partial versus full refunds
Enter the full order total to issue a complete refund — the order status changes to 'refunded' and digital entitlements are revoked (customers can no longer access downloads tied to this order). Enter any lesser amount for a partial refund — the order stays in 'completed' status, but a record is created in the refunds collection with the Stripe refund ID, amount, reason, and timestamp. You can issue multiple partial refunds per order; each one is logged separately for your accounting trail.
A practical example: a customer bought a $49 bundle that included two items, and one of them turned out to be defective. Issuing a $24.50 partial refund covers the defective item without cancelling the whole order. The customer keeps access to the working item, and your Stripe dashboard shows the original charge plus a $24.50 refund for clean bookkeeping.
Customer notification
The customer automatically receives a refund-confirmation email from Resend the moment the Stripe refund succeeds. The email includes the original order ID, refunded amount, and the reason you provided. No manual messaging needed — but feel free to follow up personally if the situation warrants a warmer touch. The automated email is a plain-text transactional notification, not a branded template, so a personal follow-up can go a long way toward maintaining the relationship.
Refund timelines by payment method
Stripe processes refunds immediately on our end, but the time it takes to reach the customer depends on their payment method. Credit and debit cards typically show refunds in 5–10 business days — this is the bank's processing window, not something we control. SEPA direct debit refunds can take up to 8 business days. Apple Pay and Google Pay refunds match the underlying card's timeline. If a customer contacts you saying they haven't seen the refund after 10 business days, ask them to check with their bank before escalating to Stripe support.
Common pitfalls
The most common mistake is issuing a full refund when the intent was partial — the order status flips to 'refunded' and the customer loses all digital access immediately. Double-check the amount field before confirming. Another pitfall: refunding an order that includes a reader membership subscription doesn't cancel the subscription — you need to cancel the membership separately in Admin > Members. Stripe refunds the charge but doesn't know about VeloCMS's membership state. Finally, if you're running a high volume of refunds in a short period, keep an eye on your Stripe balance. Refunds pull from your available balance, and Stripe may hold payouts if the balance dips too low.
Related articles
- How billing and trials work — your platform billing vs reader membership billing
- Setting up reader memberships — the Stripe BYOK setup for your reader payments
- Cancelling a reader membership — when a reader cancels vs when you cancel on their behalf
Refunds reduce the payout in your Stripe balance. If your balance is insufficient, Stripe may delay the refund — the refunds collection will still show it as 'pending' until Stripe confirms. Keep an eye on Stripe Dashboard > Balance if you process a large refund.