# order_refunded

> The order is refunded

- Status: 400 Bad Request
- Returned by: /api/public
- Operations: [cancelOrder](https://developers.rivr.io/reference/api-public/cancelOrder.md)
- Retry (`retryWhen`): `never`
- Did anything happen? (`outcome`): `done` (Already done)
- Cancelling and refunding in /api/public
- Page in the portal: https://developers.rivr.io/errors/order_refunded
- Try it: `GET https://developers.rivr.io/errors/simulate/order_refunded` answers with the code's exact wire form; `?succeedAfter=N&attempt=K` gives a 200 once `attempt` passes `N`

## What it means

The order has already been refunded and can't be cancelled.

## What your system does

Nothing more to do. Show the order as refunded.

## Is it worth retrying?

No, not without changing the call.

`retryWhen`: `never`. Don't send it again. The answer is final for this request: read the current state, the order for example, and act on that.

## Did anything happen?

`outcome`: `done`. **Already done.** What you asked for has already happened, or the state already is what you asked for.

The order was not cancelled, but it has already been refunded. Show it as refunded, not as cancelled.

Read the state (`resolveWith`):

- `cancelOrder` → [`GET /api/public/orders/{orderId}`](https://developers.rivr.io/reference/api-public/getOrder.md): `status` 8 (Refunded) confirms it.

## Example: /api/public

```http
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
  "propertyName": "Status",
  "message": "The order has been refunded and can no longer be cancelled.",
  "errorCode": "order_refunded",
  "code": "order_refunded",
  "type": "https://developers.rivr.io/errors/order_refunded"
}
```

The `title`, `detail`, `message` and `error_description` texts are exactly as the API writes them today.
