eth_sendBundle
https://api.triport.io/ethSubmit a Flashbots-compatible bundle of signed transactions to be included atomically in a target Ethereum block.
eth_sendBundle submits a bundle — an ordered list of signed raw
transactions — for atomic inclusion in a specific Ethereum block. The bundle is
either included in full, in the given order, in the target block, or not at all.
This is the standard primitive for MEV strategies (arbitrage, liquidations,
back-running) where transaction ordering and atomicity matter.
The method is Flashbots-compatible: the request and response shapes match the
eth_sendBundle interface that searcher tooling already expects, so existing
bundle-building code works without modification. Unlike a direct Flashbots relay
connection, no searcher signature or X-Flashbots-Signature header is
required — your Triport API key is the only credential. Authenticate with the
standard Authorization: Bearer header and the platform handles relay
submission for you.
A successful call returns a bundleHash that identifies the submitted bundle. A
returned hash means the bundle was accepted for relay, not that it landed
on-chain; inclusion still depends on the bundle being competitive for the target
block. If the target block passes without inclusion, resubmit against a later
block.
Parameters
A single positional parameter: an object describing the bundle.
txsarray of stringrequired0x-prefixed hex string. Transactions are included in the order given.blockNumberstringrequired"0x149e2c2"). The bundle is only valid for this block.minTimestampintegeroptional0 means no lower bound.maxTimestampintegeroptional0 means no upper bound.Response
Response fields
| Field | Type | Description |
|---|---|---|
result.bundleHash | string | A 0x-prefixed 32-byte hash identifying the accepted bundle. Use it to correlate the submission in your own logs; acceptance does not guarantee on-chain inclusion. |
Errors
Errors are returned in the standard JSON-RPC error envelope. See errors.md for the full envelope and shared error semantics.
| Code | Meaning | When it happens |
|---|---|---|
-32002 | tier_insufficient | Your API key's tier is below pro. eth_sendBundle requires pro or business. |
-32003 | rate_limited | You exceeded your tier's request rate (5 RPS on pro, 15 RPS on business). Back off and retry. |
Examples
JavaScript (fetch)
const res = await fetch("https://api.triport.io/eth", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.TRIPORT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "eth_sendBundle",
params: [{
txs: [signedRawTx],
blockNumber: "0x149e2c2",
minTimestamp: 0,
maxTimestamp: 0,
}],
}),
});
const { result } = await res.json();
console.log("bundleHash:", result.bundleHash);TypeScript SDK (@triport/sdk)
import { Triport } from "@triport/sdk";
const client = new Triport({ apiKey: process.env.TRIPORT_API_KEY! });
const { bundleHash } = await client.eth.sendBundle({
txs: [signedRawTx],
blockNumber: "0x149e2c2",
minTimestamp: 0,
maxTimestamp: 0,
});
console.log("bundleHash:", bundleHash);Python (triport-sdk)
import os
from triport import Triport
client = Triport(api_key=os.environ["TRIPORT_API_KEY"])
result = client.eth.send_bundle(
txs=[signed_raw_tx],
block_number="0x149e2c2",
min_timestamp=0,
max_timestamp=0,
)
print("bundleHash:", result["bundleHash"])Notes
- Atomicity: every transaction in
txsis included in the listed order, or none is. Use this to guarantee that a multi-step strategy reverts cleanly if any step would fail. - One block per submission:
blockNumbertargets a single block. To try multiple blocks, submit the bundle again for each target block number. - Acceptance ≠ inclusion: a returned
bundleHashonly confirms the bundle was accepted for relay. Monitor the target block to confirm landing, and resubmit against a later block if it was not included. - Timestamps are optional bounds. Leave
minTimestamp/maxTimestampat0unless you need to constrain the inclusion window. - Related: eth_sendRawTransaction for submitting a single transaction to the public mempool without bundle semantics.