DrPlugin

Orders and refunds

Updated October 24, 2026

Find orders, read their details and statuses, and refund a payment in full or in part.

Find an order

Open TierMint → Orders. You need the manage_tiermint capability, which administrators have.

The list shows 20 orders a page, newest first, with the columns Order, Date, Customer, Product, Status, Type, Total and Gateway. Click Order, Date or Total to sort by it.

Customer shows the name on the buyer's customer record, or the order email when the record has no name. When the buyer has a WordPress account and you can edit users, the name links to their user profile. Product names each item with its plan in brackets.

To narrow the list, pick one status from All statuses, pick a product from All products to see the orders that contain it, or type in Search to match the order email or reference. The list updates as you type.

A refund shows as its own row, marked at the left edge, with the type Refund, the status Completed and a negative total. Click an order number to open the order.

The Orders screen with status and product filters and orders in several statuses, including a refund row

Order statuses

Status Meaning
Pending The order exists and waits for payment. Every checkout starts here.
Completed The payment is confirmed.
Failed The payment attempt failed, or the payment could not be started at the gateway.
Abandoned A pending order that never reached the payment step, closed after 48 hours.
Partially refunded Part of the total was refunded. More refunds are possible.
Refunded The whole total was refunded.

TierMint allows only these changes:

  • Pending to Completed, Failed or Abandoned.
  • Failed to Completed, when a later attempt on the same payment succeeds.
  • Completed to Partially refunded or Refunded.
  • Partially refunded to Refunded, or another partial refund.

Refunded and Abandoned are final. Any other change is refused, so a refunded order was always paid first.

An hourly job closes a pending purchase as Abandoned after 48 hours when no payment was ever started at the gateway. A pending order with a payment in progress at Stripe stays pending, because that payment can still complete. Developers can change the 48 hours with the tiermint_abandoned_order_age filter, in seconds, with a minimum of one hour.

Type is Purchase for a checkout, Renewal for a subscription renewal in TierMint Pro, and Refund for a refund row.

Read an order

Click an order number to open the order. The top panel shows these details.

Field What it shows
Reference The order's unique reference. Search matches it.
Status, Type The current status and the order type.
Customer The email the order was placed with.
Gateway The payment gateway, such as stripe.
Transaction The gateway's id for the payment, when there is one. For Stripe this is the PaymentIntent id.
Discount code The code the buyer used, when there was one.
Created, Completed When the order was created and when it completed.
Billing country, Terms accepted, Billing address, Company, Tax ID What the checkout collected, when you turned those fields on and the buyer filled them in. Billing country shows the two-letter country code.
IP address The buyer's IP address recorded at checkout, when there is one.

Items lists each line with Product, Price (the plan), Qty, Subtotal, Discount, Tax and Total. The panel under it shows the order's subtotal, discount, tax and total.

A completed order with its details, one line item, the totals and the Refund button

Each line keeps the product name, plan name and price from the moment of purchase. Renaming a product or changing a price later never changes a past order.

In the free plugin, the tax figures stay at zero. TierMint Pro taxes fill them in when tax is charged. TierMint Pro also adds invoice actions to the order header, which PDF invoices describes.

The Checkout and billing fields page lists the checkout fields that add details to an order.

Refund an order

The Refund button shows on a Completed or Partially refunded order.

  1. Click Refund.
  2. Refund amount starts at the order total. Type a smaller amount for a partial refund. On a partially refunded order, lower it to what is left.
  3. Click Review refund. The button stays disabled until the amount is above zero.
  4. Check the amount in the confirmation, for example "You are about to refund $99.00 (USD) to the customer. This cannot be undone."
  5. Click Confirm refund, or Back to change the amount.

The refund confirmation that restates the amount, with the Back and Confirm refund buttons

TierMint sends the refund to Stripe, then records it. The order becomes Partially refunded or Refunded, and a new row of type Refund with a negative total appears in the Orders list. The refund cannot be more than the part of the total not yet refunded. A larger amount is refused with a message that gives both figures in the currency's smallest unit, such as cents.

Each click on Confirm refund sends a new idempotency key, so two refunds of the same amount stay separate at Stripe.

When an order has no transaction at a gateway that can refund it, TierMint records the refund without contacting any gateway. No money moves, so return it to the buyer yourself.

A refund you make in the Stripe Dashboard is recorded on the order too. Stripe payments explains how.

When a refund shows an error

Message What it means
A reason about the amount The amount is not allowed. Fix it and try again.
Another refund for this order is still being recorded. Wait a moment and try again. A refund on this order is in progress. It has not failed.
Nothing was charged or refunded: the payment gateway is not configured. The current Stripe mode has no secret key. No money moved.
The payment gateway did not confirm this refund, so the money may or may not have moved. TierMint does not know the outcome. Confirm refund is disabled to stop a double refund. When Stripe's webhook reports the refund, TierMint records it. Check the order again in a few minutes.

What a refund changes

  • A full refund disables every license the order created. A partial refund leaves the licenses alone. Developers can keep licenses active after a full refund with the tiermint_refund_disables_license filter. License keys and activations covers licenses.
  • Sales reports count the refund on the day it was made.
  • TierMint sends the order.refunded event to your webhook endpoints.

Manage orders with the REST API

Every route is under the tiermint/v1 namespace and needs management authentication and the manage_tiermint capability. The licensing REST API page explains management authentication.

Route What it does
GET /tiermint/v1/orders Lists orders, with the X-WP-Total and X-WP-TotalPages headers. Takes page, per_page (default 10, up to 100), status, search (order email or reference), customer_id, product_id, orderby (id, created_at or total) and order (asc or desc).
GET /tiermint/v1/orders/{id} Returns one order with its line items.
POST /tiermint/v1/orders/{id}/refund Refunds an order and returns the updated order.

The refund route takes amount, an integer in the currency's smallest unit and at least 1, and an optional idempotency_key. Without a key, TierMint builds one from the order and the amount, so sending the same amount again repeats the first refund at Stripe instead of making a second one. Send a new key for each refund you mean to make.

Send POST /wp-json/tiermint/v1/orders/42/refund with this body:

{
  "amount": 2500,
  "idempotency_key": "order-42-refund-1"
}
Error code Status Meaning
tiermint_invalid_params 400 The amount or the order cannot be refunded. The reasons are in data.errors.
tiermint_refund_in_progress 409 Another refund holds the order. Try again in a moment.
tiermint_gateway_not_configured 502 The gateway has no keys for the current mode. Nothing moved.
tiermint_gateway_error 502 The gateway did not confirm the refund. Check the order and the Stripe Dashboard before you try again.

There is no route to create or edit an order. Orders come from checkout.

Common questions

Can I refund a pending or failed order?

No. Only a Completed or Partially refunded order can be refunded. A pending, failed or abandoned order took no money.

Why is an order abandoned and not failed?

Failed means a payment attempt was made and refused, or the payment could not start. Abandoned means no payment was started and the order stayed pending for 48 hours.

Does editing a product change past orders?

No. Each order line stores the product name, plan name and price from the time of purchase.

Can I add an order by hand?

No. Neither the Orders screen nor the REST API can create an order.