Get token balances
curl --request GET \
--url https://api.hypermid.io/v1/balances \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hypermid.io/v1/balances"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hypermid.io/v1/balances', 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.hypermid.io/v1/balances",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <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"
"net/http"
"io"
)
func main() {
url := "https://api.hypermid.io/v1/balances"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hypermid.io/v1/balances")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hypermid.io/v1/balances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"address": "0x0101e82F16792A3368Ca5c62c263F56a99C46c1a",
"totalBalanceUSD": "5432.10",
"balances": {
"1": [
{
"chainId": 1,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "ETH",
"name": "Ethereum",
"decimals": 18,
"balance": "1.5",
"priceUSD": 3250.00,
"balanceUSD": 4875.00,
"logoURI": "https://static.alchemyapi.io/images/assets/279.png",
"providers": ["alchemy"]
},
{
"chainId": 1,
"address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"balance": "500.00",
"priceUSD": 1.00,
"balanceUSD": 500.00,
"logoURI": "https://static.alchemyapi.io/images/assets/3408.png",
"providers": ["alchemy"]
}
],
"369": [
{
"chainId": 369,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "PLS",
"name": "Pulse",
"decimals": 18,
"balance": "100000",
"priceUSD": 0,
"balanceUSD": 0,
"logoURI": "",
"providers": ["superswap"]
}
]
}
},
"error": null,
"meta": {
"requestId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"timestamp": 1711234568,
"rateLimit": {
"limit": 2000,
"remaining": 1998,
"reset": 1711234627
}
}
}
Discovery
Get Balances
Get token balances for a wallet address across chains
GET
/
v1
/
balances
Get token balances
curl --request GET \
--url https://api.hypermid.io/v1/balances \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hypermid.io/v1/balances"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hypermid.io/v1/balances', 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.hypermid.io/v1/balances",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <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"
"net/http"
"io"
)
func main() {
url := "https://api.hypermid.io/v1/balances"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hypermid.io/v1/balances")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hypermid.io/v1/balances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"address": "0x0101e82F16792A3368Ca5c62c263F56a99C46c1a",
"totalBalanceUSD": "5432.10",
"balances": {
"1": [
{
"chainId": 1,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "ETH",
"name": "Ethereum",
"decimals": 18,
"balance": "1.5",
"priceUSD": 3250.00,
"balanceUSD": 4875.00,
"logoURI": "https://static.alchemyapi.io/images/assets/279.png",
"providers": ["alchemy"]
},
{
"chainId": 1,
"address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"balance": "500.00",
"priceUSD": 1.00,
"balanceUSD": 500.00,
"logoURI": "https://static.alchemyapi.io/images/assets/3408.png",
"providers": ["alchemy"]
}
],
"369": [
{
"chainId": 369,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "PLS",
"name": "Pulse",
"decimals": 18,
"balance": "100000",
"priceUSD": 0,
"balanceUSD": 0,
"logoURI": "",
"providers": ["superswap"]
}
]
}
},
"error": null,
"meta": {
"requestId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"timestamp": 1711234568,
"rateLimit": {
"limit": 2000,
"remaining": 1998,
"reset": 1711234627
}
}
}
Returns token balances for a wallet address across multiple blockchains. Uses Alchemy Portfolio API (40+ EVM chains + Solana), PulseChain direct RPC, and Blockstream API (Bitcoin).
Balances include USD pricing, spam filtering, and are grouped by chain ID.
Wallet address. Supports EVM (
0x...), Solana (base58), and Bitcoin (legacy, segwit, taproot).Comma-separated chain IDs to filter. Omit to return balances across all supported chains. Example:
1,42161,8453,369{
"data": {
"address": "0x0101e82F16792A3368Ca5c62c263F56a99C46c1a",
"totalBalanceUSD": "5432.10",
"balances": {
"1": [
{
"chainId": 1,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "ETH",
"name": "Ethereum",
"decimals": 18,
"balance": "1.5",
"priceUSD": 3250.00,
"balanceUSD": 4875.00,
"logoURI": "https://static.alchemyapi.io/images/assets/279.png",
"providers": ["alchemy"]
},
{
"chainId": 1,
"address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6,
"balance": "500.00",
"priceUSD": 1.00,
"balanceUSD": 500.00,
"logoURI": "https://static.alchemyapi.io/images/assets/3408.png",
"providers": ["alchemy"]
}
],
"369": [
{
"chainId": 369,
"address": "0x0000000000000000000000000000000000000000",
"symbol": "PLS",
"name": "Pulse",
"decimals": 18,
"balance": "100000",
"priceUSD": 0,
"balanceUSD": 0,
"logoURI": "",
"providers": ["superswap"]
}
]
}
},
"error": null,
"meta": {
"requestId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"timestamp": 1711234568,
"rateLimit": {
"limit": 2000,
"remaining": 1998,
"reset": 1711234627
}
}
}
const balances = await client.getBalances({
address: "0x0101e82F16792A3368Ca5c62c263F56a99C46c1a",
chainIds: [1, 8453, 369],
});
console.log("Total USD:", balances.totalBalanceUSD);
// Get ETH balance on Ethereum
const ethBalances = balances.balances["1"];
const eth = ethBalances?.find(t => t.symbol === "ETH");
console.log("ETH balance:", eth?.balance);
curl "https://api.hypermid.io/v1/balances?address=0x0101e82F16792A3368Ca5c62c263F56a99C46c1a&chainIds=1,8453,369" \
-H "X-API-Key: your-api-key"
import requests
response = requests.get(
"https://api.hypermid.io/v1/balances",
params={
"address": "0x0101e82F16792A3368Ca5c62c263F56a99C46c1a",
"chainIds": "1,8453,369"
},
headers={"X-API-Key": "your-api-key"}
)
balances = response.json()["data"]
print(f"Total: ${balances['totalBalanceUSD']}")
Supported Chains
| Source | Chains |
|---|---|
| Alchemy Portfolio API | 40+ EVM chains (Ethereum, Arbitrum, Base, Polygon, Optimism, etc.) + Solana |
| PulseChain RPC | PulseChain (369) — PLS, USDCh, HEX, PLSX, INC |
| Blockstream API | Bitcoin |
Notes
- Spam tokens are automatically filtered out
- Zero balances are excluded from the response
- Results are sorted by USD value (highest first) within each chain
- PulseChain balances use direct RPC since Alchemy does not support PulseChain
Authorizations
Partner API key. Optional for public endpoints, required for /v1/partner/*.
Query Parameters
Wallet address (EVM 0x..., Solana base58, or Bitcoin)
Comma-separated chain IDs to filter (e.g. 1,42161,8453,369). Omit for all chains.
Response
Token balances grouped by chainId
Show child attributes
Show child attributes
⌘I