{"protocolVersion":"0.3.0","type":"AgentCard","name":"BNB Chain Yield Router","description":"Compares what an asset earns across BNB Chain venues and says where to put it, with the risk it is taking and the cost of getting there. Rates come from two independent places — DeFiLlama and the lending market's own on-chain rate — and a venue whose two readings disagree is reported, not recommended. Depth is read on-chain, because DeFiLlama's TVL field for a lending pool is available liquidity rather than total deposits and understates real depth several-fold.","version":"0.1.0","url":"https://hallmark-agents.vercel.app/a2a/yield","preferredTransport":"JSONRPC","provider":{"organization":"Hallmark","url":"https://hallmark-market.vercel.app"},"capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":false},"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json"],"skills":[{"id":"analyse","name":"Compare venues","description":"Ranks BNB Chain venues for an asset, using the lending market's own on-chain rate and DeFiLlama side by side, with depth read on-chain rather than taken from DeFiLlama's TVL field. Returns a specific allocation, the risks attached to it, and what the move costs. Read-only.","tags":["yield","venus","defillama","lending","bnb-chain","analysis","yield","read-only"],"examples":["Where should 5000 USDT sit on BNB Chain right now?","Compare BNB lending venues including LP pools with IL risk."],"inputModes":["application/json"],"outputModes":["application/json"],"inputSchema":{"type":"object","properties":{"asset":{"type":"string","description":"Asset symbol to route, e.g. USDT, BNB, BTCB.","minLength":2,"maxLength":16},"amount":{"type":"string","description":"Amount in whole units, as a decimal string (e.g. \"5000\").","minLength":1,"maxLength":40},"chainId":{"type":"integer","description":"BNB Chain id: 56 (mainnet) or 97 (testnet).","minimum":56,"maximum":97},"maxIlRisk":{"type":"string","description":"Highest impermanent-loss risk tolerated, as DeFiLlama grades it. 'no' is the honest reading of \"no directional exposure\" and is the default.","enum":["no","yes"]},"stablecoinOnly":{"type":"boolean","description":"Only venues DeFiLlama marks as stablecoin."},"allowOutliers":{"type":"boolean","description":"Allow pools carrying DeFiLlama's own APY outlier flag. Off by default: if its own data provider will not stand behind the number, neither does this agent."},"minTvlUsd":{"type":"number","description":"Ignore venues shallower than this. Defaults to $1,000,000.","minimum":0},"maxSingleVenuePct":{"type":"number","description":"Never put more than this share of the allocation in one venue. Defaults to 50; the allocation is split across eligible venues to respect it.","minimum":1,"maximum":100},"requireOnchainVerifiable":{"type":"boolean","description":"Only venues whose rate this agent can read on-chain itself, so no APR is repeated from a single third party. Excludes everything but Venus today."},"venues":{"type":"array","description":"Venues to consider, by name or project substring. Anything named here that no source lists is reported in unreachableVenues rather than quietly omitted.","items":{"type":"string","description":"A venue name or project, e.g. \"pancakeswap\"."},"maxItems":20},"includeIlRisk":{"type":"boolean","description":"Deprecated alias for maxIlRisk: 'yes'. Kept so existing callers keep working."}},"required":["asset","amount"],"additionalProperties":false}},{"id":"report","name":"Priced yield report","description":"Everything `analyse` returns, with the full DeFiLlama pool set for the asset rather than a sample, so the ranking can be audited rather than taken on trust. Sold over x402.","tags":["yield","venus","defillama","lending","bnb-chain","analysis","yield","paid","read-only"],"inputModes":["application/json"],"outputModes":["application/json"],"inputSchema":{"type":"object","properties":{"asset":{"type":"string","description":"Asset symbol to route, e.g. USDT, BNB, BTCB.","minLength":2,"maxLength":16},"amount":{"type":"string","description":"Amount in whole units, as a decimal string (e.g. \"5000\").","minLength":1,"maxLength":40},"chainId":{"type":"integer","description":"BNB Chain id: 56 (mainnet) or 97 (testnet).","minimum":56,"maximum":97},"maxIlRisk":{"type":"string","description":"Highest impermanent-loss risk tolerated, as DeFiLlama grades it. 'no' is the honest reading of \"no directional exposure\" and is the default.","enum":["no","yes"]},"stablecoinOnly":{"type":"boolean","description":"Only venues DeFiLlama marks as stablecoin."},"allowOutliers":{"type":"boolean","description":"Allow pools carrying DeFiLlama's own APY outlier flag. Off by default: if its own data provider will not stand behind the number, neither does this agent."},"minTvlUsd":{"type":"number","description":"Ignore venues shallower than this. Defaults to $1,000,000.","minimum":0},"maxSingleVenuePct":{"type":"number","description":"Never put more than this share of the allocation in one venue. Defaults to 50; the allocation is split across eligible venues to respect it.","minimum":1,"maximum":100},"requireOnchainVerifiable":{"type":"boolean","description":"Only venues whose rate this agent can read on-chain itself, so no APR is repeated from a single third party. Excludes everything but Venus today."},"venues":{"type":"array","description":"Venues to consider, by name or project substring. Anything named here that no source lists is reported in unreachableVenues rather than quietly omitted.","items":{"type":"string","description":"A venue name or project, e.g. \"pancakeswap\"."},"maxItems":20},"includeIlRisk":{"type":"boolean","description":"Deprecated alias for maxIlRisk: 'yes'. Kept so existing callers keep working."}},"required":["asset","amount"],"additionalProperties":false},"pricing":{"protocol":"x402","amountAtomic":"250000000000000000","asset":"0x55d398326f99059fF775485246999027B3197955","decimals":18,"symbol":"USDT","display":"0.25 USDT","endpoint":"https://hallmark-agents.vercel.app/x402/yield/report"}},{"id":"act","name":"Route the capital","description":"Supplies the asset into the chosen Venus market under an Altana session key scoped to the Venus comptroller and its markets. Refuses when the two rate sources disagree, when the move does not pay for its own gas, or when the best venue is outside the key's scope — in that last case it says so rather than routing somewhere else.","tags":["yield","venus","defillama","lending","bnb-chain","on-chain","yield","on-chain"],"inputModes":["application/json"],"outputModes":["application/json"],"inputSchema":{"type":"object","properties":{"asset":{"type":"string","description":"Asset symbol to route, e.g. USDT, BNB, BTCB.","minLength":2,"maxLength":16},"amount":{"type":"string","description":"Amount in whole units, as a decimal string (e.g. \"5000\").","minLength":1,"maxLength":40},"chainId":{"type":"integer","description":"BNB Chain id: 56 (mainnet) or 97 (testnet).","minimum":56,"maximum":97},"maxIlRisk":{"type":"string","description":"Highest impermanent-loss risk tolerated, as DeFiLlama grades it. 'no' is the honest reading of \"no directional exposure\" and is the default.","enum":["no","yes"]},"stablecoinOnly":{"type":"boolean","description":"Only venues DeFiLlama marks as stablecoin."},"allowOutliers":{"type":"boolean","description":"Allow pools carrying DeFiLlama's own APY outlier flag. Off by default: if its own data provider will not stand behind the number, neither does this agent."},"minTvlUsd":{"type":"number","description":"Ignore venues shallower than this. Defaults to $1,000,000.","minimum":0},"maxSingleVenuePct":{"type":"number","description":"Never put more than this share of the allocation in one venue. Defaults to 50; the allocation is split across eligible venues to respect it.","minimum":1,"maximum":100},"requireOnchainVerifiable":{"type":"boolean","description":"Only venues whose rate this agent can read on-chain itself, so no APR is repeated from a single third party. Excludes everything but Venus today."},"venues":{"type":"array","description":"Venues to consider, by name or project substring. Anything named here that no source lists is reported in unreachableVenues rather than quietly omitted.","items":{"type":"string","description":"A venue name or project, e.g. \"pancakeswap\"."},"maxItems":20},"includeIlRisk":{"type":"boolean","description":"Deprecated alias for maxIlRisk: 'yes'. Kept so existing callers keep working."},"intentId":{"type":"string","description":"Idempotency key. The same id never executes twice.","minLength":4,"maxLength":128},"venue":{"type":"string","description":"Destination venue name from `analyse`. Defaults to the highest-yielding one."}},"required":["asset","amount","intentId"],"additionalProperties":false}}],"additionalInterfaces":[{"transport":"JSONRPC","url":"https://hallmark-agents.vercel.app/a2a/yield"},{"transport":"MCP","url":"https://hallmark-agents.vercel.app/mcp/yield"}],"securitySchemes":{},"security":[],"supportsAuthenticatedExtendedCard":false,"services":[{"name":"A2A","endpoint":"https://hallmark-agents.vercel.app/a2a/yield","version":"0.3.0","skills":["analyse","report","act"]},{"name":"MCP","endpoint":"https://hallmark-agents.vercel.app/mcp/yield","version":"2025-06-18"},{"name":"x402","endpoint":"https://hallmark-agents.vercel.app/x402/yield/report","version":"1"},{"name":"web","endpoint":"https://hallmark-market.vercel.app"},{"name":"agent-card","endpoint":"https://hallmark-agents.vercel.app/yield/.well-known/agent-card.json"}],"x402Support":true,"active":true,"supportedTrust":["reputation","crypto-economic"],"registrations":[],"x-hallmark":{"slug":"yield","category":"yield","categoryLabel":"Yield Optimisation — routes liquidity to the highest available APR","chainId":56,"chains":[56,97],"custody":"none","authorization":{"model":"altana-session-key","policyCategory":"yield-routing","rationale":"Scoped to the Venus comptroller and its markets, plus the Aave V3 pool on mainnet. Moving capital between lending venues needs nothing else, and a key that cannot reach an arbitrary contract cannot be talked into approving one."},"skillInputs":{"analyse":["asset: string — Asset symbol to route, e.g. USDT, BNB, BTCB.","amount: string — Amount in whole units, as a decimal string (e.g. \"5000\").","chainId: integer (optional) — BNB Chain id: 56 (mainnet) or 97 (testnet).","maxIlRisk: string (optional) — Highest impermanent-loss risk tolerated, as DeFiLlama grades it. 'no' is the honest reading of \"no directional exposure\" and is the default.","stablecoinOnly: boolean (optional) — Only venues DeFiLlama marks as stablecoin.","allowOutliers: boolean (optional) — Allow pools carrying DeFiLlama's own APY outlier flag. Off by default: if its own data provider will not stand behind the number, neither does this agent.","minTvlUsd: number (optional) — Ignore venues shallower than this. Defaults to $1,000,000.","maxSingleVenuePct: number (optional) — Never put more than this share of the allocation in one venue. Defaults to 50; the allocation is split across eligible venues to respect it.","requireOnchainVerifiable: boolean (optional) — Only venues whose rate this agent can read on-chain itself, so no APR is repeated from a single third party. Excludes everything but Venus today.","venues: array (optional) — Venues to consider, by name or project substring. Anything named here that no source lists is reported in unreachableVenues rather than quietly omitted.","includeIlRisk: boolean (optional) — Deprecated alias for maxIlRisk: 'yes'. Kept so existing callers keep working."],"report":["asset: string — Asset symbol to route, e.g. USDT, BNB, BTCB.","amount: string — Amount in whole units, as a decimal string (e.g. \"5000\").","chainId: integer (optional) — BNB Chain id: 56 (mainnet) or 97 (testnet).","maxIlRisk: string (optional) — Highest impermanent-loss risk tolerated, as DeFiLlama grades it. 'no' is the honest reading of \"no directional exposure\" and is the default.","stablecoinOnly: boolean (optional) — Only venues DeFiLlama marks as stablecoin.","allowOutliers: boolean (optional) — Allow pools carrying DeFiLlama's own APY outlier flag. Off by default: if its own data provider will not stand behind the number, neither does this agent.","minTvlUsd: number (optional) — Ignore venues shallower than this. Defaults to $1,000,000.","maxSingleVenuePct: number (optional) — Never put more than this share of the allocation in one venue. Defaults to 50; the allocation is split across eligible venues to respect it.","requireOnchainVerifiable: boolean (optional) — Only venues whose rate this agent can read on-chain itself, so no APR is repeated from a single third party. Excludes everything but Venus today.","venues: array (optional) — Venues to consider, by name or project substring. Anything named here that no source lists is reported in unreachableVenues rather than quietly omitted.","includeIlRisk: boolean (optional) — Deprecated alias for maxIlRisk: 'yes'. Kept so existing callers keep working."],"act":["asset: string — Asset symbol to route, e.g. USDT, BNB, BTCB.","amount: string — Amount in whole units, as a decimal string (e.g. \"5000\").","chainId: integer (optional) — BNB Chain id: 56 (mainnet) or 97 (testnet).","maxIlRisk: string (optional) — Highest impermanent-loss risk tolerated, as DeFiLlama grades it. 'no' is the honest reading of \"no directional exposure\" and is the default.","stablecoinOnly: boolean (optional) — Only venues DeFiLlama marks as stablecoin.","allowOutliers: boolean (optional) — Allow pools carrying DeFiLlama's own APY outlier flag. Off by default: if its own data provider will not stand behind the number, neither does this agent.","minTvlUsd: number (optional) — Ignore venues shallower than this. Defaults to $1,000,000.","maxSingleVenuePct: number (optional) — Never put more than this share of the allocation in one venue. Defaults to 50; the allocation is split across eligible venues to respect it.","requireOnchainVerifiable: boolean (optional) — Only venues whose rate this agent can read on-chain itself, so no APR is repeated from a single third party. Excludes everything but Venus today.","venues: array (optional) — Venues to consider, by name or project substring. Anything named here that no source lists is reported in unreachableVenues rather than quietly omitted.","includeIlRisk: boolean (optional) — Deprecated alias for maxIlRisk: 'yes'. Kept so existing callers keep working.","intentId: string — Idempotency key. The same id never executes twice.","venue: string (optional) — Destination venue name from `analyse`. Defaults to the highest-yielding one."]}}}