---
title: "send"
description: "Send an outbound payment over Lightning (a BOLT-11 invoice) or on-chain (a bech32 address)."
canonical: https://wavelength.lightning.engineering/cli/send/
---

> Docs index: https://wavelength.lightning.engineering/llms.txt

# 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.

```bash
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.                                                                                                      |

> **Non-interactive sends need --force**
>
> On non-interactive stdin (an agent or pipeline) `send` refuses to prompt for confirmation. Pass `--force` or `--yes`, or the command exits with `INVALID_ARGS`.

## Example

```bash
wavecli --no-tls send lnbcrt250u1p3xyz... --offchain --force
```

Phase transitions stream to stderr; stdout receives the compact settled summary:

```json
{
  "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`](/api/wallet/prepare-send/) to build and preview the send, then [`WalletService.Send`](/api/wallet/send/) to dispatch the prepared intent. When waiting for settlement it polls [`WalletInspectionService.InspectActivity`](/api/wallet/inspect-activity/).
