# Refunds & Cancellations

Cancelling and refunding are two different actions, and it's worth knowing which one you need:

- **Cancelling** stops the order. It tells the kitchen not to make it and marks it cancelled.
- **Refunding** returns money. It doesn't change what the kitchen is doing.

An order the kitchen hasn't started usually needs both. An order the customer already collected and complained about needs only a refund.

## Who can refund

Refunds require **billing access** — Owner (or a superuser). Managers and staff can cancel an order but cannot move money. This is deliberate: cancelling is an operational decision, refunding is a financial one.

## Refunding a whole order

1. Go to **Admin → Orders**.
2. Find the order — use the **History** tab if it's already completed.
3. Open it to see the order detail.
4. Choose **Refund**.
5. Confirm the full amount.

The customer's card is refunded through Stripe. It typically takes **5–10 business days** to appear on their statement — that's their bank's timing, not something ForkLine or Stripe controls. Tell customers this up front; the money leaves your balance immediately, so from your side it's already done.

## Refunding part of an order

If only one item was wrong, refund only that item rather than the whole ticket.

1. Open the order and choose **Refund**.
2. Select the specific **items** to refund.
3. Confirm.

ForkLine calculates the amount for the items you selected, including their share of tax. An item that's already been refunded can't be refunded twice, and the total refunded can never exceed what the customer paid.

## What can and can't be refunded from ForkLine

**Only card payments taken online through Stripe can be refunded here.**

- **Cash orders** — refund from the drawer. See [Cash Drawer](/cash-drawer). Nothing was processed electronically, so there's nothing to reverse.
- **Card-reader payments at the counter** — refund from your Stripe dashboard, reachable from **Settings → Payments**.
- **Unpaid orders** (pay at pickup, never collected) — cancel rather than refund. No money changed hands.

## Cancelling an order

1. Go to **Admin → Orders** and open the order.
2. Choose **Cancel**.

The order is marked cancelled and drops off the [kitchen display](/kitchen-display). Cancelled orders are excluded from your revenue figures on the [Dashboard](/dashboard).

**Cancelling does not refund.** If the customer paid, refund separately.

## What a refund costs you

When you refund, the customer gets back everything they paid. Stripe returns the percentage portion of its processing fee but generally keeps the fixed portion (30¢ online, 5¢ in person). So a refunded order leaves you slightly out of pocket — a fact worth knowing before you refund a $4 coffee to settle a minor complaint.

Full detail in [Processing Fees Explained](/processing-fees).

## Disputes and chargebacks

A **dispute** (or chargeback) is when a customer asks their bank to reverse a charge instead of asking you. It's handled by Stripe and their bank — not in ForkLine.

If you're disputed:

1. **Stripe emails you** and the amount is held.
2. **Respond through your Stripe dashboard** with evidence: the order detail, pickup time, and anything showing the customer received the food.
3. **The bank decides**, usually in several weeks.

Stripe charges a dispute fee on top of reversing the payment, and you pay it whether or not you win.

**Preventing disputes is much cheaper than fighting them:**

- Make sure your **statement descriptor** is a name customers recognize. An unrecognized charge is the most common trigger — see [Setting Up Stripe Payments](/stripe-connect-setup).
- **Refund a genuine complaint quickly.** A $20 refund beats a $20 reversal plus a dispute fee plus your time.
- **Take payment on the reader when the customer is present.** In-person card payments carry much lower dispute risk.

## Where to go next

- [Managing Orders](/orders) — the order queue
- [Processing Fees Explained](/processing-fees)
- [Payouts & Timelines](/payouts) — how refunds affect deposits
- [Troubleshooting](/troubleshooting)
