Skip to content

Payment Refund Result Callback Notification to Merchant ​

1. Notification Background ​

After Adopay processes a payment refund and completes it, Adopay notifies the merchant of the refund result via an HTTP asynchronous callback.

Merchants should handle notifications idempotently based on platOrderNo. The same order may receive multiple notifications due to retries.

2. Callback URL and Request Method ​

ItemContent
Request methodPOST
Request URL{notifyUrl}
Content-Typeapplication/json
PurposeNotify the Pix cashout refund result

{notifyUrl} is the payment callback URL provided by the merchant and must be a complete HTTP or HTTPS URL.

3. Request Header Fields ​

FieldTypeLengthRequiredDescription
Content-Typestring16YesFixed as application/json.
X-Merchant-Idstring64YesMerchant number receiving the notification.
X-Timestampstring19YesUnix timestamp in seconds.
X-Noncestring64YesRandom string for this request, used for anti-replay.
Digeststring52YesDigest of the raw request body, in the format SHA-256=<Base64(SHA256(body_bytes))>.
Authorizationstring-YesES256 HTTP Signature information.

Both Digest and Authorization are computed over the raw JSON bytes that are finally sent. Merchants must not re-serialize the JSON before performing signature verification.

4. Request Body Fields ​

Business status: status is an integer; status = 200 indicates business success, in which case msg = "sucesso". Any value other than 200 indicates a business error; see msg for the reason.

FieldTypeLengthReturnedDescription
eventstring64YesSee the event enum below.
attachstring128YesThis cashout refund was not initiated by the merchant; the field is taken from the original payment order corresponding to origPlatOrderNo and equals the attach value passed when the merchant called the payment order creation API. It is returned as-is if it was provided when the original payment order was created, and is empty otherwise.
merchantOrderNostring64YesMerchant refund order number of this refund.
platOrderNostring64YesPlatform refund order number of this refund.
origMerchantOrderNostring64YesOriginal merchant payment order number.
origPlatOrderNostring64YesOriginal platform payment order number.
origAmountdecimal(25,2)25,2YesOriginal payment order amount.
origTotalRefundAmountdecimal(25,2)25,2YesAs of the completion of this refund, the cumulative principal amount refunded on the original cashout order, excluding fees.
origTotalFeeRefundAmountdecimal(25,2)25,2YesAs of the completion of this refund, the cumulative fee amount refunded on the original cashout order, excluding the refund principal.
refundAmountdecimal(25,2)25,2YesPrincipal amount successfully refunded this time, excluding fees; see feeRefundAmount for the fee refunded this time.
feeRefundAmountdecimal(25,2)25,2YesFee amount refunded this time; 0 when no fee is refunded.
currencystring3YesRefund currency, identical to the original order currency, e.g. BRL.
e2eIdstring64NoPix end-to-end transaction ID; may be empty when the channel has not returned it yet.
refundTimeint19NoRefund time, Unix timestamp in seconds.
orderStatusstring16YesCurrent status of the refund order.
statusint-YesResponse code
msgstring128YesCorresponds to status

Event and Status Mapping ​

eventorderStatusMeaning
PIX_CASHOUT_REFUNDSUCCESSRefund successful.

5. Request Example ​

The following example shows the first refund of the original order: this refund returns principal 200.00 and fee 2.50; the cumulative refunded principal on the original order is 200.00, and the cumulative refunded fee is 2.50.

http
POST /notify/adopay/cashout HTTP/1.1
Host: merchant.example.com
Content-Type: application/json
X-Merchant-Id: 92315566000120
X-Timestamp: 1786838460
X-Nonce: 4de901987ca14b25acf2639056ac6002
Digest: SHA-256=<REQUEST_BODY_SHA256_BASE64>
Authorization: Signature keyId="v1",alg="ES256",headers="(request-target) x-timestamp x-nonce digest",signature="<ES256_SIGNATURE_BASE64>"

{
  "status": 200,
  "msg": "sucesso",
  "event": "PIX_CASHOUT_REFUND",
  "attach": "merchant-data-001",
  "merchantOrderNo": "MR20260825000001",
  "platOrderNo": "PR20260825000001",
  "origMerchantOrderNo": "MO20260824000001",
  "origPlatOrderNo": "PO20260824000001",
  "origAmount": 1000.00,
  "origTotalRefundAmount": 200.00,
  "origTotalFeeRefundAmount": 2.50,
  "refundAmount": 200.00,
  "feeRefundAmount": 2.50,
  "currency": "BRL",
  "e2eId": "D1234567820260825123456789012345",
  "refundTime": 1786887025,
  "orderStatus": "SUCCESS"
}

6. Merchant Response Requirements ​

After completing idempotent processing, the merchant should return HTTP 200 to 299 with a response body that is strictly the plain text SUCCESS or OK:

http
HTTP/1.1 200 OK
Content-Type: text/plain

SUCCESS

7. Notification Scenarios and Retry Count ​

When a payment refund succeeds, Adopay sends a callback notification to the merchant.

If the first delivery of a notification fails, it is retried at most 9 times, for at most 10 deliveries in total. Once the merchant successfully receives the notification and returns the required success response, no more retries are made.

HTTP Status CodeResponse BodyResult
200 to 299Strictly equals SUCCESS or OK after trimming leading and trailing whitespaceNotification successful, no more retries
200 to 299Empty body, JSON, other text, or non-standard casingNotification failed, retry continues
Non-2xxAny contentNotification failed, retry continues
No HTTP response receivedNetwork timeout or connection failureNotification failed, retry continues

SUCCESS and OK are case-sensitive. For example, success, Success, or {"status":"SUCCESS"} are not recognized as success responses. Although HTTP 204 belongs to 2xx, its response body is empty, so retries continue.

8. Integration Notes ​

  1. It is recommended to determine the transaction result from event and orderStatus; do not rely on event alone to determine success or failure.
  2. Upon receiving a successful notification, re-verify refundAmount, feeRefundAmount, the currency, and the original order information.