Skip to content

Orders & coupons ​

ScreenRouteMinimum role
Order list /admin/ordersEditor
Order detail /admin/orders/{id}Editor
Printable invoice /admin/orders/{id}/invoiceEditor
Coupon list /admin/couponsEditor
New coupon /admin/coupons/createEditor

The order list ​

The order list showing order number, customer, total, payment state, fulfilment status and date

Filter by status, payment state and date range. Search matches order number, customer name and email.

Order numbers are unguessable — they carry a random component rather than incrementing — so a customer cannot enumerate other people's orders by editing a URL. The prefix comes from Settings → Shop → Order number prefix.

An order ​

An order detail screen with line items, totals, customer and address panels, payment transaction log and status controls
PanelContains
Line itemsWhat was bought, at the price paid
TotalsSubtotal, discount, tax, shipping, grand total
CustomerName, email, phone, and account link if registered
AddressesBilling and shipping as entered
PaymentGateway, transaction reference, and every callback received
TimelineStatus changes, with who made them and when

The payment panel is the one to read when something looks wrong. It records each interaction with the gateway, so you can see whether a webhook arrived, was rejected, or never came.

Two separate states ​

This trips people up, so it is worth being explicit:

StateValuesMeans
PaymentPending, paid, failed, refundedWhether you have the money
FulfilmentPending, processing, shipped, completed, cancelledWhether the customer has the goods

They move independently. A bank transfer order is pending payment and can still be processing fulfilment if you choose to trust it. Digital downloads unlock on payment, not fulfilment.

Marking an order paid by hand ​

For cash on delivery and bank transfer, Mark as paid records payment you received outside the system. This unlocks any digital downloads on the order, so only use it once the money has actually arrived.

Refunds ​

GatewayRefund from admin
Stripe, PayPal, Razorpay, PayU, CashfreeYes
Wise, cash on delivery, bank transferNo — refund at your bank, then mark it here

A refund through a supported gateway calls the provider's API and records the result. Partial refunds are supported where the provider supports them.

Refunding does not restock

Stock is not returned automatically, because a refund does not tell you whether the goods came back. Adjust the stock figure yourself if they did.

Reconcile ​

The Reconcile button re-queries the gateway for an order's true state.

Use it when an order looks stuck — a customer who says they paid while the order says pending. This usually means a webhook never arrived, and reconciling asks the provider directly rather than waiting.

Invoices ​

A printable invoice showing site branding, order details and totals

A printable invoice per order, using your logo from Settings → General and your address from Settings → General.

Fill in your business address before you send one — the template renders what is there, including nothing.

Coupons ​

The coupon list showing code, type, value, usage count and expiry
The coupon editor with code, discount type, value, minimum spend, usage limits and date window
FieldNotes
CodeWhat the customer types. Case-insensitive
TypePercentage, fixed amount, or free shipping
ValueThe percentage or the amount
Minimum spendCart subtotal below which it does not apply
Usage limitTotal redemptions across all customers
Per-customer limitRedemptions by one account
Starts / expiresOptional date window
Products / categoriesRestrict which items it discounts

Validation happens server-side at checkout, not when the code is typed. A coupon that expired between the cart and the payment is rejected.

Percentage coupons and shipping

A percentage discount applies to the item subtotal, not to shipping or tax. Use the free-shipping type if that is what you mean.

Webhooks matter here ​

A customer who closes the tab after paying never returns to your site, so the redirect that would have confirmed their order never happens. The gateway's webhook is what marks that order paid.

If orders are regularly sitting at pending while customers insist they paid, the webhook URL is missing or wrong in the provider's dashboard. See Payment gateways.

Radius is open source under the MIT licence. Security issues go to the address in SECURITY.md, not the public issue tracker.