Refund a ticket or an order
Set the policy, refund the right tickets, choose the destination, and read the posting it makes.
Owned by Admin · 11 steps · about 22 minutes
Why this exists
A refund on this platform is never just "send money back". One call does the processor refund, the balanced ledger posting, the refund records, the ticket revocation, the inventory return to the event and the audit — in a single transaction. Either all of that happened or none of it did, because a refunded ticket that still opens a door, or a returned seat that was never returned, are both worse than a failed refund.
The rule that catches people is that refunds are scoped to tickets the original purchaser still owns. If a ticket was resold, it belongs to somebody else now, and refunding the original order for it would pay the seller twice and strand the buyer. So the refund engine skips it, and a full refund of an order whose tickets have all moved on answers 409 nothing_to_refund. That is correct behaviour, not a bug.
Policy comes before the refund, not after. Each event may carry a non-refundable fee, a credit-only flag, and a self-cancellation deadline. Credit-only means exactly what it says: the money goes back as house credit and an attempt to refund to the card is refused with 422 policy_credit_only unless you deliberately override the policy. That refusal is a feature — it stops a well-meaning refund from quietly contradicting the terms the customer agreed to.
Note also that "original" for an order that was paid with house credit is house credit. There is no path that turns credit into cash through the refund engine; that is what payouts are for, and payouts have their own identity gate.
Refunding is admin-only. A venue manager can read every order and every dispute and cannot refund a penny. Refunds are the one routine action that moves money outward, so they sit with the group that carries that responsibility.
Before you start
- An admin session. Venue managers are read-only here and members cannot see these pages at all.
- A paid order with at least one live ticket the purchaser still owns.
- The event's refund policy decided before you start — the refund snapshots it.
Practise with
| Persona | Password | Note | |
|---|---|---|---|
| admin | admin@club.test | admin123 | the only persona that can issue a refund |
| member | nova@demo.club | nova-pass-123 | holds a paid order with tickets on the demo event |
| venue_manager | manager@club.test | manager123 | use it to prove the read-only boundary for yourself |
Steps 1 — Member
their manual →It is their money and their ticket — and where it lands depends on the policy, not on what they ask for.
-
1As the customer, open your order and see what you actually bought: line items, tax, and which tickets are still live.Expected result The order with its tickets and, if the event allows self-cancellation, a self-cancel control.Watch out for If self-cancellation is available to you, use it — it is the same engine and it does not need anyone's morning. Past the deadline it is refused with 403 past_cancellation_deadline and it becomes an admin's job.
Steps 2 — Venue Manager
their manual →They field the request and can read every order, but cannot issue the refund.
-
2As a manager, find the order the customer is asking about, by event, status or a text search.Expected result The order list with statuses and totals.Watch out for You can open everything here and refund nothing. The refund panel on the order page is admin-only, and the page now says so rather than leaving the space blank. Under that sentence is Ask an admin to refund: write why, press it once, and the order carries 'Asked . An admin has it' for you and the reason for them (plan 607). That is the escalation — not a message somewhere else — so the platform has a record the request was made. Do that rather than promising the customer a timeframe you do not control.
Steps 3–7 — Admin
their manual →-
3Before refunding, read the event's policy: the non-refundable fee, whether refunds are credit-only, and the self-cancellation deadline.Expected result The effective policy, with a note if it is the platform default rather than an event-specific one.Watch out for No policy row means defaults: no fee, not credit-only, and self-cancellation disabled. Silence is a policy too.
-
4Set the policy for the event if it needs one: fee in cents, credit-only on or off, deadline in hours before doors, or no deadline at all to disable self-cancellation.Expected result The saved policy.Watch out for Changing a policy does not change refunds already issued — each refund snapshots the policy it was made under. That snapshot is what you will be reading back in six months when somebody disputes it.
-
5Open the order and use the refund panel. Choose the mode deliberately: the whole order, specific tickets, or a bare amount.Expected result The panel showing what is refundable, with the fee the policy will withhold.Watch out for Refunding specific tickets is almost always the honest choice, because it is the only mode that also revokes exactly those tickets and returns exactly that inventory.
-
6Issue the refund with a real reason. Pick the destination — back to the original rail, or to house credit — and decide whether to waive the fee.Expected result 201 with the refund id, the amount, the fee withheld, the ledger transaction id, the revoked ticket ids and the order's new status.Watch out for A missing reason is 422. A disputed payment is 409 charge_disputed — you cannot refund around a chargeback. A ticket that is already refunded, has been transferred, or is mid-resale-settlement each has its own 409, and each is telling you something specific about who owns what.
-
7Deliberately try to refund a credit-only event back to the card, once, so you recognise the refusal.Expected result 422 policy_credit_only, explaining that the event allows refunds to house credit only.Watch out for There is an override, and using it is a decision you should be able to defend. It is recorded on the refund as a policy override.
Steps 8 — Member
their manual →It is their money and their ticket — and where it lands depends on the policy, not on what they ask for.
-
8As the customer, check where the money landed when the destination was house credit.Expected result The prepaid balance is higher and the statement shows the refund.Watch out for House credit is spending power inside the club, not cash. If the customer wanted cash they wanted the original rail, and that decision was made at refund time.
Steps 9–11 — Admin
their manual →-
9Find the posting behind the refund, filtering by the refund reference or the kind.Expected result A balanced transaction reversing revenue and tax pro-rata, crediting either the cash clearing account or the customer's house credit.Watch out for Tax is reversed proportionally and is capped so cumulative reversals can never exceed the original accrual. That cap is why a refund of a refund does not become a tax rebate.
-
10Pull the refund register when you need the shape of the last month rather than one case.Expected result Refunds filterable by event, initiator and mode.Watch out for Admin-only, unlike the order list. Refund volume by initiator is a management report, not a customer service tool.
-
11Know the big red button exists: cancelling an event refunds every order on it, with fees waived.Expected result A count of refunded orders, plus the resale settlements that were unwound first, plus any per-order failures collected rather than aborting the run.Watch out for It unwinds resales BEFORE it refunds primaries, so a ticket that changed hands walks back to its original buyer and is refunded exactly once. Where a reseller already spent their proceeds, the shortfall is written off to a dedicated account and flagged as unrecovered — the platform absorbs it so the resale buyer is always made whole.