API reference
A REST API over Vouch's wallet and token intelligence. JSON in, JSON out, every score explained.
Quickstart
Create a key on the dashboard, then make your first call. The free tier gives you 10,000 requests a month with no credit card.
import { Vouch } from "@vouch/sdk";
const vouch = new Vouch({ apiKey: process.env.VOUCH_API_KEY });
const wallet = await vouch.wallet("9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM");
console.log(wallet.score); // 842
console.log(wallet.risk_level); // "VERY_LOW"
console.log(wallet.confidence); // 93
for (const signal of wallet.negative_signals) {
console.warn(signal.reason); // every point is explained
}Authentication
Pass your key in the X-API-Key header. Keys are hashed at rest — if you lose one, revoke it and create another.
curl "https://crypto-wallet-verification-project.vercel.app/api/wallet/{address}/score" \
-H "X-API-Key: vouch_live_your_key_here"Never ship a secret key in client-side code. For browsers, call Vouch from your backend or use the embed widget, which is designed for public use.
Wallets
A wallet score is 0–1000 with a risk level and a confidence percentage. Confidence measures how much on-chain evidence backs the score — new wallets score with low confidence by design.
{
"address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"score": 842,
"risk_level": "VERY_LOW",
"confidence": 93,
"wallet_age_days": 1530,
"wallet_age_is_estimate": true,
"scam_exposure": false,
"reasons": [
"Wallet is at least 4.2 years old — long-lived wallets carry established behavioural history.",
"Extensive transaction history (more than 5,000 transactions).",
"Interacted with 5 major Solana protocols (Jupiter, Magic Eden, Marinade, Orca, Raydium)."
],
"analyzed_at": "2026-07-25T14:00:00Z"
}Tokens
Token reports return a rug probability (0–100%), a band, and the health categories behind it. Categories without data are excluded from the weighted model and lower confidence rather than being guessed at.
import { Vouch } from "@vouch/sdk";
const vouch = new Vouch({ apiKey: process.env.VOUCH_API_KEY });
const { rug_probability, band, confidence } = await vouch.tokenRisk("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
if (band === "HIGH" || band === "ELEVATED") {
await warnUser(
`Vouch puts this token's rug probability at ${rug_probability}%`
);
}{
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"rug_probability": 18,
"band": "LOW",
"confidence": 92,
"classification": "Community Token",
"reasons": [
"Mint authority is revoked — no one can create additional supply.",
"Creator wallet has existed for more than 4.2 years.",
"Top 10 accounts hold 43% of supply — moderately concentrated."
],
"analyzed_at": "2026-07-25T14:00:00Z"
}Endpoints
/api/wallet/{address}Full wallet trust profile with every explanatory signal./api/wallet/{address}/scoreCompact wallet score — the lightest call, ideal for hot paths./api/wallet/{address}/historyScore history for a wallet, newest first./api/token/{mint}Full token intelligence report with health categories./api/token/{mint}/riskCompact rug probability, band, and classification./api/token/{mint}/creatorDeployer wallet analysis and previous launches./api/token/{mint}/holdersHolder concentration and distribution./api/token/{mint}/timelineObserved on-chain events for the token./api/token/{mint}/graphRelationship graph: creator, funding wallets, major holders./api/plansPublic plan catalogue and pricing.Add ?refresh=true to force a fresh analysis. Otherwise results are cached briefly, which keeps your quota (and our upstream costs) down.
Rate limits & quotas
Every authenticated response carries your headroom, so you never have to guess:
X-Vouch-Plan: developer
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 297
X-Quota-Limit: 100000
X-Quota-Remaining: 99412| Plan | Monthly | Burst |
|---|
Errors
401Missing or invalid API key.402Monthly quota exhausted — upgrade to continue.404Address has no on-chain activity, or is not a token mint.422Not a valid Solana address.429Rate limit exceeded. Retry after the window resets.503Upstream chain data provider unavailable.Errors always return { "detail": "…" } with a human-readable explanation.
TypeScript SDK
Typed, zero-dependency, automatic retries, and usage headroom exposed on the client.
npm install @vouch/sdkimport { Vouch, VouchError } from "@vouch/sdk";
const vouch = new Vouch({ apiKey: process.env.VOUCH_API_KEY });
try {
const token = await vouch.tokenRisk(mint);
console.log(token.rug_probability, token.band);
console.log(vouch.usage.quotaRemaining); // headroom after the call
} catch (err) {
if (err instanceof VouchError && err.code === "quota_exceeded") {
await promptUpgrade();
}
}Embed widget
The fastest integration: two lines of HTML render a live score anywhere. Styles live in Shadow DOM, so nothing leaks in or out.
<script src="https://www.usevouch.xyz//embed.js"></script>
<!-- Wallet trust score -->
<div data-vouch-wallet="9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM"></div>
<!-- Token rug probability -->
<div data-vouch-token="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"></div>
<!-- Options: theme, size, your API key -->
<div
data-vouch-wallet="9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM"
data-vouch-theme="dark"
data-vouch-size="sm"
></div>The widget re-scans on DOM changes, so it works in SPAs and infinite lists without extra wiring.
Browser extension
Inline scores on pump.fun, Jupiter, Raydium, Magic Eden, Solscan, Birdeye and DexScreener.
# Chrome / Brave / Edge
1. Open chrome://extensions
2. Enable Developer mode
3. Load unpacked -> select the extension/ folderThe extension never collects browsing history — only the address being checked is sent to the API.