{"ok":true,"site":{"host":"canix402.compx.io","url":"https://canix402.compx.io/webmcp","type":"live","desc":"Canix402 Live: search DeFi opportunities in the browser with the same MCP tools agents use. Walletless receipts, no server-side signing or submission.","tools":[{"name":"canix_health","kind":"answer","impl":"imperative","description":"Check canix402 gateway liveness via GET /health. Free endpoint.","title":"canix_health","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_metadata","kind":"answer","impl":"imperative","description":"Fetch canix402 metadata and endpoint policy matrix via GET /metadata. Free endpoint.","title":"canix_get_metadata","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_discovery","kind":"answer","impl":"imperative","description":"Fetch the discovery catalog via GET /discovery. Free endpoint.","title":"canix_get_discovery","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_openapi","kind":"answer","impl":"imperative","description":"Fetch the OpenAPI contract via GET /openapi.json. Free endpoint.","title":"canix_get_openapi","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_token_prices","kind":"act","impl":"imperative","description":"Fetch CompX USD oracle prices for Algorand asset IDs via POST /pricing. Free endpoint; missing prices are returned as null.","title":"canix_get_token_prices","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"assetIds":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer","minimum":0}}},"required":["assetIds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_list_execution_shapes","kind":"answer","impl":"imperative","description":"List verified execution shape catalog metadata via GET /execution/shapes (free). Returns shapeKey, requiredInputs, opportunityRole, docsPath, and meta.caveatsDocsPath from the live protocol registry. Catalog only — compile unsigned groups with canix_get_execution_quote (paid). Do not guess pool discovery, opt-ins, min-balance, slippage, liquidity limits, or app upgrades — read protocol/docs/execution-shapes/protocol-caveats.md and each shape's docsPath.","title":"canix_list_execution_shapes","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_list_opportunities","kind":"act","impl":"imperative","description":"List top aggregated DeFi opportunities across supported chains ranked by risk then APY (GET /opportunities). Each row includes chain (algorand|base). Paid ~0.01 USDC.","title":"canix_list_opportunities","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0},"includeInactive":{"type":"boolean"},"protocol":{"type":"string","enum":["tinyman","pact","folks-finance","compx","dorkfi","myth-finance","haystack","reti","alpha-arcade","stamm","morpho","aave","aerodrome"]},"chain":{"type":"string","enum":["algorand","base"]},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_search_opportunities","kind":"act","impl":"imperative","description":"Search/filter opportunities via GET /opportunities/search. Optional chain=algorand|base. Optional assetIds is a comma-separated list of ASA ids (0 = ALGO). Paid ~0.01 USDC.","title":"canix_search_opportunities","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"platform":{"type":"string"},"type":{"type":"string"},"minApy":{"type":"number"},"maxApy":{"type":"number"},"minTvlUsd":{"type":"number","minimum":0},"chain":{"type":"string","enum":["algorand","base"]},"assetIds":{"type":"string","description":"Comma-separated ASA ids (0 = ALGO)."},"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0},"includeInactive":{"type":"boolean"},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_personalized_opportunities","kind":"act","impl":"imperative","description":"Fetch wallet-aware opportunities matched to held assets (GET /opportunities/personalized). Applies eligibility rules so full/gated venues are not recommended as enterable. Use canix_check_eligibility for missingAssets/gates/capacity. Paid ~0.05 USDC.","title":"canix_get_personalized_opportunities","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":58,"maxLength":58,"description":"58-character account address."},"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0},"includeInactive":{"type":"boolean"},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["address"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_opportunity_history","kind":"answer","impl":"imperative","description":"Fetch a bounded APY/TVL history series for one opportunity (GET /opportunities/{opportunityId}/history). Window is 1d, 7d, or 30d (default 30d). Empty points until snapshots exist. Includes a stability signal so snapshot APY cannot dominate plan sizing. Paid ~0.01 USDC.","title":"canix_get_opportunity_history","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"opportunityId":{"type":"string","minLength":1},"window":{"type":"string","enum":["1d","7d","30d"]},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["opportunityId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_check_eligibility","kind":"act","impl":"imperative","description":"Check whether a wallet can enter selected opportunities before quoting (POST /eligibility). Pass address and opportunityIds (1–25). Returns canEnter, missingAssets, gates, capacity, suggestedSwap, and eligibilityFullyCheckable. NFD/creator gates stay unresolved — canEnter is never true until fully checkable. Paid ~0.01 USDC.","title":"canix_check_eligibility","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Account address."},"opportunityIds":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"string","minLength":1}},"refresh":{"type":"boolean"},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["address","opportunityIds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_plan","kind":"act","impl":"imperative","description":"Compile an allocation intent into an ordered unsigned plan (POST /plans). Pass address and budget { assetId, amount } (base units; 0 = ALGO). Optional constraints and opportunityIds. Optional swapSlippage for multi-router compose. Returns eligibility, live multi-router opt-in/swap groups when requiredAssetIds differ from the budget asset, setup/enter quotes[] as independent unsigned groups (never merged), expected position delta, attached data.simulation when groups compiled, x402 + network fee totals, and expiry. Paid ~0.25 USDC. Canix does not sign or submit.","title":"canix_get_plan","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Account address."},"budget":{"type":"object","required":["assetId","amount"],"properties":{"assetId":{"type":"integer","minimum":0},"amount":{"type":"string","minLength":1}}},"constraints":{"type":"object","additionalProperties":false,"properties":{"maxProtocolWeightBps":{"type":"integer","minimum":1,"maximum":10000},"noNewBorrows":{"type":"boolean"},"executionReadyOnly":{"type":"boolean"},"minTvlUsd":{"type":"number","minimum":0},"maxSourceAgeSeconds":{"type":"integer","minimum":0},"maxAllocations":{"type":"integer","minimum":1,"maximum":10}}},"opportunityIds":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"string","minLength":1}},"swapSlippage":{"type":"number","minimum":0,"maximum":100},"refresh":{"type":"boolean"},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["address","budget"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_protocol_opportunities","kind":"act","impl":"imperative","description":"List opportunities for a single protocol (GET /protocols/{protocol}/opportunities). Paid ~0.01 USDC.","title":"canix_get_protocol_opportunities","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"protocol":{"type":"string","enum":["tinyman","pact","folks-finance","compx","dorkfi","myth-finance","haystack","reti","alpha-arcade","stamm","morpho","aave","aerodrome"]},"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0},"includeInactive":{"type":"boolean"},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["protocol"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_positions","kind":"act","impl":"imperative","description":"Fetch Algorand DeFi positions for a wallet via GET /positions. Paid ~0.005 USDC. First call returns PAYMENT-REQUIRED metadata; retry with paymentSignature.","title":"canix_get_positions","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Account address."},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["address"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_list_claimable","kind":"act","impl":"imperative","description":"List claimable DeFi rewards for a wallet via GET /positions/claimable. Returns USD value, network-fee / worth-claiming hints, claim shapeKeys, and claimAllQuotes ready for canix_get_execution_quote. Paid ~0.001 USDC. Then compile with canix_get_execution_quote (~0.10 USDC flat); groups are never merged. Sign and submit locally.","title":"canix_list_claimable","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Account address."},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["address"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_execution_quote","kind":"act","impl":"imperative","description":"Compile one or more unsigned groups (POST /execution/quotes). Algorand shapes return Algorand groups; Morpho shapes (base:morpho:vault:*), Aave shapes (base:aave:v3:*), and Aerodrome shapes (base:aerodrome:v2:*) return unsigned Base calldata. Pass an Algorand userAddress unless the shape is on Base. Omitting a Base address does not change rank, eligibility, price, or access. Pass quotes: [{ shapeKey, input }, ...]. Required input fields vary by shapeKey — call canix_list_execution_shapes and use each shape's requiredInputs (userAddress is always required). Response data is an ExecutableQuote array. Paid flat ~0.10 USDC per request on Algorand or Base (not per item). On failure, error.details includes quoteIndex and shapeKey. Do not guess pool discovery, opt-ins, min-balance, slippage, liquidity limits, or app upgrades — read protocol/docs/execution-shapes/protocol-caveats.md and each shape's docsPath. Haystack Launch compiles here too: mainnet:haystack:v1:launch:token takes an existing ipfs:// or https:// assetUrl, and mainnet:haystack:v1:buy:bonding buys a token still on the curve (direct bonding-asset payment, or a Haystack-router leg). A bonding buy is not canix_swap.","title":"canix_get_execution_quote","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"quotes":{"type":"array","minItems":1,"items":{"type":"object","required":["shapeKey","input"],"properties":{"shapeKey":{"type":"string","minLength":1},"input":{"type":"object","required":["userAddress"],"properties":{"userAddress":{"type":"string","minLength":1}},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}}},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["quotes"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_quote","kind":"act","impl":"imperative","description":"Get a stateless multi-router swap quote via POST /swaps/quote. Quotes enabled routers in parallel and returns the best expected net out. Optional router forces one adapter. Pass the response data unchanged into canix_optin / canix_swap.","title":"canix_get_quote","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Account address."},"fromAssetId":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","pattern":"^[0-9]+$"}]},"toAssetId":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","pattern":"^[0-9]+$"}]},"amount":{"anyOf":[{"type":"integer","minimum":1},{"type":"string","pattern":"^[1-9][0-9]*$"}]},"type":{"type":"string","enum":["fixed-input","fixed-output"]},"router":{"type":"string","enum":["haystack","hogswap","tinyman","pact-smart-router","folks-router","asastats"]},"slippage":{"type":"number","minimum":0,"maximum":100},"disabledProtocols":{"type":"array","items":{"type":"string","enum":["Tinyman","Humble","TinymanV2","Algofi","Algomint","Pact","Folks","TAlgo"]}},"maxGroupSize":{"type":"integer","minimum":1,"maximum":16},"maxDepth":{"type":"integer","minimum":1,"maximum":4}},"required":["address","fromAssetId","toAssetId","amount"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_optin","kind":"act","impl":"imperative","description":"Build missing output-asset and application opt-ins via POST /swaps/optin for the winning quote. Free endpoint; pass the quote data object unchanged.","title":"canix_optin","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":58,"maxLength":58,"description":"58-character account address."},"quote":{"type":"object","required":["router","address","fromAssetId","toAssetId","amount","type","quotedAmount","minOut","networkFeeMicroAlgos","slippageBps","createdAt","expiresAt","score","alternatives","legs","payload"],"properties":{"router":{"type":"string","enum":["haystack","hogswap","tinyman","pact-smart-router","folks-router","asastats"]},"address":{"type":"string","minLength":58,"maxLength":58,"description":"58-character account address."},"fromAssetId":{"type":"string","pattern":"^[0-9]+$"},"toAssetId":{"type":"string","pattern":"^[0-9]+$"},"amount":{"type":"string","pattern":"^[1-9][0-9]*$"},"type":{"type":"string","enum":["fixed-input","fixed-output"]},"quotedAmount":{"type":"string","pattern":"^[0-9]+$"},"minOut":{"type":"string","pattern":"^[0-9]+$"},"networkFeeMicroAlgos":{"type":"string","pattern":"^[0-9]+$"},"slippageBps":{"type":"integer","minimum":0,"maximum":10000},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"score":{"type":"object","required":["expectedNetOut","minOut","expectedIn","networkFeeMicroAlgos","feeAlreadyNetted"],"properties":{"expectedNetOut":{"type":"string","pattern":"^[0-9]+$"},"minOut":{"type":"string","pattern":"^[0-9]+$"},"expectedIn":{"type":"string","pattern":"^[0-9]+$"},"maxIn":{"type":"string","pattern":"^[0-9]+$"},"networkFeeMicroAlgos":{"type":"string","pattern":"^[0-9]+$"},"feeAlreadyNetted":{"type":"boolean"}}},"alternatives":{"type":"array","items":{"type":"object","required":["router","status"],"properties":{"router":{"type":"string","enum":["haystack","hogswap","tinyman","pact-smart-router","folks-router","asastats"]},"status":{"type":"string","enum":["quoted","error","skipped","timeout"]},"expectedNetOut":{"type":"string","pattern":"^[0-9]+$"},"minOut":{"type":"string","pattern":"^[0-9]+$"},"networkFeeMicroAlgos":{"type":"string","pattern":"^[0-9]+$"},"reason":{"type":"string"}}}},"legs":{"type":"array","items":{}},"payload":{}}}},"required":["address","quote"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_swap","kind":"act","impl":"imperative","description":"Build unsigned swap transactions via paid POST /swaps/transactions (~0.005 USDC) for the winning quote. Omit paymentSignature for x402 preflight, then retry with the same inputs. Canix does not sign or submit.","title":"canix_swap","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":58,"maxLength":58,"description":"58-character account address."},"quote":{"type":"object","required":["router","address","fromAssetId","toAssetId","amount","type","quotedAmount","minOut","networkFeeMicroAlgos","slippageBps","createdAt","expiresAt","score","alternatives","legs","payload"],"properties":{"router":{"type":"string","enum":["haystack","hogswap","tinyman","pact-smart-router","folks-router","asastats"]},"address":{"type":"string","minLength":58,"maxLength":58,"description":"58-character account address."},"fromAssetId":{"type":"string","pattern":"^[0-9]+$"},"toAssetId":{"type":"string","pattern":"^[0-9]+$"},"amount":{"type":"string","pattern":"^[1-9][0-9]*$"},"type":{"type":"string","enum":["fixed-input","fixed-output"]},"quotedAmount":{"type":"string","pattern":"^[0-9]+$"},"minOut":{"type":"string","pattern":"^[0-9]+$"},"networkFeeMicroAlgos":{"type":"string","pattern":"^[0-9]+$"},"slippageBps":{"type":"integer","minimum":0,"maximum":10000},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"score":{"type":"object","required":["expectedNetOut","minOut","expectedIn","networkFeeMicroAlgos","feeAlreadyNetted"],"properties":{"expectedNetOut":{"type":"string","pattern":"^[0-9]+$"},"minOut":{"type":"string","pattern":"^[0-9]+$"},"expectedIn":{"type":"string","pattern":"^[0-9]+$"},"maxIn":{"type":"string","pattern":"^[0-9]+$"},"networkFeeMicroAlgos":{"type":"string","pattern":"^[0-9]+$"},"feeAlreadyNetted":{"type":"boolean"}}},"alternatives":{"type":"array","items":{"type":"object","required":["router","status"],"properties":{"router":{"type":"string","enum":["haystack","hogswap","tinyman","pact-smart-router","folks-router","asastats"]},"status":{"type":"string","enum":["quoted","error","skipped","timeout"]},"expectedNetOut":{"type":"string","pattern":"^[0-9]+$"},"minOut":{"type":"string","pattern":"^[0-9]+$"},"networkFeeMicroAlgos":{"type":"string","pattern":"^[0-9]+$"},"reason":{"type":"string"}}}},"legs":{"type":"array","items":{}},"payload":{}}},"slippage":{"type":"number","minimum":0,"maximum":100},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."},"sessionReceipt":{"type":"string","minLength":1,"description":"Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."}},"required":["address","quote","slippage"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_create_session","kind":"act","impl":"imperative","description":"Buy a prepaid agent session (POST /sessions, ~0.25 USDC). One x402 payment mints a walletless receipt that unlocks N research calls and M quotes/plans until TTL. Sessions are receipts, not keys. Create/refresh cannot be paid with an existing session.","title":"canix_create_session","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_refresh_session","kind":"act","impl":"imperative","description":"Refresh a prepaid session (POST /sessions/refresh, ~0.25 USDC). Resets N/M and TTL in place, or mints a new receipt if the previous one is gone. One-shot only.","title":"canix_refresh_session","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"sessionId":{"type":"string","minLength":1},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_session","kind":"answer","impl":"imperative","description":"Read remaining N/M and expiry for a prepaid session receipt (GET /sessions/{sessionId}). Free. Prefer this over the public indexer /transactions showcase.","title":"canix_get_session","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"sessionId":{"type":"string","minLength":1}},"required":["sessionId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_create_watch","kind":"transact","impl":"imperative","description":"Register a paid wallet watch retainer (POST /watch, ~0.25 USDC). Address + thresholds + optional HTTPS webhook. HMAC secret shown once. Canix never stores wallet keys.","title":"canix_create_watch","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","minLength":58,"maxLength":58,"description":"58-character account address."},"thresholds":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"healthFactor":{"type":"number","exclusiveMinimum":0},"claimableUsd":{"type":"number","minimum":0},"apyDropBps":{"type":"integer","minimum":1,"maximum":100000},"retiCapacity":{"anyOf":[{"type":"boolean","const":true},{"type":"object","additionalProperties":false,"properties":{"minStakerSlotsRemaining":{"type":"integer","minimum":0},"minAlgoRoomMicroAlgos":{"type":"string","pattern":"^[0-9]+$"}}}]}}},"webhookUrl":{"type":"string","minLength":8,"maxLength":2048},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."}},"required":["address","thresholds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_refresh_watch","kind":"act","impl":"imperative","description":"Refresh a paid watch retainer (POST /watch/refresh, ~0.25 USDC). Extends TTL. Optionally rotateSecret. One-shot only.","title":"canix_refresh_watch","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"watchId":{"type":"string","minLength":1},"rotateSecret":{"type":"boolean"},"paymentSignature":{"type":"string","minLength":1,"description":"Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."}},"required":["watchId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_get_watch","kind":"answer","impl":"imperative","description":"Read a watch receipt and recent threshold firings (GET /watch/{watchId}). Free. Does not return the HMAC secret.","title":"canix_get_watch","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"watchId":{"type":"string","minLength":1}},"required":["watchId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]},{"name":"canix_rotate_watch_secret","kind":"act","impl":"imperative","description":"Rotate the watch webhook HMAC secret (POST /watch/{watchId}/rotate-secret). Free. Requires the current secret.","title":"canix_rotate_watch_secret","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"watchId":{"type":"string","minLength":1},"webhookSecret":{"type":"string","minLength":1}},"required":["watchId","webhookSecret"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp","pages":["/webmcp"]}],"category":"Finance & Crypto","favicon":"/favicons/canix402.compx.io.png","apiSurface":"spec","toolCount":26}}