Vouch

API reference

A REST API over Vouch's wallet and token intelligence. JSON in, JSON out, every score explained.

https://crypto-wallet-verification-project.vercel.appOpenAPI explorer →

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
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.

200 OK
{
  "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}%`
  );
}
200 OK
{
  "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

GET/api/wallet/{address}Full wallet trust profile with every explanatory signal.
GET/api/wallet/{address}/scoreCompact wallet score — the lightest call, ideal for hot paths.
GET/api/wallet/{address}/historyScore history for a wallet, newest first.
GET/api/token/{mint}Full token intelligence report with health categories.
GET/api/token/{mint}/riskCompact rug probability, band, and classification.
GET/api/token/{mint}/creatorDeployer wallet analysis and previous launches.
GET/api/token/{mint}/holdersHolder concentration and distribution.
GET/api/token/{mint}/timelineObserved on-chain events for the token.
GET/api/token/{mint}/graphRelationship graph: creator, funding wallets, major holders.
GET/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:

Headers
X-Vouch-Plan: developer
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 297
X-Quota-Limit: 100000
X-Quota-Remaining: 99412
PlanMonthlyBurst

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/sdk
Usage
import { 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.

HTML
<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.

Load unpacked
# Chrome / Brave / Edge
1. Open chrome://extensions
2. Enable Developer mode
3. Load unpacked -> select the extension/ folder

The extension never collects browsing history — only the address being checked is sent to the API.