OpenDEX Solana Token API

# OpenDex API Skill

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "OpenDEX Solana Token API" with this command: npx skills add solpenguin/opendex

OpenDex API Skill

You can interact with the OpenDex API to retrieve Solana token data, community-curated content, market sentiment, and more.

Base URL

https://opendex-api-dy30.onrender.com

Frontend: https://opendex.online

Authentication

Public Endpoints (No API Key Required)

Token data, search, price, chart, sentiment, and watchlist endpoints are open and do not require authentication. They are rate-limited to 100 requests/minute per IP.

Authenticated Endpoints (API Key Required)

Community content endpoints under /api/v1/ require an API key passed via the X-API-Key header.

Rate limits:

  • Standard endpoints: 100 requests/minute
  • Key registration: 10 requests/minute
  • Search: 30 requests/minute

Obtaining an API Key

Register a free API key by sending a POST request with a Solana wallet address:

POST /api/v1/keys/register
Content-Type: application/json

{
  "wallet": "<SOLANA_WALLET_ADDRESS>",
  "name": "OpenClaw"
}

Response (201):

{
  "success": true,
  "message": "API key created successfully",
  "data": {
    "apiKey": "abc123...full64hexchars",
    "keyPrefix": "abc123",
    "owner": "<SOLANA_WALLET_ADDRESS>",
    "name": "OpenClaw",
    "createdAt": "2026-02-26T12:00:00Z"
  }
}

The full API key is only returned once at creation. Store it securely. One key per wallet.

Users can also obtain keys through the web UI at https://opendex.online/api.html by connecting their wallet.

Using the API Key

Include the key in the X-API-Key header on all /api/v1/ requests:

curl -H "X-API-Key: YOUR_API_KEY" \
  https://opendex-api-dy30.onrender.com/api/v1/community/<mint>

Key Management

EndpointMethodDescription
/api/v1/keys/infoGETGet your key's usage stats (requires X-API-Key)
/api/v1/keys/status/:walletGETCheck if a wallet has a key (public)
/api/v1/keys/revokeDELETERevoke your key (requires X-API-Key)

API Endpoints

Token Data (No Auth)

List Tokens

GET /api/tokens?filter=trending&limit=50&offset=0&order=desc

Filters: trending, new, gainers, losers, most_viewed

Response: Array of token objects with mintAddress, name, symbol, price, priceChange24h, volume24h, marketCap, logoUri, views, sentimentScore, sentimentBullish, sentimentBearish.

Search Tokens

GET /api/tokens/search?q=<query>

Query must be 2-100 characters. Rate limit: 30/minute. Returns matching tokens by name, symbol, or address.

Get Token Details

GET /api/tokens/:mint

Returns full token data including price, priceChange24h, volume24h, liquidity, marketCap, fdv, supply, circulatingSupply, holders, decimals, logoUri, and community submissions (banners and socials).

Get Token Price

GET /api/tokens/:mint/price

Returns current price data: price, marketCap, fdv, volume24h, priceChange24h, liquidity.

Get Price Chart

GET /api/tokens/:mint/chart?interval=1h&limit=100

Intervals: 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w

Get OHLCV Data

GET /api/tokens/:mint/ohlcv?interval=1h&limit=100

Returns candlestick data (open, high, low, close, volume).

Get Liquidity Pools

GET /api/tokens/:mint/pools

Batch Get Tokens

POST /api/tokens/batch
Content-Type: application/json

{ "mints": ["mint1", "mint2", ...] }

Max 50 tokens per request.

Check Token Holder

GET /api/tokens/:mint/holder/:wallet

Returns balance, holdsToken, percentageHeld, totalSupply, circulatingSupply.

Record Page View

POST /api/tokens/:mint/view

Get View Count

GET /api/tokens/:mint/views

Community Content (Requires API Key)

Get Community Content for a Token

GET /api/v1/community/:mint

Returns the top-voted banner and social links for a token.

Response:

{
  "success": true,
  "data": {
    "token": "So11111111111111111111111111111111111111112",
    "banner": {
      "url": "https://i.imgur.com/example.png",
      "score": 15,
      "submittedAt": "2026-02-26T12:00:00Z"
    },
    "links": {
      "twitter": { "url": "https://twitter.com/solana", "score": 12 },
      "telegram": null,
      "discord": { "url": "https://discord.gg/solana", "score": 8 },
      "tiktok": null,
      "website": { "url": "https://solana.com", "score": 10 }
    },
    "submissionCount": 4
  }
}

Get All Approved Submissions

GET /api/v1/community/:mint/all?type=banner

Optional type filter: banner, twitter, telegram, discord, tiktok, website

Response:

{
  "success": true,
  "data": {
    "token": "...",
    "count": 3,
    "submissions": [
      {
        "id": 123,
        "type": "banner",
        "url": "https://i.imgur.com/example.png",
        "score": 15,
        "upvotes": 20,
        "downvotes": 5,
        "submittedAt": "2026-02-26T12:00:00Z"
      }
    ]
  }
}

Batch Community Content

GET /api/v1/community/batch?mints=mint1,mint2,mint3

Max 20 tokens per request. Returns a map of mint address to community content (banner URL and link URLs as strings, not objects).


Sentiment (No Auth)

Get Sentiment

GET /api/sentiment/:mint?wallet=<optional_wallet>

Returns bullish/bearish counts and the user's vote if wallet is provided.

Response:

{
  "tally": { "bullish": 245, "bearish": 53, "score": 192 },
  "userVote": "bullish"
}

Cast Sentiment Vote

POST /api/sentiment/:mint
Content-Type: application/json

{ "wallet": "<WALLET>", "sentiment": "bullish" }

Sentiment values: bullish or bearish. No token holder requirement.

Bulk Sentiment

POST /api/sentiment/bulk
Content-Type: application/json

{ "mints": ["mint1", "mint2", ...] }

Max 100 mints. Returns sentiment tallies for each.


Submissions (Signature Required)

Get Submissions for a Token

GET /api/submissions/token/:mint?status=approved&type=banner

Statuses: pending, approved, rejected, all

Create Submission

POST /api/submissions
Content-Type: application/json

{
  "tokenMint": "<MINT>",
  "type": "twitter",
  "contentUrl": "https://twitter.com/example",
  "walletAddress": "<WALLET>",
  "signature": [...],
  "timestamp": 1709012400000
}

Types: banner, twitter, telegram, discord, tiktok, website

Requires Ed25519 wallet signature. Submissions are community-moderated through voting.


Voting (Signature + Holder Required)

Cast Vote

POST /api/votes
Content-Type: application/json

{
  "submissionId": 123,
  "voterWallet": "<WALLET>",
  "voteType": "up",
  "signature": [...],
  "timestamp": 1709012400000
}

Voter must hold the token (minimum 0.1% of supply). Vote weight scales by holdings (1x-3x).

Check Vote Status

GET /api/votes/check?submissionId=123&wallet=<WALLET>

Bulk Check Votes

POST /api/votes/bulk-check
Content-Type: application/json

{ "submissionIds": [1, 2, 3], "wallet": "<WALLET>" }

Max 50. Returns { [submissionId]: { hasVoted, voteType } }.


Watchlist (No Auth)

Get Watchlist

GET /api/watchlist/:wallet

Add to Watchlist

POST /api/watchlist
Content-Type: application/json

{ "wallet": "<WALLET>", "mint": "<MINT>" }

Max 100 tokens per wallet.

Remove from Watchlist

DELETE /api/watchlist
Content-Type: application/json

{ "wallet": "<WALLET>", "mint": "<MINT>" }

Check if Token in Watchlist

POST /api/watchlist/check
Content-Type: application/json

{ "wallet": "<WALLET>", "mint": "<MINT>" }

Health & Status (No Auth)

EndpointDescription
GET /healthBasic health check
GET /health/detailedFull dependency status (DB, RPC, cache, APIs)
GET /health/readyReadiness probe
GET /health/liveLiveness probe
GET /api/statsCache and database statistics
GET /api/announcements/activeActive site announcements

Error Responses

All errors follow this format:

{
  "error": "User-facing message",
  "code": "ERROR_CODE",
  "requestId": "trace-id",
  "timestamp": "2026-02-26T12:00:00Z"
}
CodeMeaning
400Bad request (invalid parameters)
401Missing or invalid API key
403Access denied (revoked key, insufficient holder balance)
404Resource not found
409Conflict (duplicate submission, wallet already has key)
429Rate limit exceeded (check Retry-After header)
503Service temporarily unavailable

Solana Address Format

Valid Solana addresses are base58-encoded, 43-44 characters, using characters 1-9 A-H J-N P-Z a-k m-z (no 0, I, O, l).

External Links

For any token with mint address <MINT>:

  • OpenDex token page: https://opendex.online/token.html?mint=<MINT>
  • Solscan: https://solscan.io/token/<MINT>
  • Jupiter swap: https://jup.ag/swap/SOL-<MINT>
  • Raydium swap: https://raydium.io/swap/?outputMint=<MINT>

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

qwencloud-model-selector

[QwenCloud] Recommend the best Qwen model and parameters. TRIGGER when: choosing between Qwen models, comparing Qwen model pricing, understanding Qwen model...

Registry SourceRecently Updated
General

deployment-manager

You are a deployment manager with expertise in release orchestration, deployment strategies, and production reliability. Use when: release orchestration and...

Registry SourceRecently Updated
General

Hk Stock Morning Report

Generate HK stock market morning report (股市晨報) for bank trading desks. Triggers: "生成晨报", "股市晨报", "今日股市", "港股晨報" 報告結構(5部分): 1. 市場回顧(恒指/科指/國指 + 強弱勢股) 2. 南下資金(總...

Registry SourceRecently Updated
General

Story Long Scan

长篇网文扫榜。分析起点、番茄、晋江等平台排行榜数据,提炼市场趋势与热门题材。 触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」

Registry SourceRecently Updated