{"data":{"service":"canix402","apiVersion":"0.1.0","discoveryVersion":"1.0.0","capabilities":["algorand-defi-opportunities","x402-paid-data","wallet-personalization","agent-discovery","openapi","execution-quotes","intent-plans","haystack-swaps","token-pricing","mcp-server"],"x402ProtocolVersion":2,"endpoints":[{"id":"root","method":"GET","path":"/","access":"free","summary":"API root branding and social metadata page","tags":["system","discovery"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"health","method":"GET","path":"/health","access":"free","summary":"Service health check","tags":["system"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"ready","method":"GET","path":"/ready","access":"free","summary":"Service readiness check (Algod required; Redis soft)","tags":["system"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"metrics","method":"GET","path":"/metrics","access":"free","summary":"Prometheus metrics scrape endpoint (internal)","description":"Prometheus text exposition format. Intended for internal scrapes on the protocol component (:3000). Not exposed on the public Caddy gateway.","tags":["system","observability"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"metadata","method":"GET","path":"/metadata","access":"free","summary":"Service metadata and policy surface","tags":["system","discovery"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"discovery","method":"GET","path":"/discovery","access":"free","summary":"Machine-readable endpoint catalog for agents","tags":["discovery","agents"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"openapi","method":"GET","path":"/openapi.json","access":"free","summary":"OpenAPI contract document","tags":["discovery","openapi"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"faviconIco","method":"GET","path":"/favicon.ico","access":"free","summary":"API favicon for directory indexing","tags":["system","discovery"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"faviconPng","method":"GET","path":"/favicon.png","access":"free","summary":"API favicon image","tags":["system","discovery"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"logoPng","method":"GET","path":"/logo.png","access":"free","summary":"Service logo for directory and social indexing","tags":["system","discovery"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"bannerPng","method":"GET","path":"/banner.png","access":"free","summary":"Service banner for directory and social indexing","tags":["system","discovery"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"x402WellKnown","method":"GET","path":"/.well-known/x402","access":"free","summary":"x402 discovery fan-out document","tags":["discovery","agents","x402"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"x402Manifest","method":"GET","path":"/.well-known/x402.json","access":"free","summary":"x402 discovery manifest for agent and directory indexing","tags":["discovery","agents","x402"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"haystackSwapQuote","method":"POST","path":"/swaps/quote","access":"free","summary":"Fetch a walletless Haystack swap quote","description":"Returns a serializable Haystack route quote for an Algorand swap without signing or submitting transactions. Amounts use asset base units. Quotes are short-lived and should be refreshed after completing prerequisite opt-ins.","tags":["defi","swaps","haystack","agents"],"pathParams":[],"queryParams":[],"responseCodes":[200,400,429,502]},{"id":"haystackSwapOptIn","method":"POST","path":"/swaps/optin","access":"free","summary":"Build prerequisite Haystack swap opt-ins","description":"Inspects the supplied account and quote, then returns any required output-asset and application opt-in transactions as an unsigned group. The caller signs and submits the group locally; canix402 never receives wallet keys or submits it.","tags":["defi","swaps","haystack","transactions","wallet"],"pathParams":[],"queryParams":[],"responseCodes":[200,400,502]},{"id":"tokenPricing","method":"POST","path":"/pricing","access":"free","summary":"Fetch USD token prices for Algorand asset IDs","description":"Returns CompX USD oracle prices for the requested Algorand asset IDs. A null price indicates that CompX has no current price for that asset.","tags":["defi","pricing","compx","agents"],"pathParams":[],"queryParams":[],"responseCodes":[200,400,502]},{"id":"opportunities","method":"GET","path":"/opportunities","access":"paid","summary":"Top 10 aggregated DeFi opportunities ranked by APY","description":"Returns ranked Algorand DeFi yield opportunities across supported protocols including Tinyman, Pact, Folks Finance, CompX, Dork.fi, Myth Finance, Haystack, Réti, and Alpha Arcade. Use when an agent needs to compare APY/APR, TVL, asset pairs, opportunity type, protocol, source freshness, and caveats before presenting or ranking yield options. This endpoint provides normalized market data only; it does not build or submit transactions.","tags":["defi","opportunities","x402-global-challenge"],"pathParams":[],"queryParams":["protocol","limit","offset","includeInactive","refresh"],"responseCodes":[200,402,500],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.01"},"amountUsdc":"0.01","amountMicro":"10000"}},{"id":"protocolOpportunities","method":"GET","path":"/protocols/:protocol/opportunities","access":"paid","summary":"Top 25 DeFi opportunities for a single protocol ranked by APY","description":"Returns ranked DeFi opportunities for one Algorand protocol: tinyman, pact, folks-finance, compx, dorkfi, myth-finance, haystack, reti, or alpha-arcade. Use when an agent already knows the target protocol and needs normalized APY/APR, TVL, asset pair, opportunity type, timestamps, and caveats for that venue. This endpoint provides normalized market data only; it does not build or submit transactions.","tags":["defi","opportunities","protocol","x402-global-challenge"],"pathParams":["protocol"],"queryParams":["limit","offset","includeInactive","refresh"],"responseCodes":[200,402,500],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.01"},"amountUsdc":"0.01","amountMicro":"10000"}},{"id":"filteredOpportunities","method":"GET","path":"/opportunities/search","access":"paid","summary":"Caller-filtered opportunities across supported platforms","description":"Returns Algorand DeFi opportunities filtered by platform, opportunity type, APY range, TVL threshold, and optional ASA assetIds across supported sources. Use when an agent needs targeted discovery such as high-yield liquidity pools, lending markets, protocol-specific yield, minimum-liquidity opportunities, or yields for specific Algorand assets (assetIds=0 for ALGO). This endpoint provides normalized market data only; it does not build or submit transactions.","tags":["defi","opportunities","search","x402-global-challenge"],"pathParams":[],"queryParams":["platform","type","minApy","maxApy","minTvlUsd","assetIds","limit","offset","includeInactive","refresh"],"responseCodes":[200,402,500],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.01"},"amountUsdc":"0.01","amountMicro":"10000"}},{"id":"personalizedOpportunities","method":"GET","path":"/opportunities/personalized","access":"paid","summary":"Top opportunities tuned to a wallet's held assets","description":"Returns Algorand DeFi opportunities whose underlying assets match a supplied wallet's holdings, including opted-in ASAs with positive balance and native ALGO when held. Matching applies POST /eligibility rules (min amount, ASA gates, capacity, unresolved NFD/creator gates) so full or gated venues are not recommended as enterable. Each row includes canEnter and eligibilityFullyCheckable; quote-time on-chain checks remain authoritative. Use POST /eligibility for the diagnostic (missingAssets, gates, capacity, suggestedSwap). This endpoint provides normalized market data only; it does not build or submit transactions.","tags":["defi","opportunities","personalized","wallet","x402-global-challenge"],"pathParams":[],"queryParams":["address","limit","offset","includeInactive","refresh"],"responseCodes":[200,402,500],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.05"},"amountUsdc":"0.05","amountMicro":"50000"}},{"id":"eligibility","method":"POST","path":"/eligibility","access":"paid","summary":"Wallet eligibility and capacity for selected opportunities","description":"Checks whether a wallet can enter one or more opportunities before requesting an execution quote. Resolves Réti entryRequirements and capacity (min amount, ASA gates, staker slots, ALGO room). NFD and creator gates are published as unresolved — canEnter is never true until eligibilityFullyCheckable is true. Returns missingAssets, gates, capacity, and an optional suggestedSwap hint (not a live quote). Quote-time on-chain checks remain authoritative. Canix does not sign or submit transactions.","tags":["defi","opportunities","eligibility","wallet","x402-global-challenge"],"pathParams":[],"queryParams":[],"responseCodes":[200,400,402,500,502],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.01"},"amountUsdc":"0.01","amountMicro":"10000"}},{"id":"plans","method":"POST","path":"/plans","access":"paid","summary":"Compile an allocation intent into an ordered unsigned plan","description":"Agent states an allocation intent (address, budget/asset, constraints). Canix returns ordered steps: eligibility, optional swap hints, protocol setup chains, and enter quotes as independent unsigned groups (never merged). Reuses quotes[] / order / prerequisiteShapeKeys. Includes expected position delta, x402 + network fee totals, and expiry. Quote-time on-chain checks remain authoritative. Canix does not sign or submit. Brownie and other agents should consume this SKU rather than forking a compiler.","tags":["defi","plans","execution","eligibility","wallet","x402","agents","x402-global-challenge"],"pathParams":[],"queryParams":[],"responseCodes":[200,400,402,500,502],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.25"},"amountUsdc":"0.25","amountMicro":"250000"}},{"id":"positions","method":"GET","path":"/positions","access":"paid","summary":"Algorand DeFi positions held by a wallet","description":"Returns normalized DeFi positions associated with a supplied Algorand wallet address across supported protocols. Use when an agent needs a wallet-level view of deposited, supplied, staked, or liquidity positions and their current values. This endpoint provides position data only; it does not build or submit transactions.","tags":["defi","positions","wallet","x402-global-challenge"],"pathParams":[],"queryParams":["address"],"responseCodes":[200,400,402,500,502],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.005"},"amountUsdc":"0.005","amountMicro":"5000"}},{"id":"positionsClaimable","method":"GET","path":"/positions/claimable","access":"paid","summary":"Claimable DeFi rewards across supported protocols","description":"Returns claimable reward rows for a wallet with USD value, network-fee / worth-claiming hints, compatible claim shapeKeys, and ready-to-POST quote inputs. Use claimAllQuotes (or selected per-row quotes) with POST /execution/quotes to compile unsigned claim groups — groups are never merged. Covers Tinyman farm, stALGO TINY claim, CompX staking, Pact farm, Haystack, and Alpha Arcade. This endpoint does not build or submit transactions.","tags":["defi","positions","rewards","wallet","execution","x402-global-challenge"],"pathParams":[],"queryParams":["address"],"responseCodes":[200,400,402,500,502],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.001"},"amountUsdc":"0.001","amountMicro":"1000"}},{"id":"publicBrowniePositions","method":"GET","path":"/public/agents/brownie/positions","access":"free","summary":"Public DeFi positions for the Brownie Bot showcase wallet","description":"Free showcase route that returns normalized DeFi positions for the Brownie Bot treasury wallet only. The wallet address is hardcoded server-side — this is not a general free /positions browser. Use GET /positions?address= for arbitrary wallets (paid).","tags":["defi","positions","agents","showcase"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"haystackSwapTransactions","method":"POST","path":"/swaps/transactions","access":"paid","summary":"Build a walletless Haystack swap transaction group","description":"Returns an ordered Algorand swap group for a fresh Haystack quote, including signer indexes and any Haystack pre-signed members. The caller signs only the designated transactions and submits the complete group locally. The 0.005 USDC x402 access charge is separate from Haystack's SDK-default 10 bps output fee, DEX fees, price impact, and Algorand network fees.","tags":["defi","swaps","haystack","transactions","x402","agents","x402-global-challenge"],"pathParams":[],"queryParams":[],"responseCodes":[200,400,402,429,502],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.005"},"amountUsdc":"0.005","amountMicro":"5000"}},{"id":"executionShapes","method":"GET","path":"/execution/shapes","access":"free","summary":"List verified execution shape catalog metadata","description":"Returns the live catalog of verified transaction shapes (shapeKey, requiredInputs, opportunityRole, docsPath). Catalog metadata only — does not compile quotes or return unsigned transactions. Use POST /execution/quotes to compile executable groups.","tags":["execution","discovery","agents"],"pathParams":[],"queryParams":[],"responseCodes":[200,500]},{"id":"executionQuote","method":"POST","path":"/execution/quotes","access":"paid","summary":"Compile one or more verified transaction shapes into unsigned Algorand transaction groups","description":"Accepts `{ quotes: [{ shapeKey, input }, ...] }` (min 1) and returns an array of fresh, validated, unsigned transaction groups in request order. Groups are never merged across quotes. On failure the whole request fails and error.details includes quoteIndex and shapeKey. Price is flat per request (not per quote item). Use when an agent has selected one or more DeFi actions and needs deterministic transaction bytes to sign locally. Currently supports all five Tinyman v2 LP shapes (flexible/initial/single-asset add; multiple-assets-out/single-asset-out remove), Tinyman farm shapes (staking-v1 farm:commit / farm:uncommit / farm:claimRewards; v2 addLiquidityAndFarm flexible/single-asset that add liquidity and commit the new LP position in one atomic group, with LP tokens remaining in the wallet), Tinyman liquid-stake/restake shapes (liquid-stake-v1 mint/burn tALGO; restake-v1 increaseStake/decreaseStake/claimRewards stALGO), Folks Finance v2 lending escrow shapes (setup depositEscrow/optEscrowAsset; deposit:escrow; withdraw:escrow), Folks Finance v2 loan credit shapes (setup:loanEscrow; setup:addCollateral; collateral:sync / collateral:reduce; borrow:variable; repay:withTxn), Folks Finance xALGO liquid-stake shapes (xalgo-v1 stake/unstake immediate), Pact v1 LP add/remove shapes, CompX v1 lending shapes (deposit/withdraw ASA; borrow:asa; repay:asa) and CompX v1 staking shapes, Dork.fi v1 ASA lending shapes (deposit/withdraw; borrow:asa; repay:asa), Myth Finance dualSTAKE shapes (dualstake-v1 mint/redeem LST; farm yield accrues passively while holding the LST), Haystack v1 single-token HAY staking shapes (stake HAY; unstake HAY and claim USDC+HAY rewards; claim USDC+HAY rewards), and Réti v1 ALGO staking shapes (stake/unstake). Canix does not sign or submit transactions in this endpoint.","tags":["execution","transactions","x402","agents","x402-global-challenge"],"pathParams":[],"queryParams":[],"responseCodes":[200,402,500],"x402":{"protocolVersion":2,"requiredHeaders":["PAYMENT-REQUIRED","PAYMENT-SIGNATURE","PAYMENT-RESPONSE"],"facilitator":"https://facilitator.goplausible.xyz","requirementTemplate":{"scheme":"exact","network":"algorand","asset":"31566704","payTo":"3Y2V6ODUVUGM4TXOEXY65YLMKMVLG4PB3GSOXDCJDE4X5YQA5JA3P2FHAQ","maxAmountRequired":"0.1"},"amountUsdc":"0.1","amountMicro":"100000"}}],"errorCatalog":[{"code":"MISSING_PAYMENT_SIGNATURE","httpStatus":402,"description":"The paid endpoint was called without PAYMENT-SIGNATURE."},{"code":"MALFORMED_PAYMENT_SIGNATURE","httpStatus":402,"description":"PAYMENT-SIGNATURE payload is malformed."},{"code":"EXPIRED_PAYMENT_PROOF","httpStatus":402,"description":"PAYMENT-SIGNATURE proof has expired."},{"code":"VALIDATION_ERROR","httpStatus":400,"description":"Request validation failed."},{"code":"NOT_FOUND","httpStatus":404,"description":"Requested resource was not found."},{"code":"INTERNAL_ERROR","httpStatus":500,"description":"Internal server error."}],"mcpServer":{"name":"canix402","transport":"streamable-http","docsUrl":"https://canix402.compx.io/x402#mcp","tools":["canix_health","canix_get_metadata","canix_get_discovery","canix_get_openapi","canix_get_token_prices","canix_list_execution_shapes","canix_list_opportunities","canix_search_opportunities","canix_get_personalized_opportunities","canix_check_eligibility","canix_get_plan","canix_get_protocol_opportunities","canix_get_positions","canix_list_claimable","canix_get_execution_quote","canix_get_quote","canix_optin","canix_swap"],"url":"https://canix402-mcp.compx.io/mcp","install":"Connect your MCP client to the remote canix402 endpoint at /mcp (walletless pass-through)."}}}