TriportRPC

eth_sendBundle

POSThttps://api.triport.io/eth

Submit a Flashbots-compatible bundle of signed transactions to be included atomically in a target Ethereum block.

Ethereumeth_send_bundlepro (5 RPS) · business (15 RPS)

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 stringrequired
Ordered list of signed, raw transactions, each as a 0x-prefixed hex string. Transactions are included in the order given.
blockNumberstringrequired
Target block number as a hex-encoded quantity (e.g. "0x149e2c2"). The bundle is only valid for this block.
minTimestampintegeroptional
Earliest Unix timestamp (seconds) at which the bundle may be included. 0 means no lower bound.
maxTimestampintegeroptional
Latest Unix timestamp (seconds) at which the bundle may be included. 0 means no upper bound.

Response

Response fields

FieldTypeDescription
result.bundleHashstringA 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.

CodeMeaningWhen it happens
-32002tier_insufficientYour API key's tier is below pro. eth_sendBundle requires pro or business.
-32003rate_limitedYou 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 txs is 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: blockNumber targets a single block. To try multiple blocks, submit the bundle again for each target block number.
  • Acceptance ≠ inclusion: a returned bundleHash only 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 / maxTimestamp at 0 unless you need to constrain the inclusion window.
  • Related: eth_sendRawTransaction for submitting a single transaction to the public mempool without bundle semantics.