Issuing refunds

Once a payment is placed, your customer might want to be refunded for his purchase. In case the transaction was fraudulent, it might also be a good idea to refund the transaction before a chargeback is issued. ProcessOut makes it easy to issue partial or full refunds.


Issue a refund from your dashboard

The easiest way of issuing a Refund for a transaction is to do it from your dashboard ↗. Refunds can be done on the page of a Transaction.

Please note that while most of the gateways supported by ProcessOut support both partial and full refunds, some might still not. In this case, the button will not be displayed on your dashboard, and it might be best to directly contact your customer.

Issuing refunds using the API

It is also possible to issue refunds using the ProcessOut API. Refunds are issued on transactions, and it is possible to specify an amount to be refunded as well as a reason, which must be either customer_request, duplicate or fraud. Additional information can also be sent using the information attribute of the refund.

It is also possible to leave the amount attribute empty to automatically issue a full refund. If partial refunds were previously applied on the transaction, leaving the amount field empty will refund whats left of the transaction amount.

curl -X POST https://api.processout.com/transactions/tr_ItJdKlhfaVn0SUGd9z1i9Jqe0STl4jxC/refunds \
    -u test-proj_gAO1Uu0ysZJvDuUpOGPkUBeE3pGalk3x:key_sandbox_jqSPvwq3AG5MlYAgqxlwwgOcAC3Zy7d8 \
    -d reason=customer_request \
    -d amount=4.99
var ProcessOut = require("processout");
var client = new ProcessOut(
    "test-proj_gAO1Uu0ysZJvDuUpOGPkUBeE3pGalk3x",
    "key_sandbox_jqSPvwq3AG5MlYAgqxlwwgOcAC3Zy7d8");

client.newRefund().create({
    transaction_id: "tr_ItJdKlhfaVn0SUGd9z1i9Jqe0STl4jxC",
    reason:         "customer_request",
    amount:         "4.99"
}).then(function(refund) {
    // 

}, function(err) {
    // An error occured

});
import processout
client = processout.ProcessOut(
    "test-proj_gAO1Uu0ysZJvDuUpOGPkUBeE3pGalk3x", 
    "key_sandbox_jqSPvwq3AG5MlYAgqxlwwgOcAC3Zy7d8")

refund = client.new_refund().create({
    "transaction_id": "tr_ItJdKlhfaVn0SUGd9z1i9Jqe0STl4jxC",
    "reason":         "customer_request",
    "amount":         "4.99"
})
require "processout"
client = ProcessOut::Client.new(
    "test-proj_gAO1Uu0ysZJvDuUpOGPkUBeE3pGalk3x", 
    "key_sandbox_jqSPvwq3AG5MlYAgqxlwwgOcAC3Zy7d8")

refund = client.refund.create(
    transaction_id: "tr_ItJdKlhfaVn0SUGd9z1i9Jqe0STl4jxC",
    reason:         "customer_request",
    amount:         "4.99"
)
<?php
$client = new \ProcessOut\ProcessOut(
    "test-proj_gAO1Uu0ysZJvDuUpOGPkUBeE3pGalk3x", 
    "key_sandbox_jqSPvwq3AG5MlYAgqxlwwgOcAC3Zy7d8");

$refund = $client->newRefund()->create(array(
    "transaction_id" => "tr_ItJdKlhfaVn0SUGd9z1i9Jqe0STl4jxC",
    "reason"         => "customer_request",
    "amount"         => "4.99"
));
import "gopkg.in/processout.v4"
client := processout.New(
    "test-proj_gAO1Uu0ysZJvDuUpOGPkUBeE3pGalk3x", 
    "key_sandbox_jqSPvwq3AG5MlYAgqxlwwgOcAC3Zy7d8")

refund, err := client.NewRefund().Create(processout.RefundCreateParameters{
    Refund: &processout.Refund{
        TransactionID: processout.String("tr_ItJdKlhfaVn0SUGd9z1i9Jqe0STl4jxC"),
        Reason:        processout.String("customer_request"),
        Amount:        processout.String("4.99"),
    },
})

If the refund was successfully issued, a new refund object is returned. In case the refund could not be applied on the transaction, an error will be thrown.