{"openapi":"3.1.0","info":{"title":"Hopivia API","version":"0.1.0","description":"DEX aggregator API built for agents and bots. Best-price quotes across every major DEX of a chain, unsigned swap and bridge transactions, token safety.\n\n**Non-custodial by design:** the API never receives private keys. Write endpoints return ordered unsigned steps (`to`, `data`, `value`) that the caller signs and sends. Only allowlisted routers are used and the output always goes to the caller-chosen recipient.\n\n**Start with the guide:** [https://hopivia.com/docs](https://hopivia.com/docs) (Markdown for models: [docs.md](https://hopivia.com/docs.md)). Free API keys: [https://hopivia.com/agents](https://hopivia.com/agents). Machine-readable: [llms.txt](https://hopivia.com/llms.txt) · [agent card](https://hopivia.com/.well-known/agent-card.json)."},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional. Raises the rate limit."}},"schemas":{}},"paths":{"/api/v1/health":{"get":{"summary":"Liveness","tags":["meta"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["ok","version","uptimeSec","chains"],"properties":{"ok":{"type":"boolean"},"version":{"type":"string"},"uptimeSec":{"type":"integer"},"chains":{"type":"integer"}}}}}}}}},"/api/v1/chains":{"get":{"summary":"Supported chains and what each one offers","tags":["meta"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","key","name","nativeSymbol","explorer","testnet","swap","bridge","venues","tokens"],"properties":{"id":{"type":"integer"},"key":{"type":"string"},"name":{"type":"string"},"nativeSymbol":{"type":"string"},"explorer":{"type":"string"},"testnet":{"type":"boolean"},"swap":{"description":"same-chain quotes and swap txs","type":"boolean"},"bridge":{"description":"cross-chain source/destination","type":"boolean"},"venues":{"type":"object","required":["v2","v3","aggregator","delegation"],"properties":{"v2":{"type":"integer"},"v3":{"type":"integer"},"aggregator":{"description":"Hopivia aggregator contract deployed: swaps go through it, 0.15% fee","type":"boolean"},"delegation":{"description":"Hopivia delegation contract deployed: POST /swap/tx with onBehalfOf and GET /delegation work here","type":"boolean"}}},"tokens":{"type":"integer"}}}}}}}}}},"/api/v1/tokens":{"get":{"summary":"Known tokens of a chain (any other ERC-20 can be used by address)","tags":["meta"],"parameters":[{"schema":{"type":"string"},"example":"bsc","in":"query","name":"chain","required":false,"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb"},{"schema":{"type":"string"},"in":"query","name":"chainId","required":false,"description":"alias of chain"},{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"filter by symbol/name/address"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","tokens"],"properties":{"chainId":{"type":"integer"},"tokens":{"type":"array","items":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/quote":{"get":{"summary":"Best price for a same-chain swap across all connected DEXes","tags":["swap"],"description":"Compares every V2 router and V3 venue of the chain (direct and two-hop routes) in one multicall and returns the best output, the alternatives, price impact and the minimum output at the requested slippage. Read-only; nothing is sent on-chain.","parameters":[{"schema":{"type":"string"},"example":"bsc","in":"query","name":"chain","required":true,"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb"},{"schema":{"type":"string"},"example":"USDT","in":"query","name":"tokenIn","required":true,"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address"},{"schema":{"type":"string"},"example":"USDT","in":"query","name":"tokenOut","required":true,"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address"},{"schema":{"type":"string"},"example":"1","in":"query","name":"amount","required":false,"description":"amount in human units, e.g. \"0.5\""},{"schema":{"pattern":"^[0-9]+$","type":"string"},"in":"query","name":"amountWei","required":false,"description":"amount in the smallest unit (alternative to amount)"},{"schema":{"minimum":1,"maximum":5000,"type":"integer"},"in":"query","name":"slippageBps","required":false,"description":"basis points, 50 = 0.5% (default 50)"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","tokenIn","tokenOut","amountIn","slippageBps","best","alternatives","venuesCompared","warnings","quotedAt"],"properties":{"chainId":{"type":"integer"},"tokenIn":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"tokenOut":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amountIn":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"slippageBps":{"type":"integer"},"best":{"type":"object","required":["venue","kind","router","path","label","amountOut","minOut","viaAggregator","feeBps"],"properties":{"venue":{"description":"DEX name","type":"string"},"kind":{"anyOf":[{"type":"string","enum":["v2"]},{"type":"string","enum":["v3"]}]},"router":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"fees":{"description":"V3 pool fee tiers along the path (1e-6)","type":"array","items":{"type":"integer"}},"label":{"description":"human route, e.g. \"ETH → 0.05% → USDC\"","type":"string"},"amountOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"minOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"viaAggregator":{"description":"true when the Hopivia aggregator contract executes the route","type":"boolean"},"feeBps":{"description":"Hopivia service fee on this route, basis points","type":"integer"}}},"alternatives":{"type":"array","items":{"type":"object","required":["venue","kind","amountOut","label"],"properties":{"venue":{"type":"string"},"kind":{"type":"string"},"amountOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"label":{"type":"string"}}}},"venuesCompared":{"type":"integer"},"priceImpactPct":{"type":"number"},"savingsPct":{"description":"best vs. second-best venue","type":"number"},"warnings":{"type":"array","items":{"type":"string"}},"quotedAt":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/swap/tx":{"post":{"summary":"Unsigned transactions for the best same-chain swap","tags":["swap"],"description":"Re-quotes server-side, then returns the ordered steps to sign and send from `from`: an ERC-20 approve when the allowance is short, and the swap itself. Only allowlisted routers are used; the output goes to `recipient` (defaults to `from`), echoed in the response, with a warning when it is not the sender. The swap step is dry-run with eth_estimateGas when no approval is pending. Keys never leave the caller.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chain","tokenIn","tokenOut","from"],"properties":{"chain":{"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb","examples":["bsc"],"type":"string"},"tokenIn":{"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address","examples":["USDT"],"type":"string"},"tokenOut":{"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address","examples":["USDT"],"type":"string"},"amount":{"description":"amount in human units, e.g. \"0.5\"","examples":["1"],"type":"string"},"amountWei":{"description":"amount in the smallest unit (alternative to amount)","pattern":"^[0-9]+$","type":"string"},"from":{"description":"sender 0x address (the wallet that will sign)","type":"string"},"recipient":{"description":"defaults to from. Pass only an address the user typed; a recipient other than `from` adds a warning","type":"string"},"onBehalfOf":{"description":"delegated swap: the OWNER wallet that allowed `from` (the agent) on the Hopivia delegation contract. tokenIn is pulled from the owner and tokenOut always goes to the owner; `from` only pays gas. Slippage is capped at 100 bps (400 delegation_slippage_too_high). Limits are checked first (422 delegation_*). See GET /delegation","type":"string"},"slippageBps":{"minimum":1,"maximum":5000,"description":"basis points, 50 = 0.5% (default 50)","type":"integer"},"simulate":{"default":true,"description":"dry-run the swap with eth_estimateGas; a revert is refused with 422 simulation_reverted","type":"boolean"},"checkSafety":{"default":true,"description":"GoPlus check on tokenOut; risk \"high\" is refused with 422 token_risk_high unless allowRiskyToken","type":"boolean"},"allowRiskyToken":{"default":false,"description":"build even if tokenOut is a honeypot / >50% sell tax / owner-controlled","type":"boolean"},"maxPriceImpactPct":{"minimum":0.01,"maximum":50,"default":10,"description":"refuse with 422 price_impact_too_high above this","type":"number"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["quote","steps","spender","minOut","feeBps","viaAggregator","recipient","deadline","simulation","warnings"],"properties":{"quote":{"type":"object","required":["chainId","tokenIn","tokenOut","amountIn","slippageBps","best","alternatives","venuesCompared","warnings","quotedAt"],"properties":{"chainId":{"type":"integer"},"tokenIn":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"tokenOut":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amountIn":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"slippageBps":{"type":"integer"},"best":{"type":"object","required":["venue","kind","router","path","label","amountOut","minOut","viaAggregator","feeBps"],"properties":{"venue":{"description":"DEX name","type":"string"},"kind":{"anyOf":[{"type":"string","enum":["v2"]},{"type":"string","enum":["v3"]}]},"router":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"fees":{"description":"V3 pool fee tiers along the path (1e-6)","type":"array","items":{"type":"integer"}},"label":{"description":"human route, e.g. \"ETH → 0.05% → USDC\"","type":"string"},"amountOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"minOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"viaAggregator":{"description":"true when the Hopivia aggregator contract executes the route","type":"boolean"},"feeBps":{"description":"Hopivia service fee on this route, basis points","type":"integer"}}},"alternatives":{"type":"array","items":{"type":"object","required":["venue","kind","amountOut","label"],"properties":{"venue":{"type":"string"},"kind":{"type":"string"},"amountOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"label":{"type":"string"}}}},"venuesCompared":{"type":"integer"},"priceImpactPct":{"type":"number"},"savingsPct":{"description":"best vs. second-best venue","type":"number"},"warnings":{"type":"array","items":{"type":"string"}},"quotedAt":{"type":"string"}}},"steps":{"type":"array","items":{"type":"object","required":["kind","description","chainId"],"properties":{"kind":{"description":"approve | permit2-approve | swap | transfer | fee | bridge | tron-approve | tron-call","type":"string"},"description":{"type":"string"},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"description":"wei, decimal string","type":"string"},"gas":{"description":"estimated gas when simulated","type":"string"},"gasLimit":{"type":"string"},"contract":{"type":"string"},"functionSelector":{"type":"string"},"parameter":{},"rawParameter":{"type":"string"},"callValueSun":{"type":"integer"},"feeLimitSun":{"type":"integer"}}}},"spender":{"description":"contract that must hold the ERC-20 allowance","type":"string"},"minOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"feeBps":{"type":"integer"},"viaAggregator":{"type":"boolean"},"recipient":{"description":"where tokenOut is sent: `recipient`, else `from`; the owner for delegated swaps","type":"string"},"deadline":{"description":"unix seconds. Enforced on-chain only when the swap step calls a V2 router directly (viaAggregator=false, best.kind=\"v2\") or the delegation contract (onBehalfOf). Aggregator routes (viaAggregator=true) and direct V3 routes carry no deadline: amountOutMin is then the only protection against a delayed transaction, and `warnings` says so","type":"integer"},"simulation":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"},"gas":{"type":"string"},"error":{"type":"string"},"skipped":{"description":"why the dry run was not executed","type":"string"}}},"safety":{"type":"object","required":["tokenOut"],"properties":{"tokenOut":{"type":"object","required":["risk","flags","checked"],"properties":{"risk":{"type":"string"},"flags":{"type":"array","items":{"type":"string"}},"checked":{"type":"boolean"}}}}},"delegated":{"description":"present for delegated swaps (onBehalfOf): what remains of the daily cap after this swap","type":"object","required":["owner","agent","contract","availableToday","expiry","resetsAt"],"properties":{"owner":{"type":"string"},"agent":{"type":"string"},"contract":{"type":"string"},"availableToday":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"expiry":{"description":"unix seconds","type":"integer"},"resetsAt":{"description":"unix seconds, when the daily counter resets","type":"integer"}}},"warnings":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/bridge/quote":{"get":{"summary":"Cross-chain quote (EVM ↔ EVM via LI.FI; Tron ↔ EVM via Symbiosis or deBridge, whichever delivers more)","tags":["bridge"],"description":"Anything touching Tron is quoted at Symbiosis and deBridge DLN in parallel and the better amountOut is returned (USDT only on the Tron side); `warnings` names the runner-up. EVM ↔ EVM goes through LI.FI with Symbiosis and deBridge as fallbacks. Pass `provider` to force one. Amounts, fees and the spender to approve are normalized across providers.","parameters":[{"schema":{"type":"string"},"example":"tron","in":"query","name":"fromChain","required":true,"description":"chain id or key, plus \"tron\" (USDT only)"},{"schema":{"type":"string"},"example":"tron","in":"query","name":"toChain","required":true,"description":"chain id or key, plus \"tron\" (USDT only)"},{"schema":{"type":"string"},"example":"USDT","in":"query","name":"fromToken","required":true,"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address"},{"schema":{"type":"string"},"example":"USDT","in":"query","name":"toToken","required":true,"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address"},{"schema":{"type":"string"},"example":"1","in":"query","name":"amount","required":false,"description":"amount in human units, e.g. \"0.5\""},{"schema":{"pattern":"^[0-9]+$","type":"string"},"in":"query","name":"amountWei","required":false,"description":"amount in the smallest unit (alternative to amount)"},{"schema":{"type":"string"},"in":"query","name":"from","required":false,"description":"sender on fromChain (0x… or T…). Required for /bridge/tx"},{"schema":{"type":"string"},"in":"query","name":"to","required":false,"description":"recipient on toChain; defaults to `from` when the address formats match, required when they differ (Tron ↔ EVM). Pass only an address the user typed; a recipient other than `from` adds a warning"},{"schema":{"minimum":1,"maximum":5000,"type":"integer"},"in":"query","name":"slippageBps","required":false,"description":"basis points, 50 = 0.5% (default 50)"},{"schema":{"anyOf":[{"type":"string","enum":["lifi"]},{"type":"string","enum":["symbiosis"]},{"type":"string","enum":["debridge"]}]},"in":"query","name":"provider","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["provider","fromChainId","toChainId","fromToken","toToken","amountIn","amountOut","amountOutMin","estimatedSeconds","feesUsd","approveTo","sender","recipient","warnings","quotedAt"],"properties":{"provider":{"anyOf":[{"type":"string","enum":["lifi"]},{"type":"string","enum":["symbiosis"]},{"type":"string","enum":["debridge"]}]},"tool":{"description":"underlying bridge","type":"string"},"fromChainId":{"type":"integer"},"toChainId":{"type":"integer"},"fromToken":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"toToken":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amountIn":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"amountOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"amountOutMin":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"estimatedSeconds":{"type":"integer"},"feesUsd":{"description":"bridge + integrator fees","type":"number"},"gasUsd":{"type":"number"},"priceImpactPct":{"type":"number"},"approveTo":{"description":"spender to approve for ERC-20 / TRC-20 input","type":"string"},"sender":{"type":"string"},"recipient":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}},"quotedAt":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/bridge/tx":{"post":{"summary":"Unsigned transactions for a cross-chain swap","tags":["bridge"],"description":"Returns the ordered steps for the sender: an approve (ERC-20 or TRC-20) when the allowance is short, then the bridge call. EVM steps are {to, data, value}; Tron steps carry the fields for tronWeb.transactionBuilder.triggerSmartContract (functionSelector, rawParameter, feeLimit). The provider's transaction is checked before it is returned (known provider contract as target and spender, pays `to` on toChain, pulls no more than the amount, no excess native value); a transaction that fails the check is refused with 502 bridge_unsafe_tx. Track with /bridge/status after sending.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["fromChain","toChain","fromToken","toToken","from"],"properties":{"fromChain":{"description":"chain id or key, plus \"tron\" (USDT only)","examples":["tron"],"type":"string"},"toChain":{"description":"chain id or key, plus \"tron\" (USDT only)","examples":["tron"],"type":"string"},"fromToken":{"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address","examples":["USDT"],"type":"string"},"toToken":{"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address","examples":["USDT"],"type":"string"},"amount":{"description":"amount in human units, e.g. \"0.5\"","examples":["1"],"type":"string"},"amountWei":{"description":"amount in the smallest unit (alternative to amount)","pattern":"^[0-9]+$","type":"string"},"from":{"description":"sender on fromChain (0x… or T…)","type":"string"},"to":{"description":"recipient on toChain; defaults to `from` when the address formats match, required when they differ (Tron ↔ EVM). Pass only an address the user typed; a recipient other than `from` adds a warning","type":"string"},"slippageBps":{"minimum":1,"maximum":5000,"description":"basis points, 50 = 0.5% (default 50)","type":"integer"},"provider":{"anyOf":[{"type":"string","enum":["lifi"]},{"type":"string","enum":["symbiosis"]},{"type":"string","enum":["debridge"]}]}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["quote","steps","track"],"properties":{"quote":{"type":"object","required":["provider","fromChainId","toChainId","fromToken","toToken","amountIn","amountOut","amountOutMin","estimatedSeconds","feesUsd","approveTo","sender","recipient","warnings","quotedAt"],"properties":{"provider":{"anyOf":[{"type":"string","enum":["lifi"]},{"type":"string","enum":["symbiosis"]},{"type":"string","enum":["debridge"]}]},"tool":{"description":"underlying bridge","type":"string"},"fromChainId":{"type":"integer"},"toChainId":{"type":"integer"},"fromToken":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"toToken":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amountIn":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"amountOut":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"amountOutMin":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"estimatedSeconds":{"type":"integer"},"feesUsd":{"description":"bridge + integrator fees","type":"number"},"gasUsd":{"type":"number"},"priceImpactPct":{"type":"number"},"approveTo":{"description":"spender to approve for ERC-20 / TRC-20 input","type":"string"},"sender":{"type":"string"},"recipient":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}},"quotedAt":{"type":"string"}}},"steps":{"type":"array","items":{"type":"object","required":["kind","description","chainId"],"properties":{"kind":{"description":"approve | permit2-approve | swap | transfer | fee | bridge | tron-approve | tron-call","type":"string"},"description":{"type":"string"},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"description":"wei, decimal string","type":"string"},"gas":{"description":"estimated gas when simulated","type":"string"},"gasLimit":{"type":"string"},"contract":{"type":"string"},"functionSelector":{"type":"string"},"parameter":{},"rawParameter":{"type":"string"},"callValueSun":{"type":"integer"},"feeLimitSun":{"type":"integer"}}}},"track":{"type":"object","required":["provider","fromChainId","toChainId","statusUrl"],"properties":{"provider":{"anyOf":[{"type":"string","enum":["lifi"]},{"type":"string","enum":["symbiosis"]},{"type":"string","enum":["debridge"]}]},"fromChainId":{"type":"integer"},"toChainId":{"type":"integer"},"bridge":{"type":"string"},"statusUrl":{"description":"GET this with &txHash=<hash of the bridge step>","type":"string"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/bridge/status":{"get":{"summary":"Status of a cross-chain transfer by its source tx hash","tags":["bridge"],"parameters":[{"schema":{"anyOf":[{"type":"string","enum":["lifi"]},{"type":"string","enum":["symbiosis"]},{"type":"string","enum":["debridge"]}]},"in":"query","name":"provider","required":true},{"schema":{"pattern":"^(0x)?[0-9a-fA-F]{64}$","type":"string"},"in":"query","name":"txHash","required":true,"description":"source-chain transaction hash: 64 hex characters, 0x optional"},{"schema":{"type":"string"},"example":"tron","in":"query","name":"fromChain","required":true,"description":"chain id or key, plus \"tron\" (USDT only)"},{"schema":{"type":"string"},"example":"tron","in":"query","name":"toChain","required":true,"description":"chain id or key, plus \"tron\" (USDT only)"},{"schema":{"maxLength":64,"type":"string"},"in":"query","name":"bridge","required":false,"description":"LI.FI tool name from /bridge/tx"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["provider","status"],"properties":{"provider":{"anyOf":[{"type":"string","enum":["lifi"]},{"type":"string","enum":["symbiosis"]},{"type":"string","enum":["debridge"]}]},"status":{"description":"NOT_FOUND | PENDING | DONE | FAILED | STUCK","type":"string"},"substatus":{"type":"string"},"receivingTxHash":{"type":"string"},"explorer":{"type":"string"},"hint":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/token/check":{"get":{"summary":"Token metadata + GoPlus safety check (honeypot, taxes, owner privileges)","tags":["safety"],"parameters":[{"schema":{"type":"string"},"example":"bsc","in":"query","name":"chain","required":true,"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb"},{"schema":{"type":"string"},"in":"query","name":"address","required":true,"description":"0x token address"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["token","safety"],"properties":{"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"safety":{"type":"object","required":["checked","risk","flags"],"properties":{"checked":{"type":"boolean"},"risk":{"description":"low | medium | high | unknown","type":"string"},"flags":{"type":"array","items":{"type":"string"}},"buyTaxPct":{"type":"number"},"sellTaxPct":{"type":"number"},"isHoneypot":{"type":"boolean"},"isOpenSource":{"type":"boolean"},"holderCount":{"type":"number"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/balances":{"get":{"summary":"Native + known-token balances of an address on one chain","tags":["wallet"],"parameters":[{"schema":{"type":"string"},"example":"bsc","in":"query","name":"chain","required":true,"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb"},{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"string"},"in":"query","name":"tokens","required":false,"description":"comma-separated extra 0x addresses to include, at most 30"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","address","balances"],"properties":{"chainId":{"type":"integer"},"address":{"type":"string"},"balances":{"type":"array","items":{"type":"object","required":["token","balance"],"properties":{"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"balance":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/delegation":{"get":{"summary":"Delegated access: limits an owner granted an agent (\"a limit instead of a key\")","tags":["swap"],"description":"Per token: daily cap, spent and available today, expiry, the owner's ERC-20 allowance to the contract. Plus the contract address and the V2 routers it may use. Read-only. Build the swap with POST /swap/tx and onBehalfOf=<owner>.","parameters":[{"schema":{"type":"string"},"example":"bsc","in":"query","name":"chain","required":true,"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb"},{"schema":{"type":"string"},"in":"query","name":"owner","required":true,"description":"owner wallet (0x) whose tokens are sold"},{"schema":{"type":"string"},"in":"query","name":"agent","required":true,"description":"agent wallet (0x) the owner allowed; it signs the swap"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","contract","owner","agent","routers","tokens","howTo"],"properties":{"chainId":{"type":"integer"},"contract":{"type":"string"},"owner":{"type":"string"},"agent":{"type":"string"},"routers":{"description":"the only exchanges the contract will call (V2)","type":"array","items":{"type":"object","required":["router","name"],"properties":{"router":{"type":"string"},"name":{"type":"string"}}}},"tokens":{"type":"array","items":{"type":"object","required":["token","active","dailyCap","spentToday","availableToday","allowance","expiry","resetsAt"],"properties":{"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"active":{"description":"cap set and not expired","type":"boolean"},"dailyCap":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"spentToday":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"availableToday":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"allowance":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"expiry":{"description":"unix seconds","type":"integer"},"resetsAt":{"description":"unix seconds, next 00:00 UTC","type":"integer"}}}},"howTo":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/price":{"get":{"summary":"USD price of a token","tags":["tokens"],"description":"Known stablecoins are 1; other tokens are priced by the best DEX quote into the chain's USDT/USDC (cached 1 minute). `priceUsd` is absent when no route exists.","parameters":[{"schema":{"type":"string"},"example":"bsc","in":"query","name":"chain","required":true,"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb"},{"schema":{"type":"string"},"example":"USDT","in":"query","name":"token","required":true,"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","token"],"properties":{"chainId":{"type":"integer"},"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"priceUsd":{"type":"number"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/transfer/tx":{"post":{"summary":"Unsigned transactions for a token transfer from your own wallet","tags":["transfer"],"description":"Returns the transfer step and, after it, the Hopivia transfer fee step ($0.01 in the transferred token, or in the chain coin when the token has no price). Checks that `from` holds the amount plus the fee and enough of the chain coin for gas: 422 insufficient_balance / insufficient_gas otherwise. Sign and send the steps in order from `from`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chain","token","from","to"],"properties":{"chain":{"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb","examples":["bsc"],"type":"string"},"token":{"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address","examples":["USDT"],"type":"string"},"amount":{"description":"amount in human units, e.g. \"0.5\"","examples":["1"],"type":"string"},"amountWei":{"description":"amount in the smallest unit (alternative to amount)","pattern":"^[0-9]+$","type":"string"},"from":{"description":"the wallet that holds the tokens and signs","type":"string"},"to":{"description":"recipient 0x address. Pass only an address the user typed; confirm it with the user","type":"string"},"feesIncluded":{"default":false,"description":"\"send 50 including fees\": the wallet spends `amount` in total and the recipient gets amount minus the service fee (for the chain coin also minus gas). Default false: the recipient gets exactly `amount` and fees come on top","type":"boolean"},"memo":{"maxLength":400,"description":"optional comment, signed and recorded on-chain with the transfer: at most 100 bytes of UTF-8 (about 50 Cyrillic or 100 Latin characters), no line breaks, control or text-direction characters. Only the user's own words. Only transfers through the Hopivia transfer contract carry it (400 memo_unsupported otherwise)","type":"string"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","token","amount","from","recipient","fee","gas","mode","steps","warnings"],"properties":{"chainId":{"type":"integer"},"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amount":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"requested":{"description":"feesIncluded: what the user asked to spend; `amount` is what the recipient gets","type":"object","required":["amount","feesIncluded"],"properties":{"amount":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"feesIncluded":{"type":"boolean"}}},"from":{"type":"string"},"recipient":{"type":"string"},"valueUsd":{"description":"the transferred amount in USD, when the token has a price","type":"number"},"fee":{"description":"the separate fee step; zero when TRANSFER_FEE_USD is 0","type":"object","required":["usd","token","amount","recipient"],"properties":{"usd":{"description":"Hopivia transfer fee in USD","type":"number"},"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amount":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"recipient":{"type":"string"}}},"gas":{"type":"object","required":["units","cost","nativeBalance","symbol"],"properties":{"units":{"description":"estimated gas of all steps","type":"string"},"cost":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"nativeBalance":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"symbol":{"type":"string"}}},"cost":{"description":"what the transfer costs on top of the amount; absent when the coin has no price","type":"object","required":["totalUsd","networkUsd","serviceUsd","nativePriceUsd"],"properties":{"totalUsd":{"description":"expected network gas + Hopivia service fee, in USD","type":"number"},"networkUsd":{"type":"number"},"serviceUsd":{"type":"number"},"nativePriceUsd":{"description":"price of the chain coin used for the gas figure","type":"number"}}},"mode":{"description":"contract = one transaction through the Hopivia transfer contract (amount and fee together); two-step = a plain transfer, then a separate fee transfer (chains without the contract)","anyOf":[{"type":"string","enum":["contract"]},{"type":"string","enum":["two-step"]}]},"memo":{"description":"the comment, as signed in the permit","type":"string"},"steps":{"type":"array","items":{"type":"object","required":["kind","description","chainId"],"properties":{"kind":{"description":"approve | permit2-approve | swap | transfer | fee | bridge | tron-approve | tron-call","type":"string"},"description":{"type":"string"},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"description":"wei, decimal string","type":"string"},"gas":{"description":"estimated gas when simulated","type":"string"},"gasLimit":{"type":"string"},"contract":{"type":"string"},"functionSelector":{"type":"string"},"parameter":{},"rawParameter":{"type":"string"},"callValueSun":{"type":"integer"},"feeLimitSun":{"type":"integer"}}}},"permit":{"description":"contract mode, ERC-20: after the steps are mined, sign typedData and send transferWithPermit(owner, token, to, amount, maxFee, relayerFee, memo, nonce, deadline, signature) to `contract` from any address","type":"object","required":["contract","typedData","call"],"properties":{"contract":{"type":"string"},"typedData":{"description":"EIP-712 Permit2 PermitWitnessTransferFrom to sign with `from` (numbers as decimal strings); witness Transfer(address to,uint256 amount,uint256 maxFee,uint256 relayerFee,string memo)"},"call":{"type":"object","required":["owner","token","to","amount","maxFee","relayerFee","memo","nonce","deadline"],"properties":{"owner":{"type":"string"},"token":{"type":"string"},"to":{"type":"string"},"amount":{"type":"string"},"maxFee":{"type":"string"},"relayerFee":{"type":"string"},"memo":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}}}}},"warnings":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/transfer/batch/tx":{"post":{"summary":"One transaction paying a list of recipients","tags":["transfer"],"description":"Pays up to 200 recipients one token in a single transaction through the Hopivia transfer contract. ERC-20: an optional one-time Permit2 approval in `steps`, then `permit`: sign typedData with `from` and send transferBatchWithPermit(owner, token, recipients, maxFee, relayerFee, memo, nonce, deadline, signature) to `permit.contract`. The chain coin: one payable transferNativeBatch step. Fee: $0.01 per recipient, charged by the contract; `maxFee` is the signed ceiling of the total. All or nothing. 409 batch_unavailable when the chain has no transfer contract or the contract cannot price the token (send one by one with POST /transfer/tx); 503 transfers_paused while the contract is paused.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["chain","token","from","recipients"],"properties":{"chain":{"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb","examples":["bsc"],"type":"string"},"token":{"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address","examples":["USDT"],"type":"string"},"from":{"description":"the wallet that holds the tokens and signs","type":"string"},"recipients":{"minItems":1,"maxItems":200,"description":"every recipient gets exactly its amount; no duplicates, not `from`, not the token contract","type":"array","items":{"type":"object","required":["to"],"properties":{"to":{"description":"recipient 0x address. Only addresses the user gave; confirm the list with the user","type":"string"},"amount":{"description":"amount in human units, e.g. \"50\"","type":"string"},"amountWei":{"description":"alternative: amount in the smallest unit","type":"string"}}}},"memo":{"maxLength":400,"description":"optional comment, signed and recorded on-chain with the transfer: at most 100 bytes of UTF-8 (about 50 Cyrillic or 100 Latin characters), no line breaks, control or text-direction characters. Only the user's own words. Only transfers through the Hopivia transfer contract carry it (400 memo_unsupported otherwise)","type":"string"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","token","from","mode","count","recipients","total","fee","gas","steps","warnings"],"properties":{"chainId":{"type":"integer"},"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"from":{"type":"string"},"mode":{"type":"string","enum":["contract"]},"count":{"type":"integer"},"recipients":{"type":"array","items":{"type":"object","required":["to","amount"],"properties":{"to":{"type":"string"},"amount":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}}}}},"total":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"valueUsd":{"description":"the total in USD, when the token has a price","type":"number"},"fee":{"type":"object","required":["usd","perRecipientUsd","token","amount","maxFee","recipient"],"properties":{"usd":{"description":"Hopivia service fee of the whole list in USD (per recipient × count)","type":"number"},"perRecipientUsd":{"type":"number"},"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amount":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"maxFee":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"recipient":{"type":"string"}}},"gas":{"type":"object","required":["units","cost","nativeBalance","symbol"],"properties":{"units":{"type":"string"},"cost":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"nativeBalance":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"symbol":{"type":"string"}}},"cost":{"type":"object","required":["totalUsd","networkUsd","serviceUsd","nativePriceUsd"],"properties":{"totalUsd":{"type":"number"},"networkUsd":{"type":"number"},"serviceUsd":{"type":"number"},"nativePriceUsd":{"type":"number"}}},"memo":{"type":"string"},"steps":{"type":"array","items":{"type":"object","required":["kind","description","chainId"],"properties":{"kind":{"description":"approve | permit2-approve | swap | transfer | fee | bridge | tron-approve | tron-call","type":"string"},"description":{"type":"string"},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"description":"wei, decimal string","type":"string"},"gas":{"description":"estimated gas when simulated","type":"string"},"gasLimit":{"type":"string"},"contract":{"type":"string"},"functionSelector":{"type":"string"},"parameter":{},"rawParameter":{"type":"string"},"callValueSun":{"type":"integer"},"feeLimitSun":{"type":"integer"}}}},"permit":{"type":"object","required":["contract","typedData","call"],"properties":{"contract":{"type":"string"},"typedData":{"description":"EIP-712 Permit2 PermitWitnessTransferFrom with witness BatchTransfer(Recipient[] recipients,uint256 maxFee,uint256 relayerFee,string memo), Recipient(address to,uint256 amount); numbers as decimal strings"},"call":{"type":"object","required":["owner","token","recipients","maxFee","relayerFee","memo","nonce","deadline"],"properties":{"owner":{"type":"string"},"token":{"type":"string"},"recipients":{"type":"array","items":{"type":"object","required":["to","amount"],"properties":{"to":{"type":"string"},"amount":{"type":"string"}}}},"maxFee":{"type":"string"},"relayerFee":{"type":"string"},"memo":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}}}}},"warnings":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/transfer/estimate":{"get":{"summary":"Fees of a transfer without a sender","tags":["transfer"],"description":"Expected cost of a transfer of `amount` before the sending wallet is known: the Hopivia service fee ($0.01) plus typical network gas for the transfer mode of this chain and token. `recipientGets` and `walletSpends` are in the token; network gas is paid in the chain coin on top (for the coin itself as well). Balances are not checked. Use POST /transfer/tx with `from` for the exact plan.","parameters":[{"schema":{"type":"string"},"example":"bsc","in":"query","name":"chain","required":true,"description":"chain id or key: 56|bsc, 1|ethereum, 137|polygon, 42161|arbitrum, 8453|base, 10|optimism, 43114|avalanche, 204|opbnb"},{"schema":{"type":"string"},"example":"USDT","in":"query","name":"token","required":true,"description":"\"native\", a symbol from /tokens (USDT, USDC, …) or a 0x address"},{"schema":{"type":"string"},"example":"50","in":"query","name":"amount","required":true,"description":"amount in human units, e.g. \"50\""},{"schema":{"default":false,"type":"boolean"},"in":"query","name":"feesIncluded","required":false,"description":"true: the wallet spends `amount` in total and the recipient gets it minus the fees; default: the recipient gets exactly `amount`"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["chainId","chain","token","amount","feesIncluded","recipientGets","walletSpends","feeUsd","mode","warnings"],"properties":{"chainId":{"type":"integer"},"chain":{"description":"chain key, e.g. bsc","type":"string"},"token":{"type":"object","required":["address","symbol","name","decimals"],"properties":{"address":{"description":"0x address, \"native\" for the chain coin, T… on Tron","type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"integer"}}},"amount":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"feesIncluded":{"type":"boolean"},"recipientGets":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"walletSpends":{"additionalProperties":false,"type":"object","required":["wei","formatted"],"properties":{"wei":{"description":"integer in the smallest unit","type":"string"},"formatted":{"description":"human units","type":"string"}}},"feeUsd":{"description":"Hopivia service fee in USD","type":"number"},"networkUsd":{"description":"typical network gas in USD; absent when the chain coin has no price","type":"number"},"totalUsd":{"description":"feeUsd + networkUsd","type":"number"},"valueUsd":{"description":"what the recipient gets, in USD, when the token has a price","type":"number"},"mode":{"anyOf":[{"type":"string","enum":["contract"]},{"type":"string","enum":["two-step"]}]},"warnings":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/keys/challenge":{"post":{"summary":"Step 1 of wallet sign-in: get a message to sign","tags":["keys"],"description":"For an EVM address the message is an EIP-4361 (Sign-In with Ethereum) message for the site domain; for a Tron address a plain-text message with the same fields. Sign exactly the returned `message`; it expires in 10 minutes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"description":"wallet address: EVM (0x…) or Tron (T…)","type":"string"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["message","nonce","expiresAt"],"properties":{"message":{"type":"string"},"nonce":{"type":"string"},"expiresAt":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/keys/session":{"post":{"summary":"Step 2 of wallet sign-in: exchange the signature for a 30-minute session","tags":["keys"],"description":"EVM wallets sign the message with personal_sign; Tron wallets with tronWeb.trx.signMessageV2 (TronLink).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address","nonce","signature"],"properties":{"address":{"type":"string"},"nonce":{"type":"string"},"signature":{"description":"personal_sign (EVM) or signMessageV2 (Tron) of the challenge message","type":"string"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["session","address","expiresAt"],"properties":{"session":{"type":"string"},"address":{"type":"string"},"expiresAt":{"type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/keys":{"get":{"summary":"Keys of the signed-in wallet with usage","tags":["keys"],"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":false,"description":"Bearer <session> from POST /keys/session"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["address","maxKeys","keys"],"properties":{"address":{"type":"string"},"maxKeys":{"type":"integer"},"keys":{"type":"array","items":{"type":"object","required":["id","prefix","label","tier","limitPerMinute","createdAt","requestsToday","requests7d"],"properties":{"id":{"type":"string"},"prefix":{"description":"first characters of the key, for recognition","type":"string"},"label":{"type":"string"},"tier":{"description":"free | pro","type":"string"},"limitPerMinute":{"type":"integer"},"createdAt":{"type":"string"},"lastUsedAt":{"type":"string"},"revokedAt":{"type":"string"},"requestsToday":{"type":"integer"},"requests7d":{"type":"integer"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}},"post":{"summary":"Create a free-tier key for the signed-in wallet (the raw key is returned once)","tags":["keys"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"maxLength":60,"description":"your note, e.g. the agent name","type":"string"}}}}}},"parameters":[{"schema":{"type":"string"},"in":"header","name":"authorization","required":false,"description":"Bearer <session> from POST /keys/session"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["key","info"],"properties":{"key":{"description":"store it now — it is never shown again","type":"string"},"info":{"type":"object","required":["id","prefix","label","tier","limitPerMinute","createdAt","requestsToday","requests7d"],"properties":{"id":{"type":"string"},"prefix":{"description":"first characters of the key, for recognition","type":"string"},"label":{"type":"string"},"tier":{"description":"free | pro","type":"string"},"limitPerMinute":{"type":"integer"},"createdAt":{"type":"string"},"lastUsedAt":{"type":"string"},"revokedAt":{"type":"string"},"requestsToday":{"type":"integer"},"requests7d":{"type":"integer"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/keys/{id}":{"delete":{"summary":"Revoke a key of the signed-in wallet","tags":["keys"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"authorization","required":false,"description":"Bearer <session> from POST /keys/session"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"/api/v1/keys/me":{"get":{"summary":"What the X-API-Key of this request is: tier, limit, usage","tags":["keys"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["tier","limitPerMinute"],"properties":{"tier":{"type":"string"},"limitPerMinute":{"type":"integer"},"key":{"type":"object","required":["id","prefix","label","tier","limitPerMinute","createdAt","requestsToday","requests7d"],"properties":{"id":{"type":"string"},"prefix":{"description":"first characters of the key, for recognition","type":"string"},"label":{"type":"string"},"tier":{"description":"free | pro","type":"string"},"limitPerMinute":{"type":"integer"},"createdAt":{"type":"string"},"lastUsedAt":{"type":"string"},"revokedAt":{"type":"string"},"requestsToday":{"type":"integer"},"requests7d":{"type":"integer"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}}},"servers":[{"url":"https://hopivia.com"}],"security":[{"apiKey":[]},{}],"tags":[{"name":"meta","description":"Health, chains, tokens"},{"name":"swap","description":"Same-chain quotes and transactions"},{"name":"bridge","description":"Cross-chain (EVM ↔ EVM, Tron ↔ EVM USDT)"},{"name":"transfer","description":"Token transfers from your own wallet, with the $0.01 Hopivia transfer fee"},{"name":"tokens","description":"Token prices"},{"name":"safety","description":"Token risk checks"},{"name":"wallet","description":"Balances"},{"name":"keys","description":"API keys: wallet sign-in, create, list, revoke"}]}