Skip to main content

Submit Endpoint

Submit transactions directly to the blockchain with optional confirmation waiting.

Endpoint​

POST /wallet/submit

Requires: an API key (web sessions are not accepted) with Wallet API (walletApiEnabled) enabled and read-only off.

Overview​

Submit raw EVM transactions directly to the blockchain. Unlike the Agent Prompt which uses natural language, this endpoint accepts explicit transaction parameters.

  • Direct submission — Bypass the AI agent for pre-built transactions
  • Synchronous response — Returns transaction hash immediately
  • Optional confirmation — Wait for on-chain confirmation or return immediately
  • Full control — Specify exact gas, nonce, and calldata

Request​

{
"transaction": {
"to": "0x1234567890abcdef1234567890abcdef12345678",
"chainId": 8453,
"value": "1000000000000000000",
"data": "0x..."
},
"description": "Transfer 1 ETH",
"waitForConfirmation": true
}
FieldTypeDescriptionRequired
transaction.tostringDestination addressYes
transaction.chainIdnumberChain ID (8453=Base, 1=Ethereum, 137=Polygon, 130=Unichain, 480=World Chain, 42161=Arbitrum, 56=BNB Chain, 4663=Robinhood Chain, 5042=Arc)Yes
transaction.valuestringValue in weiNo
transaction.datastringCalldata (hex string)No
transaction.gasstringGas limitNo
transaction.gasPricestringGas price (legacy)No
transaction.maxFeePerGasstringAccepted but not applied — EIP-1559 fees are set from the networkNo
transaction.maxPriorityFeePerGasstringAccepted but not applied — EIP-1559 fees are set from the networkNo
transaction.noncenumberTransaction nonceNo
descriptionstringHuman-readable description for loggingNo
waitForConfirmationbooleanWait for tx confirmation (default: true)No

Response​

Success (200 OK)​

{
"success": true,
"transactionHash": "0xabc123...",
"status": "success",
"blockNumber": "12345678",
"gasUsed": "21000",
"signer": "0x1234...5678",
"chainId": 8453
}

With waitForConfirmation: false the response returns at broadcast with status: "pending". A transaction that mines and reverts answers 400 with success: false, status: "reverted" and its transactionHash — it is on-chain, so don't resubmit blindly.

Access Control​

  • Read-only keys are rejected with 403
  • Allowed recipients configured on the key will block ALL raw submissions (can't verify recipients from calldata). Use the Agent Prompt instead, which enforces allowed recipients through the agent.
  • Wallet security settings apply the same way as for agent transactions, and every rejection is a 403. A paused wallet ("Wallet paused") or "Enable arbitrary contract calls" switched off ("Arbitrary contract calls disabled") is refused up front. Otherwise the native value is priced in USD and checked against the per-transaction and daily limits (and counts toward the daily total), and the wallet's permitted-recipients list is enforced on to when value > 0; calldata with no native value counts as $0. These rejections carry errorCode (PER_TX_LIMIT_EXCEEDED, DAILY_LIMIT_EXCEEDED, RECIPIENT_NOT_PERMITTED, RECIPIENT_COOLDOWN, PRICING_UNAVAILABLE) alongside the user-facing error. See Security settings.
  • Gas is not sponsored on this endpoint, except for partner-provisioned wallets whose organization funds sponsorship. A wallet without enough native token for gas gets a 400 with error: insufficient_funds_for_gas and a human-readable message.

Examples​

curl​

curl -X POST https://api.bankr.bot/wallet/submit \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"transaction": {
"to": "0x1234567890abcdef1234567890abcdef12345678",
"chainId": 8453,
"value": "1000000000000000000"
},
"description": "Send 1 ETH"
}'

Bankr CLI​

bankr wallet submit tx --to 0x... --chain-id 8453 --value 1000000000000000000
bankr wallet submit json '{"to":"0x...","chainId":8453,"value":"1000000000000000000"}'