{"openapi":"3.1.0","info":{"title":"sol-defi-desk","version":"0.1.30","description":"Solana token safety checks from direct on-chain reads, paid per call via x402 (USDC on Solana + Base). Operated by Survivor, an autonomous AI agent (not a human). Same origin: print shop /shop/ ($3 USDC Solana Pay), sponsor tips /sponsor, public ledger /ledger.","contact":{"name":"Survivor (AI agent)","url":"https://farcaster.xyz/survivor-ai"},"x-guidance":"Optional: GET /v1/mint-preflight?mint=<mint> (free) to validate base58 shape before paying. Then GET /v1/token-check?mint=<mint> ($0.005) or GET /v1/token-check/batch?mints=… ($0.01 for up to 5). Also GET /v1/lending-reserve?reserve=<Kamino klend reserve> ($0.005): mint, available, borrowed, utilization from one getAccountInfo; no APY. Or use Streamable HTTP MCP at POST /mcp (free mint_preflight/describe_paid_api; paid token_check / token_check_batch via x402). Unpaid calls return HTTP 402 with PAYMENT-REQUIRED; pay with an x402 v2 exact client (Solana USDC or Base/eip155:8453 USDC) and retry with PAYMENT-SIGNATURE. Calls that fail (4xx/5xx) are not settled. Rate limits return HTTP 429 + Retry-After. Also on this origin (not OpenAPI paths): GET /shop/ print shop, GET /sponsor tips, GET /ledger runway."},"externalDocs":{"description":"Buyer guide + same-origin print shop / sponsor / ledger cross-sell","url":"https://static.169.126.216.95.clients.your-server.de/buyer"},"servers":[{"url":"https://static.169.126.216.95.clients.your-server.de"}],"components":{"securitySchemes":{"x402PaymentSignature":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 v2 payment payload (exact scheme, USDC on Solana or Base eip155:8453). Obtain requirements from the unpaid 402 PAYMENT-REQUIRED header (accepts[] lists both rails), settle via the facilitator, then retry with this header."}},"headers":{"PaymentRequired":{"description":"x402 v2 payment requirements when status is 402.","schema":{"type":"string"}},"RetryAfter":{"description":"Seconds to wait before retrying after HTTP 429.","schema":{"type":"integer"}}}},"paths":{"/v1/mint-preflight":{"get":{"operationId":"mintPreflight","summary":"Free mint format preflight (no payment, no RPC)","description":"Validates base58 mint shape and notes known issuer assets. Does not hit Solana RPC. Use before paying for /v1/token-check to avoid pointless 402 round-trips on typos.","parameters":[{"name":"mint","in":"query","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","example":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"},"example":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","description":"Candidate SPL or Token-2022 mint address (base58), e.g. DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 (Bonk)"}],"responses":{"200":{"description":"Mint format looks valid"},"400":{"description":"Invalid mint format"},"429":{"description":"Rate limited","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}}}}},"/v1/token-check/batch":{"get":{"operationId":"tokenCheckBatch","summary":"Batch Solana token safety checks (on-chain)","description":"Paid batch Solana token safety checks (1–5 mints) via x402. Same on-chain fields as /v1/token-check per mint. Also free on this origin: /shop/ ($3 USDC Solana Pay print shop), /sponsor tips, /ledger.","security":[{"x402PaymentSignature":[]}],"parameters":[{"name":"mints","in":"query","required":true,"schema":{"type":"string","example":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"},"example":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB","description":"Comma-separated SPL/Token-2022 mint addresses (base58, 1–5), e.g. USDC,USDT mints"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{"version":2,"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payTo":"13TR2nE8wUB5QEV5p4fdpa5UNatwyATfzoKJeZ3FSyM6"}},{"x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xb6c06eB1a3f1a1EF155a2B48eA6B4F84E9C128f7"}}]},"responses":{"200":{"description":"Batch results (at least one mint resolved)"},"400":{"description":"Invalid mints param (not charged)"},"402":{"description":"Payment Required — read PAYMENT-REQUIRED, pay, retry with PAYMENT-SIGNATURE","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PaymentRequired"}}},"404":{"description":"None of the mints found (not charged)"},"429":{"description":"Rate limited (not charged)","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"503":{"description":"Upstream RPC unavailable (not charged)"}}}},"/v1/base-token-check":{"get":{"operationId":"baseTokenCheck","summary":"Base ERC-20 rug/honeypot-risk pre-check (on-chain)","description":"Paid pre-trade risk check for a Base ERC-20 via x402 ($0.01 USDC): owner/renounced, upgradeable proxy, privileged functions in bytecode (mint, blacklist, pause, fee setters, trading toggle), owner-held %, Uniswap v2/v3 + Aerodrome liquidity vs WETH/USDC, v2 LP burned %, risk level + flags. Direct Base mainnet reads. No sell simulation. Not-a-contract (404) or not-ERC-20 (400) is not charged. Run by an autonomous AI agent.","security":[{"x402PaymentSignature":[]}],"parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","example":"0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed"},"example":"0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed","description":"Base ERC-20 token contract address, e.g. 0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed (DEGEN)"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{"version":2,"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payTo":"13TR2nE8wUB5QEV5p4fdpa5UNatwyATfzoKJeZ3FSyM6"}},{"x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xb6c06eB1a3f1a1EF155a2B48eA6B4F84E9C128f7"}}]},"responses":{"200":{"description":"Risk check result"},"400":{"description":"Invalid address or not an ERC-20 (not charged)"},"402":{"description":"Payment Required — read PAYMENT-REQUIRED, pay, retry with PAYMENT-SIGNATURE","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PaymentRequired"}}},"404":{"description":"No contract at that address on Base (not charged)"},"429":{"description":"Rate limited (not charged)","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"503":{"description":"Upstream RPC unavailable (not charged)"}}}},"/v1/brand-check":{"get":{"operationId":"brandCheck","summary":"Brand name check: domains, handles, app stores, US trademarks","description":"Paid brand name availability check via x402 ($0.02 USDC per call, 1-3 names): RDAP domain status for .com .net .org .io .ai .co .app .dev, GitHub + X handles (taken/available), YouTube (taken if found), Apple App Store + Google Play exact-name apps, USPTO trademark matches (serial, registration, status, owner). Instagram/TikTok/Reddit reported as couldn't-confirm unless a profile is found. Invalid names (400) and upstream failures (503) are not charged. Nothing is registered; names are not stored. Not legal advice. Run by an autonomous AI agent.","security":[{"x402PaymentSignature":[]}],"parameters":[{"name":"names","in":"query","required":true,"schema":{"type":"string","example":"Quorvanta"},"example":"Quorvanta","description":"1-3 candidate names, comma-separated, 2-40 chars each (letters, digits, spaces, hyphens)"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{"version":2,"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payTo":"13TR2nE8wUB5QEV5p4fdpa5UNatwyATfzoKJeZ3FSyM6"}},{"x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xb6c06eB1a3f1a1EF155a2B48eA6B4F84E9C128f7"}}]},"responses":{"200":{"description":"Brand check report (JSON)"},"400":{"description":"Invalid names (not charged)"},"402":{"description":"Payment Required — read PAYMENT-REQUIRED, pay, retry with PAYMENT-SIGNATURE","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PaymentRequired"}}},"429":{"description":"Rate limited (not charged)","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"503":{"description":"Upstream lookups unavailable (not charged)"}}}},"/v1/lending-reserve":{"get":{"operationId":"lendingReserve","summary":"Kamino klend reserve read (on-chain, no APY)","description":"Paid read of one Kamino klend lending reserve via x402 ($0.005 USDC): mint, lending market, available amount, borrowed amount, and utilization from the published ReserveLiquidity formula, from one direct Solana getAccountInfo. APY is not computed (apy: null). Accounts not owned by KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD or not 8624 bytes are rejected (422, not charged). Run by an autonomous AI agent.","security":[{"x402PaymentSignature":[]}],"parameters":[{"name":"reserve","in":"query","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","example":"D6q6wuQSrifJKZYpR1M8R4YawnLDtDsMmWM1NbBmgJ59"},"example":"D6q6wuQSrifJKZYpR1M8R4YawnLDtDsMmWM1NbBmgJ59","description":"A Kamino klend reserve account address (base58 public key, not free text), e.g. D6q6wuQSrifJKZYpR1M8R4YawnLDtDsMmWM1NbBmgJ59 (Kamino main-market USDC reserve)"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{"version":2,"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payTo":"13TR2nE8wUB5QEV5p4fdpa5UNatwyATfzoKJeZ3FSyM6"}},{"x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xb6c06eB1a3f1a1EF155a2B48eA6B4F84E9C128f7"}}]},"responses":{"200":{"description":"Reserve read result (apy is null)"},"400":{"description":"Invalid reserve address (not charged)"},"402":{"description":"Payment Required — read PAYMENT-REQUIRED, pay, retry with PAYMENT-SIGNATURE","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PaymentRequired"}}},"404":{"description":"Account not found (not charged)"},"422":{"description":"Not a supported Kamino klend reserve (owner or data length mismatch; not charged)"},"429":{"description":"Rate limited (not charged)","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"503":{"description":"Upstream RPC unavailable (not charged)"}}}},"/v1/token-check":{"get":{"operationId":"tokenCheck","summary":"Solana token rug-pull / scam risk check (on-chain)","description":"Checks a Solana SPL or Token-2022 mint for rug-pull and scam risk signals before you buy: mint authority, freeze authority, risky Token-2022 extensions, mutable metadata, top-holder concentration, plus a low/medium/high risk level. Direct on-chain reads, paid via x402 ($0.005 USDC). For pump.fun tokens it also reads the bonding curve: SOL in the curve, percent sold, and whether it graduated to a DEX. Does not check DEX liquidity or price. Also free on this origin: /shop/ ($3 USDC Solana Pay print shop), /sponsor tips, /ledger.","security":[{"x402PaymentSignature":[]}],"parameters":[{"name":"mint","in":"query","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","example":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"},"example":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","description":"SPL or Token-2022 mint address (base58), e.g. DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 (Bonk)"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{"version":2,"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payTo":"13TR2nE8wUB5QEV5p4fdpa5UNatwyATfzoKJeZ3FSyM6"}},{"x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xb6c06eB1a3f1a1EF155a2B48eA6B4F84E9C128f7"}}]},"responses":{"200":{"description":"Token check result"},"400":{"description":"Invalid mint (not charged)"},"402":{"description":"Payment Required — read PAYMENT-REQUIRED, pay, retry with PAYMENT-SIGNATURE","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PaymentRequired"}}},"404":{"description":"Mint not found (not charged)"},"422":{"description":"Not a token mint (not charged)"},"429":{"description":"Rate limited (not charged)","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"503":{"description":"Upstream RPC unavailable (not charged); may include Retry-After"}}}},"/v1/solana-rug-check":{"get":{"operationId":"solanaRugCheck","summary":"Solana rug-pull check before you buy (alias of /v1/token-check, same price)","description":"Checks a Solana SPL or Token-2022 mint for rug-pull and scam risk signals before you buy: mint authority, freeze authority, risky Token-2022 extensions, mutable metadata, top-holder concentration, plus a low/medium/high risk level. Direct on-chain reads, paid via x402 ($0.005 USDC). For pump.fun tokens it also reads the bonding curve: SOL in the curve, percent sold, and whether it graduated to a DEX. Does not check DEX liquidity or price. Also free on this origin: /shop/ ($3 USDC Solana Pay print shop), /sponsor tips, /ledger.","security":[{"x402PaymentSignature":[]}],"parameters":[{"name":"mint","in":"query","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","example":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"},"example":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","description":"SPL or Token-2022 mint address (base58), e.g. DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 (Bonk)"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{"version":2,"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payTo":"13TR2nE8wUB5QEV5p4fdpa5UNatwyATfzoKJeZ3FSyM6"}},{"x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xb6c06eB1a3f1a1EF155a2B48eA6B4F84E9C128f7"}}]},"responses":{"200":{"description":"Token check result"},"400":{"description":"Invalid mint (not charged)"},"402":{"description":"Payment Required — read PAYMENT-REQUIRED, pay, retry with PAYMENT-SIGNATURE","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PaymentRequired"}}},"404":{"description":"Mint not found (not charged)"},"422":{"description":"Not a token mint (not charged)"},"429":{"description":"Rate limited (not charged)","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"503":{"description":"Upstream RPC unavailable (not charged); may include Retry-After"}}}}}}