You can perform a refund against a previous payment. You will need the payment id. To perform a refund, send a POST request over HTTPS to the /payments/{id} endpoint. The payment to refund can be a debit (DB) or captured pre-authorisation (PA->CP) payment type.

You can create a partial or full refund by using the amount field. For issues of customer satisfaction, we recommend that you use full refunds.

📘

Avoid duplicate blocking

You should send a unique merchantTransactionId every time to avoid duplicate blocking.

Here is the format of the cURL request to refund a payment.

curl https://test.oppwa.com/v1/payments/{id}\
-d "entityId={channelId}" \
-d "amount=50.00" \
-d "currency=GBP" \
-d "paymentType=RF" \
-d "merchantTransactionId=P168" \
-d "testMode=EXTERNAL" \
-H "Authorization: Bearer {auth_token}"

Here is an example of the first part of a JSON response from capturing a payment. The payment id is the first attribute in the response.

{
  "id": "8ac7a4a09136ba2801913734d9e253d8",
  "referencedId": "8ac7a4a09136ba2801913706f2a221bf",
  "paymentType": "CP",
  "amount": "4000.00",
  "currency": "EUR",
  "descriptor": "7257.6024.8607 ECOMChannel",
  "merchantTransactionId": "P155",
  "result": {
    "code": "000.100.112",
    "description": "Request successfully processed in 'Merchant in Connector Test Mode'"
  },

Here is an example of a cURL request to refund this payment.

curl https://test.oppwa.com/v1/payments/8ac7a4a09136ba2801913734d9e253d8 \
-d "entityId={channelId}" \
-d "amount=4000.00" \
-d "currency=EUR" \
-d "paymentType=RF" \
-d "merchantTransactionId=P155" \
-d "testMode=EXTERNAL" \
-H "Authorization: Bearer {auth_token}"

Here is an example of the JSON response to a successful refund request.

{
  "id": "8ac7a4a09136ba28019137500e104eff",
  "referencedId": "8ac7a4a09136ba2801913734d9e253d8",
  "paymentType": "RF",
  "amount": "4000.00",
  "currency": "EUR",
  "descriptor": "2108.9897.9615 ECOMChannel",
  "merchantTransactionId": "P155",
  "result": {
    "code": "000.100.112",
    "description": "Request successfully processed in 'Merchant in Connector Test Mode'"
  },
  "resultDetails": {
    "ExtendedDescription": "Approved",
    "clearingInstituteName": "SecureTrading Omnipay Demo",
    "ConnectorTxID1": "891858||false| MCC635844   ||0809|| ||RECURRING|80||false|false|false|812|",
    "ConnectorTxID3": "422201891858|00|||1||0809132439|||||||||||||Berlin|",
    "connectorId": "885921",
    "ConnectorTxID2": "017283||8ac7a0b39134af7f01913734da5f0c39",
    "AcquirerResponse": "00",
    "reconciliationId": "2108.9897.9615",
    "merchantAccountId": "8ac7a4c890fc748b0190fe70998c0248",
    "SchemeResponseCode": "00"
  },
  "customer": {
    "merchantCustomerId": "CUST12"
  },
  "buildNumber": "174903ec91870d5654938dd40f55da3b35036b23@2024-08-08 12:50:27 +0000",
  "timestamp": "2024-08-09 13:24:39+0000",
  "ndc": "8ac7a4c890fc748b0190fe6ad56b0241_8ab7f980b9bb4bd093c90931766d6432",
  "source": "OPP",
  "paymentMethod": "CC",
  "shortId": "2108.9897.9615"
}

For full details of how to interpret the payment response, see Transaction results.

For the gateway documentation of the Backoffice API, see Gateway Backoffice API documentation.