VerdictSwarm documentation

v2 · current

Core reference

Docs / Core / Verdict API

Verdict API v2.

POST /v2/verdict returns one adjudicated avoid, caution, or clear decision for solana or base assets.

Method · POSTContent · application/jsonAuth · X-API-Key or x402

Pinned request.

This runnable JUP request is imported from the checked-in live fixture. Keep the environment-variable form for the credential.

curl · credits key
curl -sS -X POST https://api.vswarm.io/v2/verdict \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $VS_API_KEY" \
  -d '{"address":"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN","chain":"solana","level":"fast","include":[]}'
python · credits key
import os
import requests

response = requests.post(
    "https://api.vswarm.io/v2/verdict",
    headers={"X-API-Key": os.environ["VS_API_KEY"]},
    json={
  "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
  "chain": "solana",
  "level": "fast",
  "include": []
},
    timeout=60,
)
response.raise_for_status()
verdict = response.json()

Pinned response.

Read verdict.action first. The remaining fields explain the decision and preserve its observation receipt.

json · live fixture
{
  "schema_version": "1.1",
  "request": {
    "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
    "chain": "solana",
    "level": "fast",
    "include": []
  },
  "verdict": {
    "action": "caution",
    "score": 82,
    "grade": "A",
    "risk_level": "low",
    "confidence": 1,
    "summary": "Jupiter (JUP) is a well-established major Solana ecosystem token with strong financials, a long operating history, and safe authority settings."
  },
  "signals": [
    {
      "id": "honeypot_simulation",
      "category": "security",
      "severity": "critical",
      "pass": true,
      "value": "ok",
      "detail": "Sell simulation passed."
    },
    {
      "id": "mint_authority",
      "category": "security",
      "severity": "critical",
      "pass": true,
      "value": "revoked",
      "detail": "Mint authority revoked — cannot inflate supply."
    },
    {
      "id": "freeze_authority",
      "category": "security",
      "severity": "high",
      "pass": true,
      "value": "revoked",
      "detail": "Freeze authority revoked — holders cannot be frozen."
    },
    {
      "id": "top10_holder_concentration",
      "category": "distribution",
      "severity": "high",
      "pass": false,
      "value": 66.2,
      "detail": "Top-10 wallets hold 66.2% of supply."
    },
    {
      "id": "contract_verified",
      "category": "transparency",
      "severity": "medium",
      "pass": true,
      "value": "verified",
      "detail": "Contract source code is publicly verified."
    },
    {
      "id": "liquidity_vs_mcap",
      "category": "liquidity",
      "severity": "high",
      "pass": false,
      "value": 0.0033,
      "detail": "Very low liquidity ratio: 0.33% of market cap."
    }
  ],
  "agents": [
    {
      "name": "FreeTierAI",
      "score": 8.2,
      "sentiment": "bullish",
      "key_findings": [
        "Token age is 919 days, indicating a long-standing and established project.",
        "Market cap stands at $607.5M with $2.0M in liquidity, reflecting mature market operations.",
        "Mint and freeze authorities have both been revoked, eliminating centralized supply manipulation risks.",
        "Missing holder metrics are typical data provider anomalies for high-volume native assets and do not negate foundational safety."
      ],
      "reasoning": null
    }
  ],
  "data_freshness": {
    "onchain_age_seconds": 2911,
    "market_age_seconds": 3,
    "social_age_seconds": 3,
    "basis": "observed"
  },
  "token": {
    "name": "Jupiter",
    "symbol": "JUP",
    "price_usd": 0.1829,
    "liquidity_usd": 2021849.5,
    "mcap_usd": 607509009,
    "fdv_usd": 1280767814,
    "volume_24h_usd": 316009.15,
    "holder_count": 827230,
    "age_days": 919,
    "top10_holder_pct": 66.22
  },
  "data_quality": {
    "required_missing": [
      "Holder data"
    ],
    "optional_missing": [],
    "warnings": [
      "Required data missing: Holder data unavailable during initial scan. Treat as missing data, not a negative signal.",
      "Holder count reported as 0 with mcap $607.5M — likely API limitation, not indicative of actual holder base",
      "Top 10 holder concentration unavailable — data source did not return holder distribution. Do not penalize for missing data."
    ],
    "degraded_agents": []
  },
  "liquidity_exposure_cap_usd": 10000,
  "data_confidence": 1,
  "insufficient_data": false,
  "lifecycle": null,
  "timing": null,
  "observation_id": "9cd71c81-86a4-4380-9eb0-d7e482948e98",
  "cached": false,
  "generated_at": "2026-08-07T16:55:18.090125Z",
  "latency_ms": 3099,
  "billing": {
    "rail": "free",
    "amount_usdc": "0",
    "tx": null,
    "degraded": false,
    "retry_voucher": null
  }
}

Service levels.

LevelFresh callCache hitLatency targetRuns
triage$0.001 USDC$0.0002 USDC1s p95Deterministic pre-check with no model spend.
fast$0.01 USDC$0.002 USDC2.5s p95Cached data, heuristics, and single-model adjudication.
deep$0.03 USDC$0.006 USDC45s p95Configured specialist swarm with cross-examination.

Authentication and payment.

API key

Keyed Free or prepaid credits

Attach X-API-Key. The service applies the key's allowance or prepaid balance before analysis begins.

x402

Wallet-native USDC

Call without a key, settle the returned top-level payment challenge on a supported chain, and retry the identical request.

Virtuals ACP

preTradeTokenRiskCheck

The live ACP offering costs $0.05 per check and returns the same decision contract through its deliverable.

Request schema.

The fixture demonstrates the core fields. Optional context, staleness, lifecycle, timing, market-state, and trade-intent fields are discoverable from the live service contract.

addressstring
chainstring
levelstring
includearray

Error contract.

Every error is an explicit policy branch. The error-code list is tested against the pinned live discovery fixture.

CodeHTTPAgent action
invalid_address400Validate the address against the selected chain and stop the trade.
unsupported_chain400Route only supported-chain assets here; stop on every other chain.
level_unavailable400Read the enabled levels from service discovery and halt unless policy permits another depth.
payment_required402Pay the top-level x402 challenge or attach a funded key, then retry the identical request.The x402 challenge is returned at the top level.
payment_invalid402Replace the payment proof or key. Do not retry unchanged credentials.
rate_limited429Wait for details.retry_after_s or Retry-After, then retry with bounded backoff.Response includes details.retry_after_s and the Retry-After header.
upstream_data_unavailable503Halt execution and surface the dependency failure. Never fail open.
internal_error500Halt, use a retry voucher when returned, and alert if the retry fails.

Limits and caching.

Per payer
5 requests / second
Burst
20 requests
triage cache hit
$0.0002 USDC
fast cache hit
$0.002 USDC
deep cache hit
$0.006 USDC

Service discovery.

Read discovery before hardcoding capabilities. The checked-in response below is refreshed by the fixture generator.

curl · verdict discovery
curl -sS https://api.vswarm.io/v2/verdict/info
json · pinned discovery fixture
{
  "schema_version": "1.1",
  "service": "VerdictSwarm Verdict API",
  "levels": {
    "triage": {
      "description": "Deterministic no-LLM triage lane for machine trials",
      "latency_p95_ms": 1000,
      "price_usdc": "0.001",
      "cache_ttl_s": 60,
      "enabled": true,
      "reason": "deterministic-only lane; zero LLM spend"
    },
    "fast": {
      "description": "Cached data + heuristics + single-model adjudication",
      "latency_p95_ms": 2500,
      "price_usdc": "0.01",
      "cache_ttl_s": 120,
      "enabled": true
    },
    "deep": {
      "description": "Full 6-agent swarm — the token examined from every angle",
      "latency_p95_ms": 45000,
      "price_usdc": "0.030",
      "cache_ttl_s": 600,
      "enabled": true
    }
  },
  "include_options": {
    "lifecycle": {
      "description": "Deterministic lifecycle phase, confidence, age, launchpad, and evidence."
    },
    "timing": {
      "description": "Descriptive entry risk, phase band, and exit pressure statistics.",
      "disclaimer": "Descriptive market statistics; not investment advice."
    },
    "exit_sim": {
      "description": "Deterministic exit feasibility at your intended trade size (requires trade_intent). Solana only in v0.",
      "decision_values": [
        "allow",
        "reduce",
        "defer",
        "block"
      ]
    },
    "safe_swap": {
      "description": "Executable Jupiter route with a disclosed platform fee (requires trade_intent). Solana only in v0.",
      "disclaimer": "Route includes a disclosed platform fee paid to VerdictSwarm. Fee never influences the verdict."
    },
    "market_state": {
      "description": "Multi-timeframe trend/momentum state plus Hyperliquid positioning (funding, open interest, liquidation clusters) where listed. Descriptive market statistics refreshed every 6 hours.",
      "disclaimer": "Descriptive market statistics; not investment advice."
    }
  },
  "cache_hit_price_fraction": 0.2,
  "degraded_policy": {
    "charge": "full",
    "retry_voucher": {
      "scope": "chain:address:level:payer",
      "ttl_s": 86400,
      "one_use": true
    },
    "auto_recovery": true
  },
  "vouchers_configured": true,
  "supported_chains": [
    "solana",
    "base"
  ],
  "billing_mode": "x402",
  "rate_limits": {
    "per_payer_rps": 5,
    "per_payer_burst": 20
  },
  "free_tier": {
    "enabled": true,
    "mint_endpoint": "POST /v2/keys",
    "auth_required": false,
    "daily_limits": {
      "triage": 2000,
      "fast": 300,
      "deep": 10
    },
    "key_mint_limits": {
      "per_ip_daily": 3,
      "global_daily": 500
    },
    "overage": "x402 or prepaid credits once the daily quota is exhausted",
    "degrade_policy": "deep degrades to fast when the free deep-lane budget is exhausted; the response says so"
  },
  "sample_response_fields": [
    "schema_version",
    "request",
    "verdict",
    "signals",
    "agents",
    "data_freshness",
    "token",
    "data_quality",
    "data_confidence",
    "insufficient_data",
    "lifecycle",
    "timing",
    "market_state",
    "cached",
    "generated_at",
    "latency_ms",
    "billing"
  ],
  "error_codes": [
    "invalid_address",
    "unsupported_chain",
    "upstream_data_unavailable",
    "payment_required",
    "payment_invalid",
    "internal_error",
    "rate_limited",
    "level_unavailable"
  ],
  "signals_vocabulary": [
    "honeypot_simulation",
    "mint_authority",
    "freeze_authority",
    "lp_lock_burn",
    "top10_holder_concentration",
    "contract_verified",
    "buy_tax",
    "sell_tax",
    "liquidity_vs_mcap",
    "bundle_detection"
  ]
}
curl · x402 discovery
curl -sS https://api.vswarm.io/.well-known/x402

Try the same asset.

solana · JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN