Skip to content

PIX Out Webhook ​

1. Background ​

After the partner initiates a PIX payout transaction, the final result may not be determinable within the synchronous request. Once the payout order succeeds or fails, Adopay notifies the partner of the final result via an HTTP asynchronous callback.

The partner must process notifications idempotently by platOrderNo or merchantOrderNo. The same order may be notified multiple times due to retries.

2. Callback Endpoint and Method ​

ItemValue
MethodPOST
URL{notifyUrl}
Content-Typeapplication/json
PurposeNotify the final PIX payout result

{notifyUrl} is the partner-provided payout callback URL; it must be a complete HTTP or HTTPS URL.

3. Request Headers ​

FieldTypeLengthRequiredDescription
Content-Typestring16YesFixed to application/json.
X-Merchant-Idstring64YesMerchant ID that receives 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 actually sent. When verifying the signature, the partner must not re-serialize the JSON first.

4. Request Body Fields ​

Business status: status is an integer; status = 200 means the business call succeeded, 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.
subMerchantNostring64YesSub-merchant ID that owns this payout order.
attachstring128Yesattach value the partner submitted when placing the original payout order; returned as-is if it was submitted, empty otherwise.
merchantOrderNostring64YesMerchant order number the partner submitted when initiating the payout.
platOrderNostring64YesAdopay payout platform order number.
orderStatusstring16YesPayout result: SUCCESS means the payout succeeded, FAILED means the payout failed.
e2eIdstring64YesBank E2E transaction number / external channel payout reference; may be empty when not yet generated.
amountdecimal25,2YesMerchant order amount.
receivedAmountdecimal25,2YesAmount actually credited to the payee.
feedecimal25,2YesMerchant fee; 0 on failure.
fromIspbstring16YesISPB code of the paying institution.
fromIspbNamestring512YesName of the paying institution.
fromCnpjstring64YesPayer's CNPJ.
fromNamestring128YesPayer's name.
toPixstring64YesPayee's Pix key; sensitive information.
toIspbstring16YesISPB code of the receiving institution; may be empty when unavailable.
toIspbNamestring512YesName of the receiving institution; may be empty when unavailable.
toNamestring128YesPayee's name; sensitive information.
toCpfCnpjstring64YesPayee's CPF/CNPJ; sensitive information.
payTimeint19YesPayout completion time, Unix timestamp in seconds; 0 when unavailable.
statusint-YesResponse code
msgstring128YesMessage corresponding to status

Event and Status Mapping ​

eventorderStatusMeaning
PIX_CASHOUT_SUCCESSSUCCESSPayout succeeded.
PIX_CASHOUT_ERRORFAILEDPayout failed.

5. Request Example ​

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_SUCCESS",
  "subMerchantNo": "SUBMERCHANT0001",
  "attach": "merchant-data-001",
  "merchantOrderNo": "CASHOUT202608170001",
  "platOrderNo": "APS202608170000000001",
  "orderStatus": "SUCCESS",
  "e2eId": "E0000000020260817000000000000002",
  "amount": 100.00,
  "receivedAmount": 100.00,
  "fee": 1.50,
  "fromIspb": "87654321",
  "fromIspbName": "ADOX INSTITUICAO DE PAGAMENTO LTDA",
  "fromCnpj": "12345678000195",
  "fromName": "",
  "toPix": "maria.oliveira@example.com",
  "toIspb": "60701190",
  "toIspbName": "ITAÚ UNIBANCO S.A.",
  "toName": "MARIA OLIVEIRA",
  "toCpfCnpj": "12345678901",
  "payTime": 1786838460
}

6. Partner Response Requirements ​

After completing idempotent processing, the partner should return HTTP 200—299 with a response body of exactly the plain text SUCCESS or OK:

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

SUCCESS

7. Notification Scenarios and Retries ​

When the payout succeeds or fails, Adopay sends a callback notification to the partner.

After the first delivery attempt of a notification fails, Adopay retries at most 9 times, for at most 10 deliveries in total. Once the partner receives the notification successfully and returns the required success response, no further retries occur.

Whether to retry is determined jointly by the HTTP status code and the response body:

HTTP Status CodeResponse BodyResult
200—299Strictly equal to SUCCESS or OK after trimming leading and trailing whitespaceNotification delivered; no more retries
200—299Empty body, JSON, other text, or wrong 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 is a 2xx status, its body is empty, so retries continue.

8. Integration Notes ​

  1. Determine the transaction result from event together with orderStatus; do not rely on event alone to judge success or failure.
  2. When a success notification arrives, re-verify amount, the payee, and the Pix key.
  3. toPix, toName, fromCnpj, and toCpfCnpj are sensitive information and should be stored masked in logs and audit systems.