Aave and Aerodrome on Base, Mallow perps, and Bazaar examples vet402 can pay
Date: 27 September 2026
Protocol 1.8.2. Aave V3 lending and Aerodrome basic-pool farms join the Base catalog next to Morpho. A Base 0x address on GET /positions now includes Aave supply and variable debt, plus staked Aerodrome LP. Mallow ALGO/USD and BTC/USD limit orders compile as unsigned Algorand groups, with take-profit and stop-loss as return on margin. The examples on paid 402 responses are real requests, so vet402 probes the published input instead of a placeholder. Canix still never holds keys or submits transactions.
What shipped
Aave V3 (Base)
Discovery is Aave GraphQL (https://api.v3.aave.com/graphql), chainId 8453, Pool 0xA238Dd80C259a72e81d7e4664a9801593F98d1c5. One lending row per reserve. Supply APY and borrow APR are published as percents. Frozen, paused, zero-TVL, and native ETH reserves are dropped.
GET /positions for a Base address reads aToken and variable-debt balances. Health factor comes from Pool getUserAccountData and is omitted when the account has no debt.
Execution shapes:
base:aave:v3:supply:erc20— optional ERC-20approve, thensupplybase:aave:v3:withdraw:erc20base:aave:v3:borrow:variable— interest-rate mode2base:aave:v3:repay:variable— optional approve, thenrepayat mode2
Stable-rate borrow, eMode, flash loans, isolation-mode ceilings, credit delegation, and Permit are out of scope.
See protocol/docs/data-sources/aave.md.
Aerodrome basic pools (Base)
Discovery is on-chain LpSugar (0x69dD9db6d8f8E7d83887A704f447b1a584b599A1), voter-whitelisted volatile and stable pools with a live gauge. Headline APY is emissions APR on staked liquidity. Trading fees go to voters and are not added. Pools below AERODROME_MIN_TVL_USD (default $50,000) are dropped. The catalog is cached in-process because a full Sugar scan is many heavy eth_calls.
GET /positions for a Base address reads staked LP via Gauge.balanceOf. Unclaimed AERO and unstaked LP are omitted.
Execution shapes:
base:aerodrome:v2:deposit:gauge— optional approves,Router.addLiquidity, optional LP approve,Gauge.depositbase:aerodrome:v2:withdraw:gauge—Gauge.withdraw, optional LP approve,Router.removeLiquidity
Slipstream, swaps, veAERO, bribes, and reward claims are out of scope. Broadcast a deposit group in order: the stake leg follows add-liquidity.
See protocol/docs/data-sources/aerodrome.md.
Quotes for both venues are unsigned Base calldata. identity.network is base. encodedTransactions are hex. Structured { to, data, value, chainId } is on transactions[].evmCall and metadata.evmCalls.
Mallow perps (Algorand)
Mallow is the public name. Orders settle on People’s Exchange. Canix reads markets and quotes through the Mallow API proxy, then builds the group with the PEX SDK. It does not ask Mallow to assemble or submit the group.
GET /protocols/mallow/markets is free. One row each for ALGO/USD and BTC/USD: index, max leverage, USDC collateral (31566704), and the 3 bps builder fee. A missing pair fails that row only.
Execution shapes:
mainnet:mallow:v1:openLimit:attached— resting limit plus attached take-profit and stop-lossmainnet:mallow:v1:optIn:usdc— zero-amount USDC opt-in, compiled separately when the order quote returnsnot-opted-in
collateralUsd is USDC margin. Notional is collateralUsd × leverage. takeProfitPct and stopLossPct are return on that margin: pass 20 and 25 for +20% and −25%, not a 20% price move. stopLossPct is a positive number. market is ALGO or BTC. side is long or short. Leverage above the market maximum is rejected. A limit already through the index is rejected and is not rewritten as a market order.
Every quote and group includes Mallow’s 3 bps builder fee. Production refuses to compile when MALLOW_BUILDER_ADDRESS is missing. Close, cancel, position reads, other markets, and market orders are out of scope.
See protocol/docs/execution-shapes/mallow-open-limit.md.
Bazaar examples vet402 can send
vet402 pays the example on PAYMENT-REQUIRED extensions.bazaar. Those examples live in the Caddy plugin (protocol/caddy/bazaar_profiles.go), not in OpenAPI.
Wallet examples use the Brownie Bot treasury KPEZM2DSFHOOHG7RPDECCBTD6FRN2LPSSRJMMFVCFSIHGES4BXBJHPUBVQ, except paid position reads. GET /positions and GET /positions/claimable use the nf.algo owner 5YCWR662A5HIOFYYS2CTIHHYBCIXESVLAOVLZ7CL27PK5SKBROCSRFIJMA, because GET /public/agents/brownie/positions is the free showcase of the Brownie wallet.
POST /execution/quotes advertises mainnet:tinyman:v2:addLiquidity:flexible with a full input (userAddress, both asset ids and amounts, maxSlippageBps). That replaces the placeholder shape key tinyman-v2:lp:add:flexible and empty input.
POST /swaps/transactions advertises address, quote, and slippage. The previous example was a quote-shaped stub and failed validation before any swap work. A static quote still expires in about 30 seconds, so a probe of that body can 400 on freshness. shapeKey plus input on /execution/quotes does not have that limit: the compiler builds a fresh group.
Production 402s change only after the Caddy x402 plugin is rebuilt and redeployed.
Pricing
No new SKUs. Merchant rail remains Algorand USDC, with optional Base USDC at the same price when X402_PAY_TO_BASE is set.
| Step | Route / tool | Price |
|---|---|---|
| Aave / Aerodrome catalog | GET /opportunities*, GET /protocols/aave/opportunities, GET /protocols/aerodrome/opportunities | 0.01 USDC (existing catalog) |
| Base positions | GET /positions?address=0x… | 0.005 USDC (existing positions) |
| Mallow market read | GET /protocols/mallow/markets | Free |
| Aave / Aerodrome / Mallow compile | POST /execution/quotes / canix_get_execution_quote | 0.10 USDC flat per request |
Optional protocol env: AAVE_GRAPHQL_URL, AERODROME_SUGAR_ADDRESS, AERODROME_SUGAR_PAGE_SIZE, AERODROME_MIN_TVL_USD, AERODROME_CATALOG_TTL_SEC, AERODROME_PRICE_URL, BASE_RPC_URL (quotes and Base positions; default https://mainnet.base.org), MALLOW_PDEX_PROXY_URL, MALLOW_PDEX_ARTIFACT_URL, and MALLOW_BUILDER_ADDRESS (required in production).
Agent loop
GET /protocols/aave/opportunitiesorGET /protocols/aerodrome/opportunities/canix_get_protocol_opportunities. Readchain: "base",assetAddresses, andinputHints.poolId(Aave underlying, or Aerodrome pool).- For a book,
GET /positionswith a Base0xaddress. An Algorand address still returns Algorand protocols only. - For a Mallow order,
GET /protocols/mallow/markets, thenPOST /execution/quoteswithmainnet:mallow:v1:openLimit:attached. Ask forcollateralUsd. PassmarketALGOorBTC. If the quote returnsnot-opted-in, compilemainnet:mallow:v1:optIn:usdcfirst. POST /execution/quotes/canix_get_execution_quotewith one of the shape keys above. Base shapes take a Base0xuserAddressand return calldata. Mallow takes an Algorand address and returns an unsigned group. Amounts on Base are ERC-20 base units.- Sign the returned calldata on Base (
metadata.evmCalls), or sign the Algorand group locally. Submit locally. Canix never holds keys and does not broadcast. - Pay the x402 access charge on Algorand or Base. Algorand USDC is the first accept and a complete payment. A Base
0xaddress is required only for Aave or Aerodrome quotes, or for a payment signed against the Base accept. Paying for a quote does not execute the quote.