Wallet - First Tx Funded
curl --request POST \
--url https://public-api.birdeye.so/wallet/v2/tx/first-funded \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"wallets": [
"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",
"2fgUSSpZFi8PjyhbrETSeLutJpFsuCfWsk2H6gb3Reye",
"CZY9M9BywshFAFjPw7uLgXw9yGtNL26YypLCJdewiHo"
],
"token_addresses": "So11111111111111111111111111111111111111112"
}
'import requests
url = "https://public-api.birdeye.so/wallet/v2/tx/first-funded"
payload = {
"wallets": ["5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1", "2fgUSSpZFi8PjyhbrETSeLutJpFsuCfWsk2H6gb3Reye", "CZY9M9BywshFAFjPw7uLgXw9yGtNL26YypLCJdewiHo"],
"token_addresses": "So11111111111111111111111111111111111111112"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wallets: [
'5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1',
'2fgUSSpZFi8PjyhbrETSeLutJpFsuCfWsk2H6gb3Reye',
'CZY9M9BywshFAFjPw7uLgXw9yGtNL26YypLCJdewiHo'
],
token_addresses: 'So11111111111111111111111111111111111111112'
})
};
fetch('https://public-api.birdeye.so/wallet/v2/tx/first-funded', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": {
"1jw5fDodwGEGBVqNXsx2eqiLgNmgMDEeXWSbrTreLCM": {
"tx_hash": "8g5kPkNNhbxozv7veVjwHqCdJ6FB4B3zMaXBfHigZKwPprNB3A3WcVBCdEm1rfuG1m3syHEVZHeYfCZfM7BgQ6s",
"block_unix_time": 1717292678,
"block_number": 269344897,
"balance_change": "7182720",
"token_address": "So11111111111111111111111111111111111111111",
"token_decimals": 9
}
}
}{
"success": false,
"message": "Bad request"
}{
"success": false,
"message": "Unauthorized"
}{
"success": false,
"message": "Access Denied"
}{
"success": false,
"message": "Too many requests"
}{
"success": false,
"message": "Internal Server Error"
}Wallet, Networth & PnL
Wallet - First Tx Funded
Retrieve the earliest transaction in which the wallet’s post-transaction balance differs from its pre-transaction balance.
POST
/
wallet
/
v2
/
tx
/
first-funded
Wallet - First Tx Funded
curl --request POST \
--url https://public-api.birdeye.so/wallet/v2/tx/first-funded \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"wallets": [
"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",
"2fgUSSpZFi8PjyhbrETSeLutJpFsuCfWsk2H6gb3Reye",
"CZY9M9BywshFAFjPw7uLgXw9yGtNL26YypLCJdewiHo"
],
"token_addresses": "So11111111111111111111111111111111111111112"
}
'import requests
url = "https://public-api.birdeye.so/wallet/v2/tx/first-funded"
payload = {
"wallets": ["5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1", "2fgUSSpZFi8PjyhbrETSeLutJpFsuCfWsk2H6gb3Reye", "CZY9M9BywshFAFjPw7uLgXw9yGtNL26YypLCJdewiHo"],
"token_addresses": "So11111111111111111111111111111111111111112"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wallets: [
'5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1',
'2fgUSSpZFi8PjyhbrETSeLutJpFsuCfWsk2H6gb3Reye',
'CZY9M9BywshFAFjPw7uLgXw9yGtNL26YypLCJdewiHo'
],
token_addresses: 'So11111111111111111111111111111111111111112'
})
};
fetch('https://public-api.birdeye.so/wallet/v2/tx/first-funded', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": {
"1jw5fDodwGEGBVqNXsx2eqiLgNmgMDEeXWSbrTreLCM": {
"tx_hash": "8g5kPkNNhbxozv7veVjwHqCdJ6FB4B3zMaXBfHigZKwPprNB3A3WcVBCdEm1rfuG1m3syHEVZHeYfCZfM7BgQ6s",
"block_unix_time": 1717292678,
"block_number": 269344897,
"balance_change": "7182720",
"token_address": "So11111111111111111111111111111111111111111",
"token_decimals": 9
}
}
}{
"success": false,
"message": "Bad request"
}{
"success": false,
"message": "Unauthorized"
}{
"success": false,
"message": "Access Denied"
}{
"success": false,
"message": "Too many requests"
}{
"success": false,
"message": "Internal Server Error"
}- Usage Note
- Accessibility
- Chain Supported
Earliest funding transaction for wallets.
- Maximum number of wallets per request is
50. token_addressis optional; pass it when you want the first funding transaction for a specific token instead of the wallet’s earliest funding event overall.- This endpoint helps attribute where a wallet was first funded from.
- Lite
- Starter
- Premium
- Business
- Enterprise
Solana
Compute Unit ⚙️
Compute Unit ⚙️
- Batch CU is calculated as
ceil(40 * wallet_count^0.8).
Use Cases 💡
Use Cases 💡
- Find the earliest funding source for a wallet.
- Trace wallet provenance in fraud, sybil, or attribution investigations.
- Enrich whale, smart-money, or insider wallet research with first-funding context.
How to Use 🛠️
How to Use 🛠️
- Set
x-chain=solana. - Send up to
50wallet addresses in the POST body. - Optionally include
token_addresswhen funding provenance should be scoped to one token.
Best Practices ✅
Best Practices ✅
- Use this endpoint after identifying a wallet cohort worth investigating, not as a first-pass screen.
- Keep wallet batches focused so attribution review remains manageable.
Limitations ⚠️
Limitations ⚠️
- Solana only.
Authorizations
API key for authentication
Headers
Solana network only.
Available options:
solana Body
application/json
Example:
[
"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",
"2fgUSSpZFi8PjyhbrETSeLutJpFsuCfWsk2H6gb3Reye"
]
Token address used to identify the first transaction that funded each wallet with the specified token.
Example:
"So11111111111111111111111111111111111111112"
Was this page helpful?

