Dither API Documentation

Welcome to the Vibe Check API documentation. This API provides comprehensive insights into Solana tokens, including financial metrics, holder data, memeability scores, originality rankings, and more. Designed for developers, this guide will help you integrate and utilize the API effectively. All endpoints are designed for tokens with liquidity pools (They will not work on pumpfun tokens that have not bonded).

Vibecheck endpoints are limited by volume and total marketcap/FDV. It will not return analysis for tokens which have low volume metrics or are over 100m MC.

Base URL

All API endpoints are accessible via the following base URL:

https://api.dith.ai/

Authentication

Note: As of the current implementation, the API does not require external authentication for accessing its endpoints. However, ensure that you adhere to any usage policies and a 60 RPM rate limit.

Endpoints

1. Analyze Token

Endpoint: /analyze
Method: POST
Description: Analyzes a Solana token address to provide a comprehensive report, including holder distribution, financial metrics, and AI-based classifications. This is a full in-depth report and often takes some time to be assembled on the server side. We recommend other endpoints unless you need the full report. Analyze token will only return a valid response if the token has high enough volume for valid signal to noise and a marketcap/FDV under 100m.

Request

Headers:

Content-Type: application/json

Body:

{
  "address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"
}

Response

Success (200 OK):
{
  "message": "Address: <code>E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE</code>\n\n<b>Name: Example Token (EXT)</b>\n<b>Socials:</b> <a href="https://t.me/example">Telegram</a> <a href="https://twitter.com/example">Twitter</a> <a href="https://example.com">Website</a>\n\nšŸ¤–<u>AI Degen (4 hour)</u>šŸ¤–\nšŸ‚ - Bullish: Could run\n\nšŸ“Š<u>Ratings</u>šŸ“Š\nName Originality: 8.5/10\nDescription Originality: 7.3/10\nMemeability: 9.2/10\n\nšŸ¦<u>Financials</u>šŸ¦\nLiquidity: $1.23M\nLatest Marketcap: $4.56M\n24 Hour Volume: $789K\n\nšŸ•°ļø<b><u>Last 30 Minutes</u></b>šŸ•°ļø\nBuys/Sells: 150/120\nPrice Change: +2.5%\n\nšŸ”’<u>Security</u>šŸ”’\nTotal Holders: 350\n<a href="https://rugcheck.xyz/tokens/E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE">Locked LP: $500K šŸ”—</a>\nPercent Locked: 40.65%\nToken Age: 180 days - 5 hours\n\nšŸ§‘ā€šŸ¤ā€šŸ§‘<u>Top 20 Holders</u>šŸ§‘ā€šŸ¤ā€šŸ§‘\n45.0% - Individuals\n    1 - 5.0% \n    2 - 4.5% \n    3 - 4.0% \n{...}\n50 - šŸŒ± New Wallets\n\nšŸ³<u>Whale Map (Top 50 Holders)</u>šŸ³\nLargest SOL Balance: 100 SOL (#1)\nSmallest SOL Balance: < 1 SOL\n\n<a href="https://solscan.io/account/holder_address">šŸ¦ (0 - 10 SOL) 10\nšŸŸ (10 - 100 SOL) 5\nšŸ¬ (100 - 500 SOL) 3\nšŸ¦ˆ (500 - 1000 SOL) 2\nšŸ³ (1000+) 0\nSeer v2.15 S \n<b>Powered by Dither AI</b>\n\n<b>Disclaimer:</b> Seer is an experimental research tool. Seer is not intended as financial advice and any actions taken after consuming seer content is of the sole volition of the action taker."
}

2. Get Token Details

Endpoint: /token-details
Method: POST
Description: Fetches detailed information about a Solana token, including symbol, name, description, authorities, and market cap.

Request

Headers:

Content-Type: application/json

Body:

{
  "address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"
}

Response

Success (200 OK):
{
  "symbol": "EXT",
  "name": "Example Token",
  "description": "This is an example token for demonstration purposes.",
  "mint_enabled": true,
  "freeze_enabled": false,
  "market_cap": 4560000.0
}

3. Get Memeability Score

Endpoint: /memeability
Method: POST
Description: Retrieves the memeability score of a token based on its image URL.

Request

Headers:

Content-Type: application/json

Body:

{
  "address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"
}

Response

Success (200 OK):
{
  "memeability_score": 9.2
}

4. Get Originality Rankings

Endpoint: /originality
Method: POST
Description: Provides originality rankings for the token's name and description based on similarity scores. Note - We are aware of a current limitation on this endpoint. Older tokens may return an 1/10 score despite originality. We are aware and working on this issue.

Request

Headers:

Content-Type: application/json

Body:

{
  "address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"
}

Response

Success (200 OK):
{
  "description_originality_rank": 7.3,
  "name_originality_rank": 8.5
}

5. Get Classification

Endpoint: /classification
Method: POST
Description: Classifies the token address based on AI analysis, providing classification probabilities and the most likely class. Classifications are based on the next 4 hours and are a demonstration of Dither AI technology. They are not intended as financial advice. This endpoint will only work if the token has a requisite volume for proper signal to noise ratio.

Request

Headers:

Content-Type: application/json

Body:

{
  "address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"
}

Response

Success (200 OK):
{
  "classification": "šŸ» - Bearish: could hibernate 0.00%\nšŸ¢ - Slow/limited total movement 0.00%\nšŸ‚ - Bullish: Could run 69.99%\nšŸ¦„ - Unicorn 30.01%",
  "most_likely_class": 2
}

Classification Mapping

The classification results are based on the following categories:

Class Index Description
0 šŸ» - Bearish: could hibernate
1 šŸ¢ - Slow/limited total movement
2 šŸ‚ - Bullish: Could run
3 šŸ¦„ - Unicorn

Example:

curl -X POST https://api.dith.ai/classification \
 -H "Content-Type: application/json" \
 -d '{"address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"}'
{"classification":"šŸ» - Bearish: could hibernate 0.00%\nšŸ¢ - Slow/limited total movement 0.00%\nšŸ‚ - Bullish: Could run 69.99%\nšŸ¦„ - Unicorn 30.01%","most_likely_class":2}

6. Get Recent Tokens

Endpoint: /recent-tokens
Method: GET
Description: Retrieves the most recent token entries from the database, including comprehensive token data such as financial metrics, social links, and holder analysis.

Request

Query Parameters:

{
"limit": 10  // Optional. Number of tokens to retrieve (min: 1, max: 100)
                }

Response

Success (200 OK):
{
"success": true,
"count": 10,
"tokens": [
{
    "mint": "string",
    "name": "string",
    "symbol": "string",
    "description": "string",
    "usd_market_cap": number,
    "twitter": "string",
    "telegram": "string",
    "website": "string",
    "dexscreener_paid": boolean,
    "meta_analysis": {
    "meta_theme_1": "string - First major theme identified from recent tokens",
    "meta_theme_2": "string - Second major theme identified from recent tokens",
    "meta_theme_3": "string - Third major theme identified from recent tokens",
    "meta_match": boolean,
    "meta": "string - The specific theme of the new token"
    },
    "creator_address": "string",
    "creator_tokens_bought": number,
    "creator_tokens_sold": number,
    "total_supply": number,
    "burned_tokens": number,
    "created_timestamp": "string",
    "market_cap": number,
    "reply_count": number,
    "nsfw": boolean,
    "is_currently_live": boolean,
    "current_bonding_timestamp": "string",
    "memeability": number,
    "token_originality": number,
    "image_duplicate": "string",
    "supply_held_by_top_holders": number,
    "new_wallets": number,
    "hours": number,
    "minutes": number,
    "largest_sol_balance": number,
    "smallest_sol_balance": number,
    "shrimp_count": number,
    "fish_count": number,
    "dolphin_count": number,
    "shark_count": number,
    "whale_count": number,
    "image_uri": "string",
    "whale_map": "string",
    "creator_transaction_count": number,
    "creator_funding_signature": "string",
    "creator_associated_tokens": "string",
    "dexscreener_trending_bar_ads": boolean,
    "dexscreener_general_ads": boolean,
    "top_holders_formatted": "string",
    "largest_holder_position": number,
    "formatted_market_cap": "string",
    "formatted_total_supply": "string",
    "formatted_burned_tokens": "string",
    "meta_match": boolean,
    "meta_description": "string",
    "whale_distribution": "string",
    "baby_wallets": number
}
]
}

Example Usage

Below are examples demonstrating how to interact with the API using cURL and Python's requests library.

Using cURL

Example: Analyze Token

curl -X POST https://api.dith.ai/analyze \
 -H "Content-Type: application/json" \
 -d '{"address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"}'

Response:

{
  "message": "Address: <code>E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE</code>\n\n<b>Name: Example Token (EXT)</b>..."
}

Example: Get Token Details

curl -X POST https://api.dith.ai/token-details \
 -H "Content-Type: application/json" \
 -d '{"address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"}'

Response:

{
  "symbol": "EXT",
  "name": "Example Token",
  "description": "This is an example token for demonstration purposes.",
  "mint_enabled": true,
  "freeze_enabled": false,
  "market_cap": 4560000.0
}

Example: Get Memeability Score

curl -X POST https://api.dith.ai/memeability \
 -H "Content-Type: application/json" \
 -d '{"address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"}'

Response:

{
  "memeability_score": 9.2
}

Example: Get Originality Rankings

curl -X POST https://api.dith.ai/originality \
 -H "Content-Type: application/json" \
 -d '{"address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"}'

Response:

{
  "description_originality_rank": 7.3,
  "name_originality_rank": 8.5
}

Example: Get Classification

curl -X POST https://api.dith.ai/classification \
 -H "Content-Type: application/json" \
 -d '{"address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"}'

Response:

{
  "classification": "šŸ» - Bearish: could hibernate 0.00%\nšŸ¢ - Slow/limited total movement 0.00%\nšŸ‚ - Bullish: Could run 69.99%\nšŸ¦„ - Unicorn 30.01%",
  "most_likely_class": 2
}

Using Python (Requests)

Example: Get Memeability Score

import requests

url = "https://api.dith.ai/memeability"
payload = {
    "address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"
}
headers = {
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

if response.status_code == 200:
    data = response.json()
    print(f"Memeability Score: {data['memeability_score']}")
else:
    print(f"Error: {response.json()['error']}")

Output:

Memeability Score: 9.2

Example: Get Originality Rankings

import requests

url = "https://api.dith.ai/originality"
payload = {
    "address": "E1kvzJNxShvvWTrudokpzuc789vRiDXfXG3duCuY6ooE"
}
headers = {
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

if response.status_code == 200:
    data = response.json()
    print(f"Name Originality Rank: {data['name_originality_rank']}/10")
    print(f"Description Originality Rank: {data['description_originality_rank']}/10")
else:
    print(f"Error: {response.json()['error']}")

Output:

Name Originality Rank: 8.5/10
Description Originality Rank: 7.3/10

Error Handling

The API may return the following errors. Ensure to handle them appropriately in your application:

Common Errors

Status Code Error Message Description
400 Bad Request Missing 'address' in request payload. The request did not include the required 'address' parameter.
404 Not Found Image URL not found for the token. The specified token does not have an associated image URL.
500 Internal Server Error An error occurred during analysis. There was an unexpected error on the server while processing the analysis.

Please ensure that your requests are correctly formatted and that the token addresses provided are valid.

Notes

  • Rate Limiting: Be mindful of the API's rate limits to avoid being throttled or blocked. Refer to the API provider's usage policies for detailed information.
  • Data Accuracy: The API provides insights based on available data at the time of the request. Ensure to verify critical financial decisions with multiple data sources.
  • Security: Always handle API responses securely. Validate and sanitize inputs to prevent potential security vulnerabilities.