eth_newPendingTransactionFilter
curl --request POST \
--url https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300 \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_newPendingTransactionFilter",
"id": 1
}
'import requests
url = "https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300"
payload = {
"jsonrpc": "2.0",
"method": "eth_newPendingTransactionFilter",
"id": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({jsonrpc: '2.0', method: 'eth_newPendingTransactionFilter', id: 1})
};
fetch('https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'method' => 'eth_newPendingTransactionFilter',
'id' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_newPendingTransactionFilter\",\n \"id\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_newPendingTransactionFilter\",\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_newPendingTransactionFilter\",\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": "<string>"
}Optimism node API
eth_newPendingTransactionFilter | Optimism
Optimism API method that creates a filter in the node to notify when new pending transactions are received. Chainstack Optimism reference.
POST
/
efb0a5eccd2caa5135eb54eba6f7f300
eth_newPendingTransactionFilter
curl --request POST \
--url https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300 \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_newPendingTransactionFilter",
"id": 1
}
'import requests
url = "https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300"
payload = {
"jsonrpc": "2.0",
"method": "eth_newPendingTransactionFilter",
"id": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({jsonrpc: '2.0', method: 'eth_newPendingTransactionFilter', id: 1})
};
fetch('https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'method' => 'eth_newPendingTransactionFilter',
'id' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_newPendingTransactionFilter\",\n \"id\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_newPendingTransactionFilter\",\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://optimism-mainnet.core.chainstack.com/efb0a5eccd2caa5135eb54eba6f7f300")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_newPendingTransactionFilter\",\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": "<string>"
}Optimism API method that creates a filter in the node to notify when new pending transactions are received. To check if the state has changed, call eth_getFilterChanges with the filter ID returned by this method.
On Optimism Mainnet, this filter reports transactions as the sequencer includes them in subblocks, because the mempool is private to the sequencer. For the pre-confirmed transactions and state, poll the
pending block tag as described in Track real-time transactions on Optimism with Subblocks.Get your own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.
Parameters
none
Response
result— a string representing the filter ID. This ID should be used in subsequent calls to eth_getFilterChanges to retrieve new pending transactions.
Use case
Theeth_newPendingTransactionFilter method is useful for applications that need to monitor the mempool for new transactions. Common use cases include:
- Building transaction monitoring tools
- Creating real-time transaction tracking interfaces
- Implementing MEV (Maximal Extractable Value) strategies
- Monitoring specific addresses for pending transactions
eth_subscribe("newPendingTransactions") and eth_newPendingTransactionFilter report transactions as the sequencer includes them in subblocks, not from a public mempool, because the mempool is private to the sequencer. They suit tracking transactions as they are pre-confirmed, but not strategies that need to see a transaction before the sequencer includes it. To read the pre-confirmed transactions and state, poll eth_getBlockByNumber with the pending tag as described in Track real-time transactions on Optimism with Subblocks.
Note: After creating the filter, you need to poll eth_getFilterChanges periodically to get updates. Filters timeout if they’re not used for a period of time, so applications should be prepared to recreate them if necessary.Last modified on October 30, 2026
Was this page helpful?