{"openapi":"3.1.0","info":{"title":"TickerSpring agent API","version":"1.0.0","description":"Read-only data, backtests and unsigned transaction bundles for AI agents on Robinhood Chain (4663). Products: TickerSpring's vaults (merged, Up and Stock Token families, each with its status), Limit Orders (orders and ladders), grid Strategies, ladder strategies, swaps through KyberSwap and baskets (bought and sold through BasketZap, made through BasketMaker; their reads are the public GET /v1/baskets routes). No lending, no retired vaults. The API never signs or sends anything."},"paths":{"/v1/agent/products":{"get":{"operationId":"get_products","tags":["read"],"summary":"What agents can use now","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Products"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/vaults":{"get":{"operationId":"list_vaults","tags":["read"],"summary":"Every vault agents can use (merged, Up, Stock Token), each with its status and reason, full and closed ones too","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AgentVault"}}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/vaults/{vault}":{"get":{"operationId":"get_vault","tags":["read"],"parameters":[{"name":"vault","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"summary":"One agent vault: the merged vault detail with 7 days of history (Up and Stock Token: their figures, no history), plus agentVault","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/AgentVaultDetail"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/vaults/{vault}/prices":{"get":{"operationId":"get_vault_prices","tags":["read"],"parameters":[{"name":"vault","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"summary":"The vault pool's price every 10 minutes (7 days)","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/vaults/{vault}/earnings":{"get":{"operationId":"get_vault_earnings","tags":["read"],"parameters":[{"name":"vault","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"summary":"The vault's earnings after fees over time","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/accounts/{owner}/activity":{"get":{"operationId":"get_activity","tags":["read"],"parameters":[{"name":"owner","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"The cursor from the last answer; omit for a baseline"}],"summary":"What changed in a wallet's agent positions since the cursor's snapshot","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Activity"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"CURSOR_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/accounts/{owner}":{"get":{"operationId":"get_positions","tags":["read"],"parameters":[{"name":"owner","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"summary":"A wallet's agent-product positions in one call","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Account"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/backtest/grid":{"post":{"operationId":"backtest_grid","tags":["backtest"],"summary":"Replay a grid (buy line, sell line) over past candles","description":"Same replay as the strategy page. Free up to 30 days.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridBacktestRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required (x402)"},"422":{"description":"NO_CANDLES","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/backtest/ladder":{"post":{"operationId":"backtest_ladder","tags":["backtest"],"summary":"Replay one-shot limit orders per level over past candles","description":"Fills per level. Free up to 30 days.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LadderBacktestRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required (x402)"},"422":{"description":"NO_CANDLES","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/ranges":{"get":{"operationId":"best_ranges","tags":["backtest"],"summary":"The grid lines that would have made the most round trips or profit","description":"bestRanges for every gap the fee allows, and the best overall.","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":90,"default":14}},{"name":"feeBps","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000}},{"name":"amountUsd","in":"query","schema":{"type":"number","default":200}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required (x402)"},"422":{"description":"NO_CANDLES","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/grid/tokens":{"get":{"operationId":"find_grid_strategies","tags":["backtest"],"summary":"Tokens that keep trading a range, from the grid scan","description":"The latest grid scan of every charted token at the live strategy fee: good tokens first, then weak ones with their reasons, each with today's lines (prepare_grid inputs) and its weeks tested walk-forward. Free.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":10,"default":5}},{"name":"category","in":"query","schema":{"type":"string","enum":["any","stock","crypto","utility","meme","unclassified"],"default":"any"}},{"name":"include","in":"query","schema":{"type":"string","enum":["good","all"],"default":"all"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"SCAN_PREPARING or UNAVAILABLE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/grid/plan":{"get":{"operationId":"get_grid_strategy","tags":["backtest"],"summary":"Plan a repeating grid on one token now","description":"Today's buy and sell lines from a walk-forward over the token's stored hourly prices (each past week set only from the weeks before it), a tighter and a wider choice, the verdict and the weekly results, at the live strategy fee. Free.","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"amountUsd","in":"query","schema":{"type":"number","minimum":11,"default":200}},{"name":"gap","in":"query","schema":{"type":"number","minimum":0.005,"maximum":0.5},"description":"Lines this far apart (sell / buy − 1) instead of the planner's pick"},{"name":"days","in":"query","schema":{"type":"integer","minimum":28,"maximum":90,"default":60}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"NO_CANDLES or GAP_TOO_TIGHT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/ladder/tokens":{"get":{"operationId":"find_ladder_strategies","tags":["backtest"],"summary":"Where the dip ladder has worked: the scanned tokens' records","description":"The dip ladder (5 buys 10% apart, each selling at +50% after fees, repeating) on every scanned token: good first, each with its record ($500 started at any midnight in the last 30 days, held a week), today's lines and warnings. Free.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":10,"default":5}},{"name":"include","in":"query","schema":{"type":"string","enum":["good","all"],"default":"all"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"SCAN_PREPARING or UNAVAILABLE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/ladder/plan":{"get":{"operationId":"get_ladder_strategy","tags":["backtest"],"summary":"Plan a dip ladder on one token now","description":"Its record on this token at the amount asked, the verdict with reasons, today's lines and the exact prepares. Free.","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"amountUsd","in":"query","schema":{"type":"number","minimum":55,"default":500}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"NO_CANDLES","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/swap/quote":{"get":{"operationId":"get_swap_quote","tags":["read"],"summary":"What a swap would get now through KyberSwap","description":"Resolves the tokens as POST /v1/agent/prepare/swap does (our list's symbols or addresses) and answers {tokenIn, tokenOut (address, symbol or null when unlisted, decimals, listed), amountIn, amountInUnits, expectedOut (after the swap fee), expectedOutUnits, minimumOut, minimumOutUnits (at slippageBps), slippageBps, feeBps, priceImpactBps (KyberSwap's estimate, or null), route}. Nothing is stored; a prepare asks KyberSwap again. Shares the KyberSwap route budget.","parameters":[{"name":"tokenIn","in":"query","required":true,"schema":{"type":"string"},"description":"A symbol from our token list, or an address"},{"name":"tokenOut","in":"query","required":true,"schema":{"type":"string"},"description":"A symbol from our token list (ETH is native ETH), or an address"},{"name":"amount","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},"description":"In tokenIn's units"},{"name":"slippageBps","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"UNKNOWN_TOKEN, NOT_A_TOKEN, SAME_TOKEN, NATIVE_ETH_IN or SWAP_NO_ROUTE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/baskets/plan":{"post":{"operationId":"plan_basket","tags":["read"],"summary":"Check a basket to make, as the site's basket builder checks it","description":"Body {tokens: [{token (a symbol from our list or an address), weightPct?}] (1-8), anchor? (USDG default, or WETH: added at 10% when the basket holds neither), swapFeePct? (0.3 or 1, default 1), name?, symbol?, days?}. With no weights the anchor gets 10% and the rest share evenly; otherwise give every token's. Answers {tokens: [{address, symbol (our list's, or null), kind, weightPct, onTradeList, liquidity (deep, fair, thin or no-market: how much more a $1,000 USDG buy pays than a $10 one, 2% and up thin, 0.5% and up fair), liquidityCostPct}], anchor, swapFeePct, lookback ({state: ok, prices (market for a stock-only basket, chain otherwise), days, from, to, growthPct (stock-only baskets, else null), worstDropPct, feesPer1kUsd, trades, tvlUsd, windows} simulated with TickerSpring's keeper over past prices, or {state: unavailable, code, reason}), name {name, symbol, suggested, problem}, sameTokens (listed baskets holding exactly these tokens), maker (ready, not-deployed or unknown), ready, notes}. Nothing is stored. 6 a minute per client, one at a time; the liquidity check draws on the basket zap's KyberSwap budget.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"UNKNOWN_TOKEN, NATIVE_ETH_TOKEN, DUPLICATE_TOKEN, TOKEN_COUNT, WEIGHTS_PARTIAL, WEIGHTS_SUM, WEIGHT_TOO_SMALL, MAKE_FEE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/policies/privy":{"get":{"operationId":"policy_privy","tags":["discovery"],"parameters":[{"name":"wallet","in":"query","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"summary":"A Privy wallet policy that allows only TickerSpring agent actions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/policies/turnkey":{"get":{"operationId":"policy_turnkey","tags":["discovery"],"parameters":[{"name":"wallet","in":"query","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"summary":"Turnkey policies that allow only TickerSpring agent actions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/openapi.json":{"get":{"operationId":"openapi","tags":["discovery"],"summary":"This document","responses":{"200":{"description":"OpenAPI 3.1"}}}},"/v1/agent/skill.md":{"get":{"operationId":"skill_md","tags":["discovery"],"summary":"Instructions for AI agents (Agent Skills format): tools, decision guide, confirmation rules, signing, monitoring","responses":{"200":{"description":"text/markdown"}}}},"/v1/agent/llms.txt":{"get":{"operationId":"llms_txt","tags":["discovery"],"summary":"Plain-text guide for language models","responses":{"200":{"description":"text/plain"}}}},"/v1/agent/prepare/vault-deposit":{"post":{"operationId":"prepare_vault_deposit","tags":["prepare"],"summary":"Prepare vault-deposit (nothing is sent)","description":"Any agent vault; the answer's bundle kind is the vault family's. Merged: approve USDG to the vault, then Vault.requestDeposit(assets, receiver = owner, minShares). Up (up-vault-deposit): approve USDG to the deposit queue, then requestDeposit(assets, owner, minimumSharesOut). Stock Token (stock-vault-deposit): approve USDG to the router, then router.deposit(entry) with a KyberSwap swap leg. 422 DEPOSITS_CLOSED / DEPOSITS_PAUSED / VAULT_FULL / CAPACITY with the reason when the vault isn't taking it. Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/vault-cancel-deposit":{"post":{"operationId":"prepare_vault_cancel_deposit","tags":["prepare"],"summary":"Prepare vault-cancel-deposit (nothing is sent)","description":"Merged: Vault.cancelDeposit(id). Up (up-vault-cancel): the deposit queue's cancel(id). Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/vault-withdraw":{"post":{"operationId":"prepare_vault_withdraw","tags":["prepare"],"summary":"Prepare vault-withdraw (nothing is sent)","description":"Merged: mode usdg: Vault.redeem(...) with a KyberSwap route; mode in-kind: Vault.redeemInKind(...); mode queue (vaults with a redeemQueue): approve shares to the RedeemQueue, then RedeemQueue.request(...). Up (up-vault-withdraw): mode queue: approve shares to the withdrawal queue, then requestRedeem(shares, owner, minimumAssetsOut); mode in-kind (all, a position under the queue's minimum): redeemEmergencyInKind. Stock Token (stock-vault-withdraw): mode usdg: approve shares to the router, then withdrawUSDG with a KyberSwap route; mode in-kind: Vault.redeem(...). Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/vault-cancel-withdraw":{"post":{"operationId":"prepare_vault_cancel_withdraw","tags":["prepare"],"summary":"Prepare vault-cancel-withdraw (nothing is sent)","description":"Merged: RedeemQueue.cancel(id). Up (up-vault-cancel, give vault): the withdrawal queue's cancel(id). Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/limit-order":{"post":{"operationId":"prepare_limit_order","tags":["prepare"],"summary":"Prepare limit-order (nothing is sent)","description":"Approve the input token to the hook, then create or createMarketOrder. Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/ladder":{"post":{"operationId":"prepare_ladder","tags":["prepare"],"summary":"Prepare ladder (nothing is sent)","description":"One approve for the total, then one create per order (2–20). Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/order-action":{"post":{"operationId":"prepare_order_action","tags":["prepare"],"summary":"Prepare order-action (nothing is sent)","description":"cancel, claim0, claim1, claimBoth or realize on the hook. Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/grid":{"post":{"operationId":"prepare_grid","tags":["prepare"],"summary":"Prepare grid (nothing is sent)","description":"LimitStrategy open, openWithMarket, close, setRepeat or collect (approve USDG first for open). Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/ladder-strategy":{"post":{"operationId":"prepare_ladder_strategy","tags":["prepare"],"summary":"Prepare ladder-strategy (nothing is sent)","description":"LadderStrategy (the ladder strategy, not the Limit Orders ladder): open with 1-16 parts on a listed market after one exact approval of the total (USDG, or the token for sell-first), or close (mask 0-3), setRepeat or collect (mask 1-3) of the owner's own ladder. Body {owner, action, token?, legs?: [{buyPrice, sellPrice, amount}], sellFirst?, repeat?, oneWay?, id?, mask?, via?: wallet|account, account?}; with via account (agent accounts on), owner is the agent key and the answer is that account's LADDER_* call (kind account-agent-call), refused first with the account's own numbers (floor, required ceiling, budget, fee cap, spread). 503 NOT_DEPLOYED, 422 NOT_LISTED, MARKET_NOT_OPEN, WRONG_SIDE, NO_REFERENCE, FIRST_TOO_SMALL, FOLLOW_UP_TOO_SMALL, NO_TRIP_HEADROOM (each names the part and its exact minimum, also as details {part, minimum, unit}). Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/basket-buy":{"post":{"operationId":"prepare_basket_buy","tags":["prepare"],"summary":"Prepare basket-buy (nothing is sent)","description":"A whole basket bought through the verified deployment's BasketZap (the basket page's Buy button): approve exactly the amount of the token paid to the zap, then BasketZap.buy(pool, tokenIn, amountIn, legs, minBptOut, recipient = owner, deadline), which buys each basket token through KyberSwap and joins in proportion. Body {owner, basket (address, or a listed basket's symbol), amount (the paid token's units), payWith? (USDG default, WETH, or one of the basket's tokens by symbol or address), slippageBps? (1-500, default 100)}. No TickerSpring fee; KyberSwap's price impact is in fees. params {side, pool, zap, token, amount, minOut, expectedOut, recipient, deadline, legs: [{tokenIn, tokenOut, amountIn, data}], slippageBps, quote: {block, valueUsd, costUsd, priceImpactPct}, approvals}. 404 NOT_FOUND / UNKNOWN_BASKET; 422 BAD_TOKEN, NATIVE_ETH_IN (pay with WETH), BASKET_SELL_ONLY (TickerSpring's own hidden baskets, and baskets users made that it took off the site), BASKET_PAUSED, TOKEN_PAUSED, TOKEN_FROZEN, TOKEN_SHORTFALL, AMOUNT_TOO_SMALL, BASKET_NO_ROUTE, PRICE_IMPACT_TOO_HIGH (over 3%), LEG_MINIMUM_TOO_LOW (a leg's KyberSwap minimum more than max(slippageBps, 1%) under its quote), ROUTE_TOO_LARGE (the zap call is capped at 32,000 bytes); 429 BUSY; 503 NOT_DEPLOYED, ZAP_UNAVAILABLE, KYBER_CHANGED. Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/basket-sell":{"post":{"operationId":"prepare_basket_sell","tags":["prepare"],"summary":"Prepare basket-sell (nothing is sent)","description":"A whole basket's tokens sold through BasketZap (the basket page's Sell button): approve exactly the basket tokens to the zap, then BasketZap.sell(pool, bptIn, tokenOut, legs, minOut, recipient = owner, deadline), which exits in proportion and sells each token through KyberSwap. Body {owner, basket, amount (basket tokens, 18 decimals) | all: true, receive? (USDG default, WETH, or one of the basket's tokens), slippageBps?}. params as basket-buy (token = tokenOut, amount = bptIn) plus exits: [{token, amount}] (the proportional exit). 422 NOTHING_TO_SELL, SELL_REFUSED and basket-buy's refusals. Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/basket-make":{"post":{"operationId":"prepare_basket_make","tags":["prepare"],"summary":"Prepare basket-make (nothing is sent)","description":"A new basket made through the verified deployment's BasketMaker (the site's basket builder): approve exactly the first deposit (USDG or WETH) to the maker, then BasketMaker.make(basket, tokenIn, amountIn, legs, minBptOut, recipient = owner, deadline), which creates the basket with TickerSpring's admin in its pool roles, buys each of its tokens through KyberSwap and puts everything in as the first deposit. Body {owner, name (1-64 plain characters), symbol (1-20 letters, digits, '.', '-' or '+'; not starting with ts; not another basket's), tokens: [{token (a symbol from our list or an address on the trade list), weightPct}] (2-8, USDG or WETH among them, each at least 1%, 100% in all), swapFeePct? (0.3 or 1, default 1), amount (worth at least $25), payWith? (USDG default, or WETH), slippageBps? (1-500, default 100)}. Plan it first with POST /v1/agent/baskets/plan. No TickerSpring fee. params {maker, basket: {name, symbol, tokens (sorted), normalizedWeights, swapFeePercentage, salt}, decimals, pool (its address once made), token, amount, legs: [{tokenIn, tokenOut, amountIn, data}], minOut, expectedOut, recipient, deadline, slippageBps, quote: {block, valueUsd, costUsd, priceImpactPct}, approvals}. 422 PRICE_IMPACT_TOO_HIGH (over 3% at market prices), UNKNOWN_TOKEN, NATIVE_ETH_TOKEN, NATIVE_ETH_IN, BAD_DEPOSIT_TOKEN, NOT_ON_TRADE_LIST, DUPLICATE_TOKEN, TOKEN_COUNT, WEIGHT_TOO_SMALL, WEIGHTS_SUM, NO_ANCHOR, MAKE_FEE, BAD_NAME, BAD_SYMBOL, RESERVED_SYMBOL, NAME_NOT_ALLOWED, NAME_IS_TOKEN, SYMBOL_NOT_ALLOWED, SYMBOL_IS_TOKEN, SYMBOL_TAKEN, DEPOSIT_TOO_SMALL, AMOUNT_TOO_SMALL, TOKEN_PAUSED, BASKET_NO_ROUTE, LEG_MINIMUM_TOO_LOW, ROUTE_TOO_LARGE, MAKE_REFUSED; 429 BUSY; 503 NOT_DEPLOYED, MAKER_NOT_DEPLOYED, TRADE_LIST_LOADING, ZAP_UNAVAILABLE, KYBER_CHANGED. Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/prepare/swap":{"post":{"operationId":"prepare_swap","tags":["prepare"],"summary":"Prepare swap (nothing is sent)","description":"A KyberSwap swap through TickerSpring's swap router (the site's own swap): approve exactly the amount of tokenIn to the router, then TradeSwapRouter.swap(SwapRequest) with recipient = owner and a minimum of the quote less the 0.1% swap fee and slippageBps (1-500, default 100). Body {owner, tokenIn, tokenOut, amount (tokenIn's units), slippageBps?}; tokens are our list's symbols (USDG, NVDA, …; ETH is native ETH, WETH the wrapped token) or addresses (unlisted ones are shown by address with a warning). 422 UNKNOWN_TOKEN, NOT_A_TOKEN, SAME_TOKEN, NATIVE_ETH_IN (swap from WETH instead), SWAP_PAUSED, SWAP_NO_ROUTE; 409 SWAP_CONTRACTS_CHANGED; 503 SWAP_UNAVAILABLE. Returns unsigned transactions and a sign link; receivers and owners are always `owner` (422 otherwise). Amounts are decimal strings in USDG or shares; slippageBps defaults to 100, at most 500. agentTag (optional) groups the action on the owner's report card and grants nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"default":100},"agentTag":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}},"additionalProperties":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/PrepareResult"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NOT_AGENT_VAULT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/report-card/{owner}":{"get":{"operationId":"get_report_card","tags":["report-cards"],"parameters":[{"name":"owner","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"agent","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$"}}],"summary":"An owner's agents' executed and graded actions, and each agent's numbers","description":"Every figure comes from the chain, never from an agent. No rates before 30 graded actions (agents[].ready false, hitRate null); then hitRate.lower90 is the low end of the Wilson 90% range, with hits and misses (howGraded says what counts as a hit). agents[].name is a hire-page tag's agent name (The Dip Buyer for db-…), else null. Each action's state is graded, waiting (reason: fill, day, week, queue or receipt) or not-graded (reason: orbio, swap, cancel, order-action, grid-action, in-kind, queue-cancelled, account or other), with note in words. Nothing is listed anywhere; with AGENT_REPORT_CARDS_READS=owner it needs the owner's session too.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"SESSION_REQUIRED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"REPORT_CARDS_DISABLED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/report-card/{owner}/private":{"get":{"operationId":"get_report_card_private","tags":["report-cards"],"parameters":[{"name":"owner","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"agent","in":"query","required":false,"schema":{"type":"string"}}],"summary":"The owner's own view: also prepared actions waiting to be signed or never signed (Authorization: Bearer <session token>)","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"SESSION_REQUIRED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"REPORT_CARDS_DISABLED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/report-card/session/challenge":{"post":{"operationId":"report_card_challenge","tags":["report-cards"],"summary":"A sign-in message for the owner wallet (personal_sign), valid 5 minutes","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"challengeId":{"type":"string"},"message":{"type":"string"},"expiresAt":{"type":"string"}}}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/report-card/session":{"post":{"operationId":"report_card_session","tags":["report-cards"],"summary":"Exchange the owner's signature for a session token (an hour)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["owner","challengeId","signature"],"properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"challengeId":{"type":"string"},"signature":{"type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"token":{"type":"string"},"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"expiresAt":{"type":"string"}}}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"CHALLENGE_EXPIRED or BAD_SIGNATURE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent/sign-requests/{id}":{"get":{"operationId":"get_sign_request","tags":["sign"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"summary":"A stored sign request","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/SignRequest"}}}}}},"400":{"description":"Invalid request (INVALID_REQUEST)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown or expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (RATE_LIMITED) or busy (BUSY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable (UNAVAILABLE)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"code":{"type":"string"},"details":{"type":"object","description":"A refusal's numbers, when it has them: the part (from 1), its exact minimum in base units of unit, a price and the limit it broke (USDG per whole token), the token named.","properties":{"part":{"type":"integer"},"minimum":{"type":"string"},"unit":{"type":"string","enum":["USDG","token"]},"priceUsd":{"type":"number"},"limitUsd":{"type":"number"},"token":{"type":"string"}}}}},"Products":{"type":"object","properties":{"vaults":{"type":"object","properties":{"available":{"type":"boolean"},"count":{"type":"integer"},"open":{"type":"integer","description":"How many take deposits now"},"families":{"type":"object","additionalProperties":{"type":"object","properties":{"count":{"type":"integer"},"open":{"type":"integer"}}}},"unavailable":{"type":"array","items":{"enum":["merged","up","stock-token"]}},"reason":{"type":"string"}}},"limitOrders":{"type":"object","properties":{"available":{"type":"boolean"},"hook":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},{"type":"null"}]},"feeBps":{"anyOf":[{"type":"integer"},{"type":"null"}]},"paused":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"reason":{"type":"string"}}},"grids":{"type":"object","properties":{"available":{"type":"boolean"},"strategy":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},{"type":"null"}]},"feeBps":{"anyOf":[{"type":"integer"},{"type":"null"}]},"paused":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"reason":{"type":"string"}}},"ladderStrategies":{"type":"object","description":"Present only while ladder strategies are deployed and listed.","properties":{"available":{"type":"boolean"},"ladder":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"feeBps":{"type":"integer"},"maxLegs":{"type":"integer"},"paused":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"markets":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"symbol":{"type":"string"},"decimals":{"type":"integer"},"pool":{"type":"string"},"quoteIs0":{"type":"boolean"},"pausable":{"type":"boolean"}}}},"marketsComplete":{"type":"boolean"},"keeperHealthy":{"type":"boolean"},"note":{"type":"string"},"reason":{"type":"string"}}},"baskets":{"type":"object","description":"The listed (verified) baskets and whether the zap can quote buys and sells now. Their figures are at GET /v1/baskets.","properties":{"available":{"type":"boolean"},"count":{"type":"integer"},"zapAvailable":{"type":"boolean"},"reason":{"type":"string"}}},"asOf":{"type":"string"}}},"AgentVault":{"type":"object","properties":{"family":{"enum":["merged","up","stock-token"]},"release":{"type":"string","description":"The pinned release its runtime matches (a release hash; v7 for Stock Token vaults)"},"audited":{"type":"boolean","description":"The audited merged release (AGENT_VAULT_RELEASES)"},"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"name":{"type":"string"},"symbol":{"type":"string"},"venue":{"enum":["v3","v4","up","ramses"]},"asset":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"symbol":{"type":"string"},"decimals":{"type":"integer"}}},"token":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"symbol":{"type":"string"},"decimals":{"type":"integer"},"kind":{"enum":["stock","plain"]}}},"shareDecimals":{"type":"integer"},"aprPct":{"anyOf":[{"type":"number"},{"type":"null"}]},"aprNote":{"type":"string"},"rewardAprPct":{"anyOf":[{"type":"number"},{"type":"null"}]},"rewardSymbol":{"anyOf":[{"type":"string"},{"type":"null"}]},"tvlUsd":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"sharePriceUsd":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"spotPrice":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"range":{"anyOf":[{"type":"object","properties":{"lowerPrice":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"upperPrice":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"inRange":{"anyOf":[{"type":"boolean"},{"type":"null"}]}}},{"type":"null"}]},"status":{"enum":["open","full","closed","paused"]},"statusReason":{"type":"string"},"depositsOpen":{"type":"boolean"},"depositsClosedReason":{"anyOf":[{"enum":["PAUSED","RECOVERY","NOT_CALM","CAP_REACHED","ALLOWLIST_ONLY","UNAVAILABLE"]},{"type":"null"}]},"minDepositUsd":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"minDepositUnits":{"anyOf":[{"type":"string","pattern":"^[0-9]+$","description":"Base units"},{"type":"null"}]},"depositCapUsd":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"depositCapUnits":{"anyOf":[{"type":"string","pattern":"^[0-9]+$","description":"Base units"},{"type":"null"}]},"remainingCapacityUnits":{"anyOf":[{"type":"string","pattern":"^[0-9]+$","description":"Base units"},{"type":"null"}]},"remainingCapacityUsd":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"pendingDepositsUsd":{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},"redeemQueue":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},{"type":"null"}]},"queues":{"anyOf":[{"type":"object","description":"An Up vault's queues","properties":{"deposit":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"withdrawal":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}},{"type":"null"}]},"withdrawModes":{"type":"array","items":{"enum":["usdg","in-kind","queue"]}},"settles":{"type":"string"},"withdrawReadyAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"feeBps":{"type":"integer","description":"Total fee on harvests (protocol + buyback)"},"stale":{"type":"boolean"},"block":{"type":"integer"},"observedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"AgentVaultDetail":{"type":"object","description":"GET /v1/merged/vaults/{vault}'s answer (USDG amounts in base units: tvlUsdMicros, depositCap, minDepositUsdMicros…) plus agentVault.","properties":{"vault":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"kind":{"enum":["v3","v4","up","ramses"]},"tvlUsdMicros":{"anyOf":[{"type":"string","pattern":"^[0-9]+$","description":"Base units"},{"type":"null"}]},"sharePrice":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"history":{"type":"object"},"agentVault":{"$ref":"#/components/schemas/AgentVault"}}},"Account":{"type":"object","properties":{"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"vaults":{"type":"array","items":{"type":"object"}},"limitOrders":{"type":"array","items":{"type":"object"}},"grids":{"type":"array","items":{"type":"object"}},"ladderStrategies":{"type":"array","items":{"type":"object"},"description":"GET /v1/ladder-strategy/positions rows: parts (legs) with their bands, state and claimable amounts"},"ladderStrategiesComplete":{"type":"boolean"},"baskets":{"type":"array","description":"Present while this API serves baskets: every basket the wallet holds (one balanceOf per live basket; zero balances left out), at the basket's share price.","items":{"type":"object","properties":{"pool":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"symbol":{"type":"string"},"listed":{"type":"boolean","description":"Listed on the site: verified by TickerSpring"},"madeByUser":{"type":"boolean"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},"amountUnits":{"type":"string","pattern":"^[0-9]+$","description":"Base units"},"sharePriceUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"valueUsd":{"anyOf":[{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},{"type":"null"}]},"valueUnits":{"anyOf":[{"type":"string","pattern":"^[0-9]+$","description":"Base units"},{"type":"null"}]}}}},"totals":{"type":"object","description":"Vault positions as the site values them (unclaimed fees included), pending deposits and basket tokens at their share price; limit orders, grids and ladder strategies are not valued (excludes). A position without a value is left out and listed in vaultsLeftOut or basketsLeftOut and unavailable.","properties":{"valueUsd":{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},"vaultsUsd":{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},"pendingDepositsUsd":{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},"basketsUsd":{"type":"string","pattern":"^[0-9]+(\\.[0-9]+)?$","description":"Decimal string"},"complete":{"type":"boolean"},"vaultsLeftOut":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"basketsLeftOut":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"excludes":{"type":"array","items":{"type":"string"}}}},"unavailable":{"type":"array","items":{"type":"object"}}}},"GridBacktestRequest":{"type":"object","required":["token","buyPrice","sellPrice","amountUsd"],"additionalProperties":false,"properties":{"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"buyPrice":{"type":"number","exclusiveMinimum":0},"sellPrice":{"type":"number","exclusiveMinimum":0},"amountUsd":{"type":"number","minimum":0.01},"repeat":{"type":"boolean","default":true},"days":{"type":"integer","minimum":1,"maximum":90,"default":30},"feeBps":{"type":"integer","minimum":0,"maximum":1000},"needsVolume":{"type":"boolean","default":true}}},"LadderBacktestRequest":{"type":"object","required":["token","side","levels"],"additionalProperties":false,"properties":{"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"side":{"enum":["buy","sell"]},"levels":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["price","amountUsd"],"properties":{"price":{"type":"number"},"amountUsd":{"type":"number"}}}},"days":{"type":"integer","minimum":1,"maximum":90,"default":30},"feeBps":{"type":"integer","minimum":0,"maximum":1000},"needsVolume":{"type":"boolean","default":true}}},"BundleStep":{"type":"object","properties":{"n":{"type":"integer"},"label":{"type":"string"},"kind":{"enum":["approve","call"]},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"data":{"type":"string"},"value":{"type":"string"}}},"Bundle":{"type":"object","properties":{"kind":{"enum":["vault-deposit","vault-cancel-deposit","vault-withdraw","vault-cancel-withdraw","limit-order","ladder","order-action","grid","ladder-strategy","basket-buy","basket-sell","basket-make","swap"]},"chainId":{"const":4663},"owner":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"summary":{"type":"string"},"params":{"type":"object"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/BundleStep"}},"fees":{"type":"array","items":{"type":"object"}},"warnings":{"type":"array","items":{"type":"string"}},"simulation":{"type":"object","properties":{"ok":{"type":"boolean"},"error":{"type":"string"},"block":{"type":"integer"}}},"expiresAt":{"type":"string"}}},"SignRequest":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"bundle":{"$ref":"#/components/schemas/Bundle"},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"walletSendCalls":{"$ref":"#/components/schemas/WalletSendCalls"}}},"PrepareResult":{"type":"object","properties":{"bundle":{"$ref":"#/components/schemas/Bundle"},"signRequest":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"expiresAt":{"type":"string"}}},"walletSendCalls":{"$ref":"#/components/schemas/WalletSendCalls"}}},"WalletSendCalls":{"type":"object","description":"EIP-5792 wallet_sendCalls params for the bundle's steps, in order (derived from the bundle). Wallets without EIP-5792: send each call with eth_sendTransaction and wait for its receipt.","required":["version","chainId","from","atomicRequired","calls"],"properties":{"version":{"const":"2.0.0"},"chainId":{"const":"0x1237"},"from":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"atomicRequired":{"const":false},"calls":{"type":"array","items":{"type":"object","required":["to","data","value"],"properties":{"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"data":{"type":"string","pattern":"^0x[0-9a-fA-F]*$"},"value":{"const":"0x0"}}}}}},"Activity":{"type":"object","required":["cursor","since","now","changes","unavailable"],"properties":{"cursor":{"type":"string","description":"Pass it next time; kept 14 days (at most 20 per owner and per client, oldest dropped)"},"since":{"anyOf":[{"type":"string","description":"When the given cursor's snapshot was taken; null for a baseline"},{"type":"null"}]},"now":{"type":"string"},"changes":{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"enum":["vault-shares-changed","deposit-request-settled","deposit-request-refunded","deposit-request-cancelled","queued-withdrawal-completed","queued-withdrawal-cancelled","order-placed","order-filled","order-claimable","order-closed","grid-opened","grid-traded","grid-closed","ladder-strategy-opened","ladder-strategy-traded","ladder-strategy-part-finished","ladder-strategy-closed","basket-balance-changed","orbio-credit-changed"]},"basis":{"enum":["events","balances"],"description":"Closed requests: learned from their own event, or (for an old cursor) from the share balance"}},"additionalProperties":true}},"unavailable":{"type":"array","items":{"type":"string"},"description":"Parts that could not be compared"}}}}}}