Documentation Index
Fetch the complete documentation index at: https://dev.jup.ag/docs/llms.txt
Use this file to discover all available pages before exploring further.
Ultra Swap API is no longer actively maintained and has been superseded by Swap V2.
The /ultra/v1/holdings/{address} endpoint returns all token holdings for a wallet, including token account details (amount, frozen status, ATA flag, decimals). The top-level response contains the native SOL balance. For SOL-only queries, use /holdings/{address}/native.
Fetch token holdings for a wallet:
const holdingsResponse = await (
await fetch(`https://api.jup.ag/ultra/v1/holdings/3X2LFoTQecbpqCR7G5tL1kczqBKurjKPHhKSZrJ4wgWc`,
{
headers: {
'x-api-key': 'your-api-key',
},
}
)
).json();
console.log(JSON.stringify(holdingsResponse, null, 2));
Holdings Response
The holdings response will return the following:
- A list of token holdings for the user’s wallet address.
- Token account information for each token holding.
- Note that the top level response outside of
tokens is the native SOL balance.
:::tip
For tokens with more than thousands of token holdings, the response may be slow - depending on the number of token holdings, the response time may vary.
If you only need the native SOL balance, you can use /holdings/{address}/native to get the native SOL balance.
:::
Successful example response:
{
"amount": "1000000000",
"uiAmount": 1,
"uiAmountString": "1",
"tokens": {
"jupSoLaHXQiZZTSfEWMTRRgpnyFm8f6sZdosWBjx93v": [
{
"account": "tokenaccountaddress",
"amount": "1000000000",
"uiAmount": 1,
"uiAmountString": "1",
"isFrozen": false,
"isAssociatedTokenAccount": true,
"decimals": 9,
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
}
]
}
}
Failed example response:
{
"error": "Invalid address"
}