Documentation

TARS Intelligence

TARS is the verification layer for AI agents on Solana. Pay-per-call risk intelligence — pump.fun token scans, wallet profiles, transaction verification, program audits. No API keys, no signup, no subscription. Settlement happens on-chain in USDC via the X402 protocol.

Built by agents, operated by agents, for agents. Every endpoint is designed to be called directly by autonomous code — a single signed request, a deterministic JSON response, ready to drop into a decision tree.

Endpoints
5
Network
Solana
Settlement
USDC · Dexter
Median latency
< 500ms
Get started

Quickstart

Three paths, pick the one that fits your runtime. The fastest is MCP — if you use Claude Desktop or Cursor, you can call TARS from within a chat in under a minute.

Protocol

How X402 payment works

Every paid endpoint follows the same three-step flow defined in the X402 spec. The Dexter facilitator handles signing and settlement — your agent only needs USDC in a wallet.

  1. 1
    Request
    Agent GETs the endpoint. No headers required on the first call.
  2. 2
    402 Payment Required
    Server responds with the X402 challenge — payment amount, recipient address (tarsx402.network's receiver wallet), USDC mint, and the Dexter feePayer. Server sponsors gas; agent only pays USDC.
  3. 3
    Sign and retry
    Agent constructs a signed Solana payment transaction, base64-encodes it into an X-PAYMENT header, and retries. Dexter verifies + settles on-chain. Server returns 200 with the scan result.

Full machine-readable manifest at /.well-known/x402-discovery ↗

Reference

All endpoints

Five paid endpoints. Every response follows the same standard schema — risk score, flags, summary, confidence, raw data — so an agent only needs to parse one shape across all calls.

EndpointPriceUse case
/scan/pumpfun/{mint}$0.50Pre-trade risk check for pump.
/scan/token/{mint}$0.30Generic SPL token risk scan.
/scan/wallet/{address}$0.02Counterparty risk profile.
/verify/tx/{signature}$0.05Post-transaction verification.
/scan/program/{id}$1.00Solana program audit.
GET/scan/pumpfun/{mint}$0.50

Pre-trade risk check for pump.fun tokens. Holder concentration, supply, pump.fun verification status, dev wallet history signals. The endpoint to call before a sniper bot enters a position.

Path parameters
  • mintBase58 mint address of the pump.fun token
Sample 200 response
json
{
  "risk_score": 0.41,
  "flags": ["dev_holds_significant_supply", "early_concentration"],
  "summary": "Moderate risk — dev wallet still holds 8.2% of supply.",
  "confidence": 0.83,
  "recommendation": "watch",
  "reasoning": "Top 10 holders control 62% of supply...",
  "data": {
    "mint": "2qEHjDLD...pump",
    "supply": "1000000000",
    "top_10_concentration": 0.62,
    "dev_wallet_share": 0.082,
    "pump_fun_verified": true
  },
  "request_id": "a7c91...",
  "cached": false,
  "ttl_seconds": 60
}
GET/scan/token/{mint}$0.30

Generic SPL token risk scan. Mint authority status, freeze authority, holder concentration, supply caps. Works for any Solana SPL token, not just pump.fun.

Path parameters
  • mintBase58 SPL token mint address
Sample 200 response
json
{
  "risk_score": 0.15,
  "flags": [],
  "summary": "Low risk — mint authority renounced, no freeze authority.",
  "confidence": 0.91,
  "recommendation": "safe",
  "data": {
    "mint_authority": null,
    "freeze_authority": null,
    "decimals": 6,
    "supply": "1000000000000000"
  }
}
GET/scan/wallet/{address}$0.02

Counterparty risk profile. Burner patterns, recent activity, transaction failure rate. Call this before following a wallet, sending to an unknown counterparty, or whitelisting a new address.

Path parameters
  • addressBase58 Solana wallet address
Sample 200 response
json
{
  "risk_score": 0.28,
  "flags": ["high_activity", "high_failure_rate"],
  "summary": "Low counterparty risk — normal wallet profile.",
  "confidence": 0.78,
  "data": {
    "age_days": 412,
    "tx_count_recent": 2840,
    "failure_rate": 0.31
  }
}
GET/verify/tx/{signature}$0.05

Post-transaction verification. Did the tx succeed, what fees were paid, what was the net SOL movement for the signer. Use after sending to confirm what actually happened on-chain.

Path parameters
  • signatureBase58 Solana transaction signature
Sample 200 response
json
{
  "verified": true,
  "success": true,
  "fee_lamports": 5000,
  "signer_sol_delta_lamports": -1000005000,
  "slot": 312045678,
  "block_time": "2026-05-15T14:22:31Z"
}
GET/scan/program/{id}$1.00

Solana program audit. Upgrade authority status, recent upgrade history. Call this before depositing into an unknown protocol or signing transactions that interact with a new program.

Path parameters
  • idBase58 program ID
Sample 200 response
json
{
  "risk_score": 0.55,
  "flags": ["upgrade_authority_active"],
  "summary": "Caution — upgrade authority not renounced. Program code can change.",
  "confidence": 0.95,
  "data": {
    "upgrade_authority": "9xQe...",
    "upgrades_last_30d": 2,
    "last_upgrade_slot": 311892450
  }
}
Integration

Use TARS from Claude Desktop or Cursor

The tars-mcp package wraps every endpoint as an MCP tool. Once installed, your AI assistant can call TARS scans autonomously during a conversation.

Add this to your claude_desktop_config.json or Cursor MCP settings:

json
{
  "mcpServers": {
    "tars": {
      "command": "npx",
      "args": ["-y", "tars-mcp"],
      "env": {
        "TARS_API_URL": "https://api.tarsx402.network"
      }
    }
  }
}

npm package: tars-mcp ↗. Exposes five tools, one per endpoint. The assistant decides which to call based on the user's question.

Integration

Pay from TypeScript / Node

The Dexter X402 SDK takes care of the entire challenge/response cycle. Pass it a Solana keypair, point it at any TARS endpoint, and it handles signing + retry automatically.

bash
npm install @dexterai/x402 @solana/web3.js
typescript
import { wrapFetch } from '@dexterai/x402/client';
import * as fs from 'node:fs';

const secretBytes = JSON.parse(
  fs.readFileSync('./payer-keypair.json', 'utf8')
) as number[];

const paidFetch = wrapFetch(fetch, { walletPrivateKey: secretBytes });

const res = await paidFetch(
  'https://api.tarsx402.network/scan/wallet/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4',
);
const scan = await res.json();
console.log(scan.risk_score, scan.summary);

The payer wallet needs USDC on Solana mainnet and the Dexter facilitator sponsors gas — no SOL required for the payment itself, though you need a few thousand lamports of rent for the USDC ATA if it doesn't exist yet.

Integration

Raw HTTP / curl

If you need to integrate from a language without an X402 SDK, the protocol is plain HTTP. Construct and sign the payment yourself, base64-encode it into X-PAYMENT, and retry.

Step 1 — Request without payment, get the challenge:

bash
curl https://api.tarsx402.network/scan/wallet/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4

Response (402):

json
{
  "error": "Payment required",
  "accepts": [{
    "scheme": "exact",
    "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
    "amount": "20000",
    "maxAmountRequired": "20000",
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "payTo": "GoMUdxa3tyKhUuJKEwqF1bvPVUK8qv4VsCisJfRfYfLF",
    "maxTimeoutSeconds": 60,
    "extra": {
      "feePayer": "DeXterR2kQm8AvRHnNPatWkE46TfAcMeBDjb6FySoAb8",
      "decimals": 6
    }
  }]
}

Step 2 — Build a signed Solana transfer for amount USDC atoms from your wallet to payTo, with extra.feePayer as fee payer. Serialize, base64 encode, send back:

bash
curl -H "X-PAYMENT: <base64-payment-payload>" \
  https://api.tarsx402.network/scan/wallet/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4

Server verifies the signature, settles via Dexter, returns 200 with the scan result. The Dexter facilitator pays the SOL fee — agent only spends USDC.

Reference

Response schema

Every scan endpoint returns the same envelope. Numeric fields are stable across endpoint types so agents can route onrisk_score alone.

FieldTypeDescription
risk_scorenumber 0–1Aggregate risk. 0 = safe, 1 = avoid. Deterministic — derived from rules, not LLMs.
flagsstring[]Specific risk signals triggered (e.g. dev_holds_significant_supply).
summarystringOne-sentence human-readable verdict.
confidencenumber 0–1How sure TARS is of the result based on data completeness.
recommendationenumsafe · watch · caution · avoid. Drop straight into a decision tree.
dataobjectRaw measurements — endpoint-specific. Use these to build your own scoring.
request_iduuidUnique ID for this scan. Cite in support requests.
cachedbooleanTrue if served from cache. Cache TTL is 1–60s by endpoint.
Reference

Errors

StatusMeaningWhat to do
200Scan succeeded, payment settled.Parse the response. You can call again immediately.
402Payment required.Read the accepts array, sign a payment, retry with X-PAYMENT.
400Bad request — invalid mint, signature, or address format.Validate input on your side before retrying.
404Resource not found — token, tx, or wallet not on Solana.Don't retry. Treat as a real not-found.
422Payment payload rejected by Dexter.Inspect the body for the Dexter error. Often a stale blockhash — re-sign and retry.
500Upstream Solana RPC issue.Retry with exponential backoff. We auto-recover within seconds.
Discovery

Machine-readable discovery surfaces

Support

Contact

TARS runs autonomously, but one human stays available for integration questions and partnership inquiries.