Send SPL Token logo

Catalog action Solana Onchain wallet send

Transfer SPL tokens (USDC, BONK, etc.) to another wallet on Solana. Auto-creates the recipient's token account if needed. Supports both classic SPL Token and Token-2022 programs with safety checks for Transfer Hooks and Permanent Delegate extensions. Ideal for: token payments, airdrops, automated token distribution on Solana.

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

FieldValue
Action IDsend-spl-token
CategorySolana Onchain
Connectorwallet
Requires gasNo
Funds movementsend
Tagsblockchain, solana, spl, token, transfer, send, payment, write

Payload Schema

FieldTypeRequiredDescription
tokenMintAddressstringYesThe token's contract address on Solana (e.g., the USDC mint address). You can find this on the token's page on Solscan or Jupiter.
recipientAddressstringYesThe Solana wallet address to send tokens to.
amountstringNoAmount of tokens to send in human-readable format (e.g., "1.5" for 1.5 USDC). Decimal places must not exceed the token's decimals.
rawAmountstringNoRaw amount in smallest unit (alternative to 'amount'). If provided, 'amount' is ignored.
chainIdnumberYesSolana network (Mainnet or Devnet)
allowAtaCreationbooleanNoIf the recipient hasn't received this token before, we'll set up their token account automatically (~0.002 SOL fee from your wallet).
allowTransferHooksbooleanNoAllow sending Token-2022 tokens that run custom code during transfers. Leave off unless you specifically need this. Blocked by default for safety.
allowTransferFeebooleanNoAllow sending Token-2022 tokens with a Transfer Fee. Recipient receives less than sent (fee deducted on-chain). Blocked by default.
allowUnverifiedTokensbooleanNoAllow sending tokens not on the Jupiter verified list. Only applies to automated workflows. Manual executions always allow all tokens.

Result Schema

FieldTypeRequiredDescription
statusstringYes-
signaturestringYesTransaction signature (base58 encoded)
transactionHashstringYesTransaction hash (same as signature, for workflow engine compatibility)
slotnumberNoSlot number where the transaction was confirmed
amountstringNoAmount transferred in smallest token unit (raw)
formattedAmountstringNoHuman-readable amount (e.g., '1.5')
decimalsnumberNoNumber of decimal places for the token
tokenMintAddressstringNoToken mint address
tokenSymbolstringNoToken symbol (e.g., 'USDC')
recipientAddressstringNoRecipient wallet address
recipientTokenAccountstringNoRecipient's Associated Token Account address
tokenProgramstringNoToken program used (spl-token or token-2022)
chainIdnumberNoChain ID where the transaction was executed
ataCreatedbooleanNoWhether the recipient's ATA was created in this transaction
ataCreationCoststring | nullNoSOL cost of ATA creation in lamports, or null if not created
hasTransferFeebooleanNoWhether this Token-2022 token has a Transfer Fee extension. If true, a percentage of each transfer is deducted and sent to a fee collector.
transferFeeBpsnumber | nullNoTransfer fee in basis points if hasTransferFee is true, otherwise null

Examples

json
{ "type": "send-spl-token", "payload": { "tokenMintAddress": "0x0000000000000000000000000000000000000000", "recipientAddress": "0x0000000000000000000000000000000000000000", "chainId": 7565164 }, "children": [], "connector": { "type": "wallet", "id": "conn_wallet" }}

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.

Ask a question... ⌘I