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

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

payload = {
    "jsonrpc": "2.0",
    "method": "eth_call",
    "params": [
        {
            "to": "0x20c0000000000000000000000000000000000000",
            "data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
        },
        "latest"
    ],
    "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_call',
    params: [
      {
        to: '0x20c0000000000000000000000000000000000000',
        data: '0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294'
      },
      'latest'
    ],
    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_call',
    'params' => [
        [
                'to' => '0x20c0000000000000000000000000000000000000',
                'data' => '0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294'
        ],
        'latest'
    ],
    '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_call\",\n  \"params\": [\n    {\n      \"to\": \"0x20c0000000000000000000000000000000000000\",\n      \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n    },\n    \"latest\"\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_call\",\n  \"params\": [\n    {\n      \"to\": \"0x20c0000000000000000000000000000000000000\",\n      \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n    },\n    \"latest\"\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_call\",\n  \"params\": [\n    {\n      \"to\": \"0x20c0000000000000000000000000000000000000\",\n      \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n    },\n    \"latest\"\n  ],\n  \"id\": 1\n}"

response = http.request(request)
puts response.read_body
{
  "jsonrpc": "<string>",
  "id": 123,
  "result": "<string>"
}
Tempo API method that executes a new message call immediately without creating a transaction on the blockchain. This is commonly used to read data from smart contracts, such as TIP-20 token balances.
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

  • callObject — the call object:
    • from — (optional) address the call is sent from
    • to — the address the call is directed to
    • gas — (optional) gas provided for the call
    • gasPrice — (optional) gas price for the call
    • value — (optional) value sent with the call
    • data — (optional) hash of the method signature and encoded parameters
  • blockParameter — the block number (hex) or tag (latest, earliest, pending)

Response

  • result — the return value of the executed contract call

eth_call code examples

The following example queries the balanceOf function on the pathUSD TIP-20 token contract:
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);

// pathUSD token address
const PATHUSD = "0x20c0000000000000000000000000000000000000";

const getBalance = async (address) => {
    const abi = ["function balanceOf(address) view returns (uint256)"];
    const token = new ethers.Contract(PATHUSD, abi, provider);
    const balance = await token.balanceOf(address);
    // TIP-20 tokens use 6 decimals
    console.log(`pathUSD balance: ${ethers.formatUnits(balance, 6)}`);
  };

getBalance("0x9729187D9E8Bbefa8295F39f5634cA454dd9d294");
from web3 import Web3

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

# pathUSD token address
PATHUSD = "0x20c0000000000000000000000000000000000000"

# balanceOf function signature: keccak256("balanceOf(address)")[:4]
# Plus address padded to 32 bytes
address = "0x9729187D9E8Bbefa8295F39f5634cA454dd9d294"
data = "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"

result = web3.eth.call({
    'to': PATHUSD,
    'data': data
})

balance = int(result.hex(), 16) / 10**6  # TIP-20 uses 6 decimals
print(f"pathUSD balance: {balance}")
curl -X POST "CHAINSTACK_NODE_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_call",
    "params": [
      {
        "to": "0x20c0000000000000000000000000000000000000",
        "data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
      },
      "latest"
    ],
    "id": 1
  }'

Body

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

Transaction call object and block parameter

id
integer
default:1

Response

200 - application/json

The return value of the executed contract call

jsonrpc
string
id
integer
result
string

The return data of the call

Last modified on June 22, 2026