Refunding a split payment

How do I refund a split payment?

Overview

The refunding process for split payments allows merchants to return a portion or the full amount of a split payment to the original payer, with the refund being shouldered by the recipients proportional to what they received.

How to Initiate a Refund

Refunds for split payments can be initiated either through the API or the dashboard.

Refunds apply to the entire payment. However, partial refunds can also be processed if you don't wish to refund the full amount.

Distribution of Refunds

There are two ways to distribute which account will shoulder the refund amounts:

1. Proportional (Default)

By default, the refunded amount is distributed proportionally based on the original split percentages or amounts allocated to each recipient. Fees will still apply during the refund process, and they will be split proportionally among the recipients, just as in the original payment process.

For example: If a recipient originally received 50% of the net amount, they will also be deducted 50% of the refunded amount.

Sample Computation

DescriptionAmount
Original PaymentPHP 100.00
Recipient APHP 48.75
Recipient BPHP 48.75
Fee (GCash rate)PHP 2.50

If a full refund of PHP 100.00 is issued, the amounts that each recipient would shoulder will be proportional:

  • Recipient A: PHP 50.00
  • Recipient B: PHP 50.00

If a partial refund of PHP 50.00 is issued, the following amounts apply:

  • Recipient A: PHP 24.38
  • Recipient B: PHP 24.38

To see more examples, refer to our sample payment splitting computations page.

2. Custom (Using thesplit_refund attribute)

When the split_refund attribute is used, merchants can manually specify which party will shoulder the refund—either the parent merchant or one of its child merchants. This overrides the default proportional distribution and allows full control over how refund amounts are allocated.

In the snippet below, the full refund amount of PHP 100.00 is shoulder by the child merchant: org_child1xxxxxxxxxxxxxxxxxx

{
    "data": {
        "attributes": {
            "amount": 10000,
            "payment_id": "pay_xxxxxxxxxxxxxx",
            "reason": "requested_by_customer",
            "notes": "Out of delivery zone.",
            "split_refund": {
                "refund_sources": [
                    {
                        "merchant_id": "org_child1xxxxxxxxxxxxxxxxxx",
                        "split_type": "fixed",
                        "value": 10000
                    }
                ]
            }
        }
    }
}

A customized refund split can also be configured across multiple merchants. In the example below, a full refund amount of PHP 100.00 is distributed as follows:

  • the Child Merchant 1 org_child1xxxxxxxxxxxxxxxxxx covers PHP 50.00
  • the parent merchant org_parent1xxxxxxxxxxxxxxxxxx covers PHP 10.00
  • and Child Merchant 2 org_child2xxxxxxxxxxxxxxxxxx covers PHP 40.00.0
{
    "data": {
        "attributes": {
            "amount": 10000,
            "payment_id": "pay_xxxxxxxxxxxxxx",
            "reason": "requested_by_customer",
            "notes": "Out of delivery zone.",
            "split_refund": {
                "refund_sources": [
                    {
                        "merchant_id": "org_child1xxxxxxxxxxxxxxxxxx",
                        "split_type": "fixed",
                        "value": 5000
                    },
                    {
                        "merchant_id": "org_parent1xxxxxxxxxxxxxxxxxx",
                        "split_type": "fixed",
                        "value": 1000
                    },
                    {
                        "merchant_id": "org_child2xxxxxxxxxxxxxxxxxx",
                        "split_type": "fixed",
                        "value": 4000
                    }
                ]
            }
        }
    }
}