DEVELOPERS · API v1

Bundle detection
for your app.

The same on-chain bundle scans, token safety checks and scores SOLVET shows, as JSON for your trading bot, terminal, launchpad or wallet. One API key, plain HTTPS.

📦 Bundle scansWho bought the launch blocks, linked wallets, dev ties, what they still hold.
🛡 Token safetyMint & freeze authority, can you sell, top-10 share, liquidity, market data.
🔢 SOLVET ScoreOne number with every deduction explained, the same score as in the app and the bot.

Quick start

Send your key in the Authorization header (or X-API-Key). Base URL:

https://solvent-backend-production.up.railway.app/v1
# bundle scan of a token
curl https://solvent-backend-production.up.railway.app/v1/bundle/TOKEN_ADDRESS \
  -H "Authorization: Bearer sv_YOUR_KEY"
// JavaScript
const r = await fetch('https://solvent-backend-production.up.railway.app/v1/bundle/' + mint, {
  headers: { Authorization: 'Bearer sv_YOUR_KEY' }
});
const { ok, data, meta, error } = await r.json();
if (ok && data.verdict === 'high') warn('Bundled launch: ' + data.held_pct + '% still held by linked wallets');

Endpoints

GET/v1/bundle/:mint1 unit cached · 10 fresh

The launch bundle scan. verdict: none, low, medium, high. A fresh scan can take up to ~20 s; if it times out, ask again: it keeps running and is then served from cache.

{ "ok": true, "data": {
  "mint": "…", "verdict": "high", "summary": "4 linked wallets bought 31% of the launch …",
  "buyers_traced": 6, "bought_pct": 31.46, "held_pct": 22.1, "linked_wallets": 4, "dev_linked_wallets": 1,
  "funding_groups": 1, "jito_bundle_buys": 3, "late_bundle": null, "known_crew": { "earlier_coins": 3, "earlier_rugs": 2 },
  "wallets": [{ "address": "…", "bought_pct": 10, "held_pct": 9, "funder": "…", "group": 0, "dev_linked": true, "fresh_wallet": true }],
  "partial": false, "incomplete": false
}, "meta": { "plan": "pro", "units": 1, "used_today": 512, "limit_today": 25000 } }
GET/v1/token/:mint1 unit

Safety checks and market data. bundle is filled when a scan is cached (otherwise null, call /v1/bundle).

{ "ok": true, "data": {
  "mint": "…", "symbol": "BONK", "price_usd": 0.00002, "liquidity_usd": 5000000, "market_cap_usd": 1000000000,
  "checks": [{ "check": "Can you sell?", "status": "pass", "result": "Standard token — sells can't be blocked" },
             { "check": "Supply", "status": "pass", "result": "Fixed — nobody can mint more" }],
  "top10_holders_pct": 18.12, "transfer_fee": 0, "bundle": { "verdict": "none", "bought_pct": 0, "held_pct": 0 }
} }
GET/v1/score/:mint1 unit cached · 5 fresh

The SOLVET Score (0–100) with every deduction.

{ "ok": true, "data": { "score": 42, "band": "…", "complete": true, "deductions": [{ "points": -30, "reason": "…" }] } }
GET/v1/bundles/recent?limit=201 unit

The latest bundled launches SOLVET found (medium and high), newest first, up to 50.

GET/v1/usagefree

Your plan, units used today and the last 14 days.

Plans & limits

Units reset at 00:00 UTC. Answers from SOLVET's cache cost 1 unit; only work that needs fresh on-chain reads costs more.

PLANUNITS / DAYREQUESTS / MIN
Free30020
Pro25,000120
Partner250,000600

Errors

Every error is { "ok": false, "error": { "code", "message" } } with a matching HTTP status.

STATUSCODEMEANING
400bad_mintNot a Solana token address
401missing_key · invalid_keyNo key, unknown or revoked key
404not_foundToken can't be read / unknown endpoint
422not_scannableThis launch can't be scanned
429rate_limited · daily_limitSlow down (see Retry-After) / daily units used up
503 · 504busy · timeoutFresh work paused for a moment / scan still running: ask again

Get an API key

Free keys for builders, Pro and Partner plans for bots and platforms. Message us on Telegram.

Contact on Telegram →