# Issue a Refund (/how-to/payments/issue-a-refund)



Resytech supports two refund paths: **Stripe refunds** that reverse a card charge through the Stripe API, and **manual refunds** that record an offline return of funds. Both types create a negative payment entry and update the booking balance.

Prerequisites [#prerequisites]

* An existing booking with at least one recorded payment.
* For Stripe refunds: the original card payment must have a status of `succeeded`.
* Appropriate user permissions.

Stripe Card Refunds [#stripe-card-refunds]

Full Refund [#full-refund]

A full refund returns the entire remaining refundable amount on a card payment.

1. Open the booking from **Dashboard > Bookings**.
2. Navigate to the payment history section.
3. Find the card payment you want to refund and click **Refund**.
4. Select **Full Refund**.
5. Optionally check **Refund Application Fee** if you want Resytech's platform fee returned as well.
6. Review the refund summary showing the refund amount, application fee refund, and operator charge refund.
7. Click **Confirm Refund**.

The refund is processed through Stripe immediately. The customer typically sees the refund on their statement within 5--10 business days, depending on their bank.

Partial Refund [#partial-refund]

A partial refund returns only part of the payment.

1. Open the booking and find the payment.
2. Click **Refund**.
3. Select **Partial Refund**.
4. Choose the amount type:

| Amount Type | How It Works                                                      |
| ----------- | ----------------------------------------------------------------- |
| **Dollar**  | Enter an exact dollar amount to refund (e.g., $50.00)             |
| **Percent** | Enter a percentage of the remaining refundable amount (e.g., 50%) |

5. Enter the amount or percentage.
6. Review the refund summary.
7. Click **Confirm Refund**.

Refund Preview [#refund-preview]

Before confirming, the system shows a preview with these details:

| Field                        | Description                                                                 |
| ---------------------------- | --------------------------------------------------------------------------- |
| **Refundable Amount**        | The maximum that can still be refunded on this payment                      |
| **Refund Amount**            | The amount that will be returned to the customer                            |
| **Application Fee Refund**   | The portion of the platform fee being returned (proportional to the refund) |
| **Operator Charge Refund**   | The amount returned from the operator's share                               |
| **Remaining Charge Balance** | What will remain on the charge after this refund                            |

Multiple Partial Refunds [#multiple-partial-refunds]

You can issue multiple partial refunds against the same card payment until the full amount has been refunded. The system tracks the cumulative refunded amount and prevents you from exceeding the original charge.

For example, on a $100 payment:

* First partial refund: $30 (remaining refundable: $70)
* Second partial refund: $40 (remaining refundable: $30)
* Third partial refund: $30 (payment is now fully refunded)

Refund Application Fee [#refund-application-fee]

When **Refund Application Fee** is checked, the Resytech platform fee is also refunded proportionally. The calculation is:

```
App Fee Refund = (Original App Fee) x (Refund Amount / Original Captured Amount)
```

If you choose not to refund the application fee, the full refund amount comes from the operator's portion of the charge.

Manual Refunds [#manual-refunds]

Manual refunds are for payments that were recorded manually (cash, check, electronic, etc.). No money moves through Stripe -- you are recording that funds were returned to the customer.

Process a Manual Refund [#process-a-manual-refund]

1. Open the booking and find the manual payment.
2. Click **Refund**.
3. Fill in the refund details:

| Field                   | Required    | Description                                                                                                |
| ----------------------- | ----------- | ---------------------------------------------------------------------------------------------------------- |
| **Refund Type**         | Yes         | **Full** (entire remaining amount) or **Partial**                                                          |
| **Amount Type**         | For partial | **Dollar** (exact amount) or **Percent** (percentage of remaining refundable)                              |
| **Amount**              | For partial | The dollar amount or percentage to refund                                                                  |
| **Refund Method**       | Yes         | How the refund is being returned: cash, check, electronic, etc.                                            |
| **Refund Reference ID** | No          | A reference number (check number, transaction ID). Auto-generated if blank, e.g., `REF-20260402-A1B2C3D4`. |
| **Reason**              | Yes         | Why the refund is being issued                                                                             |
| **Notes**               | No          | Additional notes for internal records                                                                      |

4. Click **Confirm Refund**.

Protection Against Over-Refunding [#protection-against-over-refunding]

The system automatically prevents refunding more than the original payment amount. Before processing, it:

1. Calculates the sum of all existing refunds linked to the original payment.
2. Subtracts that from the original payment amount to get the **remaining refundable** amount.
3. Rejects the refund if the requested amount exceeds the remaining refundable amount.

If a payment of $200 has already been refunded $150, the maximum additional refund is $50.

Cancellation Refunds [#cancellation-refunds]

When canceling a booking that has payments, Resytech can process refunds as part of the cancellation flow. The system supports three refund methods during cancellation:

| Method     | Description                                                                                             |
| ---------- | ------------------------------------------------------------------------------------------------------- |
| **stripe** | Refunds the card charge through Stripe. Requires the PaymentIntent ID.                                  |
| **manual** | Records a manual refund. The system automatically finds the best original payment(s) to refund against. |
| **credit** | Not yet implemented. Reserved for future gift card credit functionality.                                |

For manual cancellation refunds, the system intelligently splits the refund across multiple payments if a single payment cannot cover the full refund amount. Payments with larger remaining balances are refunded first.

How Refunds Affect the Balance [#how-refunds-affect-the-balance]

Refunds **add** to the booking balance (the opposite of payments). For example:

* Current balance: $0.00 (fully paid)
* Refund of $100.00
* New balance: $100.00

This means after a full refund, the balance returns to the original booking total.

Refund Statuses in Stripe [#refund-statuses-in-stripe]

After a Stripe refund is processed, the status in Stripe may be:

| Status      | Meaning                                                                                      |
| ----------- | -------------------------------------------------------------------------------------------- |
| `succeeded` | Refund completed successfully                                                                |
| `pending`   | Refund is being processed (rare for card refunds)                                            |
| `failed`    | Refund could not be processed (e.g., charge too old, insufficient balance in Stripe account) |

If a refund fails, Resytech does not create the refund record or update the balance. The error message from Stripe is displayed so you can take corrective action.

Tips and Pitfalls [#tips-and-pitfalls]

* **Stripe refunds can take 5--10 business days** to appear on the customer's statement. Let the customer know when to expect it.
* **You cannot refund a refund.** The system blocks attempts to refund a payment record that is already a refund entry.
* **Stripe charges older than 180 days** may not be refundable. In this case, issue a manual refund and handle the return of funds outside of Stripe.
* **Refunding a card payment does not reverse Stripe processing fees.** Stripe keeps its per-transaction fee even if you refund the payment. This is a Stripe policy, not a Resytech limitation.
* **Partial refunds by percentage** are calculated against the remaining refundable amount, not the original payment amount. If you already refunded half and then request a 50% partial refund, you get 50% of the remaining half.

What to Do Next [#what-to-do-next]

* [Handle Payment Disputes](/how-to/payments/handle-payment-disputes) -- respond if a customer files a chargeback instead of requesting a refund.
* [Process a Payment](/how-to/payments/process-a-payment) -- re-charge after issuing a corrective refund.
