Documentation Index
Fetch the complete documentation index at: https://docs.sendai.fun/llms.txt
Use this file to discover all available pages before exploring further.
Fetch token data from Jupiter and DexScreener APIs. This implementation enables token lookup by both address and ticker symbol, providing comprehensive token information for Solana tokens.
Core Features
-
Token Data Retrieval
- Address-based lookup
- Ticker symbol lookup
- Multiple data sources
- Comprehensive token info
-
API Integration
- Jupiter API integration
- DexScreener API support
- Error handling
- Data validation
Usage
Get Token by Address
// Using mint address
const tokenData = await getTokenDataByAddress(
new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v")
);
// Returns JupiterTokenData
console.log(tokenData);
Get Token by Ticker
// Using ticker symbol
const tokenData = await getTokenDataByTicker("USDC");
// Returns JupiterTokenData or undefined
console.log(tokenData);
Data Structures
Jupiter Token Data
interface JupiterTokenData {
address: string; // Token mint address
chainId: number; // Solana chain ID
decimals: number; // Token decimals
name: string; // Token name
symbol: string; // Token symbol
logoURI?: string; // Optional logo URL
tags?: string[]; // Optional token tags
extensions?: { // Optional extensions
[key: string]: any;
};
}
Example Prompts
Natural Language Prompts
"Get token data for USDC"
"Look up token info by address"
"Find token details for SOL"
"Get metadata for BONK token"
// Get by ticker
{
"ticker": "USDC"
}
// Direct ticker input
"SOL"
Implementation Details
Address-based Lookup
async function getTokenDataByAddress(
mint: PublicKey
): Promise<JupiterTokenData | undefined> {
const response = await fetch(
`https://tokens.jup.ag/token/${mint}`
);
return response.json();
}
Ticker-based Lookup
async function getTokenAddressFromTicker(
ticker: string
): Promise<string | null> {
// Use DexScreener for address lookup
const response = await fetch(
`https://api.dexscreener.com/latest/dex/search?q=${ticker}`
);
// Filter and sort by FDV
const pairs = data.pairs
.filter(pair => pair.chainId === "solana")
.sort((a, b) => (b.fdv || 0) - (a.fdv || 0));
return pairs[0]?.baseToken.address;
}
Error Handling
try {
const tokenData = await getTokenDataByTicker(ticker);
} catch (error) {
if (error.message.includes("not found")) {
// Handle unknown token
} else if (error.message.includes("API")) {
// Handle API issues
}
}
Best Practices
-
Data Validation
- Validate addresses
- Check ticker format
- Handle missing data
- Verify responses
-
API Management
- Handle rate limits
- Cache responses
- Monitor errors
- Implement retries
-
Response Processing
- Filter results
- Sort by relevance
- Handle duplicates
- Format data
Common Issues
-
Token Lookup
- Unknown tokens
- Invalid addresses
- Missing data
- API timeouts
-
Data Quality
- Outdated information
- Missing metadata
- Incorrect symbols
- Logo URL issues
-
API Issues
- Rate limiting
- Network errors
- Service outages
- Invalid responses
Success Response
{
status: "success",
tokenData: {
address: "token-address",
symbol: "TOKEN",
name: "Token Name",
decimals: 6
// ... other fields
}
}
Error Response
{
status: "error",
message: "Error message",
code: "ERROR_CODE"
}
Tips for Token Resolution
-
Address Resolution
- Validate format
- Check checksum
- Handle case sensitivity
- Verify network
-
Ticker Resolution
- Handle case sensitivity
- Check aliases
- Filter by chain
- Sort by relevance
-
Data Management
- Cache common tokens
- Update periodically
- Log resolutions
- Monitor changes
Common Token Addresses
const COMMON_TOKENS = {
USDC: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
SOL: "So11111111111111111111111111111111111111112",
BONK: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
};
Resources