Home Features Pricing Blog
Log in Start for Free
English | Deutsch

Every paid order can be refunded — fully or partially — directly from the admin. PayPal and Stripe orders use the same flow.

Issue a refund from the admin

  1. Open the order in Admin → Orders
  2. Click Refund in the top right
  3. On the refund page, the amount field is pre-filled with the remaining refundable amount
  4. Adjust if you want a partial refund, leave it for a full refund of what’s left
  5. Click Process refund and confirm

The refund is sent to the customer’s original payment method (Stripe or PayPal). Once processed, the customer and you both receive an email with the cancellation invoice attached.

Full vs partial refunds

  Full refund Partial refund
Order status Refunded Partially refunded
Tickets Become invalid (won’t scan at the door) Remain valid for the event
Stock Returned to inventory (resellable) Not returned (buyer keeps the seat)
Cancellation invoice One per refund event One per refund event, accumulating

A partial refund leaves the order in a state where you can issue more partial refunds later, until the full amount has been refunded. Each event creates its own cancellation invoice — accounting-correct, properly numbered, attached to the refund email for that event.

Refund history on the order

The order detail page shows a Refund history card in the sidebar whenever any refund has been made. It lists:

  • Total refunded so far
  • Remaining refundable amount (for partial refunds)
  • Every individual refund event — invoice number, date, amount

The “Partially refunded” or “Refunded” status badge sits next to the order items header, so you see the state at a glance.

Refund via the AI assistant

The in-app AI assistant (Cmd+K) understands refund requests. Try:

  • “Refund the order from [email protected]
  • “Refund €15 of order ORD-2026-001234”

The assistant looks up the order, validates the amount against the remaining refundable balance, and shows a confirmation card in the chat with the order summary and a button. Clicking the button takes you to the refund page with the amount prefilled — you click Process refund to actually send the money.

The AI never moves money on its own. The confirmation step on the refund page is always required.

PayPal-side refunds: keep Usetix in sync

If you refund directly from your PayPal Business dashboard (or a buyer wins a PayPal dispute), Usetix doesn’t know unless you tell PayPal to notify us. By default this isn’t set up — your Usetix order stays marked as paid, the ticket sits in inventory, no cancellation invoice is created.

Setting up the webhook takes a minute and is fully self-service:

1. Get the URL and event list from Usetix

Go to Settings → Payments → PayPal. Below your connected credentials you’ll see the Webhook section with:

  • The webhook URL to register in PayPal
  • The list of events to subscribe to: PAYMENT.CAPTURE.COMPLETED, PAYMENT.CAPTURE.DENIED, PAYMENT.CAPTURE.REFUNDED

2. Register the webhook in your PayPal app

In your PayPal Developer Dashboard, open your app, scroll to Sandbox / Live Webhooks, click Add Webhook, and paste the URL plus the events from above.

PayPal returns a Webhook ID (typically starts with WH-).

3. Paste the Webhook ID into Usetix

Back in Settings → Payments → PayPal → Webhook, paste the ID into the input field and save.

That’s it. From now on:

  • A refund from your PayPal dashboard updates the Usetix order to refunded (or partially refunded if you only refunded part), restores stock if applicable, generates the cancellation invoice, and sends customer + merchant email
  • A buyer’s dispute event isn’t acted on yet but is logged for future visibility

We verify the signature of every incoming webhook against your registered Webhook ID. Spoofed events are rejected with 401 Unauthorized.

Stripe-side refunds: already in sync

Stripe webhooks are enabled by default for every account. Refunds you issue directly from the Stripe Dashboard (or that come via a Stripe-mediated dispute) flow back into Usetix automatically — same status, stock, invoice, email behavior as a refund initiated from the admin.

You don’t need to configure anything for Stripe.

Edge cases

  • Refunding a partially-refunded order: works. The amount field clamps at the remaining refundable balance, and the form, error message, and AI tool all surface the right limit.
  • Idempotent webhooks: Stripe occasionally retries. The order won’t be processed twice — duplicate webhooks are detected via the cumulative refund amount and skipped.
  • PayPal partial refunds initiated from the dashboard: each refund event creates its own cancellation invoice. The status only becomes “refunded” once the cumulative refunds equal the order total.
  • Account without an invoice: rare (most accounts have invoicing enabled), but if an order has no customer invoice, refunds still work — only the cancellation invoice creation is skipped, and progressive partial-refund tracking falls back to the single-event amount.

See also

  • Webhooks — the outgoing webhooks Usetix sends to your own systems (different mechanism from PayPal-side incoming webhooks)
  • Purchase limits — refunded orders don’t count toward per-customer caps, so a refund frees up a buyer’s quota