Skip to main content

Webhook

Whenever a key event (currently only "order status change") occurs, Binance Connect will send a webhook message, and the partner (client) can receive this message at the webhook callback url and react accordingly, such as updating order data and frontend UI.

Request Headers

FieldTypeRemarks
X-BN-Connect-Timestamptimestamptimestamp
X-BN-Connect-SignaturestringSHA256withRSA(requestBody + X-Connect-Timestamp)
X-BN-Connect-ForstringSame with your client id (X-Tesla-ClientId)

Request Body

FieldTypeRemarks
externalOrderIdstringThe unique order id from the partner side.
typeint1: buy, 2: sell, 3: send
statusintPlease refer to "Order status"
payMethodCodestringThe payment method code is from payment method list API
payMethodSubCodestringThe payment method sub code is from payment method list API
fiatCurrencystringfiat currency
cryptoCurrencystringcrypto currency
fiatAmountstringfiat amount
cryptoAmountstringcrypto amount
feeAmountstringfee amount
feeCurrencystringfee currency, USD or crypto
revenueAmountstringpartner revenue amount
revenueCurrencystringpartner revenue currency, USD or crypto
networkFeestringnetwork fee amount
withdrawWalletAddressstringwithdraw wallet address
withdrawNetworkstringwithdraw network
withdrawMemostringwithdraw network memo
withdrawTxHashstringwithdraw tx hash
orderDetailLinkstringorder detail link
orderTimetimestamporder time
completionTimetimestampcompletion time
updateTimetimestampupdate time

Response Body

  • HTTP status code is 200
  • Response body is in JSON format.
FieldTypeRemarks
returnCodestringSUCCESS or other code you wish to return to Binance Connect
returnMessagestringthe message you wish to return to Binance Connect

How signature works

The encryption/decryption and verification process of webhook is exactly the opposite/mirrored of API request process. The sender and receiver of the two are opposite, but they are both processes that signed by the sender with a private key and verified by the receiver with a public key.

For API requests, the partner (client) generates a pair of keys. The private key is kept securely and privately by the partner (client). Then the partner (client) uses the private key to sign when initiating API requests. The public key is shared to Bianance Connect, with which Binance will verify the signature of the API request to ensure that the request is indeed initiated by the partner (client).

For webhook, it's an opposite/mirrored process. Binance Connect generates a pair of keys. The private key is kept securely and privately by Binance Connect. Then Binance Connect uses the private key to sign when initiating the webhook message. The public key is shared to the partner (client), with which the partner (client) can verify the signature of the webhook message to ensure that the message is indeed initiated by Binance.

The webhook signature flow is as follows:

signature-Webhook.png

Verify signature

As mentioned above, Binance Connect initiates a webhook request to the webhook callback url provided by the partner (client). And the partner (client) should verify the identity of the request initiator based on the public key provided by Binance Connect.

The example code below shows how to verify signature with public key:

public static boolean verify(String srcData, PublicKey publicKey, String sign) throws Exception {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicKey);
signature.update(srcData.getBytes());
return signature.verify(Base64.decodeBase64(sign.getBytes()));
}

Example

Request Body:

{
"externalOrderId": "180401941923045",
"type": 1,
"status": 2,
"payMethodCode": "BUY_P2P",
"payMethodSubCode": "BANK",
"fiatCurrency": "EUR",
"cryptoCurrency": "USDT",
"fiatAmount": "100",
"cryptoAmount": "107.8",
"feeAmount": "1",
"feeCurrency": "USDT",
"revenueAmount": "0.08",
"revenueCurrency": "USDT",
"networkFee": "0.5",
"withdrawWalletAddress": "0xbb4CdB98Bd36B01bD1cBaEA52De08d9173bc095c",
"withdrawNetwork": "BSC",
"withdrawMemo": "",
"withdrawTxHash": "0xcb163e2e6322cd6aa7bc4d45306029e846c0c06e9cdee45a06e88801d1231e71",
"orderDetailLink": "https://www.binance.com/en/my/wallet/exchange/buysell-history?type=buy",
"orderTime": 1723186761000,
"completionTime": 1723206761000,
"updateTime": 1734446642930
}