---
title: "💎 MEV Bids"
method: POST
path: "/api/v2/ethereum/block/mev-bids"
tags: ["Block"]
---

# 💎 MEV Bids

`POST /api/v2/ethereum/block/mev-bids`

Returns the full per-relay bid ladder for a single block's slot — every recorded relay bid with its value, arrival time, relay, builder, and source. Intended for research and auditing.

**Use case guide:** [Investigate a Block](/use-cases/investigate-mev-block) shows how to filter, paginate, and audit the relay bid ladder.

**Data provenance:** The bid ladder is collected from offchain relay APIs and streams. Relay-reported timestamps, identities, and bids are not independently verifiable from onchain data, and coverage gaps or inconsistent reporting can make the recorded ladder incomplete. Verify included block fields separately.

Results are ordered by arrival time and paginated. An optional `slot_offset_ms_range` filters bids by their slot offset.

**Note:** MEV relay and timing data is only available on mainnet at this time.

**History:** Relay bid collection began on 2024-06-03 (UTC). No bids are recorded for slots before that date — including all pre-Merge blocks — so the bid ladder is empty for them.

Data freshness: per-slot relay statistics lag the chain head by roughly 4 hours.

**Premium Endpoint:** This endpoint requires a Scale or Enterprise plan.

## Request body

- BlockMevBidsRequest
  - `chain` 'mainnet' | 'hoodi' — The Ethereum chain to query.
  - `block` union, required — Specify a block using one of the following methods. - Block number - View: "latest" or "finalized"
    - BlockByNumber
      - `number` integer, required — Block by number.
    - BlockByChainView
      - `view` 'latest' | 'finalized', required — - "latest": Refers to the most recent block, which may be subject to reorganization. - "finalized": Refers to the latest block that has been finalized and is not subject to change.
  - `slot_offset_ms_range` SlotOffsetMsRange — Inclusive bounds (in milliseconds relative to slot start) used to filter bids by their slot offset. Either bound may be omitted or `null` to leave that side unbounded.
    - `min` integer — Time of the bid relative to the slot's scheduled start, in milliseconds (`0` = on time). Negative values indicate the bid arrived before the slot start; positive values indicate it arrived after. Larger positive values reflect more aggressive timing games. The offset is derived from an offchain relay-reported timestamp and is not independently verifiable from onchain data.
    - `max` integer — Time of the bid relative to the slot's scheduled start, in milliseconds (`0` = on time). Negative values indicate the bid arrived before the slot start; positive values indicate it arrived after. Larger positive values reflect more aggressive timing games. The offset is derived from an offchain relay-reported timestamp and is not independently verifiable from onchain data.
  - `cursor` string — Cursor value for pagination. See our [pagination guide](/api/pagination) for more details.
  - `page_size` integer — The number of bids to return per page.

## Response `200`

Successful response.

- object — Paginated response containing the relay bid ladder for the block's slot.
  - `data` BlockMevBidData[], required
    - `relay` string, required — Identifier of the relay that submitted the bid.
    - `builder_pubkey` string, nullable, required — BLS public key of the block builder, or `null` if unknown.
    - `value` string, required — Amount in wei (1 ETH = 10^18 wei)
    - `slot_offset_ms` integer, required — Time of the bid relative to the slot's scheduled start, in milliseconds (`0` = on time). Negative values indicate the bid arrived before the slot start; positive values indicate it arrived after. Larger positive values reflect more aggressive timing games. The offset is derived from an offchain relay-reported timestamp and is not independently verifiable from onchain data.
    - `relay_received_at` integer, required — Relay-reported Unix timestamp in milliseconds at which the bid was received. This offchain timestamp cannot be independently verified from onchain data.
    - `won` boolean, required — `true` if this was the winning bid for the slot (the bid the proposer selected).
    - `block_number` integer, required — Block by number.
    - `block_hash` string, required — Execution layer block hash of the bid, as a 0x-prefixed hex string.
    - `parent_hash` string, required — Execution layer parent block hash of the bid, as a 0x-prefixed hex string.
    - `source` 'get_header' | 'data_api' | 'ultrasound', required — How the bid was observed. - `get_header`: seen via the relay's `getHeader` proposer API. - `data_api`: seen via the relay's data API. - `ultrasound`: seen via the ultrasound relay top-bid stream.
    - `optimistic_submission` boolean, required — `true` if the bid was submitted optimistically (accepted by the relay before full validation).
  - `paging` Paging
    - `next_cursor` string — Cursor to the next page of results. See our [pagination guide](/api/pagination) for more details. If empty, there are no more pages to fetch.
  - `ready` boolean, required — `true` when the underlying data pipeline has fully processed this slot and the result is definitive. `false` when the slot falls within the pipeline lag window (roughly 4 hours behind the chain head) — the empty response reflects current pipeline state and may change when the exporter catches up.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `405` — Method Not Allowed
- `429` — Rate Limit Exceeded
- `500` — Internal Server Error
- `default` — An unexpected error response.

---

[API](https://skmtc.dev/beaconcha/apis/external-service-api.md) · [All operations](https://skmtc.dev/beaconcha/apis/external-service-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/beaconcha/external-service-api/revisions/ad26ad970b4e/schema)
