Skip to main content
Retrieve information about claimable airdrops for a Solana address, including token details, unlock dates, and claim links.
Cost: 1 credit per call
Solana Only - This endpoint currently supports Solana (SOL) addresses only
Interactive Playground: Test this endpoint in the API Playground. Get your API key at data.octav.fi

Endpoint

GET https://api.octav.fi/v1/airdrop

Parameters

addresses
string
required
Solana wallet address to check for airdrops
addresses=J8fo6fHGTD4egvuFE4RRQaBipfcHy5F5YVCcZmmZG6gR

Example

curl "https://api.octav.fi/v1/airdrop?addresses=J8fo6fHGTD4egvuFE4RRQaBipfcHy5F5YVCcZmmZG6gR" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

Returns an array of portfolio objects containing airdrop data. The structure follows the same format as the Portfolio endpoint, but filtered to show only airdrop positions.

Top-Level Fields

address
string
The Solana wallet address
networth
string
Total value of claimable airdrops in USD
conversionRates
object
Current price conversion rates for major tokens (SOL, ETH, BTC)
lastUpdated
string
Timestamp of last data update (milliseconds since epoch)
assetByProtocols
object
Airdrop positions organized by protocol Each protocol contains an AIRDROP key with:
  • protocolPositions[]: Array of airdrop positions
  • totalValue: Total USD value of airdrops from this protocol
  • unlockAt: Unix timestamp when tokens unlock
chains
object
Chain-level summary (currently Solana only)

Airdrop Asset Fields

Each airdrop asset includes:
balance
string
Amount of tokens claimable
symbol
string
Token symbol (e.g., “sns”)
name
string
Token full name
value
string
USD value of the airdrop
price
string
Current token price in USD
isClaimable
boolean
Whether the airdrop is currently claimable
URL to claim the airdrop
unlockAt
string
Unix timestamp when tokens become available
contract
string
Token contract address
explorerUrl
string
Link to view token on blockchain explorer

Example Response

[
  {
    "address": "J8fo6fHGTD4egvuFE4RRQaBipfcHy5F5YVCcZmmZG6gR",
    "networth": "29.9896511359350402985808",
    "conversionRates": {
      "SOL": "169.19",
      "cbBTC": "115164",
      "ETH": "3654.21"
    },
    "lastUpdated": "1754497718973",
    "assetByProtocols": {
      "sns": {
        "name": "SNS",
        "key": "sns",
        "value": "29.9896511359350402985808",
        "chains": {
          "solana": {
            "protocolPositions": {
              "AIRDROP": {
                "name": "Airdrop",
                "totalValue": "29.9896511359350402985808",
                "unlockAt": "1747137600",
                "protocolPositions": [
                  {
                    "name": "Airdrop",
                    "value": "29.9896511359350402985808",
                    "unlockAt": "1747137600",
                    "assets": [
                      {
                        "balance": "14671.9255",
                        "symbol": "sns",
                        "name": "solana name service",
                        "value": "29.9896511359350402985808",
                        "price": "0.0020440160451970016",
                        "contract": "SNS8DJbHc34nKySHVhLGMUUE72ho6igvJaxtq9T3cX3",
                        "chainKey": "solana",
                        "isClaimable": true,
                        "link": "https://airdrop.sns.id/",
                        "unlockAt": "1747137600",
                        "explorerUrl": "https://solscan.io/token/SNS8DJbHc34nKySHVhLGMUUE72ho6igvJaxtq9T3cX3",
                        "imgSmall": "https://images.octav.fi/tokens/small/SNS8DJbHc34nKySHVhLGMUUE72ho6igvJaxtq9T3cX3_logo.png",
                        "imgLarge": "https://images.octav.fi/tokens/small/SNS8DJbHc34nKySHVhLGMUUE72ho6igvJaxtq9T3cX3_logo.png"
                      }
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    },
    "chains": {
      "solana": {
        "name": "Solana",
        "key": "solana",
        "value": "29.9896511359350402985808"
      }
    }
  }
]

Use Cases

  • Check All Airdrops
  • Filter Claimable
  • Track Value
  • Upcoming Unlocks
Get all claimable airdrops for an address:
async function checkAirdrops(address) {
  const response = await fetch(
    `https://api.octav.fi/v1/airdrop?addresses=${address}`,
    {
      headers: { 'Authorization': `Bearer ${apiKey}` }
    }
  );
  const [data] = await response.json();
  console.log(`Total airdrop value: $${parseFloat(data.networth).toFixed(2)}`);
  // Iterate through all protocols
  Object.values(data.assetByProtocols).forEach(protocol => {
    Object.values(protocol.chains).forEach(chain => {
      const airdropData = chain.protocolPositions.AIRDROP;
      if (airdropData) {
        airdropData.protocolPositions.forEach(position => {
          position.assets.forEach(asset => {
            const unlockDate = new Date(parseInt(asset.unlockAt) * 1000);
            console.log(`
              Token: ${asset.name} (${asset.symbol})
              Amount: ${parseFloat(asset.balance).toFixed(4)}
              Value: $${parseFloat(asset.value).toFixed(2)}
              Claimable: ${asset.isClaimable ? 'Yes' : 'No'}
              Unlock Date: ${unlockDate.toLocaleDateString()}
              Claim Link: ${asset.link}
            `);
          });
        });
      }
    });
  });
}

Best Practices

Airdrop eligibility can change frequently:
  • Check daily for active addresses
  • Set up alerts for new airdrops
  • Monitor unlock dates for upcoming claims
Not all addresses will have airdrops:
const [data] = await response.json();

if (!data.assetByProtocols || Object.keys(data.assetByProtocols).length === 0) {
  console.log('No airdrops found for this address');
  return;
}
Monitor unlock timestamps:
const unlockDate = new Date(parseInt(asset.unlockAt) * 1000);
const isUnlocked = unlockDate <= new Date();
Set reminders for upcoming unlocks to claim promptly

Response Structure Notes

The airdrop endpoint returns data in the same structure as the Portfolio endpoint:
  • Follows the complete portfolio schema
  • Filtered to show only AIRDROP protocol positions
  • Includes all standard fields (chains, assets, protocols)
  • Same nested structure for consistency
Airdrop positions are identified by the AIRDROP key:
const airdropPositions = chain.protocolPositions.AIRDROP;
This key exists within the protocol’s chain data
All time fields use Unix timestamps (seconds since epoch):
  • unlockAt: When tokens become available
  • lastUpdated: When data was last synced (milliseconds) Convert to JavaScript Date:
const date = new Date(parseInt(unlockAt) * 1000);