Send a Flashbots-style bundle
https://api.triport.io/v1/eth/sender/bundleSubmit an ordered bundle of signed Ethereum transactions for atomic inclusion in a target block, and receive a bundle hash for tracking.
Submits a Flashbots-style bundle — an ordered list of signed, RLP-encoded transactions that should be considered for inclusion together in a single target block. The bundle is forwarded to the network through an anonymous gateway path, so your transactions are not exposed to the public mempool before inclusion and no upstream credentials are revealed.
Use this endpoint when you need atomic, ordered execution (for example backrunning, liquidations, or a setup-then-action pair) and want to keep the transactions private until they land. A bundle either lands in full at the target block or is dropped — it is not partially executed and is not retried across later blocks unless you resubmit it.
The call returns a bundle_hash you can use for later tracking. To submit a
single transaction rather than an ordered bundle, use
Send a raw transaction instead.
Parameters
Send the bundle as a JSON request body.
txsarray of stringrequired0x-prefixed RLP-encoded signed transactions, in the exact order they should execute in the block.block_numberstringrequired"0x10d4f"), or the strings "latest" / "pending".min_timestampinteger (int64)optionalmax_timestampinteger (int64)optionalreverting_tx_hashesarray of stringoptionalResponse
Response fields
| Field | Type | Description |
|---|---|---|
bundle_hash | string | Hash identifying the submitted bundle. Use it to track inclusion/status for this submission. |
Errors
All errors share the standard Triport envelope (error, message, and an
optional request_id). See Errors for the full envelope
and the complete error-code list.
| Code | Meaning | When it happens |
|---|---|---|
400 | invalid_params | txs missing/empty or longer than 10 entries, a transaction is not valid 0x-prefixed RLP, or block_number is malformed. |
401 | unauthorized / trial_expired / subscription_expired | API key missing, invalid, or its trial/subscription has lapsed. |
403 | tier_insufficient | The key's tier is below pro. The body includes current_tier, required_tier, and upgrade_url. |
429 | rate_limited | Sustained RPS for the eth_sender_bundle category exceeded. Honor the Retry-After and X-RateLimit-* headers. |
Examples
JavaScript (fetch)
const res = await fetch("https://api.triport.io/v1/eth/sender/bundle", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.TRIPORT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
txs: [signedTx1, signedTx2],
block_number: "pending",
max_timestamp: 1735689600,
reverting_tx_hashes: [],
}),
});
if (!res.ok) {
throw new Error(`bundle submit failed: ${res.status} ${await res.text()}`);
}
const { bundle_hash } = await res.json();
console.log("submitted bundle:", bundle_hash);TypeScript SDK (@triport/sdk)
import { TriportClient } from "@triport/sdk";
const client = new TriportClient({ apiKey: process.env.TRIPORT_API_KEY! });
const { bundle_hash } = await client.eth.sender.sendBundle({
txs: [signedTx1, signedTx2],
block_number: "pending",
max_timestamp: 1735689600,
reverting_tx_hashes: [],
});
console.log("submitted bundle:", bundle_hash);Python (triport-sdk)
import os
from triport import TriportClient
client = TriportClient(api_key=os.environ["TRIPORT_API_KEY"])
result = client.eth.sender.send_bundle(
txs=[signed_tx_1, signed_tx_2],
block_number="pending",
max_timestamp=1735689600,
reverting_tx_hashes=[],
)
print("submitted bundle:", result["bundle_hash"])Notes
- Ordering matters. Transactions execute in the order given in
txs. The bundle is all-or-nothing for the target block — listreverting_tx_hashesonly for the transactions you explicitly tolerate reverting. - Bundle size. Between 1 and 10 transactions per bundle; submit a separate bundle if you need more.
- Targeting blocks. Use
"pending"to target the next block. The optionalmin_timestamp/max_timestampwindow constrains when the bundle is considered valid for inclusion. - Tracking. Persist the returned
bundle_hashto correlate the submission with on-chain inclusion. - Related: Send a raw transaction for single-transaction submission.