Withdraw Notification
{notificationEndpoint}
When a withdraw order reaches a terminal state, Paydify sends a POST callback (Paydify → merchant) to the payout callback URL configured for the app (notificationEndpoint, configured by Paydify for the app; not passed per order). Only terminal states (SUCCESS / FAILED) are pushed, and each withdraw is notified exactly once. Every detail of a batch withdraw is also notified one by one through this callback; batch-level status is pull-only via the batch withdraw query API. The payload carries notifyType=withdraw (added 2026-09-15), so merchants sharing one callback URL with deposit (notifyType=deposit) and CEX UID transfer (notifyType=uid_transfer) callbacks can dispatch on it. Merchants must verify the signature and deduplicate idempotently by withdrawId + status; acknowledge with HTTP 200 and the bare string success (case-insensitive). Any other response triggers re-push at 15s / 45s / 90s / 180s / 10m / 30m / 60m / 3h / 6h / 12h intervals, up to 11 attempts including the first push. For orders created with a partner credential, the callback signature is computed with the ordering credential apiSecret, while x-api-key remains the appId of the app the order belongs to.
Request
Header Parameters
content-type
string
REQUIRED
Fixed value: application/json
x-api-key
string
REQUIRED
appId of the app the order belongs to
x-api-timestamp
string
REQUIRED
Timestamp in milliseconds
x-api-signature
string
REQUIRED
Signature, see Signature Algorithm
Body
appId
string
REQUIRED
appId of the app the order belongs to
notifyType
string
REQUIRED
Notification type, fixed value: withdraw. Added on 2026-09-15; earlier withdraw callbacks did not carry this field, so your JSON parser must tolerate new fields (do not enable strict modes such as FAIL_ON_UNKNOWN_PROPERTIES)
withdrawId
string
REQUIRED
Paydify withdraw order ID
mchWithdrawId
string
REQUIRED
Merchant withdraw order ID (the mchWithdrawId passed at apply)
status
string
REQUIRED
Withdraw status; only terminal states are pushed: SUCCESS / FAILED
currency
string
REQUIRED
Withdraw currency
network
string
REQUIRED
Chain network (e.g. BSC/SOL/ETH/TRON/POLYGON)
amount
string
REQUIRED
Withdraw amount, 0 when absent
gasFee
string
REQUIRED
On-chain gas fee, 0 when absent
processingFee
string
REQUIRED
Processing fee, 0 when absent
address
string
REQUIRED
Destination address
txnHash
string
On-chain transaction hash, present when available
finishedTime
int
Completion timestamp in milliseconds, present only when SUCCESS; FAILED orders have no completion time and omit this field
errorCode
string
Error code, may be present only when FAILED
errorMsg
string
Failure reason, may be present only when FAILED
Response
Body
body
string
REQUIRED
Bare string success (case-insensitive). JSON objects, HTML error pages, empty bodies, or any other literal (including fail) are treated as failure and trigger re-push
Example Payloads
status=SUCCESS, notifyType=withdraw. txnHash and finishedTime are set; amount is the withdraw amount, gasFee/processingFee are the on-chain gas and the processing fee.
123456789101112131415{"appId": "A14456006","notifyType": "withdraw","withdrawId": "W5081643613805694001","mchWithdrawId": "MCH_WD_1757903025","status": "SUCCESS","currency": "USDT","network": "BSC","amount": "200","gasFee": "0.0012","processingFee": "1","address": "0x5F2c1E9d8B7a6C5d4E3f2A1b0C9d8E7f6A5b4C3d","txnHash": "0x3f9c1b3a7d4e5f60718293a4b5c6d7e8f9012a3b4c5d6e7f8091a2b3c4d5e6f7","finishedTime": 1789439025000}