Chainstack Self-Hosted is now available! Launch production-grade blockchain nodes on infrastructure you control.    Get started
  • Agents
  • Pricing

How to get a Polygon RPC endpoint for stablecoins (2026 guide)

Created Jul 5, 2026 Updated Jul 5, 2026
Polygon Endpoint Stablecoins logo

TL;DR

The moment a stablecoin payment app on Polygon catches a burst — payday, a merchant settlement window, an airdrop claim — the public RPC starts returning 429 Too Many Requests at around 40 requests per second, and the balanceOf read or transfer confirmation that decides whether to credit a user’s account silently fails. On a payments rail moving native USDC and USDT at sub-cent fees, a dropped confirmation is not a glitch — it is a missing or double-counted payment. This guide shows how to choose and provision a Polygon RPC endpoint that holds up under stablecoin transfer load, and how to read Polygon’s ~5-second finality correctly so you never credit a reorged transfer.

What is a Polygon stablecoin RPC endpoint

A Polygon RPC endpoint is the JSON-RPC interface your stablecoin app uses to talk to the Polygon PoS network — chain ID 137, with POL as the native gas token since the MATIC-to-POL migration completed in 2024. Polygon PoS runs a two-layer design: Bor handles block production (roughly 2-second blocks) and Heimdall handles checkpointing and finality. For a payments application, every action — checking a wallet’s USDC balance, watching for an incoming USDT transfer, broadcasting a signed transaction that moves a stablecoin — is a JSON-RPC call against a Bor node exposing the standard eth, net, and web3 namespaces.

For a stablecoin workload specifically, the endpoint is on the critical path for:

  • Reading wallet balances with balanceOf (eth_call) before showing a user their dollar balance
  • Detecting incoming payments by filtering ERC-20 Transfer events with eth_getLogs
  • Broadcasting mint, burn, and transfer transactions with eth_sendRawTransaction
  • Estimating fees with eth_gasPrice / eth_estimateGas so a POL-denominated gas cost can be sponsored or passed through
  • Confirming settlement by polling eth_getTransactionReceipt and checking against the finalized block tag

You can review the exact transfer flow and contract interactions for native USDC in Polygon’s official USDC transfer documentation, which mirrors the calls your endpoint has to serve under load.

Here is the part that bites stablecoin teams: Polygon’s traffic is not smooth. A single merchant batch or a Revolut-style consumer flow turns hundreds of balance reads and confirmation polls into a synchronized spike, and a shared endpoint that was fine in testing returns 429 exactly when real money is moving. Endpoint quality on Polygon is measured by how it behaves in that burst, not on an idle afternoon.

How Polygon RPC differs from Ethereum RPC

Polygon is EVM-equivalent, so the method signatures match Ethereum — but the operating characteristics that matter for stablecoin settlement are different.

PropertyEthereum mainnetPolygon PoS
Block time~12 seconds~2 seconds
Finality~13 minutes (2 epochs)~5 seconds (Heimdall v2, July 2025)
Throughput~15-30 TPS1,000+ TPS (Bhilai), targeting 5,000+
Gas tokenETHPOL
Typical transfer feedollars~$0.002
Reorg behaviorrare, shallowcapped at 2 blocks post-Heimdall v2

For a stablecoin app these differences are not trivia. Sub-cent fees and ~5-second finality are precisely why USDC and USDT settlement has migrated to Polygon — but the ~2-second blocks and high throughput mean your endpoint serves far more confirmation polls and eth_getLogs queries per minute than the same app would on Ethereum. The provider you pick has to absorb that call volume without throttling, which is exactly where shared public endpoints fall down.

Polygon stablecoin RPC endpoint options

Public vs private Polygon RPC endpoints

For a stablecoin app, the public-vs-private decision comes down to one question: what happens to a payment confirmation when traffic spikes? Public endpoints are shared, so your burst competes with everyone else’s, and the throttle that kicks in is the throttle that drops your settlement read.

Official public endpoints:

  • Mainnet: https://polygon-rpc.com
  • Testnet (Amoy): https://rpc-amoy.polygon.technology/

⚠️ The public Polygon mainnet RPC begins returning 429 Too Many Requests at roughly 40 requests per second across all callers sharing it, and exposes no production WebSocket. For a payments workload — where a single settlement window fans out into hundreds of concurrent balanceOf and receipt calls — the Polygon PoS RPC endpoints reference itself notes these endpoints carry rate limits and points teams to professional RPC providers for anything beyond development.

FactorPublic endpointPrivate endpoint
AccessFree and openRestricted access
ResourcesShared infrastructureDedicated resources
Best use caseDevelopment & testingProduction workloads
Rate limit~40 req/s shared, then 429No aggressive throttling
WebSocket supportNot available publiclyAvailable (HTTPS + WSS)
Archive accessNot availableAvailable

On a settlement rail, throttling is not a performance footnote — it is the difference between crediting a user’s USDC deposit on time and showing them a stale balance. That is why stablecoin teams move to managed infrastructure before launch, not after the first incident.

📖 For a detailed comparison of Polygon RPC providers — with a section specifically on stablecoin and payment flows — see Best Polygon RPC providers for high-throughput apps in 2026.

Full node vs archive Polygon node

For a stablecoin app, historical access decides whether you can answer questions like “what was this treasury wallet’s USDC balance at the block of last month’s audit” — full nodes only serve recent state, so anything older returns a “missing trie node” error.

Full node accessArchive node access
Current USDC/USDT balance checksHistorical balance at any past block (audits, reconciliation)
Real-time transfer confirmationBackfilling months of Transfer events for accounting
Live fee estimation and broadcastingReplaying settlement history for dispute resolution

If you are running compliance reporting, reconciling stablecoin flows against off-chain ledgers, or backfilling a payments dashboard, you need archive access — and Chainstack supports Polygon archive nodes so you can query the full mainnet history rather than only the recent window a full node retains.

HTTPS vs WebSockets

Stablecoin apps live and die on detecting incoming transfers the instant they land, so the transport question is really about how you watch for Transfer events. Polling eth_getLogs over HTTPS works but multiplies your request count; a WebSocket subscription pushes events to you and keeps your request budget for the calls that matter.

FeatureHTTPSWebSocket
ModelRequest/responsePersistent connection
ComplexitySimple operationallyRequires reconnect/heartbeat logic
Best forBalance reads, broadcasting, receipt pollingLive Transfer event subscriptions, mempool watching
LatencyStandardLower for frequent updates
Connection overheadPer requestOne-time handshake

The public Polygon endpoint does not offer a production WebSocket, so any real-time stablecoin notification flow built on eth_subscribe requires a managed provider that exposes a WSS endpoint.

How to get a private Polygon RPC endpoint with Chainstack

polygon rpc endpoint
  1. Log in to the Chainstack console (or create an account)
  2. Create a new project
  3. Select Polygon as your blockchain protocol
  4. Choose network: Polygon Mainnet or Amoy testnet
  5. Deploy the node
  6. Open Access and credentials and copy your HTTPS and WebSocket endpoints
  7. Run a quick connectivity check before wiring it into production code

You can deploy a private Polygon RPC node on Chainstack in minutes, then connect with the chain’s primary SDK. Here is a minimal ethers.js setup that reads a wallet’s USDC balance:

const { ethers } = require("ethers");

// 137 is the Polygon PoS mainnet network ID
const provider = new ethers.providers.JsonRpcProvider("YOUR_CHAINSTACK_ENDPOINT", 137);

// Native USDC on Polygon PoS
const USDC = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359";
const abi = ["function balanceOf(address) view returns (uint256)"];
const usdc = new ethers.Contract(USDC, abi, provider);

usdc.balanceOf("0xYourWalletAddress").then((bal) => {
  // USDC uses 6 decimals, not 18
  console.log(ethers.utils.formatUnits(bal, 6));
});

📖 For the full integration guide, see the Chainstack Polygon tooling documentation.

You can also access Chainstack Polygon RPC directly from Claude, Cursor, Codex, Gemini, or Windsurf using Chainstack MCP. Learn more about Chainstack MCP.

Using Chainlist

Polygon is on Chainlist under chain ID 137, which makes it easy to add the network to MetaMask and other wallets in one click. Chainlist is a wallet convenience tool, not an infrastructure provider — the RPC URLs it surfaces are public, shared endpoints. For a stablecoin app handling real settlement, replace any Chainlist URL with a managed endpoint before you go to production.

Chainstack pricing for Polygon RPC

Chainstack bills on request units with predictable monthly tiers, which makes a stablecoin app’s spiky traffic far easier to forecast than the compute-unit models that vary cost per method. See the full Chainstack pricing page for plan details and overage rates.

PlanCostRequests/MonthRPSOverage (per 1M extra)
Developer$03M25$20
Growth$4920M250$15
Pro$19980M400$12.50
Business$499200M600$10
Enterprise$990+400M+Unlimited$5

Advanced options relevant to a Polygon stablecoin deployment:

  • Archive Node add-on — for historical balance and Transfer event reconciliation; archive requests consume 2 request units each
  • Unlimited Node — flat-fee, RPS-tiered nodes for predictable cost under sustained payment load
  • Dedicated Nodes: from $0.50/hour per node (+ storage), for isolated infrastructure with extended debug and txpool namespaces

How to estimate monthly cost

  1. Count your steady-state reads — balance checks and receipt polls per active user per day
  2. Add your event-watching load — eth_getLogs queries or WebSocket subscriptions for Transfer detection
  3. Multiply by expected daily active wallets to get a baseline request volume
  4. Map that baseline to a plan tier with RPS headroom above your average
  5. On Polygon, size for the burst, not the average — a stablecoin payment app’s request rate around payouts and settlement windows can run several times its baseline, so pick a plan whose RPS ceiling covers the spike, not the mean

Production readiness checklist

  • Primary + fallback RPC provider configured
  • Request timeout policy set
  • Retry logic with exponential backoff implemented
  • Credentials stored in env/secret manager (never hardcoded)
  • Monitoring for latency, error rate, and throttling
  • Alerts for sustained degradation
  • Settlement logic reads the finalized block tag — not just a receipt — before crediting a stablecoin payment, so a 2-block reorg cannot cause a double-credit
  • Rate limiter in place to prevent your own confirmation-polling loop from self-throttling during a payment burst
  • Stablecoin decimals handled correctly (USDC and USDT use 6 decimals on Polygon, not 18)

Troubleshooting common Polygon RPC issues

SymptomCauseHow to fix
429 Too Many RequestsPublic endpoint throttle (~40 req/s shared) hit during a payment burstMove to a managed endpoint with dedicated RPS; add backoff
WebSocket disconnectsIdle timeout or network blip on subscriptionImplement reconnect + heartbeat, and backfill missed Transfer events with eth_getLogs on reconnect
Stablecoin credited then reversedApp confirmed on a receipt inside a 2-block reorg windowGate credits on the finalized block tag (~5s post-Heimdall v2), not the first receipt
Balance shows wrong amount (off by 10^12)Treating USDC/USDT as 18 decimalsUse 6 decimals for both USDC and USDT on Polygon when formatting
eth_getLogs returns empty or times outRange too wide, or full node lacks the historical blockNarrow the block range; use an archive node for historical Transfer backfills
missing trie node on a historical balanceQuerying past state on a full (pruned) nodeRoute historical reads to an archive node

Conclusion

The failure mode that hurts a Polygon stablecoin app is not dramatic — it is a 429 that arrives during a settlement spike, drops the balanceOf read or receipt poll that decides whether to credit a user, and leaves you with a payment that the chain settled but your app never recorded. Worse is the inverse: crediting a transfer off a single receipt, only for a 2-block reorg to roll it back and hand you a double-spend at the application layer. Both are silent. Both surface as support tickets about “missing” or “duplicate” balances, days later, with no error in your logs.

The pattern that works is simple and non-negotiable. Provision a managed endpoint with RPS headroom sized to your payment bursts, not your average. Watch for incoming transfers over a WebSocket subscription and keep HTTPS for reads and broadcasts. And gate every credit on Polygon’s finalized block tag — with ~5-second finality post-Heimdall v2, you wait seconds, not minutes, and you never act on a block that can still reorg.

Spin up a Polygon node on the free Developer tier to test your settlement flow, then move to a dedicated or unlimited node when real stablecoin volume starts arriving.

FAQ

Which SDK should I use to build a stablecoin app on Polygon? Polygon is EVM-equivalent, so any Ethereum tooling works — ethers.js, web3.js, web3.py, or viem for the client, and Hardhat or Foundry for contracts. There is no Polygon-specific SDK requirement; the only thing to get right is using POL for gas and the correct 6-decimal handling for USDC and USDT.

Is the public Polygon RPC enough for a stablecoin payments app? No. The public endpoint throttles at roughly 40 requests per second across all shared users and offers no production WebSocket. A payments workload generates synchronized bursts of balance reads and confirmation polls that blow past that limit exactly when money is moving, so a managed endpoint with dedicated RPS is a launch requirement, not an optimization.

How does Polygon’s ~5-second finality affect when I credit a stablecoin transfer? Heimdall v2 (July 2025) cut finality to about 5 seconds and capped reorg depth at 2 blocks. That means you should not credit a payment off the first transaction receipt — wait for the transaction’s block to be referenced by the finalized block tag. The wait is seconds, and it eliminates the risk of crediting a transfer that a shallow reorg later reverses.

How do I reliably detect incoming USDC or USDT payments? Subscribe to the ERC-20 Transfer event for the stablecoin contract over a WebSocket connection, filtered to your receiving addresses. Keep a fallback eth_getLogs poll over HTTPS to backfill any events missed during a WebSocket reconnect, and only mark a payment settled once its block reaches finality.

Do I need an archive node for a stablecoin app? For live payments, a full node is enough. You need an archive node when you reconcile historical stablecoin flows, reconstruct a wallet’s balance at a past block for an audit, or backfill months of Transfer events — anything querying state older than a full node’s pruning window.

What metrics should I monitor on a Polygon stablecoin endpoint? Track error rate (especially 429 responses), p95/p99 latency on eth_call and eth_getTransactionReceipt, WebSocket reconnect frequency, and the lag between a transaction’s receipt and its block reaching finality. A rising 429 rate during predictable windows is the earliest signal you have outgrown your current RPS tier.

Additional resources

SHARE THIS ARTICLE
Hyperledger Global Forum 01 530x281 logo

Hyperledger Global Forum 2020 Recap

ConsenSys, Microsoft, and EY launch the Baseline protocol. ScanTrust and Unilever provide end-to-end traceability for millions of units. NTT Data, Hitachi, and Accenture move their use cases to production.

Ashlie Chin 150x150 logo
Ashlie Chin
Mar 20
Customer Stories

Gamerse

Securing stable platform and token performance on BNB Chain, while reinforcing it with cross-chain support.

Saakuru Labs

Saakuru Labs seamlessly transitions businesses from Web2 to Web3 with a 4X infrastructure ROI using Chainstack Global Node.

GET protocol

Handling large transaction volumes in minting NFT tickets for large-scale events.