Tempo RPC with Dwellir
Tempo mainnet RPC endpoints, EVM JSON-RPC quickstarts, and integration guidance for stablecoin-native payment applications.
Tempo RPC
With Dwellir, you get access to our global Tempo network which always routes your API requests to the nearest available location, ensuring low latency and the fastest speeds.
Get your API keyWhy Build on Tempo?
Tempo is a payments-first EVM blockchain designed for stablecoin settlement and financial application UX. Instead of forcing users to manage a native gas token, Tempo denominates fees in supported USD stablecoins while keeping standard Ethereum JSON-RPC compatibility.
Stablecoin-Native Fees
- No native gas token - users pay fees in supported USD stablecoins
- Predictable pricing - easier wallet and checkout UX for payment flows
- Cleaner treasury logic - applications can reason about settlement costs in dollar terms
Built for Payment Workloads
- Deterministic settlement - optimized for fast, reliable payment confirmation
- Merchant-friendly design - suitable for payouts, invoices, and treasury automation
- Wallet-aware fee flows - fee token preferences can be managed at the account level
Standard EVM Tooling
- EVM compatible - keep your Solidity contracts and familiar SDKs
- Trace and debug ready - Dwellir exposes
trace_*,debug_*, andtxpool_* - HTTPS and WebSocket - use the same endpoint shape as other EVM integrations
Quick Start with Tempo
Connect to Tempo mainnet with Dwellir:
curl -sS -X POST https://api-tempo-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots> \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'import { JsonRpcProvider } from 'ethers';const provider = new JsonRpcProvider( 'https://api-tempo-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>');const latest = await provider.getBlockNumber();console.log('block', latest);import requestsurl = 'https://api-tempo-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>'payload = { 'jsonrpc': '2.0', 'id': 1, 'method': 'eth_blockNumber', 'params': []}resp = requests.post(url, json=payload)print(resp.json())package mainimport ( "bytes" "fmt" "io" "net/http")func main() { url := "https://api-tempo-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>" payload := []byte(`{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}`) resp, err := http.Post(url, "application/json", bytes.NewBuffer(payload)) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))}Installation & Setup
import { JsonRpcProvider } from 'ethers';
const provider = new JsonRpcProvider(
'https://api-tempo-mainnet.n.dwellir.com/YOUR_API_KEY'
);
const chainId = await provider.send('eth_chainId', []);
console.log('Tempo chain ID:', parseInt(chainId, 16));
const block = await provider.getBlock('latest');
console.log('Latest block:', block.number);Network Information
| Parameter | Value | Details |
|---|---|---|
| Chain ID | 4217 | Tempo mainnet |
| Block Time | ~1 second | Fast settlement target |
| Fee Model | Supported USD stablecoins | No native gas token |
| RPC Standard | Ethereum | JSON-RPC 2.0 |
Tempo Fee Model Notes
Tempo does not behave like a typical ETH-gas chain:
- No native token balance requirement for paying fees
- Fee quotes are stablecoin-denominated, so wallet and app UX should not assume ETH-style gas handling
- Fee token preferences matter because users can pay with supported stablecoins instead of a single mandatory gas asset
If your wallet or payment flow assumes eth_getBalance reflects spendable fee balance, adjust that logic for Tempo before launch.
API Reference
Tempo supports standard Ethereum JSON-RPC methods, and Dwellir's endpoint also exposes trace, debug, and txpool namespaces for production operations and debugging.
Common Integration Patterns
Stablecoin Payment Monitoring
async function waitForSettlement(txHash) {
const receipt = await provider.waitForTransaction(txHash, 1);
console.log('Settled in block:', receipt.blockNumber);
return receipt;
}Fee Estimation in Stablecoin Terms
const feeData = await provider.getFeeData();
const gasEstimate = await provider.estimateGas(tx);
const approxUsdCost =
Number(feeData.gasPrice) / 1e9 * Number(gasEstimate) / 1e9;
console.log('Estimated fee (USD):', approxUsdCost);Trace Support for Payment Debugging
const trace = await provider.send('debug_traceTransaction', [
'0x50b1857dce8dbe401e09610534de81655bc508c6765eb30ecefe24148c515c28'
]);
console.log('Trace result:', trace);
