Address Endpoints
Endpoints for querying address balances and UTXOs (Unspent Transaction Outputs).
Get Single Address Balance
Get the balance for a specific Hoosat address.
Endpoint: GET /address/:address/balance
Path Parameters:
address- Hoosat address (withhoosat:orhoosattest:prefix)
Response:
{
"success": true,
"data": {
"balance": "1000000000"
},
"timestamp": 1760026085383,
"path": "/api/v1/address/{{address}}/balance"
}
Fields:
balance- Balance in sompi (1 HTN = 100,000,000 sompi)
Example:
curl https://proxy.hoosat.net/api/v1/address/hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe/balance
Converting Sompi to HTN:
const htn = parseInt(balance) / 100000000;
Get Multiple Address Balances
Get balances for multiple addresses in a single request (max 1000 addresses).
Endpoint: POST /address/balances
Request Body:
{
"addresses": [
"hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe",
"hoosat:qyp4ka9p6mlc2gfrd08m5zau9q4jt4mj93k3gnq9f0x4zcwglmqkgxgjhqk7g"
]
}
Response:
{
"success": true,
"data": {
"balances": [
{
"address": "hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe",
"balance": "1000000000"
},
{
"address": "hoosat:qyp4ka9p6mlc2gfrd08m5zau9q4jt4mj93k3gnq9f0x4zcwglmqkgxgjhqk7g",
"balance": "500000000"
}
]
},
"timestamp": 1760026085383,
"path": "/api/v1/address/balances"
}
Example:
curl -X POST https://proxy.hoosat.net/api/v1/address/balances \
-H "Content-Type: application/json" \
-d '{
"addresses": [
"hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe",
"hoosat:qyp4ka9p6mlc2gfrd08m5zau9q4jt4mj93k3gnq9f0x4zcwglmqkgxgjhqk7g"
]
}'
Get UTXOs for Addresses
Get all unspent transaction outputs (UTXOs) for specified addresses (max 1000 addresses).
Endpoint: POST /address/utxos
Request Body:
{
"addresses": [
"hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe"
]
}
Response:
{
"success": true,
"data": {
"utxos": [
{
"address": "hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe",
"outpoint": {
"transactionId": "abc123def456789012345678901234567890123456789012345678901234abcd",
"index": 0
},
"utxoEntry": {
"amount": "100000000",
"scriptPublicKey": {
"version": 0,
"scriptPublicKey": "def456..."
},
"blockDaaScore": "50000",
"isCoinbase": false
}
},
{
"address": "hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe",
"outpoint": {
"transactionId": "ghi789...",
"index": 1
},
"utxoEntry": {
"amount": "900000000",
"scriptPublicKey": {
"version": 0,
"scriptPublicKey": "jkl012..."
},
"blockDaaScore": "55000",
"isCoinbase": true
}
}
]
},
"timestamp": 1760026085383,
"path": "/api/v1/address/utxos"
}
UTXO Fields:
address- Address that owns this UTXOoutpoint- Transaction output referencetransactionId- Transaction hashindex- Output index in transaction
utxoEntry- UTXO detailsamount- Amount in sompiscriptPublicKey- Locking scriptblockDaaScore- DAA score when createdisCoinbase- Whether this is a coinbase transaction (mining reward)
Example:
curl -X POST https://proxy.hoosat.net/api/v1/address/utxos \
-H "Content-Type: application/json" \
-d '{
"addresses": [
"hoosat:qz7ulu8mmmul6hdcnssmjnt28h2xfer8dz9nfqamvvh86ngef4q8dvzxcjdqe"
]
}'
Integration Examples
JavaScript/TypeScript
const BASE_URL = 'https://proxy.hoosat.net/api/v1';
// Get single address balance
async function getBalance(address: string) {
const response = await fetch(`${BASE_URL}/address/${address}/balance`);
const result = await response.json();
if (result.success) {
const sompi = BigInt(result.data.balance);
const htn = Number(sompi) / 100000000;
console.log(`Balance: ${htn} HTN`);
return htn;
}
}
// Get multiple balances
async function getMultipleBalances(addresses: string[]) {
const response = await fetch(`${BASE_URL}/address/balances`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ addresses })
});
const result = await response.json();
if (result.success) {
return result.data.balances.map(item => ({
address: item.address,
htn: Number(BigInt(item.balance)) / 100000000
}));
}
}
// Get UTXOs for transaction building
async function getUtxos(addresses: string[]) {
const response = await fetch(`${BASE_URL}/address/utxos`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ addresses })
});
const result = await response.json();
if (result.success) {
return result.data.utxos;
}
}
// Calculate total balance from UTXOs
function calculateTotalBalance(utxos: any[]) {
return utxos.reduce((total, utxo) => {
return total + BigInt(utxo.utxoEntry.amount);
}, 0n);
}
// Example: Get balance and UTXOs
async function getAddressInfo(address: string) {
const [balanceRes, utxosRes] = await Promise.all([
fetch(`${BASE_URL}/address/${address}/balance`),
fetch(`${BASE_URL}/address/utxos`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ addresses: [address] })
})
]);
const balance = await balanceRes.json();
const utxos = await utxosRes.json();
if (balance.success && utxos.success) {
console.log('Balance:', Number(BigInt(balance.data.balance)) / 1e8, 'HTN');
console.log('UTXO count:', utxos.data.utxos.length);
// Separate mature and immature (coinbase) UTXOs
const mature = utxos.data.utxos.filter(u => !u.utxoEntry.isCoinbase);
const immature = utxos.data.utxos.filter(u => u.utxoEntry.isCoinbase);
console.log('Mature UTXOs:', mature.length);
console.log('Immature UTXOs (coinbase):', immature.length);
return { balance: balance.data.balance, utxos: utxos.data.utxos };
}
}
Python
import requests
BASE_URL = 'https://proxy.hoosat.net/api/v1'
def get_balance(address):
response = requests.get(f'{BASE_URL}/address/{address}/balance')
result = response.json()
if result['success']:
sompi = int(result['data']['balance'])
htn = sompi / 100000000
print(f'Balance: {htn} HTN')
return htn
def get_multiple_balances(addresses):
response = requests.post(
f'{BASE_URL}/address/balances',
json={'addresses': addresses}
)
result = response.json()
if result['success']:
return [
{
'address': item['address'],
'htn': int(item['balance']) / 100000000
}
for item in result['data']['balances']
]
def get_utxos(addresses):
response = requests.post(
f'{BASE_URL}/address/utxos',
json={'addresses': addresses}
)
result = response.json()
if result['success']:
return result['data']['utxos']
def calculate_total_balance(utxos):
return sum(int(utxo['utxoEntry']['amount']) for utxo in utxos)
Wallet Use Case
// Build transaction from UTXOs
async function prepareTransaction(
senderAddress: string,
recipientAddress: string,
amountHtn: number
) {
// Get sender's UTXOs
const utxos = await getUtxos([senderAddress]);
if (!utxos || utxos.length === 0) {
throw new Error('No UTXOs available');
}
const amountSompi = BigInt(Math.floor(amountHtn * 100000000));
let selectedUtxos = [];
let totalInput = 0n;
// Select UTXOs to cover amount + fee
for (const utxo of utxos) {
// Skip immature coinbase UTXOs
if (utxo.utxoEntry.isCoinbase) continue;
selectedUtxos.push(utxo);
totalInput += BigInt(utxo.utxoEntry.amount);
// Break if we have enough (+ estimated fee)
if (totalInput >= amountSompi + 5000n) break;
}
if (totalInput < amountSompi) {
throw new Error('Insufficient balance');
}
return {
inputs: selectedUtxos,
totalInput,
amount: amountSompi
};
}
Next Steps
- Transaction Endpoints - Submit transactions using UTXOs
- Mempool Endpoints - Check pending transactions
- Browser SDK - Use with Browser SDK for wallet apps