# Refunds

Cashier offers full support for refunds. Refunds can only be performed against paid Orders.

# Performing a complete refund

If you need to refund an order completely, invoke the refundCompletely method on its instance:

use App\Models\User;

$user = App\User::find(1);

$order = $user->orders->first();
$order->refundCompletely();

# Performing advanced refunds

For a finer grained control, build a refund manually:

use Laravel\Cashier\Refunds\RefundItem;

$shippingCosts = RefundItem::make([
    'owner' => $user,
    'description' => 'Shipping costs',
    'currency' => 'EUR',
    'quantity' => 1,
    'unit_price' => 667, // EUR 6.67
    'tax_percentage' => 21,
]);

$order->newRefund()
    ->addItem(RefundItem::makeFromOrderItem($order->items->first()))
    ->addItem($shippingCosts)
    ->create();

# Credit orders and invoices

When Mollie has paid out the refund to the customer, Cashier dispatches the RefundProcessed event.

From this event you can get the automatically generated credit order and the matching invoice receipt:

$creditOrder = $refundProcessedEvent->refund->order;
$invoice = $creditOrder->invoice();
$invoice->view(); // get a Blade view
$invoice->pdf(); // get a pdf of the Blade view
$invoice->download(); // get a download response for the pdf

Note that the credit Order and the invoice are a regular Cashier order and invoice. This means these are included when listing the billable orders and invoices:

$user->orders;
$user->orders->invoices(); // includes credit invoices