As a partner, you can reverse a transfer or split to return previously moved funds back to the original merchant’s account. This action is typically required if a customer refund is needed or if the transaction is disputed. If the transaction is still voidable (not yet settled), the reversal cancels the transfer or split.
In this guide, we first prepare to reverse a transfer by identifying the original transfer ID and then make the reverse transfer API call. We also show an example of the optional step of refunding a transaction.
Before starting the steps in this guide, make sure you:
The first step is to identify the transfer ID (TRF_id) of the original transfer you want to reverse.
Use GET Transfer List to retrieve the list of transfers.
curl --compressed -X GET "https://apis.sandbox.globalpay.com/ucp/transfers" \
-H "Authorization: Bearer G3FA4TuYGCBiCWs4YpzrALGCYXZJ" \
-H "Content-type: application/json" \
-H "X-GP-Version: 2021-03-22" \{
"total_record_count": 1000,
"current_page_size": 564,
"merchant_id": "MER_880c34767b184d5e82b10e767201e648",
"merchant_name": "Curtis_Douglas49",
"account_id": "FMA_bde109d70fb24d78b25fd364317dd9dc",
"account_name": "718556837_989567",
"filter": {
"from_time_created": "2022-05-01",
"to_time_created": "2023-05-01"
},
"paging": {
"page_size": 5,
"page": 1,
"order": "ASC",
"order_by": "TIME_CREATED"
},
"transfers": [
{
"id": "TRF_U3bZFd2jL98L0XacplaUvPSSDhFI2J",
"time_created": "2023-03-10T13:14:48.386Z",
"time_last_updated": "2023-03-10T13:14:48.386Z",
"type": "DEBIT",
"status": "SUCCESS",
"amount": "10000",
"usable_balance_mode": "AVAILABLE_BALANCE",
"merchant_id": "MER_880c34767b184d5e82b10e767201e648",
"merchant_name": "Curtis_Douglas49",
"account-_id": "FMA_bde109d70fb24d78b25fd364317dd9dc",
"account_name": "718556837_989567",
"recipient_merchant_id": "MER_880c34767b184d5e82b10e767201e648",
"recipient_merchant_name": "Curtis_Douglas49",
"recipient_account_name": "718556837_989567",
"recipient_account_id": "FMA_b29c209e25db47ea8d9ef9f24ef29254",
"reference": "1234",
"description": "Transfer 1",
"provider": {
"result": "0",
"message": "SUCCESS"
}
}
],
"action_create_id": "ACT_uzFr7t4VOqxdLDI44hHmXIjHtOOE8d",
"parent_resource": "TRANSACTION",
"parent_resource_id": "TRN_nG0HCR8sMTDnZCcbemvdqdnKnrhODk",
"action": {
"id": "ACT_uzFr7t4VOqxdLDI44hHmXIjHtOOE8d",
"type": "TRANSFER",
"time_created": "2021-05-03T21:23:39.718Z",
"result_code": "SUCCESS",
"app_id": "uzFr7t4VOqxdLDI44hHmXIjHtOOE8d",
"app_name": "my_lovely_app"
}
}After retrieving the list of transfers, identify the specific transfer you want to reverse using its TRF_ID.
Optionally, you can use [GET] Single Transfer to view detailed information about the transfer before proceeding.
Once confirmed, use the TRF_ID to initiate a reverse transfer by making the below API call.
For complete details on API requests and responses, see [POST] Reverse Transfer in the API Explorer.
curl --location --request POST 'https://apis.sandbox.globalpay.com/ucp/merchants/MER_92d89d7df14848ca8c9ede1453e550e3/transfers/TRF_BP27fWnD7Re6bNoLGtgIPYFwCa7D4c/reversal' \
--header 'X-GP-Version: 2021-03-22' \
--header 'Authorization: Bearer GkqhfOHHRhANJZeLAN4IJjEcLPtB' \
--header 'Content-Type: application/json' \
--header 'Cookie: ASP.NET_SessionId=yn0vbwhigf3erubsp5lo3yym; TS01f3e1f1=0173fd6cff3290823a8c012057704d8487f58a0689c0459455932102390c77908ac9d247fa3acc57f0f41cc7716638e49542a4deecec80aa7fdb8c63104f234a649208475a769929788b2fa5a091e75a9dd8299b5f; sessionValidation=420d28d4-b377-40f0-b5a2-e9225abcb8a2' \
--data-raw '{
"amount":"50"
}’ {
"id": "TRF_2buSaZdLb2qNfJnvmxPlkNmpb8mSvH",
"time_created": "2023-03-30T22:28:21.880Z",
"status": "FUNDED",
"country": "US",
"currency": "USD",
"type": "REVERSAL",
"amount": "1",
"merchant_id": "MER_92d89d7df14848ca8c9ede1453e550e3",
"account_id": "FMA_3027159beee847d89a963125c1efc356",
"merchant_name": "Domenick7",
"account_name": "718577156_991877",
"reference": "merchant identifier",
"payment_method": {
"result": "00",
"message": "SUCCESS"
},
"action": {
"id": "ACT_2buSaZdLb2qNfJnvmxPlkNmpb8mSvH",
"type": "REVERSE",
"time_created": "2023-03-30T22:28:21.880Z",
"result_code": "SUCCESS",
"app_id": "U1lRHKomEn7DN907RCDPxVhyMfiMLcfy",
"app_name": "demo_app"
}
}Reversing a transfer or a split does not issue a refund back to the customer. Instead, it just sends the transferred amount back to the Funds Management Account (FMA) that sent the funds. In many cases, particularly when reversing a split transaction, you may want to initiate a transaction refund back to the customer (this may differ based on your specific use case).
Here, we initiate a refund.
{
"id": "TRN_uzFr7t4VOqxdLDI44hHmXIjHtOOE8d",
"time_created": "2026-05-03T21:23:39.718Z",
"type": "SALE",
"status": "CAPTURED",
"amount": "11099",
"currency": "USD",
"country": "US",
"reference": "becf9f3e-4d33-459c-8ed2-0c4affc9555e",
"batch_id": "BAT_234234234",
"payment_method": {
"result": "string",
"message": "string",
"card": {
"authcode": "string",
"brand_reference": "string"
}
},
"action": {
"id": "ACT_uzFr7t4VOqxdLDI44hHmXIjHtOOE8d",
"type": "ADJUST",
"time_created": "2026-05-03T21:23:39.718Z",
"result_code": "SUCCESS",
"app_id": "uzFr7t4VOqxdLDI44hHmXIjHtOOE8d",
"app_name": "my_lovely_app"
}
}To get a deeper understanding of money movement, we recommend that you use our provided integration references for both API and SDK integrations. For the full detailed API specification, see the API Explorer.
See the full API specification for creating a sale or refund.
See the full API specification for transferring funds.
Add server-side or client-side code to your integration.
This solution is available for testing in our free Sandbox environment for registered users of this developer portal. Use our resources below to start testing different scenarios.
Test different transaction outcomes with simulated cards or banks.
View, import, or fork our API collection in Postman.
View successful responses, HTTP status codes, action response data, and errors.
Below are recommended next steps for your partners integration.