Skip to main content

How a batch moves through Sendall

A batch has a status, and so does every recipient inside it. Both move independently, which is what lets Sendall retry a handful of failed payments without touching the ones that already succeeded.

Batch status

StatusMeaning
DRAFTJust created, recipients still being edited.
VALIDATING / VALIDATEDAddresses and amounts parsed and checked for basic validity.
CHECKINGBulk on-chain checks (account existence, trustlines) in flight.
READYAt least one recipient is ready to pay.
SUBMITTINGPayment transactions have been built and are being signed and submitted.
COMPLETEDEvery recipient succeeded.
PARTIAL_FAILURESome recipients succeeded, some failed.
FAILEDNothing in the batch went through.

DRAFT through SUBMITTING in sequence, then branching to COMPLETED, PARTIAL_FAILURE, or FAILED

Recipient (line item) status

Each row in the batch carries its own status, separately from the batch as a whole:

PENDINGVALIDATION_FAILED or CHECK_FAILED or READYIN_TRANSACTIONSUCCESS or FAILED

A recipient starts PENDING. If the address or amount doesn't parse, it becomes VALIDATION_FAILED immediately, no network call needed. Otherwise Sendall checks it against the chain: does the account exist, does it hold a trustline (for issued assets), is there room under the trustline limit. A recipient that fails any of those checks becomes CHECK_FAILED; you can fix the row and re-check just that one address, or refresh the whole batch. A recipient that passes becomes READY.

Only READY recipients are included when you press Sign & send. Everything else stays behind, visible on the Prepare or Confirm screen so you can fix it and include it in a later send.

From anonymous draft to claimed batch

A batch you create without a wallet connected is scoped by an anonymous session cookie, not by a public key. You can build it, edit it, save it, come back to it, all without ever seeing a wallet prompt. The moment you press Sign & send, Sendall claims the batch: it attaches your connected wallet's address as the owner and as the batch's source account. From then on the batch belongs to that wallet, and the anonymous session no longer has access to it.

If you're already connected when you create a batch (for example, starting one from a saved address list), it's claimed from the moment it's created and skips the anonymous stage entirely.

Building, signing, and submitting

Once a batch is claimed and has READY recipients, pressing Sign & send does three things in sequence:

  1. Prepare. Sendall loads your account's current sequence number and builds one or more payment transactions, split so none exceeds 100 operations (Stellar's per-transaction limit). Each becomes a PaymentAttempt row, in BUILT status. See Transaction building for exactly how a batch over 100 recipients still needs only one signature.
  2. Sign. Your wallet is asked to sign. For a batch under 100 recipients, that's the one payment transaction. For a larger batch, it's a small transaction that authorizes every payment chunk in advance; the chunks themselves are submitted unsigned right after.
  3. Submit and poll. Sendall sends each signed (or pre-authorized) transaction to the network and polls until it reaches a final state, then records the per-recipient result, including the transaction hash for anything that succeeded.

If a recipient's payment fails (insufficient balance, a trustline that changed between the check and the send, and so on), the rest of the batch is unaffected. Failed recipients show up on the Send screen with their error, and you can retry just those from there. A retry creates a fresh, smaller batch of payment attempts scoped to the failures, it never re-touches recipients that already succeeded.