Crypto projects without a token, ranked by Twitter Score or follower growth
GET https://twitterscore.io/api/v1/get_tokenless
Returns the list behind the Airdrop / tokenless page: accounts in the "Projects" category that have no linked coin on TwitterScore (no token tracked) and are not on the tokenless blacklist. Each item carries the project's Twitter Score, its current and previous follower counts (as integers and as compact strings like "318K") and the difference between them. Rank by Twitter Score (by=score, default, uses the absolute current score — not a change) or by follower change (by=followers, current minus previous followers). The ranking is capped at the first 1000 rows, so total never exceeds 1000. Unlike get_trending, there is no period parameter: the "previous" follower count is the previous stored snapshot of the account, and the response has no extra period fields.
Nested fields
data[].twitter_id(string): Project account's numeric Twitter/X id as a string.data[].name(string): Display name. Serialised with str(), so an account without a name yields the literal string "None".data[].username(string): Handle without the @.data[].description(string): Profile bio (empty string when none).data[].twitter_score(number): Current Twitter Score (0-1000 scale) as a float with decimals, e.g. 851.53 (Account.project_score FloatField).data[].curr_followers_int(integer): Current follower count.data[].curr_followers_str(string): Current followers as a compact string with K/M/B suffix (3 significant digits), e.g. "318K"; "0" when zero.data[].prev_followers_int(integer): Follower count at the previous snapshot.data[].prev_followers_str(string): Previous followers as a compact K/M/B string.data[].followers_diff_int(integer): curr_followers_int minus prev_followers_int; may be negative. Sort key for by=followers.data[].followers_diff_str(string): followers_diff_int as a compact K/M/B string, e.g. "12.2K" or "-1.5K"; "0" when zero.data[].img(string): Avatar URL from the account's stored profile image on S3 (https://<bucket>.s3.amazonaws.com/profiles/<file>). When no image is stored the code builds "https://twitterscore.io" + settings.MEDIA_URL + "profiles/NoImageFound.png" — "https://twitterscore.io/media/profiles/NoImageFound.png" with local media, but a malformed double-scheme URL when USE_S3 is on (see notes).
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
by |
string (score, followers) |
no | score |
Ranking column: score orders by the current Twitter Score (project_score), followers by the follower change (current minus previous followers). Case-sensitive; any other value returns {"success": false, "message": "Sorting is only possible by [followers|score]"}. |
sort |
string (desc, asc, descending, ascending) |
no | desc |
Sort direction: asc or ascending (case-insensitive) for ascending, anything else (including the default) for descending. |
page |
integer | no | 1 |
1-based page number. Non-numeric, 0 or negative values are treated as 1; a page past the last returns an empty data array. |
size |
integer | no | 10 |
Rows per page, capped at 100. Values below 1 are treated as 1; a non-numeric value falls back to 10. |
Example request
curl -s "https://twitterscore.io/api/v1/get_tokenless?by=followers" \
-H "X-API-Key: $TWITTERSCORE_API_KEY" \
-H "User-Agent: my-app/1.0 ([email protected])"
import os, requests
r = requests.get(
"https://twitterscore.io/api/v1/get_tokenless",
params={"by": "followers"},
headers={"X-API-Key": os.environ["TWITTERSCORE_API_KEY"],
"User-Agent": "my-app/1.0 ([email protected])"},
timeout=15,
)
data = r.json()
if not data.get("success", True): # errors arrive as success=false (see /developers/errors/)
raise RuntimeError(data["message"])
print(data)
const r = await fetch("https://twitterscore.io/api/v1/get_tokenless?by=followers", {
headers: { "X-API-Key": process.env.TWITTERSCORE_API_KEY,
"User-Agent": "my-app/1.0 ([email protected])" },
});
const data = await r.json();
if (data.success === false) throw new Error(data.message);
console.log(data);
Example response
{
"success": true,
"total": 1000,
"page": 1,
"size": 2,
"pages": 500,
"data": [
{
"twitter_id": "1457382190432124930",
"name": "MegaETH",
"username": "megaeth_labs",
"description": "Real-time blockchain. Mainnet soon.",
"twitter_score": 412.37,
"curr_followers_int": 318204,
"curr_followers_str": "318K",
"prev_followers_int": 305990,
"prev_followers_str": "306K",
"followers_diff_int": 12214,
"followers_diff_str": "12.2K",
"img": "https://twitterscore.s3.amazonaws.com/profiles/megaeth_labs.jpg"
},
{
"twitter_id": "1623390414587465728",
"name": "Monad",
"username": "monad_xyz",
"description": "Performance-optimized EVM L1.",
"twitter_score": 387.05,
"curr_followers_int": 742110,
"curr_followers_str": "742K",
"prev_followers_int": 739870,
"prev_followers_str": "740K",
"followers_diff_int": 2240,
"followers_diff_str": "2.24K",
"img": "https://twitterscore.s3.amazonaws.com/profiles/monad_xyz.jpg"
}
]
}
Errors
Error codes this endpoint can return (see Errors for the body format): api_key_missing, api_key_invalid, api_access_deactivated, api_key_revoked, method_not_allowed, rate_limited, quota_exceeded, server_error.
Authentication: X-API-Key header (or Authorization: Bearer), see Authentication. Limits: per-minute rate and monthly quota by plan, see Rate limits. Machine-readable definition: /openapi.json.
This page as Markdown.