Skip to main content
Version: v1.4.x Legacy

Refund Payment

Full or partial refund to the payer. In the case of a two-stage payment, a refund can be made after confirmation. The amount of all refunds must not exceed the amount of the payment.

API Endpoint:

POST https://uat-sandbox-3ds-api.qi.iq/api/v1/payment/{paymentId}/refund

Headers

NameTypeDescriptionRequired
X-Terminal-IdStringThe ID of the Merchant Terminal. Provided by the Acquirer.Yes

Parameters

NameTypeDescriptionRequired
paymentIdStringthe ID of the payment transaction that want to be refunded.Yes

CURL Example

curl --location '<API_HOST>/api/v1/payment/{paymentId}/refund' \
--header 'X-Terminal-Id: {terminalId}' \
--header 'Authorization: Basic <Base64<username:password>>' \
--header 'Content-Type: application/json' \
--data '{
"requestId": "20250301-231819-115",
"amount": 10000.00,
"message": "I want my money back :)"
}'

Request Body Example

Media type: application/json

Example of a request body:

{
"requestId": "4256ab83-de74-450f-b442-8fb995458243",
"amount": 52000.15,
"message": "customer wants his money back :)",
// optional object below
"extParams": {
"phone": "79997776655",
"recipientBankId": "100000000001",
"processRefundAsOct": true
}
}

Request body fields

OptionsTypeDescription
requestIdstring requiredA unique identifier generated by the Merchant's side. It must be ensured that the RequestId remains unique within the context of each Merchant Terminal to prevent duplication or conflicts.
amountnumber required Specifies the total payment amount, including any applicable fees or commissions from the merchant. This field is required for all payment transactions but should be absent for non-payment transactions. Note non-payment transactions are used to collect card information without processing any payment. This type of transaction is useful when card details are needed for future use, but no immediate charge is required.
messagestring optionalA string feild string can be used for example to document a reason why the user wants his money back.
extParamsobject optionaloptional additional data object

Response Details

200 OK Response

Refund Returned data:

{
"refundId": "37b85e60-e7a6-4abb-9466-703472fb83b9",
"requestId": "37b85e60-e7a6-4abb-9466-703472fb83b9",
"paymentId": "37b85e60-e7a6-4abb-9466-703472fb83b9",
"amount": 256.89,
"status": "SUCCESS",
"canceled": false,
"currency": "IQD",
"creationDate": "2020-05-14T12:06:39Z",
"message": "Marriage",
"details": {
"resultCode": "00",
"resultDescription": "Successfully",
"rrn": "433726493310",
"externalRrn": "123456789012",
"authId": "39827334",
"authDate": "2020-05-14T12:06:39Z",
"maskedPan": "4234********3456",
"paymentSystem": "VISA",
"customDetails": {
"octLimitBalance": "12345678.99"
}
}
}

200 OK Response fields

OptionsTypeDescription
refundIdstringA refund ID is used identify a refund object as a refrence for the refund operation, it can be used to fetch a refund details
requestIdstringA unique identifier generated by the Merchant's side. It must be ensured that the RequestId remains unique within the context of each Merchant Terminal to prevent duplication or conflicts.
paymentIdstringPayment ID (Transaction ID): the payment transaction reference ID in the Payment Gateway system
amountnumber Specifies the total payment amount, including any applicable fees or commissions from the merchant. This field is required for all payment transactions but should be absent for non-payment transactions. Note non-payment transactions are used to collect card information without processing any payment. This type of transaction is useful when card details are needed for future use, but no immediate charge is required.
statusstringthe payment transaction status value, possible values are: SUCCESS, FAILED, CREATED & AUTHENTICATION_FAILED
canceledbooleanA boolean value indicate if the payment got canceled or not.
currencystringThe ISO 4217 code represents the currency for the payment, for example: IQD - Iraqi Dinar, The value must be exactly 3 characters long, Max value = 3, Min value = 3
creationDatestringPayment object creation date, follows the ISO 8601 standard, example: '2024-08-04T15:34:33Z'.
messagestringA string feild string can be used for example to document a reason why the user wants his money back.
detailsobjectadditional info about the refund operation.

400 Bad Request

{
"error": {
"code": 27,
"description": "Authentication required: Incorrect credentials"
}
}

500 Server Error

{
"error": {
"code": 23,
"description": "INTERNAL_SYSTEM_ERROR"
}
}

Possible Error Codes

  • 1 - ORDER_ALREADY_EXISTS
  • 2 - ORDER_NOT_FOUND
  • 3 - ORDER_ALREADY_CANCELLED
  • 4 - NO_COMPATIBLE_SERVICES_FOUND
  • 5 - CAN_NOT_PROCESS_REQUEST
  • 6 - REQUISITES_NOT_FOUND
  • 7 - REQUISITES_ALREADY_EXISTS
  • 8 - CAN_NOT_CREATE_NEW_REQUISITES
  • 9 - TERMINAL_NOT_FOUND_EXCEPTION
  • 10 - PAYMENT_ALREADY_EXISTS
  • 11 - MAX_NUMBER_OF_PAYMENTS_FOR_ORDER_EXCEEDED
  • 12 - PAYMENT_NOT_FOUND
  • 13 - UNKNOWN_STRATEGY
  • 14 - PROCESSING_IMPOSSIBLE
  • 15 - CAN_NOT_CANCEL_PAYMENT
  • 16 - CAN_NOT_CONFIRM_PAYMENT
  • 17 - CAN_NOT_FINISH_AUTHENTICATION
  • 18 - REFUNDS_NOT_ALLOWED
  • 19 - PAYMENT_PARAMS_NOT_FOUND
  • 20 - REFUND_ERROR
  • 21 - VALIDATION_ERROR
  • 22 - INCORRECT_PAYMENT_STATE
  • 23 - INTERNAL_SYSTEM_ERROR
  • 24 - EXTERNAL_SYSTEM_ERROR
  • 26 - INVALID_PAYMENT_FORM_DOMAIN
  • 27 - BAD_CREDENTIALS
  • 28 - LIMIT_VIOLATION
  • 29 - TRANSFER_NOT_FOUND
  • 30 - INCORRECT_TRANSFER_STATE
  • 31 - TOKEN_NOT_FOUND
  • 32 - TOKEN_PROCESS_NOT_ALLOWED
  • 33 - CAN_NOT_CANCEL_TRANSFER
  • 34 - TRANSFER_ALREADY_EXISTS
  • 35 - INVALID_TOKEN_TYPE