eth_sendRawTransactionSync
curl --request POST \
--url https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_sendRawTransactionSync",
"params": [
"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f",
5000
],
"id": 1
}
'import requests
url = "https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f"
payload = {
"jsonrpc": "2.0",
"method": "eth_sendRawTransactionSync",
"params": ["0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f", 5000],
"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_sendRawTransactionSync',
params: [
'0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f',
5000
],
id: 1
})
};
fetch('https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f', 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://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f",
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_sendRawTransactionSync',
'params' => [
'0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f',
5000
],
'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://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_sendRawTransactionSync\",\n \"params\": [\n \"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f\",\n 5000\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://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_sendRawTransactionSync\",\n \"params\": [\n \"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f\",\n 5000\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f")
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_sendRawTransactionSync\",\n \"params\": [\n \"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f\",\n 5000\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"transactionHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"blockHash": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd",
"blockNumber": "0x12345",
"gasUsed": "0x5208",
"status": "0x1"
}
}Ethereum node API
eth_sendRawTransactionSync | Ethereum
Ethereum API method that submits a signed transaction and blocks until the transaction receipt is returned or the timeout expires.
POST
/
cbe98cb5b5f53987d76c16d4ad716b2f
eth_sendRawTransactionSync
curl --request POST \
--url https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_sendRawTransactionSync",
"params": [
"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f",
5000
],
"id": 1
}
'import requests
url = "https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f"
payload = {
"jsonrpc": "2.0",
"method": "eth_sendRawTransactionSync",
"params": ["0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f", 5000],
"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_sendRawTransactionSync',
params: [
'0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f',
5000
],
id: 1
})
};
fetch('https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f', 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://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f",
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_sendRawTransactionSync',
'params' => [
'0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f',
5000
],
'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://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_sendRawTransactionSync\",\n \"params\": [\n \"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f\",\n 5000\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://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_sendRawTransactionSync\",\n \"params\": [\n \"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f\",\n 5000\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ethereum-mainnet.core.chainstack.com/cbe98cb5b5f53987d76c16d4ad716b2f")
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_sendRawTransactionSync\",\n \"params\": [\n \"0xf86c808504a817c80082520894ab5db0e98b8ea6b7f9d8ad8e8ed0bc8fba0d1a2f870de0b6b3a764000080821b9f\",\n 5000\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": {
"transactionHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"blockHash": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd",
"blockNumber": "0x12345",
"gasUsed": "0x5208",
"status": "0x1"
}
}Ethereum API method that submits a signed transaction and blocks until the transaction receipt is returned or the timeout expires. This is a synchronous version of
eth_sendRawTransaction — instead of returning just the transaction hash, it waits for the transaction to be included in a block and returns the full receipt.
This method is defined by EIP-7966 and is available on Erigon (>= v3.4.0) and go-ethereum (>= v1.16.6).
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.
Because Ethereum mainnet has a ~12-second block time, sync calls often exceed short timeouts. Pick a
timeout that fits your application — the request returns once a receipt is available or once the timeout expires, whichever comes first.Parameters
signedTransactionData— the signed transaction data in hexadecimal format. Includes nonce, gas price, gas limit, recipient address, value, data, and signature.timeout(optional) — maximum wait time in milliseconds, passed as a decimal integer per EIP-7966 (e.g.,5000). If omitted, the node uses its configured default. Note that other Chainstack chains may use different timeout encodings — see the Polygon equivalent, where Bor expects a hex-encoded timeout.
Response
result— the full transaction receipt object once the transaction is included in a block, with the same fields aseth_getTransactionReceipt. If the timeout expires before inclusion, the node returns an error indicating the transaction was added to the pool but not yet processed.
eth_sendRawTransactionSync code examples
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);
const sendTransactionSync = async () => {
const wallet = new ethers.Wallet("YOUR_PRIVATE_KEY", provider);
const tx = {
to: "0xRecipientAddress",
value: ethers.parseEther("0"),
chainId: 1,
};
// Sign the transaction
const signedTx = await wallet.signTransaction(tx);
// Send synchronously — blocks until receipt is returned or timeout expires
const receipt = await provider.send(
"eth_sendRawTransactionSync",
[signedTx, 5000]
);
console.log(`Confirmed in block: ${receipt.blockNumber}`);
console.log(`Status: ${receipt.status}`);
};
sendTransactionSync();
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
account = web3.eth.account.from_key("YOUR_PRIVATE_KEY")
tx = {
'nonce': web3.eth.get_transaction_count(account.address),
'to': "0xRecipientAddress",
'value': 0,
'gas': 21000,
'gasPrice': web3.eth.gas_price,
'chainId': 1, # Ethereum mainnet
}
signed = account.sign_transaction(tx)
# Send synchronously with a 5-second timeout (decimal integer per EIP-7966)
receipt = web3.provider.make_request(
"eth_sendRawTransactionSync",
[signed.raw_transaction.hex(), 5000]
)
print(f"Receipt: {receipt['result']}")
curl -X POST "CHAINSTACK_NODE_URL" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "eth_sendRawTransactionSync", "params": ["SIGNED_TX_DATA", 5000], "id": 1}'
When to use
Useeth_sendRawTransactionSync instead of eth_sendRawTransaction when:
- You need the receipt immediately and want to avoid polling with
eth_getTransactionReceipt. - You are building synchronous request/response flows (payments, bots, simulations).
- You want to simplify transaction submission logic by getting the result in a single call.
eth_sendRawTransaction.Body
application/json
Last modified on June 22, 2026
Was this page helpful?