diff --git a/Cargo.lock b/Cargo.lock
index 40c550f4c68..a2973b4003c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3372,6 +3372,7 @@ dependencies = [
"eth2",
"ethereum_serde_utils",
"ethereum_ssz",
+ "ethereum_ssz_derive",
"fixed_bytes",
"fork_choice",
"hash-db",
diff --git a/beacon_node/execution_layer/Cargo.toml b/beacon_node/execution_layer/Cargo.toml
index c443e945743..46f34e20f73 100644
--- a/beacon_node/execution_layer/Cargo.toml
+++ b/beacon_node/execution_layer/Cargo.toml
@@ -16,6 +16,7 @@ bytes = { workspace = true }
eth2 = { workspace = true, features = ["events", "lighthouse"] }
ethereum_serde_utils = { workspace = true }
ethereum_ssz = { workspace = true }
+ethereum_ssz_derive = { workspace = true }
fixed_bytes = { workspace = true }
fork_choice = { workspace = true }
hash-db = "0.15.2"
diff --git a/beacon_node/execution_layer/src/engine_api.rs b/beacon_node/execution_layer/src/engine_api.rs
index 32090bccfc9..5890f1c30ac 100644
--- a/beacon_node/execution_layer/src/engine_api.rs
+++ b/beacon_node/execution_layer/src/engine_api.rs
@@ -34,6 +34,8 @@ pub mod auth;
pub mod http;
pub mod json_structures;
mod new_payload_request;
+pub mod ssz_rest;
+pub mod ssz_rest_encoding;
pub use new_payload_request::{
NewPayloadRequest, NewPayloadRequestBellatrix, NewPayloadRequestCapella,
diff --git a/beacon_node/execution_layer/src/engine_api/http.rs b/beacon_node/execution_layer/src/engine_api/http.rs
index c421491f808..1c58a592eaf 100644
--- a/beacon_node/execution_layer/src/engine_api/http.rs
+++ b/beacon_node/execution_layer/src/engine_api/http.rs
@@ -13,6 +13,7 @@ use std::sync::LazyLock;
use tokio::sync::Mutex;
use std::time::{Duration, Instant};
+use tracing::debug;
pub use deposit_log::{DepositLog, Log};
pub use reqwest::Client;
@@ -606,6 +607,10 @@ pub struct HttpJsonRpc {
pub engine_capabilities_cache: Mutex