Skip to main content

Builders & Sequencers

Roles and integration points for builders and sequencers.

Block Building Package

Builder Software Options

Builders may use their own software or the ETHGas-modified rbuilder (preconf-builder) for ETHGas-specific flows:

Stream preconf transactions

Handle preconfirmation transaction streams

Build compliant blocks

Respect bundle positioning and commitments

Fill remaining blockspace

Add mempool transactions to complete blocks

Integration Requirements

Requirements

Builder software

Own implementation or ETHGas preconf-builder

Relay submission

Submit blocks to relay infrastructure

Commitment compliance

Include preconf bundles, respect positioning, payout to block owner

Slot timing performance

Meet strict slot timing requirements

API Endpoints

POST /v1/builder/register

Register your builder public key

POST /v1/builder/register — Register builder public keys with the ETHGas platform

curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/builder/register?publicKeys=0x12345...,0x234134...&signatures=2asdfjghadg,xghlktdhj"

Request Parameters

ParameterRequiredTypeDescription
publicKeysYesstringComma separated list of builder BLS public key in hex
signaturesYesstringComma separated list of BLS signatures in hex

Response Example

{
"success": true,
"data": {
"results": [
{
"publicKey": "0xa25addc4fc16f72ca667177d7a5533d4287b3574f0127ffc227095e90b0b1fd0dd48c421e04e613d2298fe4dac83a2a5",
"result": {
"result": 0,
"description": "Success"
}
}
]
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.resultsobject[]Results of builder public key registrations
data.results[].publicKeystringPublic key in the registration
data.results[].resultobjectBuilder Registration Result
data.results[].result.resultintegerBuilder Registration Result Code
data.results[].result.descriptionstringBuilder Registration Result Description
note

Please refer to Builder Registration Result lookup table for result codes.

GET /v1/builder/signingMessage

Get builder signing message

GET /v1/builder/signingMessage — Retrieve the message that needs to be signed by the builder's private key for registration verification

curl -H "Authorization: Bearer {{access_token}}" -X GET "$ETHGAS_API_URL/v1/builder/signingMessage"

Response Example

{
"success": true,
"data": {
"message": {
"eoaAddress": "0xd065335192d920ce2de4a88557f232943a901a9f"
}
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.messageobjectSigning message
data.message.eoaAddressstringEOA address of current user

POST /v1/builder/deregister

Builder deregistering their public keys

POST /v1/builder/deregister — Builder deregistering their public keys

curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/builder/deregister?publicKeys=0x123423qtdgasdg..."

Request Parameters

ParameterRequiredTypeDescription
publicKeysYesstringList of builder BLS public keys in hex

Response Example

{
"success": true
}

GET /v1/p/builders

Details

GET /v1/p/builders — Retrieve a list of builder public keys submitted by a user

curl -H "Authorization: Bearer {{access_token}}" "$ETHGAS_API_URL/v1/p/builders"

Response Example

{
"success": true,
"data": {
"builders": {
"whitelistedBuilders": {
"btcs": ["0x123456789abcdef...", "0xfb3456789abcdef..."]
},
"unnamedBuilders": ["0x123456789abcdef...", "0xfb3456789abcdef..."],
"fallbackBuilder": "0xlhadunabcdef..."
}
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.buildersobjectList of builder objects
data.builders.whitelistedBuildersobjectArray of builder objects
data.builders.unnamedBuilderslistList of public key of unnamed builder in hex
data.builders.fallbackBuilderstringPublic key of the ETHGas fallback builder in hex

GET /v1/user/builder

Get user's builder keys

GET /v1/user/builder — Retrieve a list of builder public keys submitted by a user

curl -H "Authorization: Bearer {{access_token}}" "$ETHGAS_API_URL/v1/user/builder"

Response Example

{
"success": true,
"data": {
"builders": [
"0xa25addc4fc16f72ca667177d7a5533d4287b3574f0127ffc227095e90b0b1fd0dd48c421e04e613d2298fe4dac83a2a5",
"0xa6745dd64a0a393497d5a7d4904b613aa386f47eb2e3617cf791f059291f2812683305a4bd562d63ec15990b67795e2a",
"0xaea551245bd0512de5222834db5f3bc9cba1a04a2e8f5de0d4fea843c9fee1af31bb9373ba6b9da08a0820f695c6ab6e"
]
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.buildersstring[]List of builder BLS keys

POST /v1/user/delegate/builder

Delegate or revoke builder delegation

POST /v1/user/delegate/builder — Delegate or revoke delegation of builder keys

curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/delegate/builder?publicKeys=0x12345...,0x2df345...&enable=true"

Request Parameters

ParameterRequiredTypeDescription
publicKeysNostringBuilder's BLS public key to delegate to
builderNameNostringBuilder name
enableYesbooleanDelegate or revoke builder delegation

Response Example

{
"success": true
}
note

User needs to delegate a new builder 2 seconds before the market close in order to be effective in that epoch.

GET /v1/user/delegate/builder

Get builder delegation settings

GET /v1/user/delegate/builder — Retrieve information about the current user's builder delegation settings

curl -H "Authorization: Bearer {{access_token}}" -X GET "$ETHGAS_API_URL/v1/user/delegate/builder"

Response Example

{
"success": true,
"data": {
"delegatedBuilders": [
"0x123456789abcdef...",
"0xfb3456789abcdef..."
]
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.delegatedBuildersstring[]The delegated builder public key

GET /v1/p/builder/:slot

Get builder for slot

GET /v1/p/builder/{slot} — Retrieve information about the builder assigned to a specific slot

curl "$ETHGAS_API_URL/v1/p/builder/123"

Path Parameters

ParameterRequiredTypeDescription
slotYesintegerThe Slot ID to query the builder

Response Example

{
"success": true,
"data": {
"slot": 123,
"builders": ["0x123456789abcdef...", "0x156256789ad4fef..."],
"fallbackBuilder": "0xdsfa56789abcdef..."
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.slotintegerThe slot number
data.buildersstring[]List of available builder keys for the queried slot
data.fallbackBuilderstringPublic key of the fallback builder in hexadecimal format

GET /v1/builder/delegation

Get builder delegation info

GET /v1/builder/delegation — Retrieve comprehensive information about builder delegations and relationships

curl -H "Authorization: Bearer {{access_token}}" -X GET "$ETHGAS_API_URL/v1/builder/delegation"

Response Example

{
"success": true,
"data": {
"builderDelegations": {
"0xefefdffaddfeefef000...": ["0xabadba...", "0x2asdfadv..."],
"0xdfg2345dfg0efefdffa...": ["0x58de13...", "0x2ab05ed1..."]
}
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.builderDelegationobjectMapping of builder delegations from corresponding builder key registered by the user

POST /v1/builder/update/ofac

Update OFAC flag for existing builder

POST /v1/builder/update/ofac — Update OFAC flag for existing builder

curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/builder/update/ofac?publicKeys=0x12345...,0x2df345...&ofac=true"

Request Parameters

ParameterRequiredTypeDescription
publicKeysNostringComma separated list of builder BLS public keys in hex. If not provided, updates all builders for the user
ofacYesbooleanOFAC flag for the builders (default: false)

Response Example

{
"success": true
}

POST /v1/builder/bundle/reject/:slot

Reject bundles for a specific slot

POST /v1/builder/bundle/reject/{slot} — Reject bundles for a specific slot

curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/builder/bundle/reject/123" \
-H "Content-Type: application/json" \
-d '{
"rejections": [
{
"uuid": "bundle-uuid-1",
"rejectCode": 1,
"txHashList": ["0x123...", "0x456..."],
"reason": "Bundle rejection reason"
}
]
}'

Path Parameters

ParameterRequiredTypeDescription
slotYesintegerSlot ID to reject bundles for

Request Body

FieldRequiredTypeDescription
rejectionsYesarrayList of bundle rejections
rejections[].uuidYesstringBundle UUID
rejections[].rejectCodeYesintegerRejection code
rejections[].txHashListYesstring[]List of transaction hashes
rejections[].reasonYesstringRejection reason

Response Example

{
"success": true
}

Error Codes

CodeDescription
INVALID_SLOTInvalid slot ID (must be >= 0)
BUNDLE_REJECTION_EMPTYRejections list cannot be empty

GET /v1/p/builder/bundle/reject/:slot/:builderAccountId

Get bundle rejection information

GET /v1/p/builder/bundle/reject/{slot}/{builderAccountId} — Get bundle rejection information for a specific slot and account

curl "$ETHGAS_API_URL/v1/p/builder/bundle/reject/123/456"

Path Parameters

ParameterRequiredTypeDescription
slotYesintegerSlot ID to retrieve rejections
builderAccountIdYesintegerBuilder account ID

Response Example

{
"success": true,
"data": {
"rejections": [
{
"uuid": "bundle-uuid-1",
"rejectCode": 1,
"txHashList": ["0x123...", "0x456..."],
"reason": "Bundle rejection reason"
}
]
}
}

Response Body

FieldTypeDescription
successbooleanSuccess status of the request
dataobjectResponse data container
data.rejectionsobject[]List of bundle rejections
data.rejections[].uuidstringBundle UUID
data.rejections[].rejectCodeintegerRejection code
data.rejections[].txHashListstring[]List of transaction hashes
data.rejections[].reasonstringRejection reason

Error Codes

CodeDescription
INVALID_SLOTInvalid slot ID (must be > 0)
INVALID_ACCOUNT_IDInvalid account ID (must be > 0)