Skip to main content

What a Bundle Is

A bundle is a group of 1 to 4 transactions that execute in order and all or nothing. Either every transaction in the bundle lands in the same block, in the order you gave, or none of them do. Use a bundle when a later transaction only makes sense if an earlier one succeeded, for example a setup transaction followed by a swap.
Bundles only land on Jito-enabled leaders. A group of transactions cannot be kept atomic on the stake-weighted or direct TPU paths, so bundles go to the block engine path only. When the current leader does not run Jito, the bundle waits for the next one that does. For a single transaction, a regular send uses all three paths and lands sooner.

Rules

The tip follows the same tip rule as a single send: one top-level SystemProgram transfer to a published tip account, funded by a signer, with the tip account in the static keys. That tip minus the 5,000 lamport base fee becomes the Jito bid for the whole bundle. Because the bundle is atomic, the tip is only paid if the entire bundle lands.

JSON-RPC sendBundle

The result is a bundle id. Keep it to query the bundle’s status. sendBundle also accepts {"encoding": "base58"} for base58 encoded transactions. The examples below use base64.
The JavaScript and Python samples import the helper from Sending transactions. Response:

POST /send-bundle

The binary route takes the same framing as /send-batch: for each transaction, a big-endian u16 length followed by the raw transaction bytes, 1 to 4 frames in execution order.
Response:
Errors use the same format and status codes as the other plain HTTP routes. A bundle refused as a whole comes back with the bundle label.

Track a Bundle

Call getInflightBundleStatuses with an array of bundle ids:
The result carries one entry per bundle id, in the order you asked:
landed_slot is the slot the bundle landed in, or null when it has not landed. status is one of four states: The bundle id stays the same while Apex resubmits, so keep polling the id you got when you sent the bundle. Ask the same Apex endpoint you sent the bundle to. Bundle ids are not shared between endpoints. Since a bundle is atomic, you can also confirm it like any transaction: once any of its signatures shows up as confirmed in getSignatureStatuses on a Solana RPC, the whole bundle landed.

Bundle or Batch?