logo

Search...

⌘ K

English

Product Guide
API Reference
Resource Download
Help Center

Payin

Payment

Create Payment

POST

Query Payment Status

POST

Refund

Create Refund

POST

Query Refund Status

POST

Subscription

Create Subscription

POST

Query Subscription

POST

Query Subscription List

POST

Cancel Subscription

POST

Charge

POST

Query Charge Status

POST

Create Subscription Refund

POST

Query Refund Status

POST

Settlement

Get Settlement Files

POST

Deposit

Batch Create VA Clients

POST

Batch Update VA Clients

POST

Query VA Client Deposits

POST

Webhook

Payment Notification

POST

Refund Notification

POST

Deposit Notification

POST

Subscription Notification

Activated

POST

Charged

POST

Charge Failed

POST

Past Due

POST

Cancelled

POST

Authorization Expiring

POST

Expired

POST

Exchange Rate

Get Exchange Rate Quote

POST

Payout

Wallet

Query Wallet Address

POST

Query Wallet Balance

POST

Withdraw

Withdraw Apply

POST

Withdraw Detail

POST

Fiat Withdraw

Quote

POST

Apply

POST

Cancel

POST

List

POST

Detail

POST

Batch

Batch Withdraw Apply

POST

Batch Withdraw Query

POST

CEX UID Transfer

CEX UID Transfer Apply

POST

CEX UID Transfer Query

POST

Webhook

Withdraw Notification

POST

Fiat Withdraw Notification

POST

CEX UID Transfer Notification

POST

Withdraw Notification

POST

{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
}