send
Dispatches an outbound payment. With --offchain (the default) the positional
destination is treated as a BOLT-11 Lightning invoice and routed through the
swap subsystem, which transparently picks a same-Ark peer-to-peer transfer or
real Lightning. With --onchain the destination is a bech32 address: the daemon
lands exactly --amt sats there and returns the residual to the wallet as a
change VTXO. Use --sweep-all with --amt 0 to drain every live VTXO instead.
Direction is always explicit. The CLI never sniffs the destination string, so an agent cannot accidentally dispatch an on-chain send by passing what it thinks is an invoice; the daemon performs the authoritative parse.
wavecli send <invoice-or-onchain-address>By default a Lightning send prepares, dispatches, and then waits until the
payment reaches a terminal state, printing each lifecycle phase to stderr. A
completed Lightning send prints the payment preimage as proof of payment.
Onchain sends never block. An onchain send settles by forfeiting its source
VTXO into a cooperative-leave round and waiting for that round to confirm on
chain, which can take many minutes, and the funds are committed the moment the
dispatch returns. So the onchain rail always prints a pending receipt and
returns immediately, regardless of --no-wait. The entry stays PENDING until
its round confirms, and the residual comes back as a fresh change VTXO when the
round seals; a mid-flight balance that looks drained by the whole source VTXO
is expected, not a loss. Track a dispatched onchain send with
wavecli activity inspect <id>.
Flags
| Flag | Default | Description |
|---|---|---|
--offchain |
false |
Force offchain (BOLT-11 invoice) dispatch. Default when neither --offchain nor --onchain is set. |
--onchain |
false |
Force onchain dispatch. |
--amt |
0 |
Amount in satoshis. Required for on-chain sends unless --sweep-all; ignored for amount-bearing invoices. |
--max_fee |
0 |
Max swap fee in satoshis for invoice sends. 0 lets the daemon cap the fee at roughly 1% of the amount. |
--note |
(none) | Caller-supplied label attached to the entry. |
--sweep-all |
false |
On-chain only: drain the wallet to the destination. --amt must be 0. |
--dry-run |
false |
Prepare and print the preview without dispatching funds. |
--force |
false |
Skip the interactive confirmation after prepare. |
--yes |
false |
Alias for --force. |
--no-wait |
false |
Return as soon as the send is dispatched instead of blocking until a terminal state. Onchain sends never block and return a pending receipt regardless of this flag. |
--wait-timeout |
5m |
While waiting, give up after this long and return the last observed status. 0 waits indefinitely. |
--wait-poll-interval |
200ms |
While waiting, how often to poll the daemon for status updates. |
Example
wavecli --no-tls send lnbcrt250u1p3xyz... --offchain --forcePhase transitions stream to stderr; stdout receives the compact settled summary:
{ "status": "COMPLETE", "kind": "SEND", "amount_sat": -25000, "fee_sat": 12, "settlement": "LIGHTNING", "destination": "lnbcrt250u1p3xyz...", "payment_hash": "9a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9", "preimage": "3f9c2a7b8e1d45608192a3b4c5d6e7f80112233445566778899aabbccddeeff0", "id": "a1b2c3d4e5f60718293a4b5c6d7e8f9"}Exit codes
With --dry-run the command runs prepare-time validation only, prints the
preview, and exits 10 (DRY_RUN_OK) without dispatching any funds. A failed
Lightning send exits non-zero with a SEND_FAILED envelope; a timeout while
waiting emits the pending receipt on stdout and a WAIT_TIMEOUT envelope.
Underlying RPC
Calls WalletService.PrepareSend to build and
preview the send, then WalletService.Send to dispatch the
prepared intent. When waiting for settlement it polls
WalletInspectionService.InspectActivity.