Documentation Index
Fetch the complete documentation index at: https://cobo.com/products/agentic-wallet/manual/llms.txt
Use this file to discover all available pages before exploring further.
When you need to send to multiple recipients, submit independent transfers with independent request_id values. CAW evaluates each transfer separately through the policy engine, so one denial does not invalidate the others.
Parallel batch transfer
CLI
Python SDK
TypeScript SDK
PACT_ID=<pact-id>
RECIPIENTS=("0xAddr1" "0xAddr2" "0xAddr3")
AMOUNTS=("10" "15" "20")
for i in "${!RECIPIENTS[@]}"; do
caw tx transfer \
--pact-id "$PACT_ID" \
--dst-address "${RECIPIENTS[$i]}" \
--token-id SETH_USDC \
--amount "${AMOUNTS[$i]}" \
--chain-id SETH \
--request-id "batch-$(date +%s)-$i"
done
import asyncio
transfers = [
{"dst_addr": "0xAddr1...", "amount": "10", "request_id": "batch-001"},
{"dst_addr": "0xAddr2...", "amount": "15", "request_id": "batch-002"},
{"dst_addr": "0xAddr3...", "amount": "20", "request_id": "batch-003"},
]
results = await asyncio.gather(
*[
client.transfer_tokens(
wallet_uuid=wallet_id,
chain_id="SETH",
dst_addr=item["dst_addr"],
token_id="SETH_USDC",
amount=item["amount"],
request_id=item["request_id"],
)
for item in transfers
],
return_exceptions=True,
)
const transfers = [
{ dst_addr: '0xAddr1...', amount: '10', request_id: 'batch-001' },
{ dst_addr: '0xAddr2...', amount: '15', request_id: 'batch-002' },
{ dst_addr: '0xAddr3...', amount: '20', request_id: 'batch-003' },
];
const results = await Promise.allSettled(
transfers.map((item) =>
txApi.transferTokens(walletId, {
chain_id: 'SETH',
dst_addr: item.dst_addr,
token_id: 'SETH_USDC',
amount: item.amount,
request_id: item.request_id,
})
)
);
Recommended pattern
- Use one business-stable
request_id per recipient or payout unit.
- Track each result by
request_id, not by array position.
- Expect mixed outcomes in the same batch: allowed, pending approval, denied.
For durable tracking after submission, use Transaction Tracking.