# Refunds & Disputes (/docs/payments/refunds)



Processing Refunds [#processing-refunds]

1. Open the booking with the payment to refund
2. Click **Refund** on the payment transaction
3. Choose **full** or **partial** refund
4. Review the refund preview showing the amount to be returned
5. Confirm the refund

Refunds are processed through Stripe back to the customer's original payment method. Processing time depends on the customer's bank (typically 5--10 business days).

Refund Types [#refund-types]

| Type        | Description                                                       |
| ----------- | ----------------------------------------------------------------- |
| **Full**    | Refunds the entire remaining refundable amount on the transaction |
| **Partial** | Refunds a specific amount, leaving the rest of the payment intact |

Partial Refund Amount Types [#partial-refund-amount-types]

When issuing a partial refund, you can specify the amount in two ways:

| Amount Type | Description                                                 |
| ----------- | ----------------------------------------------------------- |
| **Dollar**  | A fixed dollar amount to refund (e.g., $25.00)              |
| **Percent** | A percentage of the remaining refundable amount (e.g., 50%) |

Refund Methods [#refund-methods]

Resytech supports two refund methods depending on how the original payment was made:

| Method     | When Used                                                  | Description                                                                                  |
| ---------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| **Stripe** | Original payment was a card transaction                    | Refund is processed through Stripe back to the original card. Requires the PaymentIntent ID. |
| **Manual** | Original payment was cash, check, or other non-card method | Refund is recorded in the system. The actual return of funds is handled outside Resytech.    |

Stripe Refund Details [#stripe-refund-details]

For Stripe refunds, the system validates the following before processing:

* The payment intent status must be `succeeded`
* The charge must not already be fully refunded
* The refund amount cannot exceed the remaining refundable balance (captured minus already refunded)

The refund preview shows a breakdown:

| Field                      | Description                                                                   |
| -------------------------- | ----------------------------------------------------------------------------- |
| **Refundable Amount**      | Maximum amount that can still be refunded on this transaction                 |
| **Intent Amount**          | The original charge amount                                                    |
| **Collected Amount**       | The amount that was actually captured                                         |
| **Application Fee Amount** | The platform fee that was collected                                           |
| **Operator Charge Amount** | The amount that went to your Stripe account (collected minus application fee) |

You can optionally choose to **refund application fees** along with the payment. If enabled, the platform fee is refunded proportionally to the refund amount.

Manual Refund Details [#manual-refund-details]

Manual refunds support the following fields:

| Field          | Required | Description                                                                 |
| -------------- | -------- | --------------------------------------------------------------------------- |
| Refund Method  | No       | How the refund was returned (e.g., "cash", "check")                         |
| Reference ID   | No       | External reference (check number, etc.). Auto-generated if not provided.    |
| Reason         | No       | Reason for the refund                                                       |
| Notes          | No       | Additional notes for internal tracking                                      |
| Add to Balance | Yes      | Whether to add the refund amount back to the booking balance (default: yes) |

Manual refund reference IDs are auto-generated in the format `REF-{YYYYMMDD}-{RANDOM}` if not provided.

Cancellation Refunds [#cancellation-refunds]

When a booking is canceled, refunds can be processed automatically based on the cancellation policy. The system supports processing multiple refund requests in a single cancellation, splitting across both Stripe and manual refunds as needed. If a single payment does not have enough refundable balance, the system automatically splits the refund across multiple payments.

Partial Refunds [#partial-refunds]

For partial refunds, enter the specific amount to refund. This is useful for:

* Removing a single line item from a multi-item booking
* Applying a discount after the fact
* Goodwill credits
* Cancellation policies that refund a percentage of the total

A single payment can be partially refunded multiple times until the full amount has been returned. The system tracks existing refunds for each payment and prevents over-refunding.

Chargeback & Dispute Management [#chargeback--dispute-management]

When a customer files a chargeback with their bank:

1. Resytech alerts you in the dashboard and marks the transaction as disputed
2. Evidence is automatically gathered from multiple sources
3. You can review and supplement the evidence
4. The dispute response is submitted to Stripe

Automatic Evidence Collection [#automatic-evidence-collection]

Resytech automatically compiles a comprehensive evidence document that includes:

| Evidence Category        | Details Collected                                                                  |
| ------------------------ | ---------------------------------------------------------------------------------- |
| **Customer Information** | Name, email, IP address, phone number                                              |
| **Booking Details**      | Confirmation code, activity, date/time, location, status                           |
| **Payment Verification** | CVC check result, address verification, postal code check, 3D Secure status        |
| **Risk Assessment**      | Stripe risk score (0--99), risk level, network status, outcome type                |
| **Waiver Evidence**      | Signed waivers with timestamps, signer IP addresses, and waiver names              |
| **Service Delivery**     | Whether service was delivered, delivery confirmation date                          |
| **Billing Address**      | Full billing address from the payment method                                       |
| **Access Activity Log**  | Booking creation time, IP address, booking source, browser fingerprint, user agent |

Evidence Submission [#evidence-submission]

The evidence is compiled into a PDF document and uploaded to Stripe as dispute evidence. The submission includes:

* **Service documentation** -- The compiled evidence PDF
* **Receipt** -- Attached as proof of the transaction
* **Customer communication** -- Included if waiver submissions exist
* **Product description** -- Activity name, date, time, location, and confirmation code
* **Uncategorized text** -- Risk assessment details, security verification results, and waiver evidence

You can choose to **submit immediately** to the bank or **stage for review** before submission. Evidence files are retained for 60 days.

Resytech helps you respond to disputes quickly with pre-compiled evidence, improving your chances of winning the case.

Related How-To Guides [#related-how-to-guides]

* [Issue a Refund](/how-to/payments/issue-a-refund) -- Step-by-step guide to processing refunds
* [Handle Payment Disputes](/how-to/payments/handle-payment-disputes) -- Respond to chargebacks effectively
* [Adjust Booking Pricing](/how-to/payments/adjust-pricing) -- Set a custom grand total using Pricing Override
