User non-funding ledger updates
curl --request POST \
--url 'https://api.hypedexer.com/info#userNonFundingLedgerUpdates' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "userNonFundingLedgerUpdates",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"startTime": 1758931200000,
"limit": 1
}
'import requests
url = "https://api.hypedexer.com/info#userNonFundingLedgerUpdates"
payload = {
"type": "userNonFundingLedgerUpdates",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"startTime": 1758931200000,
"limit": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'userNonFundingLedgerUpdates',
user: '0x010461c14e146ac35fe42271bdc1134ee31c703a',
startTime: 1758931200000,
limit: 1
})
};
fetch('https://api.hypedexer.com/info#userNonFundingLedgerUpdates', 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://api.hypedexer.com/info#userNonFundingLedgerUpdates",
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([
'type' => 'userNonFundingLedgerUpdates',
'user' => '0x010461c14e146ac35fe42271bdc1134ee31c703a',
'startTime' => 1758931200000,
'limit' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.hypedexer.com/info#userNonFundingLedgerUpdates"
payload := strings.NewReader("{\n \"type\": \"userNonFundingLedgerUpdates\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"startTime\": 1758931200000,\n \"limit\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.hypedexer.com/info#userNonFundingLedgerUpdates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"userNonFundingLedgerUpdates\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"startTime\": 1758931200000,\n \"limit\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hypedexer.com/info#userNonFundingLedgerUpdates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"userNonFundingLedgerUpdates\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"startTime\": 1758931200000,\n \"limit\": 1\n}"
response = http.request(request)
puts response.read_body[
{
"time": 1785843722718,
"hash": "0x8ce6986227aaae5c8e6004416d210d0204610047c2adcd2e30af43b4e6ae8847",
"delta": {
"type": "vaultDeposit",
"vault": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"usdc": "30066.896962"
}
}
]{
"error": "Invalid API key"
}Account History
User non-funding ledger updates
Native Hyperliquid ledger of a wallet: every balance-changing event except funding payments (see userFunding) and fills. Rebuilt from the node event archive, in Hyperliquid’s shape.
- One entry per event and per address involved: a transfer appears in both the sender’s and the receiver’s ledger.
hashis the transaction hash, or the zero hash for system events. Several entries can share one hash, for example withdrawals finalised in the same bridge batch; they differ by theirdelta.deltais the event exactly as Hyperliquid emits it. Newest first; withoutstartTime, the last 30 days.- Coverage: complete from 2025-09-27 09:29 UTC, the start of the node event archive. New events are available within seconds.
- HyperEVM-side transfers are served by the
/evm/ledger/*routes.
delta.type | Main fields |
|---|---|
deposit | usdc |
withdraw | usdc, fee, nonce |
send | user, destination, sourceDex, destinationDex, token, amount, usdcValue, fee, nativeTokenFee, feeToken, nonce |
spotTransfer | user, destination, token, amount, usdcValue, fee, nativeTokenFee, feeToken, nonce |
internalTransfer | user, destination, usdc, fee |
subAccountTransfer | user, destination, usdc |
accountClassTransfer | usdc, toPerp |
vaultCreate | vault, usdc, fee |
vaultDeposit | vault, usdc |
vaultWithdraw | vault, user, requestedUsd, commission, closingCost, basis, netWithdrawnUsd |
vaultDistribution | vault, usdc |
vaultLeaderCommission | user, usdc |
liquidation | liquidatedNtlPos, accountValue, leverageType, liquidatedPositions[] (coin, szi) |
borrowLend | token, operation (supply, withdraw, borrow, repay), amount, interestAmount |
cStakingTransfer | token, amount, isDeposit |
rewardsClaim | token, amount |
accountActivationGas | token, amount |
gossipPriorityGasAuction | token, amount |
deployGasAuction | token, amount |
spotGenesis | token, amount |
POST
/
info#userNonFundingLedgerUpdates
User non-funding ledger updates
curl --request POST \
--url 'https://api.hypedexer.com/info#userNonFundingLedgerUpdates' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "userNonFundingLedgerUpdates",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"startTime": 1758931200000,
"limit": 1
}
'import requests
url = "https://api.hypedexer.com/info#userNonFundingLedgerUpdates"
payload = {
"type": "userNonFundingLedgerUpdates",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"startTime": 1758931200000,
"limit": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'userNonFundingLedgerUpdates',
user: '0x010461c14e146ac35fe42271bdc1134ee31c703a',
startTime: 1758931200000,
limit: 1
})
};
fetch('https://api.hypedexer.com/info#userNonFundingLedgerUpdates', 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://api.hypedexer.com/info#userNonFundingLedgerUpdates",
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([
'type' => 'userNonFundingLedgerUpdates',
'user' => '0x010461c14e146ac35fe42271bdc1134ee31c703a',
'startTime' => 1758931200000,
'limit' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.hypedexer.com/info#userNonFundingLedgerUpdates"
payload := strings.NewReader("{\n \"type\": \"userNonFundingLedgerUpdates\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"startTime\": 1758931200000,\n \"limit\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.hypedexer.com/info#userNonFundingLedgerUpdates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"userNonFundingLedgerUpdates\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"startTime\": 1758931200000,\n \"limit\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hypedexer.com/info#userNonFundingLedgerUpdates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"userNonFundingLedgerUpdates\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"startTime\": 1758931200000,\n \"limit\": 1\n}"
response = http.request(request)
puts response.read_body[
{
"time": 1785843722718,
"hash": "0x8ce6986227aaae5c8e6004416d210d0204610047c2adcd2e30af43b4e6ae8847",
"delta": {
"type": "vaultDeposit",
"vault": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"usdc": "30066.896962"
}
}
]{
"error": "Invalid API key"
}Authorizations
Your Hypedexer API key, sent as Authorization: Bearer <key>. The X-API-Key: <key> header and the api_key query parameter are accepted as well.
Body
application/json
Available options:
userNonFundingLedgerUpdates Wallet address (0x-prefixed, case-insensitive)
Inclusive, epoch milliseconds. Default: now minus 30 days
Inclusive, epoch milliseconds
Required range:
1 <= x <= 5000