Disperse ERC20 Tokens
Batch send ERC20 tokens (USDC, USDT, WETH, etc.) to multiple wallet addresses with source wallet privacy. Your funding wallet is unlinked from recipients - AnySpend's global address breaks the on-chain connection. Note: Recipients in the same batch ARE linked to each other (same disperse transaction). Use cases: (1) Token airdrops - distribute tokens without revealing your source wallet, (2) Payroll in stablecoins - pay team members in USDC/USDT privately, (3) Reward distributions - send token rewards to winners without linking to treasury, (4) Private token distribution - distribute tokens to investors/advisors discreetly. Supports cross-chain: pay with any token on any chain, disperse different tokens on destination chain.
Catalog action EVM Onchain wallet Gas disperse
Batch send ERC20 tokens (USDC, USDT, WETH, etc.) to multiple wallet addresses with source wallet privacy. Your funding wallet is unlinked from recipients - AnySpend's global address breaks the on-chain connection. Note: Recipients in the same batch ARE linked to each other (same disperse transaction). Use cases: (1) Token airdrops - distribute tokens without revealing your source wallet, (2) Payroll in stablecoins - pay team members in USDC/USDT privately, (3) Reward distributions - send token rewards to winners without linking to treasury, (4) Private token distribution - distribute tokens to investors/advisors discreetly. Supports cross-chain: pay with any token on any chain, disperse different tokens on destination chain.
This action can require a wallet connector, gas, token movement, or an external side effect. Test with simulation or a controlled amount before using it in a live workflow.
At a Glance
| Field | Value |
|---|---|
| Action ID | anyspend-disperse-erc20-token |
| Category | EVM Onchain |
| Connector | wallet |
| Requires gas | Yes |
| Funds movement | disperse |
| Tags | anyspend, disperse, erc20, token, airdrop, batch-transfer, multi-send, usdc, usdt, stablecoin, payroll, distribution |
Payload Schema
| Field | Type | Required | Description |
|---|---|---|---|
srcChainId | number | Yes | Source chain ID where your funds are located. If different from dstChainId, AnySpend will handle the cross-chain transfer. |
srcTokenAddress | string | Yes | Token address to send from source chain. Use '0x0000000000000000000000000000000000000000' for native ETH, or any ERC20 token address. AnySpend will swap to the destination token if needed. |
dstChainId | number | Yes | Destination chain ID where tokens will be dispersed. Must have Disperse contract deployed. Supports Base (8453), Base Sepolia (84532), Arbitrum (42161). |
dstTokenAddress | string | Yes | Contract address of the ERC20 token to disperse on destination chain. Common tokens on Base: USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913), USDbC (0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA). Common tokens on Arbitrum: USDC (0xaf88d065e77c8cC2239327C5EDb3A432268e5831). |
recipients | array | Yes | Array of wallet addresses to receive tokens. Each address will receive the corresponding amount from the amounts array. Addresses must be valid Ethereum addresses (0x + 40 hex chars). |
amounts | array | Yes | Array of token amounts to send to each recipient, specified in the token's smallest unit. Must have the same length as recipients array. For USDC/USDT (6 decimals): '1000000' = 1 token. For 18-decimal tokens: '1000000000000000000' = 1 token. |
partnerId | string | No | Optional partner ID for AnySpend attribution and analytics tracking. |
clientReferenceId | string | No | Optional client reference ID for your own tracking purposes. |
Result Schema
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | Yes | Whether the disperse operation completed successfully. |
order | object | No | The AnySpend order that processed the disperse. |
disperseDetails | object | No | Details about the disperse distribution. |
transaction | object | No | Details of the funding transaction. |
message | string | No | Human-readable status message. |
Examples
json{ "type": "anyspend-disperse-erc20-token", "payload": { "srcChainId": 8453, "srcTokenAddress": "0x0000000000000000000000000000000000000000", "dstChainId": 8453, "dstTokenAddress": "0x0000000000000000000000000000000000000000", "recipients": "0x0000000000000000000000000000000000000000", "amounts": "1000000" }, "children": [], "connector": { "type": "wallet", "id": "conn_wallet" }}
bashcurl -X POST "https://api.b3os.org/v1/actions/anyspend-disperse-erc20-token/test" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "inputs": { "srcChainId": 8453, "srcTokenAddress": "0x0000000000000000000000000000000000000000", "dstChainId": 8453, "dstTokenAddress": "0x0000000000000000000000000000000000000000", "recipients": "0x0000000000000000000000000000000000000000", "amounts": "1000000" }}'
Payload fields can use workflow expressions such as {{$trigger.body.amount}}, {{$nodes.fetch.result.price}}, and {{$props.asset}} when the value should come from a trigger, prior node, or reusable workflow prop.
