Refund system
Automated refund processing with regulatory compliance. The portal calculates recommended refund amounts based on purchase date, usage, and applicable consumer protection laws.
Refund request flow
- Customer requests refund via the customer dashboard.
- Portal calculates a recommendation based on: - Days since purchase. - Applicable right-of-withdrawal period (14 days in the EU; the exact rule varies by jurisdiction). - Whether the license has been activated and how much it has been used.
- Admin reviews the refund in the queue alongside the recommended amount.
- Approve — the Stripe refund is executed automatically for the recommended amount.
- Reject — the admin records a reason and the customer is notified.
Refund rules
| Rule | Description |
|---|---|
| EU / EFTA 14-day right of withdrawal (no waiver) | Full refund, payment-processing fees absorbed by us. The EU Consumer Rights Directive (2011/83) requires reimbursement of the price in full when the consumer has not waived the cooling-off period. |
| EU / EFTA, customer waived cooling-off | Pro-rated refund based on time since purchase, less non-recoverable payment-processing fees. |
| Discretionary (outside EU, outside the 14-day window) | Goodwill refund at our discretion, less non-recoverable payment-processing fees and a small handling buffer. |
| Single refund per product per customer | Only one refund per product, per customer. Repeated requests on the same product are declined. |
| Anti-abuse | A refund request that follows a pattern we have flagged as abusive (e.g. repeat-and-rebuy cycling) is declined and routed to manual review. |
Payment-processing fees
Stripe charges a non-refundable processing fee on every payment (typically ~1.4 % + €0.25 inside the EU, ~2.9 % + $0.30 elsewhere). That fee is not returned to us when the payment is refunded.
- For EU / EFTA refunds inside the 14-day cooling-off window where the customer has not waived their right of withdrawal, we absorb the fee — you receive the full price you paid.
- In every other case (waived cooling-off, discretionary goodwill, etc.) the fee is deducted from the refundable amount along with a small handling buffer.
The recommendation surfaced in the customer dashboard always shows the gross amount, the fee deducted (if any), and the net amount you would actually receive — there is no surprise at the end.
Manual overrides
Admins can always approve an amount different from the recommendation: full refund regardless of the calculator, a custom partial amount, or none. Overrides are logged with the admin's rationale.
Refund execution
Approved refunds call Stripe's API to refund the original payment intent. If Stripe fails, the refund stays in approved status with the failure reason recorded — the admin can retry or process it manually from the Stripe dashboard.