Money
Send (batched) / receive / swap intents. Build returns an unsigned UserOp; the API never custodies.
Build a (batched) send intent
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://api.app.botanary.xyz/money/send/build" \ -H "Content-Type: application/json" \ -d '{ "chainId": 42161, "transfers": [ { "token": { "symbol": "USDC" }, "amount": 50, "to": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0" } ] }'{
"intentType": "send",
"userOp": {
"sender": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"nonce": "0",
"factory": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"factoryData": "0x",
"callData": "0x",
"callGasLimit": "200000",
"verificationGasLimit": "150000",
"preVerificationGas": "50000",
"maxFeePerGas": "1000000000",
"maxPriorityFeePerGas": "1000000000",
"paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"paymasterVerificationGasLimit": "string",
"paymasterPostOpGasLimit": "string",
"paymasterData": "0x",
"signature": "0x",
"entryPoint": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"chainId": 42161
},
"userOpHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"humanSummary": "string",
"simulation": {
"id": "string",
"intentType": "send",
"willSucceed": true,
"declineReason": "cap_exceeded",
"amountIn": {
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
},
"amountOut": {
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
},
"rate": 1.08,
"route": "USDC → EURC via Uniswap v3",
"slippageBps": 30,
"fees": [
{
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
}
],
"gas": {
"method": "sponsored",
"cost": {
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
},
"sponsored": true
},
"warnings": [
"string"
],
"expiresAt": "2019-08-24T14:15:22Z"
},
"riskReducing": true,
"instant": true,
"gasless": true,
"gasPermit": {
"paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"tokenName": "USD Coin",
"tokenVersion": "2",
"kernelVersion": "0.3.3",
"permitAmount": "212142",
"permitNonce": "2",
"permitDeadline": "string",
"permitDigest": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"signaturePrefix": "0x",
"estimatedFee": 0.031296
},
"usdtApproval": {
"token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"amount": "string",
"calls": [
{
"to": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"data": "0x",
"value": "string"
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}{
"error": {
"code": "out_of_scope",
"message": "This action exceeds the per-action cap.",
"declineReason": "per_action_exceeded"
}
}Build an owner-lane swap intent (any token, same-chain or cross-chain)
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://api.app.botanary.xyz/money/swap/build" \ -H "Content-Type: application/json" \ -d '{ "chainId": 42161, "fromToken": { "symbol": "USDC" }, "toToken": { "symbol": "USDC" }, "amountIn": 50 }'{
"intentType": "send",
"userOp": {
"sender": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"nonce": "0",
"factory": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"factoryData": "0x",
"callData": "0x",
"callGasLimit": "200000",
"verificationGasLimit": "150000",
"preVerificationGas": "50000",
"maxFeePerGas": "1000000000",
"maxPriorityFeePerGas": "1000000000",
"paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"paymasterVerificationGasLimit": "string",
"paymasterPostOpGasLimit": "string",
"paymasterData": "0x",
"signature": "0x",
"entryPoint": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"chainId": 42161
},
"userOpHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"humanSummary": "string",
"simulation": {
"id": "string",
"intentType": "send",
"willSucceed": true,
"declineReason": "cap_exceeded",
"amountIn": {
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
},
"amountOut": {
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
},
"rate": 1.08,
"route": "USDC → EURC via Uniswap v3",
"slippageBps": 30,
"fees": [
{
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
}
],
"gas": {
"method": "sponsored",
"cost": {
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
},
"sponsored": true
},
"warnings": [
"string"
],
"expiresAt": "2019-08-24T14:15:22Z"
},
"riskReducing": true,
"instant": true,
"gasless": true,
"gasPermit": {
"paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"tokenName": "USD Coin",
"tokenVersion": "2",
"kernelVersion": "0.3.3",
"permitAmount": "212142",
"permitNonce": "2",
"permitDeadline": "string",
"permitDigest": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"signaturePrefix": "0x",
"estimatedFee": 0.031296
},
"usdtApproval": {
"token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"amount": "string",
"calls": [
{
"to": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"data": "0x",
"value": "string"
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}{
"error": {
"code": "out_of_scope",
"message": "This action exceeds the per-action cap.",
"declineReason": "per_action_exceeded"
}
}Preview a swap route (read-only, no op built)
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://api.app.botanary.xyz/money/swap/quote" \ -H "Content-Type: application/json" \ -d '{ "chainId": 42161, "fromToken": { "symbol": "USDC" }, "toToken": { "symbol": "USDC" }, "amountIn": 50 }'{
"supported": true,
"crossChain": true,
"amountOut": {
"symbol": "ETH",
"amount": 0.0192
},
"amountOutMin": {
"symbol": "ETH",
"amount": 0.0191
},
"rate": 0.000384,
"priceImpactBps": 12,
"route": [
{
"tool": "uniswap-v3",
"fromSymbol": "USDC",
"toSymbol": "ETH",
"fromChainId": 42161,
"toChainId": 42161
}
],
"fees": [
{
"token": {
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
},
"amount": 50
}
],
"slippageBps": 50,
"estimatedDurationSec": 45,
"unsupportedReason": "string",
"graduationStatus": "sentient"
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}List swappable tokens on a chain
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Query Parameters
Filter by symbol/name substring.
Response Body
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/money/swap/tokens?chainId=0"[
{
"symbol": "USDC",
"name": "USD Coin",
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"decimals": 6,
"chainId": 42161,
"priceUsd": 1,
"verified": true,
"logoUri": "string",
"graduationStatus": "sentient"
}
]{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}Track a cross-chain swap's bridge leg
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Query Parameters
A 32-byte hash (tx hash, userOpHash, permissionId, audit hash).
^0x[a-fA-F0-9]{64}$Response Body
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/money/swap/status?txHash=0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b&fromChainId=0&toChainId=0"{
"state": "bridging",
"destTxHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"message": "string",
"explorerUrl": "string"
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}Get receive info (address + QR payload)
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Query Parameters
Response Body
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/money/receive"{
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
"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"
]
}
],
"tokens": [
{
"symbol": "USDC",
"chainId": 42161,
"address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
}
],
"uri": "ethereum:0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0@42161"
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}Markets
The unified market token index - launchpad tokens and RH-4663 equities behind one browsable, server-owned, indexed surface (distinct from the live-proxy Launchpad/Market catalogs above). Public, unauthenticated market data; moves no funds.
Notifications
Alerts feed - every action, every block, every depeg drift.