{"openapi":"3.1.0","info":{"title":"Indexio Base Agent API","version":"3.3.8","description":"Discover onchain indexes and prepare simulated, unsigned wallet transactions. No custody, transaction broadcast, or delegated signing. Agent wallets enforce their own limits and must re-quote after approvals."},"servers":[{"url":"https://www.indexio.world"}],"paths":{"/api/agent/capabilities":{"get":{"operationId":"indexioCapabilities","summary":"Supported contracts, fees, signers and endpoints","responses":{"200":{"description":"Machine-readable capabilities"}}}},"/api/agent/status":{"get":{"operationId":"indexioBaseStatus","summary":"Low-cost Base RPC and factory connectivity check; does not verify quote or execution readiness","responses":{"200":{"description":"Base chain and factory reachable; quote separately."},"429":{"description":"Rate limited."},"503":{"description":"Connectivity unavailable; do not assume execution readiness."}}}},"/api/agent/markets":{"get":{"operationId":"indexioDiscoverIndexes","summary":"Discover newest current Base indexes, with next-page cursor","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":8,"default":6}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d+$"}}],"responses":{"200":{"description":"Current Base vaults; quote_required does not imply liquidity."},"400":{"description":"Invalid page."},"429":{"description":"Rate limited."},"503":{"description":"RPC failed: not an empty market."}}}},"/api/agent/portfolio":{"get":{"operationId":"indexioAgentPosition","summary":"Paginated current-vault wallet positions or a single-vault snapshot at a Base block","parameters":[{"name":"wallet","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"vault","in":"query","required":false,"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":8}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d+$"}}],"responses":{"200":{"description":"Onchain position snapshot; USD value and cost basis remain null until independently derived."},"400":{"description":"Bad address or vault."},"429":{"description":"Rate limited."},"503":{"description":"Base RPC unavailable."}}}},"/api/agent/performance":{"post":{"operationId":"indexioVerifiedFillLedger","summary":"Verify up to 16 transaction receipts; derive an explicitly partial-history cost ledger","description":"Receipt-derived USDC/share wallet deltas and actual native gas. Even if tracked shares match live shares, supplied hashes do NOT prove complete history. Weighted-average cost basis and realized P&L, when computable, are labeled indicative and are not tax records.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["wallet","vault","transactionHashes"],"properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"vault":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"transactionHashes":{"type":"array","maxItems":16,"uniqueItems":true,"items":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}}}}}}},"responses":{"200":{"description":"Verified onchain receipt fills and carefully qualified subset accounting."},"409":{"description":"Unconfirmed receipt."},"422":{"description":"Ambiguous wallet deltas."},"429":{"description":"Rate limited."},"503":{"description":"Base RPC unavailable."}}}},"/api/agent/exit-estimate":{"post":{"operationId":"indexioEstimateExit","summary":"Fresh per-wallet protected USDC exit estimate and simulation when allowance is sufficient","description":"Does not send transactions. If allowance is missing, quote is informational and agent must approve, then request a new plan. When allowance is sufficient, returns simulated short-lived calldata with quoted and minimum USDC proceeds. Never a value guarantee.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["wallet","vault"],"properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"vault":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"shares":{"type":"string","pattern":"^[0-9]+$","description":"Optional partial exit; omitted means full wallet share balance (18 decimals)."}}}}}},"responses":{"200":{"description":"Fresh projected/minimum USDC with approvalRequired and optional simulated unsigned transaction."},"409":{"description":"Insufficient shares."},"429":{"description":"Rate limited."},"503":{"description":"No protected quote or failed simulation."}}}},"/api/agent/quote":{"post":{"operationId":"indexioPrepareWalletAction","summary":"Check wallet allowance and prepare a safe approval OR a simulated buy, seed or redemption call","description":"Buy uses the V3.3.8 adaptive buy router. Approval-required responses contain only the exact-amount token approval. After the approval receipt confirms, request an entirely new quote. A ready response includes quoteExpiresAt and a simulated call. Do not submit after expiry; use independent wallet policy controls.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["mode","vault","wallet"],"properties":{"mode":{"type":"string","enum":["buy","seed","sell"]},"vault":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"settlementAmount":{"type":"string","pattern":"^[0-9]+$","description":"Buy/seed USDC base units (6 decimals)"},"shares":{"type":"string","pattern":"^[0-9]+$","description":"Sell share base units (18 decimals)"},"maxRefundBps":{"type":"integer","minimum":100,"maximum":3000,"default":500,"description":"Adaptive buy: maximum refund fraction, NOT a loss/slippage guarantee."}}}}}},"responses":{"200":{"description":"status=approval_required with an approval-only transaction OR status=ready with short-lived simulated execution calldata. Inspect quoteExpiresAt."},"400":{"description":"Invalid request, mode or vault."},"409":{"description":"Insufficient token balance."},"413":{"description":"Payload too large."},"429":{"description":"Rate limited (60/hour)."},"502":{"description":"Unquotable or failed simulation; no trade prepared."},"503":{"description":"Unavailable or quote expired."}}}},"/api/indexio/protocol-status":{"get":{"operationId":"indexioProtocolStatus","summary":"Current protocol wiring verification","responses":{"200":{"description":"Onchain readiness checks"},"503":{"description":"RPC error"}}}},"/api/registry":{"get":{"operationId":"indexioAssets","summary":"Supported Base assets","responses":{"200":{"description":"Registry data"}}}},"/api/lending/opportunities":{"get":{"operationId":"indexioLendingMarkets","summary":"Discover lending opportunities without placing a trade","responses":{"200":{"description":"Lending discovery"}}}},"/api/agent/feedback":{"post":{"operationId":"indexioReportAgentIssue","summary":"Report incorrect quotes, agent failures or missing capabilities","responses":{"202":{"description":"Received"},"400":{"description":"Invalid"},"429":{"description":"Limited"}}}}}}