Skip to content

Tokens API

Functions for discovering and searching tokens.

Get tokens from Uniswap token lists.

retrieveUniswapTokens(options?: RetrieveUniswapTokensOptions): Promise<Token[]>
ParameterTypeRequiredDescription
chainId?numberNoFilter by chain ID
search?stringNoSearch by name or symbol
limit?numberNoMaximum number of tokens (default: 100)

Promise<Token[]> - Array of tokens.

{
chainId: number;
address: Address;
name: string;
symbol: string;
decimals: number;
logoUrl?: string;
}
import { retrieveUniswapTokens } from "cooperative";
// Get all tokens on Ethereum
const tokens = await retrieveUniswapTokens({
chainId: 1,
limit: 50,
});
// Search for specific tokens
const usdcTokens = await retrieveUniswapTokens({
search: "USDC",
chainId: 1,
});

Get tokens from Blockscout explorers.

retrieveBlockscoutTokens(options?: RetrieveBlockscoutTokensOptions): Promise<Token[]>

Same as RetrieveUniswapTokensOptions.

Promise<Token[]> - Array of tokens.

import { retrieveBlockscoutTokens } from "cooperative";
// Get tokens from Blockscout
const tokens = await retrieveBlockscoutTokens({
chainId: 137, // Polygon
search: "MATIC",
});

Search tokens for selectors with multiple sources.

searchSelectorTokens(params: SearchSelectorTokensParams): Promise<Token[]>
ParameterTypeRequiredDescription
querystringYesSearch query
chainIdnumberYesChain ID
emptyQueryMode?SearchSelectorEmptyQueryModeNoBehavior when query is empty
type SearchSelectorEmptyQueryMode =
| "return-empty" // Return empty array
| "return-popular" // Return popular tokens
| "return-all"; // Return all tokens (not recommended)

Promise<Token[]> - Array of tokens matching search.

import { searchSelectorTokens } from "cooperative";
// Search for tokens in a selector
const tokens = await searchSelectorTokens({
query: "USDC",
chainId: 1,
});
// Get popular tokens when search is empty
const popularTokens = await searchSelectorTokens({
query: "",
chainId: 1,
emptyQueryMode: "return-popular",
});
import { searchSelectorTokens } from 'cooperative';
import { useState, useEffect } from 'react';
function TokenSelector({ chainId, onSelect }) {
const [query, setQuery] = useState('');
const [tokens, setTokens] = useState([]);
const [loading, setLoading] = useState(false);
useEffect(() => {
const searchTokens = async () => {
setLoading(true);
try {
const results = await searchSelectorTokens({
query,
chainId,
emptyQueryMode: query ? 'return-empty' : 'return-popular',
});
setTokens(results);
} catch (error) {
console.error('Failed to search tokens:', error);
} finally {
setLoading(false);
}
};
// Debounce search
const timeoutId = setTimeout(searchTokens, 300);
return () => clearTimeout(timeoutId);
}, [query, chainId]);
return (
<div>
<input
type="text"
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Search tokens..."
/>
{loading ? (
<div>Loading tokens...</div>
) : (
<ul>
{tokens.map((token) => (
<li key={`${token.chainId}-${token.address}`}>
<button onClick={() => onSelect(token)}>
<img src={token.logoUrl} alt={token.symbol} width={24} height={24} />
<span>{token.name} ({token.symbol})</span>
</button>
</li>
))}
</ul>
)}
</div>
);
}