Refund the Transaction

Send a full or partial refund against a POS transaction ID.

Refund a POS transaction using the transaction ID from Find the transaction. You can refund the full amount or part of it.

Endpoint

POST /unified-reporting/merchants/{merchantId}/transactions/{transactionId}/refund

Headers

HeaderRequiredValue
AuthorizationRequiredBearer <access_token>
Content-TypeRequiredapplication/vnd.ni.unified-reporting.v1+json
AcceptRequiredapplication/vnd.ni.unified-reporting.v1+json

Path parameters

ParameterRequiredDescription
merchantIdRequiredYour merchant reference, the same UUID as in the search.
transactionIdRequireditems[].id from the search response

Request body

FieldTypeRequiredDescription
amount.currencyCodeStringRequiredISO 4217 code. Must match the original transaction's currency.
amount.valueIntegerRequiredAmount to refund, in minor units: 100 is AED 1.00. No more than what is left to refund.

Sample request

curl --request POST \
  'https://api-gateway.sandbox.ngenius-payments.com/unified-reporting/merchants/<merchant_id>/transactions/<transaction_id>/refund' \
  --header 'Authorization: Bearer <access_token>' \
  --header 'Content-Type: application/vnd.ni.unified-reporting.v1+json' \
  --header 'Accept: application/vnd.ni.unified-reporting.v1+json' \
  --data '{
    "amount": { "currencyCode": "AED", "value": 100 }
  }'

The response

❗

A declined refund also returns HTTP 200

Check status in the body, not the HTTP code. REFUNDED means the refund went through; DECLINED means it did not.

Refund succeeded

{
  "id": "01a0145b-d208-7da4-a542-e2ef0fa6c848",
  "channel": "POS",
  "timestamp": "2026-08-18T10:12:37Z",
  "type": "REFUND",
  "status": "REFUNDED",
  "amount": { "currencyCode": "AED", "value": 1000 },
  "payment": {
    "paymentMethod": "MASTERCARD",
    "card": { "maskedPan": "XXXXXX******XXXX", "expiryDate": 3104 }
  },
  "identifiers": {
    "rrn": "000000000XXX",
    "merchantId": "00X0000000XX",
    "terminalId": "XXXXXXXX"
  },
  "originalTransaction": { "id": "01a00f29-0e40-78d1-913f-19295181f8d8" }
}

Refund declined

{
  "id": "019fa776-5168-7d1f-9e94-fbbfcd7c0384",
  "channel": "POS",
  "type": "REFUND",
  "status": "DECLINED",
  "amount": { "currencyCode": "AED", "value": 100 },
  "originalTransaction": { "id": "757d7d02-1905-467f-8b23-fb82d1bd6573" }
}

A declined refund still gets its own id, different from the transaction you tried to refund.

FieldMeaning
idThe refund's own ID, whether it succeeded or was declined
typeAlways REFUND
statusREFUNDED or DECLINED
amountThe amount refunded, in minor units
originalTransaction.idThe transaction you refunded

Partial refunds

Send a refund for less than the original amount to make a partial refund. You can send further partial refunds against the same transaction until the full amount has been refunded. A refund for more than what is left fails. See Errors and troubleshooting.

© Network International LLC. All Rights Reserved.