# Cancel an order

- Date: 2026-09-15
- Type: New
- Surface: /api/public
- What you need to do: Nothing.
- Address: https://developers.rivr.io/changelog/2026-09-15-cancel-order

POST /api/public/orders/{orderId}/cancel cancels an order that has not been paid. Unlike refund it never moves money: if the customer has already paid, nothing happens and you get 400 with errorCode order_paid — refund the order instead. Every refusal carries an errorCode that says what to do rather than which payment method is involved: 409 (payment_in_progress, order_changed) means retry later, 400 (order_paid, payment_pending, order_refunded, order_not_cancellable) means the answer will not change. Cancelling an order that is already cancelled returns 204. Refund refusals for a card payment in progress on a terminal, a Medical Finance disbursement or a bank reference now carry the same errorCode.

