WalletServiceCLIwavecli send

Send

Send dispatches a previously prepared outbound payment. The request is intentionally intent-only: callers must use PrepareSend first so they can present amount, rail, fee, and total-outflow details before funds move.

Endpoints

gRPCrpc Send(SendRequest) returns (SendResponse)
RESTPOST/v1/wallet/send

Examples

wavecli send lnbcrt250u1p3xyz...truncated --note "coffee run" --force

RequestSendRequest

SendRequest dispatches a previously prepared send by consuming the single-use intent token returned by PrepareSend.

FieldTypeDescription
send_intent_idstring

send_intent_id is returned by PrepareSend and may be consumed once.

ResponseSendResponse

SendResponse returns the initial WalletEntry for a dispatched send and the actual amount that will leave the wallet.

FieldTypeDescription
entryWalletEntry

entry is the initial WalletEntry persisted for this send. The caller can poll List or SubscribeWallet for subsequent status transitions.

actual_amount_satint64

actual_amount_sat is the real amount that will leave the wallet for this operation. For invoice sends it matches the caller's amt_sat (or the invoice amount for amount-bearing invoices). For a bounded onchain send it matches the requested amt_sat: the seal-time fee handshake returns a change VTXO rather than sweeping whole VTXOs. For a sweep_all onchain send it reflects the SUM of the swept VTXOs (the whole-wallet drain). CLI and UI surfaces SHOULD echo this back to the user before treating the send as confirmed.

WalletEntrymessage

WalletEntry is the single flat row type returned by the ACTIVITY view of List and by SubscribeWallet. The shape is deliberately minimal: display clients should be able to render kind/status/amount/fee/phase directly without parsing daemon-specific swap or ledger internals. Power-user detail belongs in WalletInspectionService.InspectActivity.

FieldTypeDescription
idstring

id is the stable identifier for this entry. Swap-backed SEND and RECV rows use the Lightning payment_hash. Credit-backed RECV rows use the credit operation id (see CreditReceive.operation_id); the payment_hash lives on recv progress/detail instead. EXIT rows use leave_job_id (or sweep txid); DEPOSIT rows use the boarding outpoint or txid.

kindEntryKind

kind is the user-visible category.

statusEntryStatus

status is the coarse user-facing outcome: PENDING, COMPLETE, or FAILED. It mirrors the backing source's durable state and should not be reinterpreted by display clients.

amount_satint64

amount_sat is signed: positive values are incoming to the wallet, negative values are outgoing.

fee_satint64

fee_sat is the absolute fee paid (or pending) for this operation.

counterpartystring

counterparty is a short, display-friendly identifier of the other side: a truncated invoice for Lightning, an ark peer address for OOR, a bech32 onchain address for exits, or "boarding" for deposits.

created_at_unixint64

created_at_unix is the local creation timestamp in unix seconds.

updated_at_unixint64

updated_at_unix is the last persisted update timestamp in unix seconds. List ACTIVITY and SubscribeWallet sort by this field, descending.

notestring

note is the caller-supplied label captured at submit time, if any.

failure_reasonstring

failure_reason is populated only when status is FAILED. It is a single human-readable string, never a coded enum tree.

requestWalletEntryRequest

request is the original payment request or destination associated with the entry, when the backing subsystem persists it. This is useful for expanded views and inspection; compact clients should not need to parse it to explain status or lifecycle.

progressWalletEntryProgress

progress carries lifecycle-specific metadata already normalized by the wallet service. Clients can render phase_label directly or switch on phase without inferring meaning from swap/ledger internals.

failure_codeoptionalEntryFailureCode

failure_code is a stable, machine-readable classification of why a FAILED entry failed. It is set ONLY on FAILED entries; a non-failed entry omits the field entirely (presence-tracked), so its absence is the canonical "no failure" signal and ENTRY_FAILURE_CODE_UNSPECIFIED is never sent on the wire. failure_reason remains the human-readable supplement.

EntryKindenum

EntryKind tags each WalletEntry with the user-visible category of the underlying operation. Internal subtypes (same-Ark p2p vs real Lightning, OOR session correlators, round IDs) are deliberately not surfaced.

NameNumberDescription
ENTRY_KIND_UNSPECIFIED0

ENTRY_KIND_UNSPECIFIED is the proto zero value used when the operation category is unknown.

ENTRY_KIND_SEND1

ENTRY_KIND_SEND is an outbound payment over any rail (Lightning, same-Ark, onchain, or credit).

ENTRY_KIND_RECV2

ENTRY_KIND_RECV is an inbound receive.

ENTRY_KIND_DEPOSIT3

ENTRY_KIND_DEPOSIT is a boarding deposit rolled into a VTXO.

ENTRY_KIND_EXIT4

ENTRY_KIND_EXIT is a cooperative leave or unilateral exit to on-chain funds.

EntryStatusenum

EntryStatus collapses every backing FSM into the three states user-facing surfaces actually need.

NameNumberDescription
ENTRY_STATUS_UNSPECIFIED0

ENTRY_STATUS_UNSPECIFIED is the proto zero value used when the backing state has not been mapped yet.

ENTRY_STATUS_PENDING1

ENTRY_STATUS_PENDING means the operation is still in flight.

ENTRY_STATUS_COMPLETE2

ENTRY_STATUS_COMPLETE means the operation reached a durable success state.

ENTRY_STATUS_FAILED3

ENTRY_STATUS_FAILED means the operation reached a terminal failure state.

WalletEntryRequestmessage

WalletEntryRequest describes the user-recognizable request that created a WalletEntry. It is a oneof because each operation is backed by exactly one request shape.

FieldTypeDescription
lightning_invoiceoneof requestLightningInvoiceRequest

lightning_invoice is populated for Lightning send and receive entries.

onchain_addressoneof requestOnchainAddressRequest

onchain_address is populated for deposit and exit entries.

ark_addressoneof requestArkAddressRequest

ark_address is populated for direct Ark send or receive entries.

LightningInvoiceRequestmessage

LightningInvoiceRequest captures the Lightning request associated with an activity entry.

FieldTypeDescription
invoicestring

invoice is the BOLT-11 payment request.

payment_hashstring

payment_hash identifies the invoice and remains stable after the invoice itself is no longer convenient to display.

OnchainAddressRequestmessage

OnchainAddressRequest captures the onchain address associated with an activity entry.

FieldTypeDescription
addressstring

address is the bech32 onchain address originally issued or targeted.

ArkAddressRequestmessage

ArkAddressRequest captures the Ark address associated with an activity entry.

FieldTypeDescription
addressstring

address is the Ark address originally issued or targeted.

WalletEntryProgressmessage

WalletEntryProgress carries lifecycle metadata normalized by the wallet service.

FieldTypeDescription
phaseWalletEntryPhase

phase is the coarse lifecycle phase for this entry.

phase_labelstring

phase_label is a short lowercase label that clients can render as-is while they migrate to enum-based presentation.

payment_hashstring

payment_hash is populated for Lightning-backed send/recv entries.

txidstring

txid is populated when the backing ledger row has an onchain txid.

confirmation_heightint32

confirmation_height is populated once the source records it.

vtxo_outpointstring

vtxo_outpoint is populated when a swap observes the Ark vHTLC output.

preimagestring

preimage is the hex-encoded Lightning payment preimage once the swap revealed it. For a completed Lightning-backed send this is the proof of payment for the paid invoice (sha256(preimage) == payment_hash); it is empty until the preimage is durably known and for non-Lightning entries.

WalletEntryPhaseenum

WalletEntryPhase is a coarse, wallet-facing lifecycle phase. It is not a replacement for status; status answers whether the operation is pending, complete, or failed, while phase explains the current backing-system step.

NameNumberDescription
WALLET_ENTRY_PHASE_UNSPECIFIED0

WALLET_ENTRY_PHASE_UNSPECIFIED is the proto zero value used when the backing subsystem has no lifecycle hint.

WALLET_ENTRY_PHASE_REQUEST_CREATED1

WALLET_ENTRY_PHASE_REQUEST_CREATED means the request was created but no payment has been observed.

WALLET_ENTRY_PHASE_WAITING_FOR_PAYMENT2

WALLET_ENTRY_PHASE_WAITING_FOR_PAYMENT means the wallet is waiting for an inbound payment or swap funding.

WALLET_ENTRY_PHASE_PAYMENT_DETECTED3

WALLET_ENTRY_PHASE_PAYMENT_DETECTED means the backing subsystem has detected a payment but it is not yet settled.

WALLET_ENTRY_PHASE_SETTLING4

WALLET_ENTRY_PHASE_SETTLING means the operation is being settled through Ark, Lightning, or onchain machinery.

WALLET_ENTRY_PHASE_CONFIRMED5

WALLET_ENTRY_PHASE_CONFIRMED means the backing operation is confirmed or otherwise durably complete.

WALLET_ENTRY_PHASE_REFUNDING6

WALLET_ENTRY_PHASE_REFUNDING means the operation is currently refunding.

WALLET_ENTRY_PHASE_REFUNDED7

WALLET_ENTRY_PHASE_REFUNDED means the refund path completed.

WALLET_ENTRY_PHASE_FAILED8

WALLET_ENTRY_PHASE_FAILED means the backing operation reached a terminal failed state.

WALLET_ENTRY_PHASE_WAITING_FOR_CONFIRMATION9

WALLET_ENTRY_PHASE_WAITING_FOR_CONFIRMATION means an onchain payment has been detected and is waiting for block confirmation.

EntryFailureCodeenum

EntryFailureCode is a stable, machine-readable classification of why a FAILED WalletEntry failed. It complements the free-text failure_reason so clients can branch on failure cause without string matching.

NameNumberDescription
ENTRY_FAILURE_CODE_UNSPECIFIED0

ENTRY_FAILURE_CODE_UNSPECIFIED is the zero value used for non-failed entries or when the cause is unknown.

ENTRY_FAILURE_CODE_TIMED_OUT1

ENTRY_FAILURE_CODE_TIMED_OUT means the operation exceeded the wallet deadline before reaching a terminal state.

ENTRY_FAILURE_CODE_EXPIRED2

ENTRY_FAILURE_CODE_EXPIRED means the swap expired before it was funded.

ENTRY_FAILURE_CODE_REFUNDED3

ENTRY_FAILURE_CODE_REFUNDED means an outbound payment was refunded back to the wallet.

ENTRY_FAILURE_CODE_NEEDS_INTERVENTION4

ENTRY_FAILURE_CODE_NEEDS_INTERVENTION means the swap reached an anomalous state requiring manual recovery.

ENTRY_FAILURE_CODE_FAILED5

ENTRY_FAILURE_CODE_FAILED is a generic terminal failure with no more specific classification.