> For the complete documentation index, see [llms.txt](https://docs.vapinetwork.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vapinetwork.ai/agents/wallets/sending-and-distributing.md).

# Sending and distributing

The vapi client sends USDC once or distributes it across local accounts while signing keys stay on the device.

{% hint style="info" %}
Agents is coming soon. This page describes how it works at launch.
{% endhint %}

This page is for owners who want to send USDC once or distribute it across several local agent accounts.

Use `vapi send` for one transfer. Use `vapi accounts distribute` for a recorded multi-account plan. Both keep the signing key on this device while vAPI relays the transfer and pays the gas.

## Send one transfer

Send Base USDC to an active sibling account or back to the owner:

```bash
vapi send 2 --from research --to writer
vapi send 2 --from research --to owner
```

Add `--network arc` for Arc. The sender's per-call and per-day caps apply. The recipient must be the owner, an active account name, or the address of the owner or an active account.

List the owner's accounts on this device and other devices:

```bash
vapi accounts --all
```

Accounts on other devices are read-only in this list. Their keys and recovery data stay on their devices.

An interrupted relay can leave a transfer outcome unknown. Resume the recorded authorization with the nonce printed by the first attempt:

```bash
vapi send 2 --from research --to writer --resume <nonce>
```

Resume reuses the authorization. It does not sign a replacement.

## Distribute one amount

Name the recipients, or omit `--to` to select every other linked, active local account:

```bash
vapi accounts distribute 10 --from main --to research,writer,reviewer
vapi accounts distribute 10 --from main
```

The plan splits whole cents in recipient order. Any remainder cents go to the first account. Before signing, the client checks the sender's balance, the largest leg against its per-call cap, and the total against its remaining per-day cap.

The client writes every leg to `~/.vapi/movements/` before the first signature. It then signs and relays the legs in order. A failed leg does not stop later legs.

## Resume or cancel a movement

An unfinished movement blocks another distribution from the same sender. It also blocks automatic ceiling sweeps and `vapi sweep` while an authorization may still settle.

Resume with the movement ID printed by the command:

```bash
vapi accounts distribute --resume <movement-id>
```

Resume skips sent legs and keeps recorded nonces. This prevents two authorizations for the same intended transfer.

Cancel eligible unsent legs when a movement cannot resume:

```bash
vapi accounts distribute --cancel <movement-id>
```

Cancel never signs or relays a transfer. It reconciles sent evidence, cancels unsigned local legs, and cancels signed local legs only after the chain proves their authorizations expired. A pending authorization or failed chain check leaves the entire movement and spend ledger unchanged.

Cancellation releases eligible expired spend reservations. Cancelled legs no longer block later distributions, sweeps, renames, or removals.

<figure><picture><source srcset="/files/ERHm4PgDCnzbZM2i6OzX" media="(prefers-color-scheme: dark)"><img src="https://1167861272-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfnneETioGGsBVvuIX5tO%2Fuploads%2Fgit-blob-4cfafe61deca2c929aa8463bc58abd35a01bf8ed%2Fvapi-movements-light.svg?alt=media" alt="How one distribution runs and recovers, for example vapi accounts distribute 10 --from main. 1, Plan: the client splits whole cents per leg and checks the sender&#x27;s balance and its per-call and per-day caps before signing. 2, Journal: every leg is written to ~/.vapi/movements/ before the first signature. 3, Sign and relay: the legs go out in order, a failed leg does not stop the next, and vAPI pays the gas. If the run is interrupted, the movement stays open: it blocks another distribution from the same sender, automatic ceiling sweeps and vapi sweep, so nothing is paid twice. Resume with vapi accounts distribute --resume and the movement ID: it signs and relays only what is left, skips sent legs and keeps recorded nonces, so one intended transfer never gets a second authorization. When a movement cannot resume, vapi accounts distribute --cancel never signs or relays; it reconciles sent legs, cancels unsigned legs, and cancels signed legs only after the chain proves their authorizations expired. A pending authorization or a failed chain check changes nothing. Never start a fresh transfer after an interruption: resume or cancel first. Cancelled legs stop blocking and release their spend reservations."></picture><figcaption><p>Every leg is recorded before signing, so recovery never needs a fresh transfer. Orange marks where USDC moves.</p></figcaption></figure>

## Keep balances below the ceiling

Accounts have a 5 USDC Base ceiling by default. A settled paid call and the status screen send excess funds to the account's parent. The owner is the parent for a normal account, and the treasury is the parent for a swarm member.

The per-day cap is the sweep floor. Set another ceiling or disable automatic ceiling sweeps from a terminal:

```bash
vapi accounts caps <name> --ceiling <usd>
vapi accounts caps <name> --ceiling off
```

Run a deliberate sweep to the linked owner, or supply another destination address:

```bash
vapi sweep --account <name>
vapi sweep <address> --account <name>
```

Resume or safely cancel an open movement before sweeping its sender.

## Terminal-only recovery flags

These flags require human review and are unavailable through MCP.

| Flag                         | Use it when                                                                                                       | Review before use                                                                                    |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `--cancel <movement-id>`     | A movement cannot resume and its unsent legs must be abandoned.                                                   | Check that no authorization can still settle. The command performs its own journal and chain checks. |
| `--replace-expired-restored` | A restored leg is unjournaled, expired, or was never signed when backed up. Use it with `--resume` or `--cancel`. | Check the sender's balance and explorer history for a payment made by the source device.             |
| `--bind-legacy-addresses`    | A local pre-0.8 movement lacks saved addresses and has no signed journal evidence. Use it with `--resume`.        | Compare the current sender and recipient addresses printed by the command before accepting them.     |

Examples after completing the stated review:

```bash
vapi accounts distribute --resume <movement-id> --replace-expired-restored
vapi accounts distribute --cancel <movement-id> --replace-expired-restored
vapi accounts distribute --resume <movement-id> --bind-legacy-addresses
```

## Next

* [Limits and ceilings](/agents/wallets/limits-and-ceilings.md)
* [Backup and recovery](/agents/wallets/backup-and-recovery.md)
* [Swarms](/agents/control/swarms.md)

Checked on 2026-10-02.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.vapinetwork.ai/agents/wallets/sending-and-distributing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
