TriportRPC

Send a Flashbots-style bundle

POSThttps://api.triport.io/v1/eth/sender/bundle

Submit an ordered bundle of signed Ethereum transactions for atomic inclusion in a target block, and receive a bundle hash for tracking.

EthereumPro+ (category eth_sender_bundle; sustained RPS per tier with 2× burst)

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 stringrequired
1–10 0x-prefixed RLP-encoded signed transactions, in the exact order they should execute in the block.
block_numberstringrequired
Target block for inclusion. A hex block number (e.g. "0x10d4f"), or the strings "latest" / "pending".
min_timestampinteger (int64)optional
Earliest UNIX timestamp (seconds) at which the bundle is valid for inclusion.
max_timestampinteger (int64)optional
Latest UNIX timestamp (seconds) at which the bundle is valid for inclusion.
reverting_tx_hashesarray of stringoptional
Transaction hashes within the bundle that are allowed to revert without invalidating the whole bundle.

Response

Response fields

FieldTypeDescription
bundle_hashstringHash 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.

CodeMeaningWhen it happens
400invalid_paramstxs missing/empty or longer than 10 entries, a transaction is not valid 0x-prefixed RLP, or block_number is malformed.
401unauthorized / trial_expired / subscription_expiredAPI key missing, invalid, or its trial/subscription has lapsed.
403tier_insufficientThe key's tier is below pro. The body includes current_tier, required_tier, and upgrade_url.
429rate_limitedSustained 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 — list reverting_tx_hashes only 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 optional min_timestamp / max_timestamp window constrains when the bundle is considered valid for inclusion.
  • Tracking. Persist the returned bundle_hash to correlate the submission with on-chain inclusion.
  • Related: Send a raw transaction for single-transaction submission.