{"name":"SolKnife","version":"1.0.0","description":"Non-custodial Solana toolkit. Every UI action is reachable via JSON HTTP. Server builds unsigned transactions; the caller (user wallet or agent with key custody) signs; server self-submits.","site":"https://solknife.xyz","humanDocs":"https://solknife.xyz/agents","pricingEndpoint":"/api/pricing","mcp":{"endpoint":"https://solknife.xyz/api/mcp","transport":"streamable-http","phase":"1-2-3-reads-builds-submits","x402Gated":false},"x402":{"enabled":false,"scheme":"solana","network":"mainnet-beta","price":{"lamports":"150000","recipient":"6bh83R94PBoYgzQXzXwoyh93s4ibQvnfgjmggNxkxNYb"},"bypassOrigin":"https://solknife.xyz","legacyOriginBypass":false,"sessionCookie":"solknife-session","sessionAuth":{"challengeEndpoint":"/api/auth/challenge","verifyEndpoint":"/api/auth/verify","logoutEndpoint":"/api/auth/logout","scheme":"siws","ttlSeconds":3600},"gatedPaths":["/api/check","/api/portfolio","/api/positions","/api/pool","/api/pool-compare","/api/token-meta","/api/reclaim-rent/accounts","/api/revoke-authority/mint","/api/token-metadata/state","/api/mint-supply/mint","/api/burn-nft/assets","/api/confidential-transfer/state","/api/confidential-transfer/orphans/list","/api/create-mint/build","/api/mint-supply/build","/api/create-account/build","/api/reclaim-rent/build","/api/revoke-authority/build","/api/token-metadata/build","/api/burn-nft/build","/api/swap/order","/api/confidential-transfer/build","/api/confidential-transfer/deposit/build","/api/confidential-transfer/apply-pending/build","/api/confidential-transfer/empty-and-close/build","/api/confidential-transfer/withdraw/build","/api/confidential-transfer/transfer/build","/api/confidential-transfer/orphans/build","/api/mcp"],"retryHeader":"X-Payment","verification":"Server fetches the tx via Helius getTransaction, checks: status=confirmed; ≥ one top-level SystemProgram.transfer from fee payer to `price.recipient` for ≥ `price.lamports`; blockTime within the last 10 minutes. In-process dedup against the signature for the lifetime of the pod.","phase":1},"categories":[{"label":"Token safety + discovery","tools":[{"id":"check.scan","kind":"read","method":"GET","path":"/api/check","purpose":"Rug-check a Solana token: freeze authority, sellability, holders, liquidity.","inputs":["mint"]},{"id":"token.meta","kind":"read","method":"GET","path":"/api/token-meta","purpose":"Fetch token metadata (name, symbol, decimals, image) for a mint.","inputs":["mint"]},{"id":"portfolio.holdings","kind":"read","method":"GET","path":"/api/portfolio","purpose":"List a wallet's priced token holdings.","inputs":["owner"]}]},{"label":"DLMM (Meteora) liquidity","tools":[{"id":"pool.check","kind":"read","method":"GET","path":"/api/pool","purpose":"Read one DLMM pool: depth, volume, fee yield, token safety summary.","inputs":["address"]},{"id":"pool.compare","kind":"read","method":"GET","path":"/api/pool-compare","purpose":"Compare every DLMM pool for a token side by side.","inputs":["mint"]},{"id":"positions.list","kind":"read","method":"GET","path":"/api/positions","purpose":"List a wallet's open Meteora DLMM positions with PnL.","inputs":["owner"]}]},{"label":"Swap","tools":[{"id":"swap.order","kind":"build","method":"POST","path":"/api/swap/order","purpose":"Jupiter quote + unsigned swap transaction.","inputs":["inputMint","outputMint","amount","slippageBps","userPubkey"]},{"id":"swap.execute","kind":"submit","method":"POST","path":"/api/swap/execute","purpose":"Submit a wallet-signed swap transaction.","inputs":["signedTransaction","lastValidBlockHeight"]}]},{"label":"Token lifecycle (SPL + Token-2022)","tools":[{"id":"create-mint.build","kind":"build","method":"POST","path":"/api/create-mint/build","purpose":"Build an unsigned create-mint tx (extensions incl. confidential transfer).","inputs":["owner","decimals","extensions"]},{"id":"create-mint.execute","kind":"submit","method":"POST","path":"/api/create-mint/execute","purpose":"Submit the signed create-mint tx.","inputs":["signedTransaction","lastValidBlockHeight"]},{"id":"mint-supply.read","kind":"read","method":"GET","path":"/api/mint-supply/mint","purpose":"Read a mint's authority state for mint-to.","inputs":["mint"]},{"id":"mint-supply.build","kind":"build","method":"POST","path":"/api/mint-supply/build","purpose":"Build an unsigned mint-to tx.","inputs":["mint","destination","amount"]},{"id":"mint-supply.execute","kind":"submit","method":"POST","path":"/api/mint-supply/execute","purpose":"Submit the signed mint-to tx.","inputs":["signedTransaction","lastValidBlockHeight"]},{"id":"revoke-authority.read","kind":"read","method":"GET","path":"/api/revoke-authority/mint","purpose":"Read a mint's current mint + freeze authorities.","inputs":["mint"]},{"id":"revoke-authority.build","kind":"build","method":"POST","path":"/api/revoke-authority/build","purpose":"Build an unsigned revoke-authority tx.","inputs":["mint","owner","authorities"]},{"id":"revoke-authority.execute","kind":"submit","method":"POST","path":"/api/revoke-authority/execute","purpose":"Submit the signed revoke-authority tx.","inputs":["signedTransaction","lastValidBlockHeight"]},{"id":"token-metadata.read","kind":"read","method":"GET","path":"/api/token-metadata/state","purpose":"Read a mint's current on-chain Metaplex metadata.","inputs":["mint"]},{"id":"token-metadata.build","kind":"build","method":"POST","path":"/api/token-metadata/build","purpose":"Build an unsigned set/update metadata tx.","inputs":["mint","owner","name","symbol","uri"]},{"id":"token-metadata.execute","kind":"submit","method":"POST","path":"/api/token-metadata/execute","purpose":"Submit the signed metadata tx.","inputs":["signedTransaction","lastValidBlockHeight"]}]},{"label":"Token accounts","tools":[{"id":"create-account.build","kind":"build","method":"POST","path":"/api/create-account/build","purpose":"Build an unsigned ATA-create tx (SPL or Token-2022).","inputs":["owner","mint","tokenProgram"]},{"id":"create-account.execute","kind":"submit","method":"POST","path":"/api/create-account/execute","purpose":"Submit the signed ATA-create tx.","inputs":["signedTransaction","lastValidBlockHeight"]},{"id":"reclaim-rent.list","kind":"read","method":"GET","path":"/api/reclaim-rent/accounts","purpose":"List a wallet's reclaimable empty token accounts.","inputs":["owner"]},{"id":"reclaim-rent.build","kind":"build","method":"POST","path":"/api/reclaim-rent/build","purpose":"Build chunked close-batch tx(s).","inputs":["owner","accounts"]},{"id":"reclaim-rent.execute","kind":"submit","method":"POST","path":"/api/reclaim-rent/execute","purpose":"Submit the signed close-batch tx(s).","inputs":["owner","signedTransactions","lastValidBlockHeight"]},{"id":"burn-nft.list","kind":"read","method":"GET","path":"/api/burn-nft/assets","purpose":"List a wallet's NFT assets (DAS).","inputs":["owner"]},{"id":"burn-nft.build","kind":"build","method":"POST","path":"/api/burn-nft/build","purpose":"Build chunked burn tx(s) for selected NFTs.","inputs":["owner","assets"]},{"id":"burn-nft.execute","kind":"submit","method":"POST","path":"/api/burn-nft/execute","purpose":"Submit the signed burn tx(s).","inputs":["owner","signedTransactions","lastValidBlockHeight"]}]},{"label":"Confidential transfer (Token-2022)","tools":[{"id":"ct.state","kind":"read","method":"GET","path":"/api/confidential-transfer/state","purpose":"Read CT state for owner + mint (mint extension, account configured, balance ciphertexts).","inputs":["owner","mint"]},{"id":"ct.orphans.list","kind":"read","method":"GET","path":"/api/confidential-transfer/orphans/list","purpose":"List a wallet's orphan ZK Proof context-state accounts.","inputs":["owner"]},{"id":"ct.configure.build","kind":"build","method":"POST","path":"/api/confidential-transfer/build","purpose":"Build the Configure tx. Needs worker-generated PubkeyValidity proof + zero AES ciphertext.","inputs":["owner","mint","pubkeyValidityProof","decryptableZeroBalance"]},{"id":"ct.deposit.build","kind":"build","method":"POST","path":"/api/confidential-transfer/deposit/build","purpose":"Build the Deposit tx (public → confidential pending).","inputs":["owner","mint","amount","decimals"]},{"id":"ct.apply.build","kind":"build","method":"POST","path":"/api/confidential-transfer/apply-pending/build","purpose":"Build the ApplyPending tx. Needs worker-computed new AES decryptable + counter.","inputs":["owner","mint","expectedPendingCounter","newDecryptableAvailable"]},{"id":"ct.empty-and-close.build","kind":"build","method":"POST","path":"/api/confidential-transfer/empty-and-close/build","purpose":"Build the Empty+Close tx. Needs worker-generated zero-ciphertext proof.","inputs":["owner","mint","zeroCiphertextProof"]},{"id":"ct.withdraw.build","kind":"build","method":"POST","path":"/api/confidential-transfer/withdraw/build","purpose":"Build the 5-tx Withdraw saga. Needs equality + range U64 proofs + new AES decryptable.","inputs":["owner","mint","amount","decimals","equalityContextAccount","rangeContextAccount","equalityProof","rangeProof","newDecryptableAvailable"]},{"id":"ct.transfer.build","kind":"build","method":"POST","path":"/api/confidential-transfer/transfer/build","purpose":"Build the 5-tx Transfer saga. Needs equality + 3HV + range U128 proofs + auditor ciphertexts.","inputs":["owner","mint","destinationTokenAccount","equalityContextAccount","validityContextAccount","rangeContextAccount","equalityProof","validityProof","rangeProof","newSourceDecryptableAvailable","auditorCiphertextLo","auditorCiphertextHi"]},{"id":"ct.orphans.build","kind":"build","method":"POST","path":"/api/confidential-transfer/orphans/build","purpose":"Build chunked CloseContextState tx(s) to reclaim orphan ZK ctx rent.","inputs":["owner","addresses"]},{"id":"ct.submit","kind":"submit","method":"POST","path":"/api/confidential-transfer/submit","purpose":"Submit any signed CT tx or saga. Op discriminator routes to verifier + sequential submitter.","inputs":["op","signedTransaction OR signedTransactions","lastValidBlockHeight"]}]}],"notes":{"walletSigning":"Every `build` returns an unsigned base64 v0 transaction. The caller signs (user wallet adapter, or a programmatic Solana Keypair for an agent with key custody) then posts the signed bytes to the matching `submit` or `execute` endpoint. The server holds no signing key.","workerBound":"Confidential-transfer build endpoints require ZK proof bytes that are generated from the user's ElGamal + AES keys. Those keys are derived from a wallet signature and live only in a Web Worker (lib/zk/proof.worker.ts). An agent that wants to drive CT autonomously has to embed the worker logic in its own runtime, becoming the key-holder. Non-CT flows are fully HTTP-callable without any worker.","fees":"Fees are env-driven per op. Swap fee accrues to a wSOL token account (SOLKNIFE_FEE_ACCOUNT / SOLKNIFE_FEE_BPS). Plain-SOL fees (reclaim-rent, create-mint, mint-supply, token-metadata, revoke-authority, burn-nft, CT deposit/apply/withdraw/transfer/reclaim) accrue to SOLKNIFE_FEE_WALLET via flat lamport transfers wired into the build output. All default to 0 (disabled) until the operator opts in.","x402":"Live state in the top-level `x402` field. When `x402.enabled` is true: gated paths (in `x402.gatedPaths`) return HTTP 402 with `{ x402: { scheme, network, lamports, to, note } }`. Pay via a single SystemProgram.transfer of `lamports` to `to` on Solana mainnet, then retry with header `X-Payment: <base58 signature>`. Two ways to bypass the gate: (1) sign in with a Solana wallet via SIWS at `x402.sessionAuth.challengeEndpoint` + `verifyEndpoint`, which sets the HttpOnly `x402.sessionCookie` cookie for `x402.sessionAuth.ttlSeconds` seconds; subsequent gated requests with that cookie skip payment. The cookie is HMAC-signed (server-side secret) and binds to a verified wallet pubkey. (2) Legacy Origin bypass: only when `x402.legacyOriginBypass` is true, requests whose Origin matches `x402.bypassOrigin` skip the gate. Origin is trivially spoofable so this is off by default. When `x402.enabled` is false the gate is a no-op and every call passes through. Phase 2 will add memo-nonce binding for cross-process replay protection."}}