Docs
← cabintale.com EN · CZ Email support
Payments · Tutorial

Refunds and cancellations

Send money back to a guest — full or partial — without leaving the booking page, each refund gated by an emailed confirmation code.

By the end of this guide, you'll know how to issue a refund (full or partial) on any successful Stripe payment, what the booking looks like afterwards, what the guest gets, and how cancellation differs from refund.

Before you start

What you'll need

  • A booking with a successful Stripe payment (deposit, full, or balance)
  • Access to the email address on your cabintale account — the confirmation code lands there
  • ~2 minutes per refund
What you'll achieve
  • Money returned to the guest's original card via Stripe (typically lands in 5–10 business days)
  • A separate refund row in the Payments table with a Refunded badge
  • The booking's "to be paid" automatically recalculated — fully refunded bookings drop back to Confirmed and unblock for a fresh payment link if you want one

What you can refund

Payment statusRefund possible?
Succeeded (online via Stripe)Yes — full or partial
Pending / Failed / Expired (online)No refund — the guest never paid. Use the Delete icon to remove the row instead
Manual payments (cash, transfer)Not handled in cabintale — settle with the guest directly and update the manual payment row

Refunds work per-transaction, not per-booking. A booking with multiple successful payments (e.g. deposit + balance, or two retries) shows a refund icon on each successful row independently.

Step 1: Open the booking and find the payment

Sidebar → Bookings → click the booking → scroll to the Payments section.

Find the row you want to refund — it's an Online row with a green Succeeded badge. On the right of that row is a small hand-coins icon. Click it.

If you don't see the icon: the row isn't Succeeded, or it's already been fully refunded. Pending/failed rows show a Delete icon instead.

Step 2: Enter the amount

A modal opens titled Refund payment with the Amount field prefilled to the maximum refundable.

  • Full refund — leave the prefilled amount, click Refund now.
  • Partial refund — type a smaller number. Stripe accepts down to 0.01 of your currency. The remaining amount stays refundable; you can issue another partial refund later from the same row.

The amount is always validated server-side: even if you change it via DevTools, the server rejects anything above what's actually refundable.

Click Refund now. The button doesn't refund yet — it triggers the next step.

Step 3: Enter the confirmation code

The modal switches to a code-input view: "We sent a 6-digit confirmation code to j\\\@yourdomain.com*. Enter it below to authorise the refund."

Open the email inbox for the address shown (the one you log into cabintale with). The email subject is "Confirm refund" with sender Cabintale. Inside, a big monospaced 6-digit number — copy it.

Back in the modal, type the 6 digits. Click Confirm refund.

The code is valid for 10 minutes. After 5 wrong tries the code is invalidated and you have to start over (click Back, then Refund now again). This is intentional — it's the security layer that protects you if your admin session is compromised.

If the email never arrives:

  • Check spam (some inbox providers tag the first transactional email)
  • Make sure you're logged in with the right email address (the code is always sent to your cabintale account email, not the guest's)
  • Wait up to 30 seconds — Postmark delivery is usually instant but can occasionally lag

Step 4: What happens after

Stripe processes the refund. Within a couple seconds, the booking detail re-renders:

  • A new row appears in the Payments table — Refund type, negative amount (-2900 CZK), Refunded status badge
  • The original payment row keeps its Succeeded badge — the original transaction still happened. Refunds are tracked separately for clean audit history
  • The summary row at the bottom (To be paid) recalculates: total minus net paid (gross paid minus succeeded refunds)
  • If the refund covers everything paid online, the booking's overall status drops from Paid back to Confirmed and the Payment link button reappears

Stripe also sends the guest its own refund-issued email automatically (with the receipt). Cabintale doesn't send a separate refund email — Stripe's wording is more accurate to what the guest's bank actually shows.

Multiple partial refunds

You can refund a transaction multiple times until the original amount is exhausted:

ActionOriginalRefunded so farRefundable now
Stripe paid 5800 CZK580005800
Refund 2000580020003800
Refund 1000580030002800
Refund 2800580058000

Each refund triggers its own confirmation-code email and creates its own row in the Payments table.

When the row is fully refunded the icon disappears.

Refunds initiated from the Stripe Dashboard

If you issue a refund directly from dashboard.stripe.com (or Stripe support does it for you), cabintale picks it up via webhook within seconds and adds the row to the Payments table — same as if you'd done it in cabintale. No email confirmation in that direction (Stripe's own dashboard auth gates it).

Cancelling a booking vs. refunding a payment

Refund and cancellation are separate actions in cabintale, on purpose.

RefundCancel booking
What it doesSends money back through StripeMarks the booking as cancelled in cabintale, frees the dates
Affects guest's bankYes (immediate)No
Affects calendar availabilityNo (still blocking until you cancel)Yes (dates become bookable again)
Auto-emails the guestStripe sends refund receiptNo automatic email — write your own

Common workflow:

  1. Guest emails: "I have to cancel."
  2. You refund the payment (this guide)
  3. You then cancel the booking (Sidebar → Bookings → row dropdown → Delete) so the dates reopen

Doing them in this order means the guest sees the money come back first, then the booking disappears. If you cancel without refunding, the dates open up but the money stays in your Stripe — fix it with a refund afterwards.

Heads up. A "Cancel booking" UI with optional refund-on-cancel is on the roadmap. Until then, the two actions are manual and independent.

What the guest sees

  • From Stripe — an automatic refund-issued email with the original receipt and the new refund line. Sent in the same language the guest used at checkout.
  • From cabintale — nothing automatic. If you want to add context ("we'll see you next year", "here's what happened"), reply to the booking-confirmation email thread or write to the guest directly.

The refunded amount typically appears on the guest's card statement within 5–10 business days. Stripe shows it as a negative line item; some banks render it as a separate credit transaction. If a guest asks where the money is, point them to their card statement first; only then check the Refunds tab in your Stripe Dashboard.

Troubleshooting

SymptomCauseFix
Hand-coins icon not visible on a paid rowRow isn't Succeeded yet, or it's already fully refundedWait for Succeeded; or check if a refund row beneath it covers the full amount
"Refund could not be processed"Stripe rejected the call (e.g. no funds in your Stripe balance for the refund, currency mismatch, or PaymentIntent doesn't exist)Check the booking's transaction logs (click the green badge); also check the Refunds tab in your Stripe Dashboard
Email confirmation code never arrivesSpam, wrong email, or Postmark delayCheck spam; verify your cabintale account email; wait 60s; if still nothing, click Back in the modal then Refund now to re-send
"Code expired"The 10-minute window passedClick Back, then Refund now — a new code will be sent
"Too many incorrect attempts"5 wrong codes in a row invalidate the tokenClick Back, then Refund now — a new code will be sent
"Refundable amount changed"A webhook landed between your code-send and confirm — e.g. a Stripe Dashboard refund happened in parallelClose the modal, refresh the page, re-check the refundable amount
Refund doesn't show on the guest's card immediatelyNormal — banks take 5–10 business daysWait. If still missing after 10 working days, check Stripe Dashboard → Refunds for the refund's status (issued / failed / pending)

Related guides

Still stuck?

We reply to every email within one business day.

Email support →