Appearance
Refunds
Issue full or partial refunds to customers and track their status through completion.
Overview
The Refunds page provides a centralized view of all refunds issued by your business. Access it from the Payments > Refunds menu in the main navigation.
What You Can Do
- View all refunds with status and details
- Filter by refund status
- Search by customer or payment reference
- See refund statistics at a glance
- Handle failed refunds (retry or delete)
Viewing Refunds
Refunds List
The refunds list shows:
- Amount - The refund amount
- Customer - Who the refund is for
- Status - Current processing state
- Reason - Why the refund was issued
- Date - When the refund was created
Filtering and Search
Use the filters to find specific refunds:
- Status filter - Show only refunds in a specific status
- Search - Find by customer name or payment reference
Statistics Summary
At the top of the page, you'll see:
- Total refunds - Count and total amount
- Pending - Awaiting processing
- Succeeded - Successfully completed
- Failed - Unsuccessful attempts
Refund Statuses
| Status | Meaning |
|---|---|
| Pending | Refund created, waiting to be processed |
| Processing | Refund is being processed by the payment provider |
| Succeeded | Refund completed successfully - funds returned to customer |
| Failed | Refund attempt was unsuccessful (see failure details) |
| Cancelled | Refund was cancelled or superseded by a retry |
Issuing Refunds
Refunds are issued from the original payment:
- Navigate to Payments
- Find and open the payment
- Click the three-dot menu (⋮)
- Select Issue Refund
- Enter the refund amount (full or partial)
- Select a reason for the refund
- Add notes if needed (optional)
- Click Process Refund
INFO
Refunds can only be issued for payments made through Stripe or Square. Manual payments (cash, bank transfer) must be refunded outside the system.
Refund Reasons
When issuing a refund, select the appropriate reason:
- Customer Request - Customer asked for a refund
- Duplicate - Payment was charged twice
- Fraudulent - Suspected fraudulent transaction
- Order Change - Service scope changed or cancelled
- Other - Any other reason (add notes for clarity)
Partial vs Full Refunds
You can issue partial refunds:
- Full refund - Returns the entire payment amount
- Partial refund - Returns a portion of the payment
For partial refunds, the remaining amount stays on the original payment.
Handling Failed Refunds
Sometimes refunds fail. When this happens, you'll see:
- Status: Failed (shown in red)
- Failure Code: Technical reason for the failure
- Failure Message: Human-readable explanation
Common Failure Reasons
| Failure Code | What It Means | What To Do |
|---|---|---|
insufficient_funds | Payment provider doesn't have enough balance | Check provider account balance, then retry |
charge_already_refunded | This payment was already refunded | Check for existing successful refunds |
charge_disputed | Customer disputed the charge | Wait for dispute resolution |
expired_or_canceled | Original payment is too old or card was cancelled | Contact customer for alternative refund |
network_error | Temporary connection issue | Wait a few minutes and retry |
provider_error | Payment provider returned an error | Check provider dashboard for details |
Retry a Failed Refund
If a refund failed due to a temporary issue:
- Open the refund (click on it in the list)
- Review the failure details
- Click Retry Refund
- Confirm the amount (you can adjust if needed)
- Click Confirm
A new refund will be created and the original marked as cancelled.
TIP
After fixing the underlying issue (e.g., topping up your Stripe balance), retrying usually succeeds.
Delete a Failed Refund
For refunds that cannot or should not be retried:
- Open the refund
- Click Delete Refund
- Confirm the deletion
WARNING
Deleting a refund removes it from your records. Only delete refunds you're certain won't be needed, such as:
- Duplicate refund attempts
- Refunds created in error
- Refunds that will be handled outside the system
Refund Processing
How Refunds Work
- You issue refund - Creates a pending refund record
- Sent to provider - Submitted to Stripe or Square
- Provider processes - Payment network processes the return
- Funds returned - Customer receives money (2-10 business days)
- Status updated - YardPilot shows final status
Stripe Refunds
For Stripe payments:
- Refunds are processed immediately
- Status updates via webhooks
- Funds typically appear in 5-10 business days
- Processing fees are not returned
Square Refunds
For Square payments:
- Refunds process synchronously
- Status is final immediately
- Funds typically appear in 2-5 business days
Manual Payments
Cash, cheque, and bank transfer payments cannot be refunded through YardPilot:
- Handle the refund outside the system
- Record it manually for your records if needed
- Consider using notes on the payment to track the manual refund
Impact on Invoices
When a refund is processed:
- Refund succeeds - Payment allocations are automatically adjusted
- Invoice balance - May be restored if the refund deallocates from invoices
- Invoice status - Updates automatically (e.g., from Paid to Partial)
LIFO Deallocation
Refunds deallocate from invoices in Last In, First Out order:
- Most recent allocations are removed first
- Older allocations remain intact
- This ensures consistent accounting
Example: Payment of $500 was allocated:
- $200 to Invoice #001 (first)
- $300 to Invoice #002 (second)
A $300 refund would deallocate from Invoice #002 first (most recent).
Best Practices
Before Issuing Refunds
- Verify the request - Confirm the customer actually requested a refund
- Check the amount - Ensure you're refunding the correct amount
- Review allocations - Understand which invoices will be affected
- Add notes - Document why the refund was issued
Managing Failed Refunds
- Check failure reason - Understand why it failed before retrying
- Don't retry blindly - Fix the underlying issue first
- Delete duplicates - Clean up accidental duplicate attempts
- Contact support - For persistent failures, contact payment provider
Record Keeping
- Use notes - Document any special circumstances
- Review regularly - Check for pending or failed refunds weekly
- Reconcile with provider - Match YardPilot records with Stripe/Square
Permissions
Refund access is controlled by user role:
| Action | Owner | Admin | Office | Field |
|---|---|---|---|---|
| View refunds | ✓ | ✓ | ✓* | ✗ |
| Issue refunds | ✓ | ✓ | ✓* | ✗ |
| Retry refunds | ✓ | ✓ | ✓* | ✗ |
| Delete refunds | ✓ | ✓ | ✓* | ✗ |
*Requires payments:view and payments:refund permissions.
Troubleshooting
Refund Stuck in Processing
If a refund stays in "Processing" for more than 24 hours:
- Check the payment provider dashboard (Stripe/Square)
- Verify the refund was received by the provider
- Look for any holds or issues on the account
- Contact payment provider support if needed
Can't Find a Refund
- Clear any active filters
- Search by customer name or payment reference
- Check if the refund was deleted
- Look in the original payment's history
Refund Amount Incorrect
If you issued a refund for the wrong amount:
- Check if it has processed yet
- If pending, delete and re-issue with correct amount
- If succeeded, issue another refund for the difference (or contact customer)
Next Steps
- Managing Payments - View and allocate payments
- Recording Payments - Track manual payments
- Stripe Payments - Set up Stripe integration
- Square POS - Set up Square integration
