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

Trending Tokens sorted by 24h trading volume (default view)
New Recently added tokens, newest first
Gainers Tokens with the highest positive 24h price change
Losers Tokens with the largest negative 24h price change
Most Viewed Tokens with the most page views on OpenDex
Watchlist Your saved tokens (requires wallet connection)

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

Line (Area) Smooth area chart showing price trend with green/red coloring based on direction
Candlestick OHLC candles with green (up) and red (down) coloring
Price / Market Cap Toggle between raw token price and market cap (price × circulating supply)

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.

Vol Volume histogram overlay with green/red bars based on candle direction (enabled by default)
SMA Simple Moving Averages with 7-period (yellow) and 25-period (blue) lines
EMA Exponential Moving Averages with 7-period (yellow, dashed) and 25-period (blue, dashed) lines
BB Bollinger Bands (20-period, 2 standard deviations) with upper, middle, and lower bands in purple
Log Logarithmic price scale — useful for tokens with large price ranges or exponential growth

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:

Trendline Click two points on the chart to draw a straight line between them. A preview dot and dashed line follow your cursor after the first click.
Fibonacci Retracement Click a high and low point to draw 7 standard retracement levels (0%, 23.6%, 38.2%, 50%, 61.8%, 78.6%, 100%) with color-coded labels.
Clear Remove all drawings from the chart. Drawings also clear automatically when switching timeframe, chart type, or metric.

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):

Banner Image URL to an image (1500x500px recommended). Hosted on Imgur or similar.
Twitter / X Official Twitter/X account URL (must be twitter.com or x.com)
Telegram Community group link (must be t.me)
Discord Server invite link (must be discord.gg or discord.com)
TikTok Official TikTok profile (must be tiktok.com)
Website Official website URL (https required)

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:

0.1% (minimum) 1x weight
0.3%+ 1.5x weight
0.75%+ 2x weight
1.5%+ 2.5x weight
3%+ (maximum) 3x weight

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:

<$50k market cap: +10 weighted score
$50k – $100k market cap: +15 weighted score
>$100k market cap: +25 weighted score
–10 weighted score = Auto-Reject

Review Periods

After submission, content enters a mandatory review period before it can be approved:

First submission for a token 5 minute review period (helps new tokens get content quickly)
Subsequent submissions 1 hour review period (gives the community time to evaluate changes)

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

Limit Maximum 100 tokens per wallet
Persistence Server-side storage linked to your wallet address
Access Use the "Watchlist" filter tab on the home page to view only your saved tokens
Batch Loading Watchlist tokens are fetched in a single batch API request for speed

Supported Wallets

Connect any of these Solana wallets to use community features

Phantom Most popular Solana wallet — auto-detected if installed
Solflare Feature-rich Solana wallet with hardware wallet support
Backpack xNFT-compatible wallet by Coral
Coinbase Wallet Multi-chain wallet by Coinbase
Trust Wallet Multi-chain mobile wallet
Brave Wallet Built-in wallet in the Brave browser
Exodus Multi-asset desktop and mobile wallet

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

UI Bug Visual glitches, layout issues, or broken styling
Data Error Incorrect prices, missing tokens, or wrong statistics
Broken Link Links that don't work or point to the wrong page
Performance Slow loading, lag, or unresponsive UI
Feature Request Suggestions for new features or improvements
Other Anything else that doesn't fit the above 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:

/alert <CA> above <value> Alert when market cap rises above the target
/alert <CA> below <value> Alert when market cap drops below the target
/alert <CA> change <percent> Alert when market cap changes by the given percentage (up or down)
/alerts List your active alerts
/removealert <id> Remove an alert by its ID

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

/start Welcome message
/help List all available commands
/stats Bot uptime and alert statistics

API Reference

All public endpoints. Base URL: https://opendex-api-dy30.onrender.com

Token Endpoints

GET /api/tokens

List tokens with filtering, sorting, and pagination

Query Parameters
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
GET /api/tokens/:mint

Get detailed token information including price, volume, market cap, holders, supply, liquidity pools, and community submissions

GET /api/tokens/:mint/price

Lightweight price endpoint — returns current price and 24h/7d change

GET /api/tokens/:mint/chart

Price chart data from GeckoTerminal

Query Parameters
interval   string   5m | 15m | 1h | 4h | 1d | 1w
GET /api/tokens/:mint/ohlcv

OHLCV (Open, High, Low, Close, Volume) candle data with timestamps

Query Parameters
interval   string   5m | 15m | 1h | 4h | 1d | 1w
GET /api/tokens/search

Search tokens by name, symbol, or mint address

Query Parameters
q   string   Search query (minimum 1 character)
POST /api/tokens/batch

Batch fetch multiple tokens in a single request (used by watchlist)

Request Body
{ "mints": ["mint1", "mint2", ...] }
GET /api/tokens/:mint/holder/:wallet

Check token holder balance and ownership percentage

Response
{
  "wallet": "...",
  "mint": "...",
  "balance": 100.5,
  "holdsToken": true,
  "percentageHeld": 0.5,
  "circulatingSupply": 20000
}
POST /api/tokens/:mint/view

Record a page view for a token (fire-and-forget)

GET /api/tokens/:mint/submissions

Get all submissions (banners & social links) for a token. Cached for 30 seconds.

GET /api/tokens/:mint/pools

Get liquidity pools for a token with DEX info, liquidity amounts, and reserves

Submission Endpoints

POST /api/submissions

Create a new submission (requires holder verification)

Request Body
{
  "tokenMint": "...",
  "submissionType": "banner | twitter | telegram | discord | tiktok | website",
  "contentUrl": "https://...",
  "submitterWallet": "..." (optional)
}
POST /api/submissions/batch

Create multiple submissions in one request (single signature)

Request Body
{
  "submissions": [
    { "tokenMint": "...", "submissionType": "...", "contentUrl": "..." }
  ],
  "submitterWallet": "..."
}
GET /api/submissions/token/:mint

Get all submissions for a token, filterable by type and status

Query Parameters
type     string   banner | social | all
status   string   pending | approved | rejected | all
GET /api/submissions/wallet/:wallet

Get all submissions from a specific wallet

Voting Endpoints

POST /api/votes

Cast a vote on a submission (requires holder verification)

Request Body
{
  "submissionId": 123,
  "voteType": "up | down",
  "voterWallet": "..."
}
Response
{
  "action": "created | updated | removed",
  "voteType": "up",
  "voteWeight": 1.5,
  "tally": {
    "upvotes": 10,
    "downvotes": 2,
    "score": 8,
    "weightedScore": 12.5
  }
}
POST /api/votes/batch

Cast multiple votes in one request

Request Body
{
  "votes": [
    { "submissionId": 123, "voteType": "up" },
    { "submissionId": 124, "voteType": "down" }
  ],
  "voterWallet": "..."
}
POST /api/votes/bulk-check

Check if a wallet has voted on multiple submissions

Request Body
{
  "submissionIds": [123, 124, 125],
  "wallet": "..."
}
Response
{
  "123": { "hasVoted": true, "voteType": "up" },
  "124": { "hasVoted": false }
}
GET /api/votes/requirements

Get voting requirements: minimum balance, approval/rejection thresholds, weight tiers

Watchlist Endpoints

GET /api/watchlist/:wallet

Get a wallet's watchlist (token mints and timestamps)

POST /api/watchlist

Add a token to watchlist (max 100 per wallet)

Request Body
{ "wallet": "...", "tokenMint": "..." }
DELETE /api/watchlist

Remove a token from watchlist

Request Body
{ "wallet": "...", "tokenMint": "..." }
POST /api/watchlist/check-batch

Check which tokens from a list are in the watchlist

Request Body
{ "wallet": "...", "tokenMints": ["mint1", "mint2"] }

Sentiment Endpoints

GET /api/sentiment/:mint

Get bullish/bearish sentiment tally for a token. Add ?wallet=ADDRESS to include your vote.

Response
{
  "tally": { "bullish": 45, "bearish": 15, "score": 30 },
  "userVote": { "sentiment": "bullish" }
}
POST /api/sentiment/:mint

Cast a bullish/bearish vote (no holder verification required)

Request Body
{ "voterWallet": "...", "sentiment": "bullish | bearish" }
POST /api/sentiment/bulk

Get sentiment for multiple tokens (max 100)

Request Body
{ "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.

GET /api/v1/community/:mint

Get top-voted community content (banner + social links) for a token

Example Request
curl -H "X-API-Key: YOUR_KEY" \
  https://opendex-api-dy30.onrender.com/api/v1/community/So111...112
GET /api/v1/community/:mint/all

Get all approved submissions for a token (not just top-voted)

Query Parameters
type   string   Filter: banner | twitter | telegram | discord | website
GET /api/v1/community/batch

Batch fetch community content for up to 20 tokens

Query Parameters
mints   string   Comma-separated token addresses (max 20)

Other Endpoints

GET /api/announcements/active

Get currently active announcements (shown as site banners)

GET /health

Basic health check

GET /health/detailed

Detailed health check with database, cache, and external API status

Rate Limits

Request limits to ensure fair access for everyone

Default 100 requests per minute
Search 30 requests per minute
Voting & Watchlist 30 requests per minute (per IP)
Submissions 10 requests per minute
API Key Registration 10 requests per minute

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

401 Missing or invalid API key (for v1/ endpoints)
403 API key revoked or insufficient permissions
404 Token or resource not found
409 Duplicate submission
429 Rate limit exceeded
503 Service temporarily unavailable

Data Sources & Caching

Where the data comes from and how fresh it is

External Data Sources

Jupiter Token metadata, prices, volumes, and market caps
GeckoTerminal OHLCV price charts and historical candle data
Helius Solana RPC — batch token metadata enrichment
Birdeye Token metadata and pricing fallback
Solana RPC On-chain holder verification and token accounts

Cache Freshness

Data is cached at multiple levels to balance freshness with performance:

Token List 2 minutes (frontend) / 5 minutes (backend)
Prices 5 minutes (frontend) / 1 minute (backend)
Charts 5 minutes at both layers
Submissions 30 seconds (short TTL to reflect voting changes quickly)
Holder Verification 2 minutes (cached to reduce Solana RPC load)
Search Results 2 minutes

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.