Solana Tracker Public API

Public API for Solana Tracker data.

Token and pool data for all Pumpfun, Raydium, Meteora, Raydium CPMM, Moonshot and Orca tokens. Including Market Cap, Price, Liquidity, Chart data, price changes, stats, wallet trades and total value, last trades and more

You can now buy and manage your package directly on Solana Tracker. Previously we used to sell access to our API using: https://nadles.com (opens in a new tab)

Websocket Documentation

Authentication

Solana Tracker: Include your API Key (available after subscription) in the "x-api-key" header with each API call. Base url: https://data.solanatracker.io (opens in a new tab)

Nadles: Include your access key (available after subscription) in the "X-Billing-Token" header with each API call. Base url: https://solana.p.nadles.com (opens in a new tab)

Subscription Plans and Limits

PlanPriceRequests/MonthRate LimitAdditional Features
Free (opens in a new tab)Free10,0001/second-
Trial (opens in a new tab)Free500None-
Starter (opens in a new tab)€14.99/month50,000None-
Advanced (opens in a new tab)€50/month200,000None-
Pro (opens in a new tab)€200/month1,000,000None-
Premium (opens in a new tab)€397/month10,000,000NoneWebsocket access
Business (opens in a new tab)€599/month25,000,000NoneWebsocket access
Enterprise (opens in a new tab)€1499/month100,000,000NoneWebsocket access
Enterprise PlusCustomUnlimitedNoneCustom package

Note: For Websocket access (Premium and above), email [email protected] to get access to this endpoint.

Endpoints

Token Information

GET /tokens/{tokenAddress}

Retrieve all information for a specific token.

Response:

{
  "token": {
    "name": "Token Name",
    "symbol": "SYMBOL",
    "mint": "TokenAddress",
    "uri": "URI",
    "decimals": 9,
    "image": "ImageURL",
    "description": "Token description",
    "extensions": {
      "twitter": "TwitterURL",
      "telegram": "TelegramURL"
    },
    "tags": ["Tag1", "Tag2"],
    "creator": {
      "name": "Creator Name",
      "site": "CreatorWebsite"
    },
    "hasFileMetaData": true
  },
  "pools": [...],
  "events": {...},
  "risk": {...},
  "buys": 0,
  "sells": 0,
  "txns": 0
}

GET /tokens/{tokenAddress}/holders

Get the top 100 holders for a specific token.

Response:

{
  "total": 1976,
  "accounts": [
    {
      "wallet": "WalletAddress",
      "amount": 29762511.787972,
      "value": {
        "quote": 731.5710758766651,
        "usd": 106189.02499701138
      },
      "percentage": 2.9762545119795907
    },
    ...
  ]
}

Do you want to receive all token holders? Use this example using your RPC.

const tokenAccounts = await connection.getParsedProgramAccounts(
  new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
  {
    filters: [{ dataSize: 165 }, { memcmp: { offset: 0, bytes: mintAddress } }],
  }
);
 
const accounts = tokenAccounts.map((account) => ({
  wallet: account.account.data.parsed.info.owner,
  amount: account.account.data.parsed.info.tokenAmount.uiAmount,
}));

GET /tokens/{tokenAddress}/ath

Retrieve the all time high price of a token (since data api started recording)

Response:

{
  "highest_price": 0.002399892080590551
}

GET /tokens/latest

Retrieve the latest 100 tokens.

Response:

[
  {
    "token": {
      "name": "Jupiter Perps LP",
      "symbol": "JLP",
      "mint": "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4",
      "uri": "https://static.jup.ag/jlp/metadata.json",
      "decimals": 6,
      "image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fstatic.jup.ag%2Fjlp%2Ficon.png",
      "description": "JLP is the liquidity provider token for Jupiter Labs Perpetual.",
      "hasFileMetaData": true
    },
    "pools": [...],
    "events": {...},
    "risk": {...}
  },
  ...
]

GET /tokens/trending

Get the top 100 trending tokens based on transaction volume in the past hour.

Response:

[
  {
    "token": {
      "name": "Jupiter Perps LP",
      "symbol": "JLP",
      "mint": "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4",
      "uri": "https://static.jup.ag/jlp/metadata.json",
      "decimals": 6,
      "image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fstatic.jup.ag%2Fjlp%2Ficon.png",
      "description": "JLP is the liquidity provider token for Jupiter Labs Perpetual.",
      "hasFileMetaData": true
    },
    "pools": [...],
    "events": {...},
    "risk": {...}
  },
  ...
]

GET /tokens/volume

Retrieve the top 100 tokens sorted by highest volume.

Response:

[
  {
    "token": {
      "name": "Jupiter Perps LP",
      "symbol": "JLP",
      "mint": "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4",
      "uri": "https://static.jup.ag/jlp/metadata.json",
      "decimals": 6,
      "image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fstatic.jup.ag%2Fjlp%2Ficon.png",
      "description": "JLP is the liquidity provider token for Jupiter Labs Perpetual.",
      "hasFileMetaData": true
    },
    "pools": [...],
    "events": {...},
    "risk": {...}
  },
  ...
]

GET /tokens/multi/all

Get an overview of latest, graduating, and graduated tokens (Pumpvision / Photon Memescope style).

Response:

{
  "latest": [...],
  "graduating": [...],
  "graduated": [...]
}

Price Information

GET /price

Get price information for a single token.

Query Parameters:

  • token (required): The token address

Response:

{
  "price": 1.23,
  "liquidity": 1000000,
  "marketCap": 50000000,
  "lastUpdated": 1628097600000
}

POST /price

Similar to GET /price, but accepts token address in the request body.

Request Body:

{
  "token": "So11111111111111111111111111111111111111112"
}

Response: Same as GET /price

GET /price/multi

Get price information for multiple tokens (up to 100).

Query Parameters:

  • tokens (required): Comma-separated list of token addresses

Response:

{
  "So11111111111111111111111111111111111111112": {
    "price": 1.23,
    "liquidity": 1000000,
    "marketCap": 50000000,
    "lastUpdated": 1628097600000
  },
  "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R": {
    "price": 0.45,
    "liquidity": 500000,
    "marketCap": 25000000,
    "lastUpdated": 1628097600000
  }
}

POST /price/multi

Similar to GET /price/multi, but accepts an array of token addresses in the request body.

Request Body:

{
  "tokens": [
    "So11111111111111111111111111111111111111112",
    "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"
  ]
}

Response: Same as GET /price/multi

Wallet Information

GET /wallet/{owner}

Get all tokens in a wallet with current value in USD.

Response:

{
  "tokens": [
    {
      "token": {
        "name": "Wrapped SOL",
        "symbol": "SOL",
        "mint": "So11111111111111111111111111111111111111112",
        "uri": "",
        "decimals": 9,
        "image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fcoin-images.coingecko.com%2Fcoins%2Fimages%2F21629%2Flarge%2Fsolana.jpg%3F1696520989",
        "hasFileMetaData": true
      },
      "pools": [...],
      "events": {...},
      "risk": {...},
      "balance": 0.775167121,
      "value": 112.31297732160377
    }
  ],
  "total": 228.41656975961473,
  "totalSol": 1.5750283296373857,
  "timestamp": "2024-08-15 12:49:06"
}

GET /wallet/{owner}/trades

Get the latest trades of a wallet.

Query Parameters:

  • cursor (optional): Cursor for pagination

Response:

{
  "trades": [
    {
      "tx": "Transaction Signature here",
      "from": {
        "address": "So11111111111111111111111111111111111111112",
        "amount": 0.00009999999747378752,
        "token": {
          "name": "Wrapped SOL",
          "symbol": "SOL",
          "image": "https://image.solanatracker.io/proxy?url=https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png",
          "decimals": 9
        }
      },
      "to": {
        "address": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R",
        "amount": 0.00815899996086955,
        "token": {
          "name": "Raydium",
          "symbol": "RAY",
          "image": "https://image.solanatracker.io/proxy?url=https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R/logo.png",
          "decimals": 6
        }
      },
      "price": {
        "usd": 1.7136074522202307,
        "sol": ""
      },
      "volume": {
        "usd": 0.014018403988365319,
        "sol": 0.00009999999747378752
      },
      "wallet": "WALLET_ADDRESS",
      "program": "raydium",
      "time": 1722759119596
    }
  ],
  "nextCursor": 1722759119596,
  "hasNextPage": true
}

Trade Information

GET /trades/{tokenAddress}

Get the latest trades for a token across all pools.

GET /trades/{tokenAddress}/{poolAddress}

Get the latest trades for a specific token and pool pair.

GET /trades/{tokenAddress}/{poolAddress}/{owner}

Get the latest trades for a specific token, pool, and wallet address.

GET /trades/{tokenAddress}/by-wallet/{owner}

Get the latest trades for a specific token and wallet address.

Query Parameters for all trade endpoints:

  • cursor (optional): Cursor for pagination
  • showMeta (optional): Set to 'true' to add metadata for from and to tokens
  • parseJupiter (optional): Set to 'true' to combine all transfers within a Jupiter swap into a single transaction. By default, each transfer is shown separately.
  • hideArb (optional): Set to 'true' to hide arbitrage or other transactions that don't have both the 'from' and 'to' token addresses matching the token parameter.

Response for all trade endpoints:

{
  "trades": [
    {
      "tx": "Transaction Signature",
      "amount": 1000,
      "priceUsd": 0.1,
      "volume": 100,
      "type": "buy",
      "wallet": "WalletAddress",
      "time": 1723726185254,
      "program": "jupiter"
    }
  ],
  "nextCursor": 1723726185254,
  "hasNextPage": true
}

Chart Data

GET /chart/{token}

GET /chart/{token}/{pool}

Get OLCVH (Open, Low, Close, Volume, High) data for charts.

Available Intervals

ShorthandInterval
1s1 SECOND
5s5 SECOND
15s15 SECOND
1m1 MINUTE
3m3 MINUTE
5m5 MINUTE
15m15 MINUTE
30m30 MINUTE
1h1 HOUR
2h2 HOUR
4h4 HOUR
6h6 HOUR
8h8 HOUR
12h12 HOUR
1d1 DAY
3d3 DAY
1w1 WEEK
1mn1 MONTH

Note: The shorthand "1mn" is used for 1 month to avoid confusion with "1m" (1 minute).

Query Parameters:

  • type (optional): Time interval (e.g., "1s", "1m", "1h", "1d")
  • time_from (optional): Start time (Unix timestamp in seconds)
  • time_to (optional): End time (Unix timestamp in seconds)

Response:

{
  "oclhv": [
    {
      "open": 0.011223689525154462,
      "close": 0.011223689525154462,
      "low": 0.011223689525154462,
      "high": 0.011223689525154462,
      "volume": 683.184501136,
      "time": 1722514489
    },
    {
      "open": 0.011223689525154462,
      "close": 0.011257053686384555,
      "low": 0.011257053686384555,
      "high": 0.011257053686384555,
      "volume": 12788.70421942799,
      "time": 1722514771
    }
  ]
}

Profit and Loss (PnL) Data

GET /pnl/{wallet}

Get Profit and Loss data for all positions of a wallet.

Response:

{
  "tokens": {
    "85tgA28eJCUwpTGkREdocDtkHCgZZySyrdv35w6opump": {
      "holding": 0,
      "held": 24608227.322611,
      "sold": 24608227.322611,
      "realized": 312.48840947,
      "unrealized": 0,
      "total": 312.48840947,
      "total_invested": 153.64456248
    },
    "Fwjk3SQ4zpg68x9mQLKJm5W6DkisjFGn76jHvi7vb4wE": {
      "holding": 0,
      "held": 48082588.866329,
      "sold": 48082588.866329,
      "realized": 281.90913641,
      "unrealized": 0,
      "total": 281.90913641,
      "total_invested": 293.27333422
    }
  },
  "summary": {
    "realized": 2418.42956164,
    "unrealized": -634.74038817,
    "total": 1783.68917347,
    "totalInvested": 103020.70911717,
    "totalWins": 222,
    "totalLosses": 295,
    "winPercentage": 34.8,
    "lossPercentage": 46.24
  }
}

GET /first-buyers/{token}

Retrieve the first 100 buyers of a token (since API started recording data) with Profit and Loss data for each wallet.

Response:

[
  {
    "wallet": "pumpZuAcJZwUwNmP84KZDNUMVYvCYdwSiUhYjyAhm7v",
    "first_buy_time": 1721518521841,
    "last_transaction_time": 1721519113069,
    "held": 289393486.26179785,
    "sold": 289393486.26179785,
    "holding": 0,
    "realized": 997.3821375,
    "unrealized": 0,
    "total": 997.3821375,
    "total_invested": 1425.80360732
  },
  {
    "wallet": "9345npSvXdmiD7SszgLuWvPAJ8edUR1F4bnNS5dUiFmU",
    "first_buy_time": 1721518521860,
    "last_transaction_time": 1721518582164,
    "held": 138858105.00812,
    "sold": 138858105.00812,
    "holding": 0,
    "realized": 984.56781931,
    "unrealized": 0,
    "total": 984.56781931,
    "total_invested": 967.85402712
  }
]

GET /pnl/{wallet}/{token}

Get Profit and Loss data for a specific token in a wallet.

Response:

{
  "holding": 0,
  "held": 24608227.322611,
  "sold": 24608227.322611,
  "realized": 312.48840947,
  "unrealized": 0,
  "total": 312.48840947,
  "total_invested": 153.64456248
}

GET /top-traders/{token}

Get top 100 traders by PnL for a token.

Response:

[
  {
    "wallet": "234JMcei3WcQWaMjyxVEcHZsGvz1m8A8hTtEnCJCYWRo",
    "held": 50819020.99990307,
    "sold": 17890408.81074299,
    "holding": 32928612.18916008,
    "realized": 1692.12014818,
    "unrealized": 866.69739102,
    "total": 2558.81753919,
    "total_invested": 1651.25276018
  },
  {
    "wallet": "BUyvzQp1v2kJ6sKR6qunhdSxypDUTEZS8dsTpQYkw6wQ",
    "held": 7131355.76925302,
    "sold": 7131355.76925302,
    "holding": 0,
    "realized": 761.7829419,
    "unrealized": 0,
    "total": 761.7829419,
    "total_invested": 343.2357682
  }
]

Other Endpoints

GET /stats/{token}/{pool}

Get detailed stats for a token-pool pair over various time intervals.

Response:

{
  "15m": {
    "buyers": 2,
    "sellers": 1,
    "volume": {
      "buys": 89.79106344165679,
      "sells": 30.552815246574315,
      "total": 120.34387868823111
    },
    "transactions": 3,
    "buys": 2,
    "sells": 1,
    "wallets": 3,
    "price": 0.0071557418245051675,
    "priceChangePercentage": -0.11577995717539138
  },
  "30m": {
    "buyers": 2,
    "sellers": 2,
    "volume": {
      "buys": 89.79106344165679,
      "sells": 32.13102111946917,
      "total": 121.92208456112596
    },
    "transactions": 4,
    "buys": 2,
    "sells": 2,
    "wallets": 4,
    "price": 0.0071557418245051675,
    "priceChangePercentage": 1.2607513942067863
  },
  "1h": {
    "buyers": 6,
    "sellers": 3,
    "volume": {
      "buys": 765.9732191952625,
      "sells": 57.01803996753757,
      "total": 822.9912591628001
    },
    "transactions": 11,
    "buys": 8,
    "sells": 3,
    "wallets": 9,
    "price": 0.0071557418245051675,
    "priceChangePercentage": 1.9338808375656376
  },
  "24h": {
    "buyers": 120,
    "sellers": 136,
    "volume": {
      "buys": 68097.48716874808,
      "sells": 18066013.49624886,
      "total": 18134110.983417585
    },
    "transactions": 1003,
    "buys": 512,
    "sells": 491,
    "wallets": 180,
    "price": 0.007676764946610686,
    "priceChangePercentage": -8.699677660415931
  }
}

GET /stats/{token}

Get detailed stats for a token over various time intervals.

Response:

{
  "15m": {
    "buyers": 2,
    "sellers": 1,
    "volume": {
      "buys": 89.79106344165679,
      "sells": 30.552815246574315,
      "total": 120.34387868823111
    },
    "transactions": 3,
    "buys": 2,
    "sells": 1,
    "wallets": 3,
    "price": 0.0071557418245051675,
    "priceChangePercentage": -0.11577995717539138
  },
  "30m": {
    "buyers": 2,
    "sellers": 2,
    "volume": {
      "buys": 89.79106344165679,
      "sells": 32.13102111946917,
      "total": 121.92208456112596
    },
    "transactions": 4,
    "buys": 2,
    "sells": 2,
    "wallets": 4,
    "price": 0.0071557418245051675,
    "priceChangePercentage": 1.2607513942067863
  },
  "1h": {
    "buyers": 6,
    "sellers": 3,
    "volume": {
      "buys": 765.9732191952625,
      "sells": 57.01803996753757,
      "total": 822.9912591628001
    },
    "transactions": 11,
    "buys": 8,
    "sells": 3,
    "wallets": 9,
    "price": 0.0071557418245051675,
    "priceChangePercentage": 1.9338808375656376
  },
  "24h": {
    "buyers": 120,
    "sellers": 136,
    "volume": {
      "buys": 68097.48716874808,
      "sells": 18066013.49624886,
      "total": 18134110.983417585
    },
    "transactions": 1003,
    "buys": 512,
    "sells": 491,
    "wallets": 180,
    "price": 0.007676764946610686,
    "priceChangePercentage": -8.699677660415931
  }
}

Pagination

All trade endpoints use cursor-based pagination. Use the nextCursor value from the response as the cursor parameter in subsequent requests until hasNextPage is false.

Example usage:

GET /trades/{tokenAddress}
GET /trades/{tokenAddress}?cursor=1723726185254

The cursor is based on the time field of the trades.