curl --request GET \
--url https://api.webacy.com/trading-lite/{address} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/trading-lite/{address}"
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.webacy.com/trading-lite/{address}', 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.webacy.com/trading-lite/{address}",
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.webacy.com/trading-lite/{address}"
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.webacy.com/trading-lite/{address}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/trading-lite/{address}")
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{
"CA": "8RVBk8vxLiUHueLUW1f4izFVqN3nWippLhkohKg6EGkS",
"DA": "ExF1h7ahifYf9RPBXZCemXv8UTNPqEN5JFhkj4UgUmhJ",
"Top10Holders": 24.47,
"SniperPercentageOnLaunch": 5.49,
"SniperAddresses": [
{
"address": "7ioEZjdGdciB2jS79Rc8yqrsYanf2Q1YejHjNcQZLkER",
"initiallyAcquiredPercentage": 0.94,
"initiallyAcquiredAmount": 9360093.570587,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 20671.962122
},
{
"address": "7CgG2UJ2WqirVGHKeRhBynQi5a2Tm9M7PtEmadrYepso",
"initiallyAcquiredPercentage": 3.09,
"initiallyAcquiredAmount": 30875616.044737,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "CQxTmAZ9rB33KJybbtt7a16CafeonhfMpysTBBdrcM5L",
"initiallyAcquiredPercentage": 1.46,
"initiallyAcquiredAmount": 14625460.432991,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
}
],
"BundlerAddresses": [
{
"address": "WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh",
"initiallyAcquiredPercentage": 1.8,
"initiallyAcquiredAmount": 17973044.69963098,
"currentHoldingPercentage": 0.05,
"currentHoldingAmount": 526730.9391050001
},
{
"address": "3ssxaw1nzaLjgsy7BzBYoH1wTGvvAWYz7jRDTizK4Usb",
"initiallyAcquiredPercentage": 1.78,
"initiallyAcquiredAmount": 17727201.88304,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "AQVB8tG12htZuADwN4vGsszoj6joBtkADtvQcSd94dEj",
"initiallyAcquiredPercentage": 1.23,
"initiallyAcquiredAmount": 12283224.297309,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "6fvdqK9pjxXgHmKdM6oTkDsURB29ntTEeAMCEwD948T3",
"initiallyAcquiredPercentage": 1.62,
"initiallyAcquiredAmount": 16133989.649402,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "782sXpDcSNDPVRqBJ2auLAuWdCvuaBGTnr8wKNxBUMQi",
"initiallyAcquiredPercentage": 1.55,
"initiallyAcquiredAmount": 15438313.665424,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "2Ysos2B2S6rb9FBNYUB7Yrk54Xv2nNbr8eBHs1sX8M6m",
"initiallyAcquiredPercentage": 0.14,
"initiallyAcquiredAmount": 1420629.28082,
"currentHoldingPercentage": 0.39,
"currentHoldingAmount": 3935361.691171
},
{
"address": "6Gs15JTsWU2JbE39mznEeX6ABq6p8mhjKzrFYsQETNNK",
"initiallyAcquiredPercentage": 0.08,
"initiallyAcquiredAmount": 750157.619513,
"currentHoldingPercentage": 0.02,
"currentHoldingAmount": 171991.619938
},
{
"address": "5JoopuYtouXxVNQy95tgqnSMjqbd9fvUZdmeYiMGfBv1",
"initiallyAcquiredPercentage": 1.62,
"initiallyAcquiredAmount": 16141803.074607,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "76qAYA8NDPWeX7kmhoEECsDKA3ZnCn5SHjFR2rhKrCQB",
"initiallyAcquiredPercentage": 1.53,
"initiallyAcquiredAmount": 15281506.17629,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "9Uw1BEkA1ns7x41s8At2upQ3sVBKpoKtAS6yy2bNWd32",
"initiallyAcquiredPercentage": 0.21,
"initiallyAcquiredAmount": 2138468.17838,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
}
],
"SniperPercentageHolding": 0,
"SniperConfidence": 5,
"BundlerPercentageOnLaunch": 10.8,
"BundlerPercentageHolding": 0.46,
"TotalHolders": 14256,
"DexScreenerPaid": true,
"DevHoldingPercentage": 3.12,
"DevLaunched24Hours": 0,
"mintable": false,
"freezable": false,
"lastAnalyzedSlot": 444586317,
"analysisTimestamp": 1789571506035,
"buy_sell_taxes": {
"has_buy_tax": true,
"has_sell_tax": true,
"has_transfer_tax": true,
"buy_tax_percentage": 3,
"sell_tax_percentage": 3,
"transfer_tax_percentage": 3
},
"pool_fees": {
"pool_address": "BUVzsLLLG7GWoyJVoU31pXiBveazA6GXTavZ9VD3CwS9",
"dex": "raydium",
"pool_type": "CPMM",
"trade_fee_percentage": 0.25,
"creator_fee_percentage": 1,
"total_fee_percentage": 1.25
},
"total_effective_fee_percentage": 4.25
}Get Solana token risk with security indicators
Returns simplified token analysis including bundler detection, sniper detection, top holder distribution, developer activity, token authority status (mintable/freezable), and the fees a trader pays (Token-2022 transfer fee as buy/sell/transfer tax, plus the trade and creator fee of the primary Raydium pool). Optimized for repeat calls.
Chains: Solana (sol) returns the full analysis (TradingLiteAnalysis). EVM chains (eth, base, bsc, arb, robinhood) return the holder distribution and the fee block only (TradingLiteEvmAnalysis): bundler, sniper, developer, mintable/freezable and lastAnalyzedSlot are Solana-only and are omitted.
Security Indicators:
mintable: false= Mint authority renounced (supply is fixed) ✅mintable: true= Token supply can still be increased ⚠️freezable: false= Freeze authority renounced (accounts cannot be frozen) ✅freezable: true= Accounts can be frozen by issuer ⚠️
Performance:
- First call: Full analysis (~2-5 seconds on Solana; on EVM chains typically 2-8 seconds; a whole-request deadline of 25 seconds returns whatever has resolved as a degraded response)
- Cached calls: Fast response (~0.5 seconds)
- Cache TTL: 5 minutes
Fees:
buy_sell_taxes— Token-2022 transfer fee as buy, sell and transfer tax (0-100). It is charged on every transfer, so wallet-to-wallet sends pay it too (has_transfer_tax/transfer_tax_percentage); same rate on all threepool_fees— trade fee and, when enabled, creator fee of the highest-TVL Raydium pool;nullwhen the token has no Raydium pooltotal_effective_fee_percentage— transfer fee (counted once) + trade fee + creator fee
Fees on EVM chains:
buy_sell_taxes— buy and sell tax are measured by simulating a swap; transfer tax by simulating a wallet-to-wallettransfer()from a current holder and comparing the amount received with the amount sent. Each leg is independent:has_buy_tax/has_sell_tax/has_transfer_taxisnullwhen that leg could not be measured (no pair, the simulation reverted, provider unavailable),falsewhen it was measured as 0pool_fees— swap fee of the highest-liquidity pool: read on-chain fromfee()for Uniswap V3-style pools, a protocol constant for V2-style pools (for example Uniswap V2 0.30%, PancakeSwap V2 0.25%).nullwhen the primary pool is on a DEX the fee cannot be read from (Uniswap v4, Algebra forks, dynamic-fee pools).creator_fee_percentageis never set on EVMtotal_effective_fee_percentage— buy tax + pool fee (the cost of a buy). Omitted when either is unknown- A response with a degraded leg (unmeasured tax, a failed holder/metadata or pool lookup, or the request deadline) is cached for 1 minute instead of 5
curl --request GET \
--url https://api.webacy.com/trading-lite/{address} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/trading-lite/{address}"
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.webacy.com/trading-lite/{address}', 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.webacy.com/trading-lite/{address}",
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.webacy.com/trading-lite/{address}"
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.webacy.com/trading-lite/{address}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/trading-lite/{address}")
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{
"CA": "8RVBk8vxLiUHueLUW1f4izFVqN3nWippLhkohKg6EGkS",
"DA": "ExF1h7ahifYf9RPBXZCemXv8UTNPqEN5JFhkj4UgUmhJ",
"Top10Holders": 24.47,
"SniperPercentageOnLaunch": 5.49,
"SniperAddresses": [
{
"address": "7ioEZjdGdciB2jS79Rc8yqrsYanf2Q1YejHjNcQZLkER",
"initiallyAcquiredPercentage": 0.94,
"initiallyAcquiredAmount": 9360093.570587,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 20671.962122
},
{
"address": "7CgG2UJ2WqirVGHKeRhBynQi5a2Tm9M7PtEmadrYepso",
"initiallyAcquiredPercentage": 3.09,
"initiallyAcquiredAmount": 30875616.044737,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "CQxTmAZ9rB33KJybbtt7a16CafeonhfMpysTBBdrcM5L",
"initiallyAcquiredPercentage": 1.46,
"initiallyAcquiredAmount": 14625460.432991,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
}
],
"BundlerAddresses": [
{
"address": "WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh",
"initiallyAcquiredPercentage": 1.8,
"initiallyAcquiredAmount": 17973044.69963098,
"currentHoldingPercentage": 0.05,
"currentHoldingAmount": 526730.9391050001
},
{
"address": "3ssxaw1nzaLjgsy7BzBYoH1wTGvvAWYz7jRDTizK4Usb",
"initiallyAcquiredPercentage": 1.78,
"initiallyAcquiredAmount": 17727201.88304,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "AQVB8tG12htZuADwN4vGsszoj6joBtkADtvQcSd94dEj",
"initiallyAcquiredPercentage": 1.23,
"initiallyAcquiredAmount": 12283224.297309,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "6fvdqK9pjxXgHmKdM6oTkDsURB29ntTEeAMCEwD948T3",
"initiallyAcquiredPercentage": 1.62,
"initiallyAcquiredAmount": 16133989.649402,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "782sXpDcSNDPVRqBJ2auLAuWdCvuaBGTnr8wKNxBUMQi",
"initiallyAcquiredPercentage": 1.55,
"initiallyAcquiredAmount": 15438313.665424,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "2Ysos2B2S6rb9FBNYUB7Yrk54Xv2nNbr8eBHs1sX8M6m",
"initiallyAcquiredPercentage": 0.14,
"initiallyAcquiredAmount": 1420629.28082,
"currentHoldingPercentage": 0.39,
"currentHoldingAmount": 3935361.691171
},
{
"address": "6Gs15JTsWU2JbE39mznEeX6ABq6p8mhjKzrFYsQETNNK",
"initiallyAcquiredPercentage": 0.08,
"initiallyAcquiredAmount": 750157.619513,
"currentHoldingPercentage": 0.02,
"currentHoldingAmount": 171991.619938
},
{
"address": "5JoopuYtouXxVNQy95tgqnSMjqbd9fvUZdmeYiMGfBv1",
"initiallyAcquiredPercentage": 1.62,
"initiallyAcquiredAmount": 16141803.074607,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "76qAYA8NDPWeX7kmhoEECsDKA3ZnCn5SHjFR2rhKrCQB",
"initiallyAcquiredPercentage": 1.53,
"initiallyAcquiredAmount": 15281506.17629,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
},
{
"address": "9Uw1BEkA1ns7x41s8At2upQ3sVBKpoKtAS6yy2bNWd32",
"initiallyAcquiredPercentage": 0.21,
"initiallyAcquiredAmount": 2138468.17838,
"currentHoldingPercentage": 0,
"currentHoldingAmount": 0
}
],
"SniperPercentageHolding": 0,
"SniperConfidence": 5,
"BundlerPercentageOnLaunch": 10.8,
"BundlerPercentageHolding": 0.46,
"TotalHolders": 14256,
"DexScreenerPaid": true,
"DevHoldingPercentage": 3.12,
"DevLaunched24Hours": 0,
"mintable": false,
"freezable": false,
"lastAnalyzedSlot": 444586317,
"analysisTimestamp": 1789571506035,
"buy_sell_taxes": {
"has_buy_tax": true,
"has_sell_tax": true,
"has_transfer_tax": true,
"buy_tax_percentage": 3,
"sell_tax_percentage": 3,
"transfer_tax_percentage": 3
},
"pool_fees": {
"pool_address": "BUVzsLLLG7GWoyJVoU31pXiBveazA6GXTavZ9VD3CwS9",
"dex": "raydium",
"pool_type": "CPMM",
"trade_fee_percentage": 0.25,
"creator_fee_percentage": 1,
"total_fee_percentage": 1.25
},
"total_effective_fee_percentage": 4.25
}Authorizations
Path Parameters
Token mint address (Solana) or ERC-20 contract address (EVM chains)
Query Parameters
Blockchain identifier. sol returns TradingLiteAnalysis; the EVM chains return TradingLiteEvmAnalysis.
sol, eth, base, bsc, arb, robinhood Force refresh cached analysis data
Response
Success
- Option 1
- Option 2
Lightweight trading analysis including sniper and bundler detection for early token activity
Contract address of the token
Deployer address
Percentage held by the top 10 holders at analysis time
Percentage of supply acquired by snipers at launch
Addresses flagged as potential snipers
Show child attributes
Show child attributes
Addresses flagged as coordinated buyers/bundlers
Show child attributes
Show child attributes
Current percentage of supply held by snipers
Confidence score (0-100) for sniper detection
Percentage of supply acquired by bundlers at launch
Current percentage of supply held by bundlers
Total number of holders at analysis time
Whether the project has paid for DexScreener promotion
Current holding percentage of the deployer/developer
Number of tokens launched by the deployer in the last 24 hours
Whether the token can still be minted. True if mint authority is not renounced. False indicates the token supply is permanently fixed.
Whether token accounts can be frozen. True if freeze authority is not renounced. False indicates accounts cannot be frozen by the issuer.
Token-level transfer tax from the Token-2022 transfer_fee_config extension, charged on every transfer: buys, sells and plain wallet-to-wallet transfers all pay the same rate. details.buy_sell_taxes shape from GET /addresses/{address} plus has_transfer_tax / transfer_tax_percentage. Percentages are 0-100.
Show child attributes
Show child attributes
Fees of the primary Raydium pool. null when Raydium lists no pool for the token (for example while it is still on a pump.fun bonding curve) or when the lookup failed.
- Option 1
- Option 2
Show child attributes
Show child attributes
Last analyzed slot number from the bundling/sniper detection. Used by real-time monitoring to know where to start listening from.
Timestamp (milliseconds since epoch) when this analysis was performed. Used for cache invalidation and freshness checks.
What a trader pays in total: transfer fee + pool trade fee + creator fee, as a percentage. Omitted when pool_fees is null.
4.25
