API Documentation
Score Solana tokens 0–100 based on behavioral signals. Delivered in under 100ms.
Overview
Blindspotr scores every new Solana token launch 0–100 based on on-chain wallet behavior, funding patterns, and coordination signals. The API delivers behavioral risk scores in under 100ms, designed for integration into trading terminals, bots, and analytics dashboards.
Scores are computed automatically as tokens launch. By the time you query a token, the score is already waiting.
Authentication
Bearer token authentication. Include your API key in every request:
Authorization: Bearer YOUR_API_KEYGet your API key from the dashboard at blindspotr.io/dashboard.
Endpoint Reference
GET /v1/token/:mint/risk
Base URL: https://api.blindspotr.io
Endpoint: GET /v1/token/:mint/risk
Parameters
| Parameter | Type | Description |
|---|---|---|
mint | string | The token's mint address (base58, 32–44 chars) |
Response time: ~33ms for scored tokens, ~35ms for pending.
Response Schema
Three possible status values: scored, pending, not_found.
Scored
Token has been fully analyzed. Score and all components are available.
{
"mint": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr",
"status": "scored",
"score": 78,
"riskLevel": "HIGH",
"patternSignature": "IMMINENT_RUG",
"components": {
"freshness": { "score": 85, "weight": 0.29 },
"walletReputation": { "score": 72, "weight": 0.26 },
"developerHistory": { "score": 65, "weight": 0.24 },
"funding": { "score": 90, "weight": 0.12 },
"behavioralSequence": { "score": 88, "weight": 0.09 }
},
"divergence": {
"label": "HIGH_CONFIDENCE",
"coefficient": 0.71
},
"deployer": {
"address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"tokenCount": 12,
"rugRate": 0.83
},
"scanTimestamp": "2026-03-23T14:22:18.000Z",
"modelVersion": "4.4"
}Pending
Token was discovered but the scan has not completed yet. Poll again in 30–60 seconds.
{
"mint": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr",
"status": "pending",
"message": "Token discovered, scan in progress",
"discoveredAt": "2026-03-23T14:20:00.000Z"
}Not Found
Four sub-cases — all return status not_found with a reason field:
| Reason | Description |
|---|---|
not_discovered | Token has never been seen by Blindspotr |
filtered | Token was discovered but filtered before scanning (failed quality gates) |
scan_aborted | Scan started but was aborted (low liquidity at scan time, insufficient data) |
out_of_coverage | Token is outside current coverage (non-pump.fun launchpad) |
{
"mint": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr",
"status": "not_found",
"reason": "not_discovered"
}Score Interpretation
Risk Levels
| Score | Level | Meaning |
|---|---|---|
| 0–29 | LOW | No meaningful risk signals detected |
| 30–49 | MODERATE | Some signals present, proceed with caution |
| 50–64 | ELEVATED | Multiple risk signals — significant caution warranted |
| 65–79 | HIGH | Strong coordination or manipulation signals |
| 80–100 | CRITICAL | Near-certain insider operation or imminent rug |
Components
Scores are a weighted composite of five behavioral signals:
| Component | Weight | What it measures |
|---|---|---|
freshness | 29% | Wallet age and activity history. Fresh wallets (<7 days) with no prior on-chain history score higher risk. |
walletReputation | 26% | Cross-token behavioral history from 97K+ wallet reputation cache. Wallets with prior rug appearances score higher. |
developerHistory | 24% | Deployer's token launch history — how many tokens launched, how many rugged. |
funding | 12% | Shared funding sources within the buyer graph. Wallets funded from common ancestors = coordination signal. |
behavioralSequence | 9% | Jito bundle detection, buy-amount uniformity, coordinated timing patterns. |
Pattern Signatures
Every scored token receives a behavioral fingerprint classification:
| Pattern | Description | Frequency |
|---|---|---|
IMMINENT_RUG | Jito bundle + coordinated insider fingerprint | ~46% |
UNCLASSIFIED | No dominant pattern detected | ~39% |
DELAYED_COORDINATION | Coordination signals appear after initial launch | ~7% |
FUNDING_WEB | Dense shared funding graph | ~3% |
AGED_WALLET_COORDINATION | Older wallets coordinating — sophisticated signal | ~2% |
CONCENTRATION_TRAP | Supply heavily concentrated at top holders | ~2% |
CLEAN_PROFILE | No meaningful risk signals detected | ~1% |
Divergence
The divergence field measures alignment between the behavioral risk score and price microstructure.
| Label | Meaning |
|---|---|
MAXIMUM_DANGER | High behavioral risk + price looking healthy — classic setup |
HIGH_CONFIDENCE | Risk signal and price action are aligned |
NEUTRAL | No strong divergence signal |
SOPHISTICATED_OPERATION | Low risk score + unhealthy price — possible evasion |
PERFECT_EVASION_OR_CLEAN | Either extremely clean or extremely sophisticated |
Rate Limits & Errors
Rate limits apply per API key.
| Plan | Rate limit |
|---|---|
| Pro | 60 requests/minute |
| Business | 300 requests/minute |
| Enterprise | Custom |
Rate limit headers are included in every response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1711202400Error Codes
| Status | Meaning |
|---|---|
400 | Invalid mint address format |
401 | Missing or invalid API key |
429 | Rate limit exceeded |
500 | Internal server error |
Code Examples
curl
curl -X GET "https://api.blindspotr.io/v1/token/7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr/risk" \
-H "Authorization: Bearer YOUR_API_KEY"JavaScript
const response = await fetch(
'https://api.blindspotr.io/v1/token/7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr/risk',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const data = await response.json();
if (data.status === 'scored') {
console.log(`Score: ${data.score} (${data.riskLevel})`);
console.log(`Pattern: ${data.patternSignature}`);
}Python
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY"}
mint = "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr"
response = requests.get(
f"https://api.blindspotr.io/v1/token/{mint}/risk",
headers=headers
)
data = response.json()
if data["status"] == "scored":
print(f"Score: {data['score']} ({data['riskLevel']})")
print(f"Pattern: {data['patternSignature']}")