🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

OpenDEX Solana Token API

by @solpenguin

Retrieve Solana token data, community content, market sentiment, watchlists, and perform token-related actions via OpenDEX API endpoints.

Versionv1.0.0
Downloads522
TERMINAL
clawhub install opendex

πŸ“– About This Skill

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": "", "name": "OpenClaw" }

    Response (201):

    {
      "success": true,
      "message": "API key created successfully",
      "data": {
        "apiKey": "abc123...full64hexchars",
        "keyPrefix": "abc123",
        "owner": "",
        "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/
    

    Key Management

    | Endpoint | Method | Description | |----------|--------|-------------| | /api/v1/keys/info | GET | Get your key's usage stats (requires X-API-Key) | | /api/v1/keys/status/:wallet | GET | Check if a wallet has a key (public) | | /api/v1/keys/revoke | DELETE | Revoke 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 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=
    
    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": "", "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": "", "type": "twitter", "contentUrl": "https://twitter.com/example", "walletAddress": "", "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": "", "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=
    

    #### Bulk Check Votes

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

    { "submissionIds": [1, 2, 3], "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": "", "mint": "" }

    Max 100 tokens per wallet.

    #### Remove from Watchlist

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

    { "wallet": "", "mint": "" }

    #### Check if Token in Watchlist

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

    { "wallet": "", "mint": "" }


    Health & Status (No Auth)

    | Endpoint | Description | |----------|-------------| | GET /health | Basic health check | | GET /health/detailed | Full dependency status (DB, RPC, cache, APIs) | | GET /health/ready | Readiness probe | | GET /health/live | Liveness probe | | GET /api/stats | Cache and database statistics | | GET /api/announcements/active | Active 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"
    }
    

    | Code | Meaning | |------|---------| | 400 | Bad request (invalid parameters) | | 401 | Missing or invalid API key | | 403 | Access denied (revoked key, insufficient holder balance) | | 404 | Resource not found | | 409 | Conflict (duplicate submission, wallet already has key) | | 429 | Rate limit exceeded (check Retry-After header) | | 503 | Service 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 :

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