Documentation
Complete guide to every feature of the OpenDex platform
Table of Contents
Platform Overview
OpenDex is a free, open-source Solana token explorer with community-driven content
What is OpenDex?
OpenDex aggregates real-time Solana token data from Jupiter, GeckoTerminal, and on-chain sources. Token communities can submit and vote on banners, social links, and other content — no centralized authority decides what gets shown. The entire platform is free with no listing fees, premium tiers, or paid promotions.
Key Features
Real-time prices and charts • Community-submitted banners and social links • Holder-weighted voting system • Watchlist with cross-device sync • Bullish/Bearish sentiment voting • Developer API with free keys • Telegram bot for instant lookups • Fully open source on GitHub
Token Explorer
The home page at opendex.online
Search
Search for any Solana token by name, symbol, or mint address using the search bar. Results update as you type with a minimum of 2 characters.
Filter Tabs
Token Table
Each row shows: rank, token name/symbol with logo, current price, 24h change (color-coded green/red), 24h volume, market cap, view count, community sentiment score, and a watchlist star. Click any column header to sort. Click a row to open the token detail page. Data auto-refreshes with a freshness countdown timer.
Token Detail Page
In-depth view at token.html?mint=ADDRESS
Header
Displays the token logo, name, symbol, mint address with a copy button, Solscan explorer link, Bubblemaps link, Share button (copies page URL to clipboard), watchlist toggle, and current price with 24h change badge. Price auto-refreshes every 5 minutes with a visible countdown.
Price Chart
Interactive chart powered by TradingView Lightweight Charts with GeckoTerminal OHLCV data. Toggle between Price and Market Cap metrics, switch between Line and Candlestick chart types, and choose from six timeframes: 5 minutes, 15 minutes, 1 hour (default), 4 hours, 1 day, and 1 week. Technical analysis indicators are available: Volume histogram, SMA (7/25), EMA (7/25), Bollinger Bands, and a Logarithmic scale toggle. Click the expand button to open a fullscreen modal with drawing tools. Chart stats (Open, High, Low, Close, Volume) are shown below.
Statistics
Market cap, 24h volume, total liquidity, holder count, total supply, circulating supply, and page views.
Liquidity Pools
Lists all available DEX pools (Raydium, Jupiter, Orca, etc.) with token pair and liquidity amount.
Trade
One-click link to trade on Jupiter aggregator with the token pre-selected.
Community Section
Shows the approved banner image (if any) with vote count, and approved social links (Twitter/X, Telegram, Discord, TikTok, Website). A "Contribute" button links to the submit page for this token.
Community Sentiment
Bullish vs Bearish voting bar. Any connected wallet can vote (no holder verification needed for sentiment). Shows total vote counts, percentages, and updates in real time.
Community Submissions
Two tabs — Banners and Social Links — listing all approved submissions sorted by votes. Each submission has up/down vote buttons with weighted scores. Auto-refreshes every 30 seconds.
Charts & Technical Analysis
Interactive charting with indicators and drawing tools
Chart Engine
Charts are powered by TradingView Lightweight Charts with OHLCV data from GeckoTerminal. The page chart supports basic viewing, while the expanded fullscreen modal supports pan/zoom, drawing tools, and all interactive controls.
Chart Types & Metrics
Timeframes
Six intervals available: 5M, 15M, 1H (default), 4H, 1D, and 1W. Both the page chart and modal chart stay in sync.
Technical Indicators
Toggle indicators on/off using the pill buttons. Active indicators persist across timeframe changes.
Expanded Modal
Click the expand button to open the chart in a fullscreen modal. The modal adds interactive pan/zoom with scroll, zoom in/out/reset buttons, and drawing tools. All controls (type, metric, timeframe, indicators) are available in the modal and stay in sync with the page chart.
Drawing Tools (Modal Only)
Drawing tools are available in the expanded modal chart for technical analysis:
Press Escape during drawing mode to cancel without placing. Click a tool button again to toggle it off.
Data Source
Chart data is fetched directly from GeckoTerminal in the browser (not through the backend) to distribute API rate limits across users. If the direct connection fails, it falls back to the backend API automatically.
Community Submissions
How to submit banners and social links for tokens at submit.html
Requirements
You must connect a Solana wallet (Phantom, Solflare, Backpack, Coinbase Wallet, Trust Wallet, Brave Wallet, or Exodus) and hold at least 0.1% of the token's circulating supply. Your balance and share percentage are verified on-chain in real time. The submit page shows your holder status with a green checkmark or red error.
Submission Types
You can submit any combination of the following in a single form (up to 5 fields):
Validation
All URLs are validated for correct format and checked against a blocklist of known phishing domains, URL shorteners, and typosquatting domains. A live preview shows how your submissions will appear on the token page before you submit.
Duplicate Prevention
The same URL cannot be submitted twice for the same token and submission type. The database enforces this atomically, returning a duplicate error if the content already exists.
My Submissions
Below the form, a "My Submissions" section shows all your past submissions grouped by token, with their current status (pending, approved, or rejected), vote counts, and creation date.
Voting & Approval System
Community-driven content moderation for submissions
Who Can Vote
Any wallet holding at least 0.1% of a token's circulating supply can vote on that token's submissions. Holdings are verified on-chain via Solana RPC and cached for 2 minutes.
Vote Weight Tiers
Votes are weighted based on your share of the token supply. Larger holders have more influence, but even minimum holders can participate:
How Voting Works
Click the upvote or downvote button on any submission. Clicking the same button again removes your vote. Votes are queued in the UI and submitted in batches (500ms delay) to allow rapid voting on multiple submissions with a single action.
Auto-Approval Thresholds
Submissions are automatically approved when their weighted score reaches the threshold for the token's market cap tier. This means smaller communities (fewer holders) need fewer votes:
Review Periods
After submission, content enters a mandatory review period before it can be approved:
Community Sentiment
Bullish or Bearish — what does the community think?
Each token detail page has a community sentiment section where any connected wallet can cast a Bullish or Bearish vote. Unlike submission voting, sentiment voting does not require holding the token — simply connecting your wallet is enough.
Sentiment is displayed as a visual bar showing the bullish/bearish split with vote counts and percentages. Clicking the same sentiment again removes your vote. The home page token table also shows a sentiment score column (Bullish minus Bearish count).
Sentiment data is fetched in bulk for the home page table using the batch endpoint, and individually per token on the detail page.
Watchlist
Save tokens for quick access across devices
Click the star icon on any token row or the watchlist button on a token detail page to add it to your watchlist. Your watchlist is stored on the server and synced to your wallet address, so it works across devices.
Details
Supported Wallets
Connect any of these Solana wallets to use community features
When you click "Connect Wallet," a selector modal shows which wallets are installed in your browser. Wallets not detected offer a download link. Connection state is persisted in localStorage and synced across browser tabs via BroadcastChannel.
OG Finder
Find the original token among copycats
The OG Finder tool at ogfinder.html searches PumpFun tokens by name or symbol and sorts results by creation date (oldest first). This helps you find the original token when there are many tokens with similar or identical names.
Results show the token logo, name, symbol, contract address, and creation timestamp. Token logos are enriched from Helius metadata and the OpenDex database.
Bug Reports
Report issues directly from any page
A floating bug report button is available on every page. Click it to open a form where you can describe the issue. No wallet connection is required.
Categories
Reports include the page URL automatically and are sent to the backend for review by the team.
Telegram Bot
Look up tokens and set market cap alerts from Telegram
Token Lookup
Use /token <CA> to look up any Solana token by contract address. The bot returns the token name, price, 24h change, market cap, volume, liquidity, holder count, and community links. If the token has an approved banner, it's shown as an image. In DMs, you can also just paste a contract address directly and the bot will detect it automatically.
Search
Use /search <query> to search tokens by name or symbol. Returns up to 5 results with inline buttons to fetch full details for any result.
Market Cap Alerts
Set one-shot alerts that fire when a token's market cap hits your target:
Alerts are one-shot: they fire once and then deactivate. Maximum 10 active alerts per user. Alerts are checked every 60 seconds using batch API requests.
Group Behavior
In group chats, the bot responds to /token and /search commands only — automatic contract address detection is disabled to avoid spam. The command menu shows a streamlined set of commands in groups.
Other Commands
API Reference
All public endpoints. Base URL: https://opendex-api-dy30.onrender.com
Token Endpoints
/api/tokens
List tokens with filtering, sorting, and pagination
sort string price | volume | mcap | change | views (default: volume)
order string asc | desc (default: desc)
limit number 1-100 (default: 50)
offset number Pagination offset (default: 0)
filter string trending | new | gainers | losers | most_viewed
/api/tokens/:mint
Get detailed token information including price, volume, market cap, holders, supply, liquidity pools, and community submissions
/api/tokens/:mint/price
Lightweight price endpoint — returns current price and 24h/7d change
/api/tokens/:mint/chart
Price chart data from GeckoTerminal
interval string 5m | 15m | 1h | 4h | 1d | 1w
/api/tokens/:mint/ohlcv
OHLCV (Open, High, Low, Close, Volume) candle data with timestamps
interval string 5m | 15m | 1h | 4h | 1d | 1w
/api/tokens/search
Search tokens by name, symbol, or mint address
q string Search query (minimum 1 character)
/api/tokens/batch
Batch fetch multiple tokens in a single request (used by watchlist)
{ "mints": ["mint1", "mint2", ...] }
/api/tokens/:mint/holder/:wallet
Check token holder balance and ownership percentage
{
"wallet": "...",
"mint": "...",
"balance": 100.5,
"holdsToken": true,
"percentageHeld": 0.5,
"circulatingSupply": 20000
}
/api/tokens/:mint/view
Record a page view for a token (fire-and-forget)
/api/tokens/:mint/submissions
Get all submissions (banners & social links) for a token. Cached for 30 seconds.
/api/tokens/:mint/pools
Get liquidity pools for a token with DEX info, liquidity amounts, and reserves
Submission Endpoints
/api/submissions
Create a new submission (requires holder verification)
{
"tokenMint": "...",
"submissionType": "banner | twitter | telegram | discord | tiktok | website",
"contentUrl": "https://...",
"submitterWallet": "..." (optional)
}
/api/submissions/batch
Create multiple submissions in one request (single signature)
{
"submissions": [
{ "tokenMint": "...", "submissionType": "...", "contentUrl": "..." }
],
"submitterWallet": "..."
}
/api/submissions/token/:mint
Get all submissions for a token, filterable by type and status
type string banner | social | all
status string pending | approved | rejected | all
/api/submissions/wallet/:wallet
Get all submissions from a specific wallet
Voting Endpoints
/api/votes
Cast a vote on a submission (requires holder verification)
{
"submissionId": 123,
"voteType": "up | down",
"voterWallet": "..."
}
{
"action": "created | updated | removed",
"voteType": "up",
"voteWeight": 1.5,
"tally": {
"upvotes": 10,
"downvotes": 2,
"score": 8,
"weightedScore": 12.5
}
}
/api/votes/batch
Cast multiple votes in one request
{
"votes": [
{ "submissionId": 123, "voteType": "up" },
{ "submissionId": 124, "voteType": "down" }
],
"voterWallet": "..."
}
/api/votes/bulk-check
Check if a wallet has voted on multiple submissions
{
"submissionIds": [123, 124, 125],
"wallet": "..."
}
{
"123": { "hasVoted": true, "voteType": "up" },
"124": { "hasVoted": false }
}
/api/votes/requirements
Get voting requirements: minimum balance, approval/rejection thresholds, weight tiers
Watchlist Endpoints
/api/watchlist/:wallet
Get a wallet's watchlist (token mints and timestamps)
/api/watchlist
Add a token to watchlist (max 100 per wallet)
{ "wallet": "...", "tokenMint": "..." }
/api/watchlist
Remove a token from watchlist
{ "wallet": "...", "tokenMint": "..." }
/api/watchlist/check-batch
Check which tokens from a list are in the watchlist
{ "wallet": "...", "tokenMints": ["mint1", "mint2"] }
Sentiment Endpoints
/api/sentiment/:mint
Get bullish/bearish sentiment tally for a token. Add ?wallet=ADDRESS to include your vote.
{
"tally": { "bullish": 45, "bearish": 15, "score": 30 },
"userVote": { "sentiment": "bullish" }
}
/api/sentiment/:mint
Cast a bullish/bearish vote (no holder verification required)
{ "voterWallet": "...", "sentiment": "bullish | bearish" }
/api/sentiment/bulk
Get sentiment for multiple tokens (max 100)
{ "mints": ["mint1", "mint2", ...] }
Community API (Key Required)
These endpoints require an API key in the X-API-Key header. Register for a free key on the API page.
/api/v1/community/:mint
Get top-voted community content (banner + social links) for a token
curl -H "X-API-Key: YOUR_KEY" \
https://opendex-api-dy30.onrender.com/api/v1/community/So111...112
/api/v1/community/:mint/all
Get all approved submissions for a token (not just top-voted)
type string Filter: banner | twitter | telegram | discord | website
/api/v1/community/batch
Batch fetch community content for up to 20 tokens
mints string Comma-separated token addresses (max 20)
Other Endpoints
/api/announcements/active
Get currently active announcements (shown as site banners)
/health
Basic health check
/health/detailed
Detailed health check with database, cache, and external API status
Rate Limits
Request limits to ensure fair access for everyone
Rate limit headers (X-RateLimit-Remaining, Retry-After) are included in responses. When limits are exceeded, you'll receive a 429 status code.
Error Codes
Data Sources & Caching
Where the data comes from and how fresh it is
External Data Sources
Cache Freshness
Data is cached at multiple levels to balance freshness with performance:
The frontend uses a stale-while-revalidate pattern: cached data is returned immediately while a background refresh runs in parallel, so you never block on network delays.