curl --request POST \
--url https://whitebit.com/api/v4/convert/history \
--header 'Content-Type: application/json' \
--header 'X-TXC-APIKEY: <api-key>' \
--header 'X-TXC-PAYLOAD: <api-key>' \
--header 'X-TXC-SIGNATURE: <api-key>' \
--data '
{
"fromTicker": "BTC"
}
'import requests
url = "https://whitebit.com/api/v4/convert/history"
payload = { "fromTicker": "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({fromTicker: 'BTC'})
};
fetch('https://whitebit.com/api/v4/convert/history', 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/convert/history",
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([
'fromTicker' => '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/convert/history"
payload := strings.NewReader("{\n \"fromTicker\": \"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/convert/history")
.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 \"fromTicker\": \"BTC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whitebit.com/api/v4/convert/history")
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 \"fromTicker\": \"BTC\"\n}"
response = http.request(request)
puts response.read_body{
"records": [
{
"id": "4030",
"path": [
{
"from": "BTC",
"to": "USDT",
"rate": "34470.87211306"
}
],
"date": 1699020642,
"give": "0.00002901",
"receive": "1",
"rate": "34470.87211306"
}
],
"total": 1,
"limit": 1,
"offset": 0
}Convert History
The endpoint returns convert history, most recently executed first. The date field holds the quote creation time, and a quote can be executed later than it was created, so date is not always in descending order.
The from–to window is capped at 30 days per request. A wider range is rejected with 422 and code 0, reported under both from and to. Both from and to must be no earlier than now − 180 days. The bound is rolling and recalculated on every request, so the timestamp in the dateOutOfRange error message changes with each request.
total is the number of records in the returned page, not the number of all matching records, so it never exceeds limit. A full page does not mean more records exist. To read every record, request the next offset until a page returns fewer than limit records or none.
Rate limit: 10000 requests/10 sec.
Error text is not part of the contract and may change. Treat the HTTP status, the code, and the field name under errors as the stable contract.
Note: The endpoint can retrieve data not older than 180 days. For older data, use the Report on the History page.
curl --request POST \
--url https://whitebit.com/api/v4/convert/history \
--header 'Content-Type: application/json' \
--header 'X-TXC-APIKEY: <api-key>' \
--header 'X-TXC-PAYLOAD: <api-key>' \
--header 'X-TXC-SIGNATURE: <api-key>' \
--data '
{
"fromTicker": "BTC"
}
'import requests
url = "https://whitebit.com/api/v4/convert/history"
payload = { "fromTicker": "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({fromTicker: 'BTC'})
};
fetch('https://whitebit.com/api/v4/convert/history', 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/convert/history",
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([
'fromTicker' => '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/convert/history"
payload := strings.NewReader("{\n \"fromTicker\": \"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/convert/history")
.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 \"fromTicker\": \"BTC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whitebit.com/api/v4/convert/history")
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 \"fromTicker\": \"BTC\"\n}"
response = http.request(request)
puts response.read_body{
"records": [
{
"id": "4030",
"path": [
{
"from": "BTC",
"to": "USDT",
"rate": "34470.87211306"
}
],
"date": 1699020642,
"give": "0.00002901",
"receive": "1",
"rate": "34470.87211306"
}
],
"total": 1,
"limit": 1,
"offset": 0
}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
Signing fields added to the body when the request is signed. These fields are not filter parameters. See First API Call for the signing flow.
From currency. Example: BTC
"BTC"
To currency. Example: USDT
"USDT"
Start time, Unix seconds (string or integer). Default: now − 30 days. No earlier than now − 180 days, no later than 23:59:59 UTC today, earlier than to, at most 30 days before to.
"1699260637"
End time, Unix seconds (string or integer). Default: now; a later value is treated as now. No earlier than now − 180 days, at most 30 days after from.
"1699260637"
Quote Id. Example: 4050
"4050"
How many records to receive. Allowed range: 1–100. Default: 100
1 <= x <= 100100
Number of records to skip for pagination. Minimum: 0. Default: 0
x >= 00
Nonce for request
1699260637
Request path
"{{request}}"
Response
Successful response
Conversion records. Field order inside a record is not part of the contract.
Show child attributes
Show child attributes
Number of records in the returned page, not the number of all matching records. Never greater than limit.
1
Limit used in request
1
Offset used in request
0
Was this page helpful?