transfer() rejects with submission.not_executable. Once it does, create the transfer for wallet broadcast, then pass its id. The wallet fetches the prepared operation, sends it on the customer’s behalf with the cost covered by Endstate, and resolves once the network has included it. Read settlement from the transfer resource; the wallet holds no state about it.
The page names only the transfer id. The destination was decided when the transfer was created, so nothing here can redirect it.
Rejects with wallet.sponsorship_unavailable when the operation cannot be covered right now (nothing was sent), with submission.not_executable when the transfer was already sent or has expired, with wallet.submit_failed when the wallet could not send, and with wallet.destroyed if the wallet has been destroyed. API errors pass through with their own codes.

