Customers can request cancellation from their account. The order enters a "cancellation_requested" state, the admin sees the request and decides whether to approve or reject it. Refunds to Stripe and PayPal are automatic.
Customer-side cancellation workflow
The customer logs into their account, clicks on a confirmed order and selects "Request cancellation". In the dialog they must choose a reason (changed_mind, wrong_item, duplicate, late_delivery, other) and can add a note.
The request is created immediately and sent to the admin. The order moves to pending_cancellation_review status. The customer sees their request status in their account.
- Cancellation request directly from customer's account
- Reason selection (mandatory) and optional note
- Status tracked in real-time: pending, approved, rejected
- Automatic notifications to customer on request outcome
Admin approval/rejection
The admin sees all cancellation requests in a dedicated list. For each request they can:
- Approve it: the order moves to cancelled status, the refund is automatically processed on the gateway (Stripe or PayPal) - Reject it: the admin can write a reason message that the customer receives via email and sees in their account
If the refund fails (expired card, limit reached, etc.), the admin can retry the refund from the dashboard anytime.
- Centralized list of all pending requests
- Approve/reject with custom message
- Automatic refund to Stripe or PayPal on approval
- Manual retry of refund if first attempt fails
Refund processing
When the admin approves a cancellation, Veendo reads the order's payment method (Stripe or PayPal), the transaction ID and amount, and sends a refund request to the gateway.
The refund uses an idempotencyKey based on the cancellation request ID — if the network fails and retries, the gateway won't create two refunds but recognizes it's the same. The admin sees the status: success, failed, pending.
- Support for Stripe (cards, wallets, 3DS) and PayPal
- Full or partial refund (if configured)
- Idempotency key to prevent double refunds
- Automatic and manual retry available
If the refund fails on the gateway side (e.g., expired card), it stays in failed status and must be manually retried by the admin once the issue is resolved.
Automatic notifications and communications
When the request is created, the admin receives a notification (email + in-app). When the request is approved or rejected, the customer receives an automatic notification with the status and message. If the refund was completed, the customer receives a refund confirmation communication.
- Admin notification when customer requests cancellation
- Customer notification when request is approved/rejected
- Refund confirmation email to customer
- Tracking visible in dashboard and customer area