Send a bundle
Submit one to four signed transactions in order, with tips and bundle controls.
A bundle contains one to four signed transactions in execution order. Submit it with sendBundle, a raw bundle payload or a QUIC bundle stream. Each member must meet its format's size limit.
Bundles use block engines, not direct leader delivery. Do not send members independently if your application requires ordered, all-or-nothing execution: a separately submitted transaction can land outside the bundle.
Engine availability
SWQoS supports Jito and Harmonic. If neither is available for the upcoming leaders, a bundle returns not_ready with waiting_for: block_engine. Wait and retry without changing the signed transactions while their lifetimes remain valid.
Your tip must meet both your key's minimum and the available engine's minimum:
| Engine | Minimum tip |
|---|---|
| Jito | 6,000 lamports |
| Harmonic | 5,001 lamports |
A 5,001-lamport bundle can use Harmonic, but not Jito. Your key may require more; missing_tip.minimum reports the minimum that applies.
Tips
Add one or more top-level System transfers to the live tip accounts. Transfers across all members add together. If enabled for your key, you can instead set one declared tip for the whole bundle.
Control accounts
SWQoS recognizes these base58 address prefixes among a transaction's static keys:
| Control | Recognized when |
|---|---|
jitodontfront | Any static account address starts with it; or the first account of the first Compute Budget instruction starts with it. |
dontfront | The first account of the first Compute Budget instruction starts with it. |
dontbund1e | The first account of the first Compute Budget instruction starts with it. |
A transaction carrying any recognized control must be first, and at most one member may carry controls. With dontbund1e, later members may call only the System, Compute Budget and Memo programs, and the bundle cannot use Harmonic.
A violation returns bundle_control with a zero-based index and one of first_only, one_only or default_programs_only. These are admission checks, not a guarantee about what happens to transactions submitted outside your bundle.
Rates and preflight
Keys without a qualifying bundle landing history are limited to one bundle per second. Every bundle also counts as one submission against your key's send rate. Follow retry_after_ms when a rate rejection supplies it.
Bundles are not simulated before sending. Adding skipPreflight: false to sendBundle does not enable simulation; only its encoding and tip options are read. Validate members with your own Solana RPC when your flow needs simulation.
Bundle id and outcome
The response is a 64-character hex bundle id. It identifies the signed members and their order, not a landing outcome or a block engine's status id. Repeating the same bundle returns the same id but can submit it again.
Confirm every member's signature through your Solana RPC provider. SWQoS has no bundle status method. See Confirmation and retries and the sendBundle reference.