Skip to main content
POST
/
eth_getFilterLogs
curl --request POST \
  --url https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/ \
  --header 'Content-Type: application/json' \
  --data '
{
  "jsonrpc": "2.0",
  "method": "eth_getFilterLogs",
  "params": [
    "0x1"
  ],
  "id": 1
}
'
import requests

url = "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"

payload = {
"jsonrpc": "2.0",
"method": "eth_getFilterLogs",
"params": ["0x1"],
"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_getFilterLogs', params: ['0x1'], id: 1})
};

fetch('https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/', 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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/",
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_getFilterLogs',
'params' => [
'0x1'
],
'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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"

payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getFilterLogs\",\n \"params\": [\n \"0x1\"\n ],\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://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getFilterLogs\",\n \"params\": [\n \"0x1\"\n ],\n \"id\": 1\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")

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_getFilterLogs\",\n \"params\": [\n \"0x1\"\n ],\n \"id\": 1\n}"

response = http.request(request)
puts response.read_body
{
  "jsonrpc": "<string>",
  "id": 123,
  "result": [
    {}
  ]
}
Tempo API method that returns an array of all logs matching the filter with the given ID. Unlike eth_getFilterChanges, this returns all matching logs, not just new ones since the last poll.
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

  • filterId — the filter ID returned from eth_newFilter

Response

  • result — array of log objects matching the filter:
    • address — contract address that emitted the log
    • topics — array of indexed log parameters
    • data — non-indexed log parameters
    • blockNumber — block number containing the log
    • blockHash — hash of the block
    • transactionHash — hash of the transaction that emitted the log
    • transactionIndex — index of the transaction in the block
    • logIndex — position of the log in the block
    • removedtrue if the log was removed due to a chain reorganization

eth_getFilterLogs code examples

const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);

// pathUSD token address
const PATHUSD = "0x20c0000000000000000000000000000000000000";
const TRANSFER_TOPIC = ethers.id("Transfer(address,address,uint256)");

const getFilterLogs = async () => {
    // Create a log filter
    const filterId = await provider.send("eth_newFilter", [{
      address: PATHUSD,
      topics: [TRANSFER_TOPIC],
      fromBlock: "0x560000"
    }]);
    console.log(`Created filter: ${filterId}`);

    // Get all matching logs
    const logs = await provider.send("eth_getFilterLogs", [filterId]);
    console.log(`Found ${logs.length} Transfer events`);

    for (const log of logs.slice(0, 5)) {
      console.log(`\nBlock ${parseInt(log.blockNumber, 16)}:`);
      console.log(`  Tx: ${log.transactionHash}`);
      console.log(`  From: 0x${log.topics[1].slice(26)}`);
      console.log(`  To: 0x${log.topics[2].slice(26)}`);
    }

    // Clean up
    await provider.send("eth_uninstallFilter", [filterId]);
  };

getFilterLogs();
from web3 import Web3

node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))

# pathUSD token address
PATHUSD = "0x20c0000000000000000000000000000000000000"
TRANSFER_TOPIC = web3.keccak(text="Transfer(address,address,uint256)").hex()

# Create a log filter
filter_result = web3.provider.make_request("eth_newFilter", [{
    "address": PATHUSD,
    "topics": [TRANSFER_TOPIC],
    "fromBlock": "0x560000"
}])
filter_id = filter_result['result']
print(f"Created filter: {filter_id}")

# Get all matching logs
logs_result = web3.provider.make_request("eth_getFilterLogs", [filter_id])
logs = logs_result['result']
print(f"Found {len(logs)} Transfer events")

for log in logs[:5]:
    print(f"\nBlock {int(log['blockNumber'], 16)}:")
    print(f"  Tx: {log['transactionHash']}")
    print(f"  From: 0x{log['topics'][1][26:]}")
    print(f"  To: 0x{log['topics'][2][26:]}")

# Clean up
web3.provider.make_request("eth_uninstallFilter", [filter_id])
# First create a filter
curl -X POST "CHAINSTACK_NODE_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_newFilter",
    "params": [{"address": "0x20c0000000000000000000000000000000000000", "fromBlock": "0x560000"}],
    "id": 1
  }'

# Then get all logs using the returned filter ID
curl -X POST "CHAINSTACK_NODE_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x1"], "id": 1}'

Body

application/json
jsonrpc
string
default:2.0
method
string
default:eth_getFilterLogs
params
any[]

Filter ID

id
integer
default:1

Response

200 - application/json

Array of log objects

jsonrpc
string
id
integer
result
object[]

Array of log objects matching the filter

Last modified on June 22, 2026