Skip to main content
Vindicia Knowledge Center




The perform method enables you to issue one or more refunds for Transactions that were processed through Vindicia Subscribe. Not all Vindicia Subscribe Transactions are refundable. If Vindicia Subscribe cannot process some of the refunds in your input, you are informed through the return code in this call’s Return object.

Vindicia Subscribe can refund a transaction only if it meets all of the following criteria:

  • The transaction status is one of the following:
    • Captured.
    • Refunded (if a partial refund has occurred).
    • Authorized. The Transaction is scheduled for capture but is not yet captured with your payment processor. Refunding such a Transaction essentially cancels it.
    • AuthorizedPending or DepositRetryPending for ECP or Direct Debit-based transactions. Refunding such a Transaction essentially cancels it.
  • The Transaction has an associated authorization response code.
  • The Transaction was not paid through the Boleto Bancário payment method.
  • The Transaction is not an outbound Transaction, conducted to pay a customer through the ECP-based payment method.
  • The sum of all the Transaction’s past refunds is less than the original Transaction amount.

Also note that you cannot grant partial refunds if:

  • The Transaction used a Token payment method that resulted in the granting of tokens to a customer’s Account.
  • Your payment processor is GlobalCollect and the authorization code is 800, which means that the Transaction has been captured but not yet settled.

Vindicia Subscribe processes refunds submitted through this call asynchronously with your payment processor in batches. Because Vindicia Subscribe ensures that the refunds submitted are indeed refundable when you call perform(), payment processors rarely reject refunds accepted by Vindicia Subscribe. To monitor refund status, log into the Vindicia Subscribe Portal and use the Transaction Details page, which displays the most up-to-date status of your refund-.


srd: sparse response description, a SOAP string (which must be a JSON object), in which you specify the elements you want returned.This parameter enables the calling system to constrain a method call to return only components you specify. This gives you greater control over returned content, and improves response time within the Vindicia platform by reducing the processing needed for the call.

Some fields are required, either practically or in the WSDL, and will be returned regardless of the srd. A null srd returns the complete response.

refunds: an array of one or more Refund objects, each corresponding to a refund that you would like to process through Vindicia Subscribe. Because this call creates a Refund object in Vindicia Subscribe, leave the VID field blank. If Vindicia Subscribe accepts the refund for processing, it populates the VID field in the corresponding Refund object in the array of returned refunds.


return: an object of type Return that indicates the success or failure of the call.

If the return code is 200, all the Refund objects in this array have Vindicia-assigned VIDs, indicating that Vindicia Subscribe has accepted these objects for processing. A return code of 206 indicates that only some of the Refund objects have been accepted by Vindicia Subscribe and have VIDs. The Refund objects without VIDs have been rejected by Vindicia Subscribe because they do not meet the criteria described above. Reasons for rejection are included in the note attribute of the Refund objects.

refunds: an array of one or more Refund objects, which corresponds to your input array.


In addition to those listed in Table 1: Standard Return Codes, this call returns:

Return Code

Return String


Some (or all) refunds failed; check VIDs, notes.


Cannot refund transaction: error-description.


// Create a SpecifiedItems refund object

$refund1 = new Refund();
$transaction1 = new Transaction();

// merchant ID of a successful transaction that we wish to refund

$refundItem1 = new RefundItem();
$refund1->setNote('Refunding due to customer complaint about outage');

// Create another refund object (No Distribution Strategy)

$refund2 = new Refund();
$transaction2 = new Transaction();

// merchant ID of a successful transaction that we wish to refund

$refund2->setNote('Customer charged twice');

// Create a tax-only refund object

$refund3 = new Refund();
$transaction3 = new Transaction();

// merchant ID of a successful transaction that we wish to refund

$refundItem3 = new RefundItem();
$refund3->setNote('Customer asserts they are tax-exempt');

// Create a RemainingBalance refund object

$refund4 = new Refund();
$transaction4 = new Transaction();

// merchant ID of a successful transaction that we wish to refund

$refund4->setNote('Customer fled the country');

$soap_refund = new Refund();
$response = $soap_refund->perform(array($refund1, $refund2, $refund3, $refund4));
if($response['returnCode'] == 200) {
print ("All refunds submitted successfully");
else if($response['returnCode'] == 206) {
$resultRefunds = $response['data']->refunds;

// process fetched refunds here

if ($resultRefunds != null) {
foreach ($resultRefunds as $resultRef) {

// process a fetched refund here

if($resultRef->getVID() != null) {
print "Refund id "

. $resultRef->getMerchantRefundId()

. " submitted successfully";

else {
print "Refund id "

. $resultRef->getMerchantRefundId()
. " was unsuccessful because "
. $resultRef->getNote();





For Users

Learn More
For Users

Vindicia Subscribe Features

Learn More
Vindicia Subscribe Features
Back to Top