curl --request POST \
--url https://whitebit.com/api/v4/main-account/balance \
--header 'Content-Type: application/json' \
--header 'X-TXC-APIKEY: <api-key>' \
--header 'X-TXC-PAYLOAD: <api-key>' \
--header 'X-TXC-SIGNATURE: <api-key>' \
--data '
{
"request": "{{request}}",
"nonce": 1594297865000,
"ticker": "BTC"
}
'import requests
url = "https://whitebit.com/api/v4/main-account/balance"
payload = {
"request": "{{request}}",
"nonce": 1594297865000,
"ticker": "BTC"
}
headers = {
"X-TXC-APIKEY": "<api-key>",
"X-TXC-PAYLOAD": "<api-key>",
"X-TXC-SIGNATURE": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-TXC-APIKEY': '<api-key>',
'X-TXC-PAYLOAD': '<api-key>',
'X-TXC-SIGNATURE': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({request: '{{request}}', nonce: 1594297865000, ticker: 'BTC'})
};
fetch('https://whitebit.com/api/v4/main-account/balance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://whitebit.com/api/v4/main-account/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'request' => '{{request}}',
'nonce' => 1594297865000,
'ticker' => 'BTC'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-TXC-APIKEY: <api-key>",
"X-TXC-PAYLOAD: <api-key>",
"X-TXC-SIGNATURE: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://whitebit.com/api/v4/main-account/balance"
payload := strings.NewReader("{\n \"request\": \"{{request}}\",\n \"nonce\": 1594297865000,\n \"ticker\": \"BTC\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-TXC-APIKEY", "<api-key>")
req.Header.Add("X-TXC-PAYLOAD", "<api-key>")
req.Header.Add("X-TXC-SIGNATURE", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://whitebit.com/api/v4/main-account/balance")
.header("X-TXC-APIKEY", "<api-key>")
.header("X-TXC-PAYLOAD", "<api-key>")
.header("X-TXC-SIGNATURE", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"request\": \"{{request}}\",\n \"nonce\": 1594297865000,\n \"ticker\": \"BTC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whitebit.com/api/v4/main-account/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-TXC-APIKEY"] = '<api-key>'
request["X-TXC-PAYLOAD"] = '<api-key>'
request["X-TXC-SIGNATURE"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"request\": \"{{request}}\",\n \"nonce\": 1594297865000,\n \"ticker\": \"BTC\"\n}"
response = http.request(request)
puts response.read_body{
"BSV": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"BTC": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"BTG": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"BTT": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"XLM": {
"main_balance": "36.48",
"pending_deposit_amount": "12.5"
}
}{
"code": 0,
"message": "Validation failed",
"errors": {
"ticker": [
"validation.string"
]
}
}Main balance
The endpoint retrieves the main balance by currency ticker or all balances.
An unknown or non-existent ticker is not an error: the endpoint returns a zero balance ({"main_balance": "0"}) for it. Omitting ticker returns balances for every currency.
main_balance already includes deposits credited before the network fully confirms them. The part of it that is still held back is reported separately as pending_deposit_amount: that amount is tradable but cannot be withdrawn, sent as a WhiteBIT Code, or moved to the collateral balance until the network confirms the deposit. To see the held amount across the whole account, and what remains withdrawable, use Withdrawable balance.
Beyond the validation error above, this endpoint can return only the common authentication errors.
Rate limit: 1000 requests/10 sec.
The API does not cache the response.
curl --request POST \
--url https://whitebit.com/api/v4/main-account/balance \
--header 'Content-Type: application/json' \
--header 'X-TXC-APIKEY: <api-key>' \
--header 'X-TXC-PAYLOAD: <api-key>' \
--header 'X-TXC-SIGNATURE: <api-key>' \
--data '
{
"request": "{{request}}",
"nonce": 1594297865000,
"ticker": "BTC"
}
'import requests
url = "https://whitebit.com/api/v4/main-account/balance"
payload = {
"request": "{{request}}",
"nonce": 1594297865000,
"ticker": "BTC"
}
headers = {
"X-TXC-APIKEY": "<api-key>",
"X-TXC-PAYLOAD": "<api-key>",
"X-TXC-SIGNATURE": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-TXC-APIKEY': '<api-key>',
'X-TXC-PAYLOAD': '<api-key>',
'X-TXC-SIGNATURE': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({request: '{{request}}', nonce: 1594297865000, ticker: 'BTC'})
};
fetch('https://whitebit.com/api/v4/main-account/balance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://whitebit.com/api/v4/main-account/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'request' => '{{request}}',
'nonce' => 1594297865000,
'ticker' => 'BTC'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-TXC-APIKEY: <api-key>",
"X-TXC-PAYLOAD: <api-key>",
"X-TXC-SIGNATURE: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://whitebit.com/api/v4/main-account/balance"
payload := strings.NewReader("{\n \"request\": \"{{request}}\",\n \"nonce\": 1594297865000,\n \"ticker\": \"BTC\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-TXC-APIKEY", "<api-key>")
req.Header.Add("X-TXC-PAYLOAD", "<api-key>")
req.Header.Add("X-TXC-SIGNATURE", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://whitebit.com/api/v4/main-account/balance")
.header("X-TXC-APIKEY", "<api-key>")
.header("X-TXC-PAYLOAD", "<api-key>")
.header("X-TXC-SIGNATURE", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"request\": \"{{request}}\",\n \"nonce\": 1594297865000,\n \"ticker\": \"BTC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whitebit.com/api/v4/main-account/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-TXC-APIKEY"] = '<api-key>'
request["X-TXC-PAYLOAD"] = '<api-key>'
request["X-TXC-SIGNATURE"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"request\": \"{{request}}\",\n \"nonce\": 1594297865000,\n \"ticker\": \"BTC\"\n}"
response = http.request(request)
puts response.read_body{
"BSV": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"BTC": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"BTG": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"BTT": {
"main_balance": "0",
"pending_deposit_amount": "0"
},
"XLM": {
"main_balance": "36.48",
"pending_deposit_amount": "12.5"
}
}{
"code": 0,
"message": "Validation failed",
"errors": {
"ticker": [
"validation.string"
]
}
}Used in these guides
- Payment Integration — crypto deposits, withdrawals, conversion, WhiteBIT Codes, and Express Withdraw.
Authorizations
The public WhiteBIT API key.
Base64-encoded JSON request body.
HMAC-SHA512 signature of the payload, hex-encoded. Computed as hex(HMAC-SHA512(payload, api_secret)).
Body
Response
Successful response
Show child attributes
Show child attributes
Was this page helpful?