Balance
Unified multi-stablecoin balance (presentation-only) + reference data (chains, adapters).
Get the unified multi-stablecoin balance (presentation-only)
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Query Parameters
Scope the read to this specific account of the caller's (must belong to the authenticated signer - a foreign or unknown id is rejected, never silently ignored). Omitted defaults to the signer's lowest-visible-index account.
Response Body
application/json
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/balance"{
"totalFiat": 12480.06,
"change24h": 2.4,
"stablecoinFiat": 12235.32,
"asOf": "2026-07-07T09:42:00Z",
"tokens": [
{
"symbol": "USDC",
"name": "USD Coin",
"chain": "Arbitrum",
"chainId": 42161,
"tokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"decimals": 6,
"amount": 6420.5,
"fiat": 6420.5,
"price": 1,
"change24h": 0,
"isStablecoin": true,
"peg": {
"symbol": "USDC",
"price": 1,
"target": 1,
"deviationBps": 0,
"status": "ok",
"observedAt": "2026-07-07T09:40:00Z",
"source": "chainlink"
},
"spendable": true,
"source": "registry"
},
{
"symbol": "USDT",
"name": "Tether",
"chain": "Arbitrum",
"chainId": 42161,
"tokenAddress": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
"decimals": 6,
"amount": 2100,
"fiat": 2100.42,
"price": 1.0002,
"change24h": 0.01,
"isStablecoin": true,
"peg": {
"symbol": "USDT",
"price": 0.9938,
"target": 1,
"deviationBps": -62,
"status": "watch",
"observedAt": "2026-07-07T09:40:00Z",
"source": "chainlink"
},
"spendable": true,
"source": "registry"
},
{
"symbol": "ETH",
"name": "Ether",
"chain": "Arbitrum",
"chainId": 42161,
"tokenAddress": "0x0000000000000000000000000000000000000000",
"decimals": 18,
"amount": 0.0921,
"fiat": 244.74,
"price": 2657.3,
"change24h": -1.2,
"isStablecoin": false,
"peg": null,
"spendable": true,
"source": "registry"
}
]
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}{
"error": {
"code": "out_of_scope",
"message": "This action exceeds the per-action cap.",
"declineReason": "cap_exceeded",
"details": {},
"requestId": "string"
}
}List the SNAL stablecoin adapter registry
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Response Body
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/adapters"[
{
"id": "usdc-arbitrum",
"symbol": "USDC",
"name": "USD Coin",
"chain": "Arbitrum",
"chainId": 42161,
"tokenAddress": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"decimals": 6,
"transferMechanism": "erc20",
"gasModel": "circle-paymaster",
"cctpSupported": true,
"enabled": true
}
]{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}List supported chains
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Response Body
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/chains"[
{
"name": "Arbitrum",
"chainId": 42161,
"shortName": "arb",
"testnet": false,
"nativeSymbol": "ETH",
"tier": "botanary",
"explorerUrl": "https://base-sepolia.blockscout.com",
"blockscoutUrl": "https://base-sepolia.blockscout.com",
"gasTokens": [
"native",
"USDC"
]
}
]{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}Agent
Build seams for the agent runtime (services/agent). Returns unsigned ops only - the core never signs; the session key does, and the chain enforces the mandate.
Delegations
Scoped, revocable session-key delegations - the authority surface. Build, enable, revoke. There is no per-delegation freeze; freeze the whole account instead.