curl --request POST \
--url https://api.kraken.com/0/private/Ledgers \
--header 'API-Key: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"nonce": 1695828490,
"type": "trade",
"start": 1695728276,
"end": 1695828276
}
'import requests
url = "https://api.kraken.com/0/private/Ledgers"
payload = {
"nonce": 1695828490,
"type": "trade",
"start": 1695728276,
"end": 1695828276
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({nonce: 1695828490, type: 'trade', start: 1695728276, end: 1695828276})
};
fetch('https://api.kraken.com/0/private/Ledgers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kraken.com/0/private/Ledgers"
payload := strings.NewReader("{\n \"nonce\": 1695828490,\n \"type\": \"trade\",\n \"start\": 1695728276,\n \"end\": 1695828276\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<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))
}{
"error": [],
"result": {
"ledger": {
"L4UESK-KG3EQ-UFO4T5": {
"refid": "TJKLXF-PGMUI-4NTLXU",
"time": 1688464484.1787,
"type": "trade",
"subtype": "",
"aclass": "currency",
"asset": "ZGBP",
"amount": "-24.5000",
"fee": "0.0490",
"balance": "459567.9171"
},
"LMKZCZ-Z3GVL-CXKK4H": {
"refid": "TBZIP2-F6QOU-TMB6FY",
"time": 1688444262.8888,
"type": "trade",
"subtype": "",
"aclass": "currency",
"asset": "ZUSD",
"amount": "0.9852",
"fee": "0.0010",
"balance": "52732.1132"
}
},
"count": 2
}
}Get Ledgers Info
Retrieve information about ledger entries. 50 results are returned at a time, the most recent by default. Set with_cursor to page through results with cursor.
Pass account_id to retrieve ledger entries for a specific wallet. Omit it to use the authenticated user’s default wallet. Use List Wallet Accounts to obtain wallet account IDs.
Note on Staking/Earn assets: We have begun to migrate assets from our legacy Staking system over to a new Earn system. As such, the following assets may appear in your balances and ledger. Please see our Support article for more details. Note that these assets are “read-only”, to interact with your balances in them please use the base asset (e.g.
USDTto transact with yourUSDTandUSDT.Fbalances).
.B, which represents balances in new yield-bearing products, similar to.S(staked) and.M(opt-in rewards) balances.F, which represents balances earning automatically in Kraken Rewards
API Key Permissions Required: Data - Query ledger entries
curl --request POST \
--url https://api.kraken.com/0/private/Ledgers \
--header 'API-Key: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"nonce": 1695828490,
"type": "trade",
"start": 1695728276,
"end": 1695828276
}
'import requests
url = "https://api.kraken.com/0/private/Ledgers"
payload = {
"nonce": 1695828490,
"type": "trade",
"start": 1695728276,
"end": 1695828276
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({nonce: 1695828490, type: 'trade', start: 1695728276, end: 1695828276})
};
fetch('https://api.kraken.com/0/private/Ledgers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kraken.com/0/private/Ledgers"
payload := strings.NewReader("{\n \"nonce\": 1695828490,\n \"type\": \"trade\",\n \"start\": 1695728276,\n \"end\": 1695828276\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<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))
}{
"error": [],
"result": {
"ledger": {
"L4UESK-KG3EQ-UFO4T5": {
"refid": "TJKLXF-PGMUI-4NTLXU",
"time": 1688464484.1787,
"type": "trade",
"subtype": "",
"aclass": "currency",
"asset": "ZGBP",
"amount": "-24.5000",
"fee": "0.0490",
"balance": "459567.9171"
},
"LMKZCZ-Z3GVL-CXKK4H": {
"refid": "TBZIP2-F6QOU-TMB6FY",
"time": 1688444262.8888,
"type": "trade",
"subtype": "",
"aclass": "currency",
"asset": "ZUSD",
"amount": "0.9852",
"fee": "0.0010",
"balance": "52732.1132"
}
},
"count": 2
}
}Authorizations
The "API-Key" header should contain your API key.
Authenticated requests should be signed with the "API-Sign" header, using a signature generated with your private key, nonce, encoded payload, and URI path.
Query Parameters
Public wallet account ID. Omit to use the authenticated user's default wallet. See List Wallet Accounts.
Body
Nonce used in construction of API-Sign header
Filter output by asset. Accepts one of the following formats:
all, a single asset, or a comma delimited list of assets.- A list of
{ asset, aclass }objects, to filter by assets of a specific asset class (e.g.tokenized_asset).
Filter output by asset class. Deprecated, use the { asset, aclass } list form of asset instead.
Type of ledger to retrieve
all, trade, deposit, withdrawal, transfer, margin, adjustment, rollover, credit, settled, staking, dividend, sale, nft_rebate Starting unix timestamp or ledger ID of results (exclusive)
Ending unix timestamp or ledger ID of results (inclusive)
Result offset for pagination. Deprecated, use with_cursor and cursor instead. Must be absent or 0 when with_cursor is true.
Use cursor-based pagination instead of ofs. Each page holds up to 50 ledger entries, and the response includes cursor.next when more entries are available. start and end still narrow the range. Skips the count query, so count is returned as null.
Opaque pagination token from cursor.next of the previous page. Requires with_cursor.
If true, does not retrieve count of ledger entries (count is returned as null). Request can be noticeably faster for users with many ledger entries as this avoids an extra database query.
Optional parameter for viewing xStocks data.
rebased: Display in terms of underlying equity.base: Display in terms of SPV tokens.
rebased, base Was this page helpful?