TriportRPC

MEV relay Data API passthrough

GEThttps://api.triport.io/v1/eth/mev/relay/flashbots/relay/v1/data/bidtraces/proposer_payload_delivered?slot=7654321&limit=10

Read-only passthrough to the Ethereum MEV-Boost relay pool — query bid traces, validator registrations, and payload-delivery records from the configured relays through a single Triport endpoint.

Ethereumeth:rpcPaid tier with the MEV relay feature (Free is locked); RPS-per-tier with burst — see [Rate limits](../../rate-limits-and-tiers.md)

This endpoint proxies the read-only Data API of the upstream MEV-Boost relay pool. A request to /v1/eth/mev/relay/{relay_id}/{subpath} selects one relay by its short id and forwards your GET to that relay's Data API, returning the relay's JSON response body unchanged. Use it to inspect which payloads a relay delivered to proposers, which builder blocks a relay received, the validator registrations a relay holds, and a relay's liveness status — without having to discover, reach, or authenticate against each relay yourself.

Only a fixed whitelist of read-only Data API sub-paths is reachable; there is no write path here. Submitting bundles or blocks goes through the separate private RPC forwarder and block-builder endpoints, not this mirror. Responses are returned byte-for-byte from the relay (no fields are added, trimmed, or reordered), so you can treat them exactly as you would the relay's own Data API.

Two gotchas worth knowing up front:

  • Only GET is accepted. Any other method returns 405.
  • The set of relay_id values is configuration-driven. A relay is reachable only if the platform has it provisioned with bid-trace support. An unknown or unprovisioned id returns 404.

Parameters

Path parameters

relay_idstringrequired
Short relay identifier (e.g. flashbots, ultrasound, aestus, agnostic, bloxroute, titan). Which ids are live depends on the configured relay pool.
subpathstringrequired
The relay Data API path to forward. Must exactly match one of the allowed sub-paths below.
Allowed sub-pathsobject
Query parametersobject
slotintegeroptional
Restrict results to a single slot.
block_numberintegeroptional
Restrict results to a block number.
block_hashstringoptional
Restrict results to a block hash.
proposer_pubkeystringoptional
Filter by proposer BLS public key.
builder_pubkeystringoptional
Filter by builder BLS public key.
cursorintegeroptional
Pagination cursor (slot) for older records.
limitintegeroptional
Maximum number of entries to return (relay-capped).

Response

200 OK with the relay's JSON body passed through unchanged. For proposer_payload_delivered this is an array of bid-trace objects:

The eth/v1/builder/status sub-path returns 200 with an empty body when the relay is healthy.

slotstring
Consensus slot the bid targets.
parent_hashstring
Parent execution block hash.
block_hashstring
Execution block hash of the bid.
builder_pubkeystring
BLS public key of the submitting builder.
proposer_pubkeystring
BLS public key of the slot proposer.
proposer_fee_recipientstring
Address that received the proposer payment.
gas_limitstring
Block gas limit.
gas_usedstring
Gas used by the block.
valuestring
Bid value paid to the proposer, in wei.
num_txstring
Number of transactions in the block.
block_numberstring
Execution block number.

Errors

This endpoint emits two kinds of error body. Platform-level checks (auth, rate limiting) use the shared Triport error envelope (error / message / request_id). The passthrough handler's own checks return a compact {"error": "<code>", "code": <http_status>} body.

HTTP statuserror codeEnvelopeWhen it happens
401unauthorizedsharedNo key supplied, or the key/token is invalid or revoked.
403tier_lockedpassthroughYour tier does not include the MEV relay Data API feature (the Free tier is locked).
404relay_not_foundpassthroughrelay_id is not a provisioned relay in the pool.
404subpath_not_allowedpassthroughsubpath is not one of the whitelisted read-only Data API paths.
404invalid_path / route_not_foundpassthroughThe path is missing the {relay_id}/{subpath} structure.
405method_not_allowedpassthroughA non-GET method was used.
429rate_limitedsharedSustained RPS for your tier was exceeded. Respect Retry-After.
502relay_unavailable / relay_read_errorpassthroughThe upstream relay could not be reached or its response could not be read.

Passthrough error body example (403):

{ "error": "tier_locked", "code": 403 }

See Errors for the full shared envelope, the 429 rate-limit headers, and 401 vs 403 semantics.

Examples

JavaScript (fetch)

const relay = "flashbots";
const subpath = "relay/v1/data/bidtraces/proposer_payload_delivered";
const url = `https://api.triport.io/v1/eth/mev/relay/${relay}/${subpath}?slot=7654321&limit=10`;


const res = await fetch(url, {
  headers: { "x-token": process.env.TRIPORT_API_KEY },
});


if (!res.ok) {
  const err = await res.json();
  throw new Error(`relay passthrough failed: ${err.error ?? res.status}`);
}


const traces = await res.json();
console.log(`${traces.length} delivered payloads`, traces[0]?.value);

TypeScript SDK (@triport/sdk)

import { Triport } from "@triport/sdk";


const client = new Triport({ token: process.env.TRIPORT_API_KEY! });


const traces = await client.eth.mev.relay.bidtraces.proposerPayloadDelivered("flashbots", {
  slot: 7654321,
  limit: 10,
});


for (const t of traces) {
  console.log(t.block_number, t.value);
}

Python (triport-sdk)

import os
from triport import Triport


client = Triport(token=os.environ["TRIPORT_API_KEY"])


traces = client.eth.mev.relay.bidtraces.proposer_payload_delivered(
    "flashbots",
    slot=7654321,
    limit=10,
)


for t in traces:
    print(t["block_number"], t["value"])

Notes

  • Read-only. Only the four whitelisted Data API sub-paths are reachable. Submitting transactions/bundles privately or sending blocks to a builder are separate endpoints, not this mirror.
  • GET only. POST/PUT/etc. return 405 method_not_allowed.
  • Pagination is the relay's own: pass cursor (a slot) and limit to walk back through historical bid traces; both are forwarded unchanged.
  • Relay discovery. The available relay_id values depend on the configured relay pool. If a relay is not provisioned with bid-trace support you'll get 404 relay_not_found rather than a passthrough.
  • Responses are unmodified. Bodies are returned exactly as the relay sends them, with only transport headers normalised — do not assume Triport-specific fields.
  • Related: Authentication · Rate limits & tiers · Errors.