Sui Foundation shuts down its public JSON-RPC endpoints on Jul 31, 2026. Migrate call by call to gRPC on Chainstack, where JSON-RPC and gRPC run on the same node and JSON-RPC keeps working.
Sui Foundation is shutting down its public JSON-RPC endpoints. On Chainstack, your Sui node serves JSON-RPC and gRPC on the same endpoint, so you migrate call by call — keep using JSON-RPC while you port each call to gRPC, with no provider switch and no re-sync.
Apps calling Sui Foundation’s public endpoints fullnode.mainnet.sui.io or fullnode.testnet.sui.io stop working after Jul 31, 2026.
Sui Foundation retires its public JSON-RPC in stages:
Only Sui Foundation’s public good JSON-RPC endpoints are being turned off. JSON-RPC is deprecated in the sui-node software but not removed — node operators can keep JSON-RPC serving. Your Chainstack Sui JSON-RPC endpoint keeps working, so the deadline is not a hard cutover for Chainstack customers: you can keep calling JSON-RPC while you port your code to gRPC on the same endpoint.The reason to migrate anyway is that gRPC is the interface Sui invests in going forward. gRPC uses HTTP/2 and Protocol Buffers for binary serialization, which makes payloads smaller and adds server-side streaming — you subscribe to new checkpoints instead of polling for them.On Chainstack, the migration is JSON-RPC → gRPC, and both run on the same node:
Move performance-sensitive and streaming workloads to gRPC — backends, indexers, typed clients, low-latency lookups, transaction submission, and checkpoint streaming.
Keep everything else on JSON-RPC. It stays up on your Chainstack endpoint, and methods that have no gRPC equivalent (event and transaction-block queries, and so on) keep working over it — you do not have to move them.
Both interfaces are on the same node. Copy your JSON-RPC endpoint (shown below as YOUR_CHAINSTACK_ENDPOINT, with its auth token built in) from Chainstack — see View node access and credentials. The gRPC endpoint is the host and port below.
Sui’s gRPC API is organized into services under sui.rpc.v2. Most read and write JSON-RPC methods map directly to a gRPC call. A handful of query methods have no gRPC equivalent but keep working on Chainstack’s JSON-RPC; a few analytics methods come from Sui’s indexer and no full node serves them. The tables below give the path for each common JSON-RPC method.
These methods have no gRPC equivalent, but they keep working on your Chainstack JSON-RPC endpoint — Sui Foundation is retiring its own public endpoints, not removing JSON-RPC from the node software, so Chainstack’s JSON-RPC is unaffected. Keep calling them over JSON-RPC:
suix_queryTransactionBlocks and suix_queryEvents
sui_getCheckpoints
suix_getStakes and suix_getStakesByIds
suix_getValidatorsApy
suix_subscribeEvent and suix_subscribeTransaction, over the JSON-RPC WebSocket endpoint
A few JSON-RPC methods return aggregated analytics that come from Sui’s indexer layer, not from a full node. A full node — Sui’s or Chainstack’s — does not serve them over JSON-RPC or gRPC (calling them on Chainstack returns -32601 Method not found). Get the underlying data these way:
JSON-RPC method
What to use instead
suix_getEpochs
For epoch data — validators, committee, gas price — call suix_getLatestSuiSystemState (JSON-RPC) or LedgerService/GetEpoch (gRPC) on Chainstack. Enumerating past epochs is an indexer job, not a node call.
Network analytics (TPS, active addresses, popular calls). Derive them by indexing your Chainstack node’s checkpoint stream (gRPC SubscriptionService/SubscribeCheckpoints) into your own store, or use a Sui analytics provider. Most applications do not need these.
gRPC streaming exposes only SubscribeCheckpoints, not per-event subscriptions. For event streams, keep suix_subscribeEvent on the JSON-RPC WebSocket, or subscribe to checkpoints over gRPC and filter client-side.
The fastest way to confirm your endpoint and explore the API is grpcurl. Sui gRPC has server reflection enabled, so you can list services and call methods without compiling proto files.
grpcurl -H "x-token: YOUR_X_TOKEN" \ sui-mainnet.core.chainstack.com:443 \ list
In TypeScript, use the official Sui SDK (@mysten/sui) with a native gRPC transport. The SDK’s default transport is gRPC-Web, which Chainstack does not serve (it returns HTTP 415), so pass a @protobuf-ts/grpc-transport transport backed by @grpc/grpc-js and authenticate with the x-token metadata header. From other languages, generate stubs from Sui’s proto definitions and attach the same x-token metadata.
Use recent client versions — @mysten/sui 2.16 or later and @grpc/grpc-js 1.14 or later. Older releases mishandle gRPC streams and produce intermittent RST and internal errors under load; current versions are reliable.
// npm install @mysten/sui @protobuf-ts/grpc-transport @grpc/grpc-jsimport { SuiGrpcClient } from '@mysten/sui/grpc';import { GrpcTransport } from '@protobuf-ts/grpc-transport';import { ChannelCredentials } from '@grpc/grpc-js';const client = new SuiGrpcClient({ network: 'mainnet', transport: new GrpcTransport({ host: 'sui-mainnet.core.chainstack.com:443', channelCredentials: ChannelCredentials.createSsl(), meta: { 'x-token': 'YOUR_X_TOKEN' }, }),});// High-level helpers on client.core; raw services on client.ledgerService, etc.const gasPrice = await client.core.getReferenceGasPrice();console.log(gasPrice.referenceGasPrice);
import grpc# Native gRPC channel over TLS; x-token metadata on every callchannel = grpc.secure_channel( "sui-mainnet.core.chainstack.com:443", grpc.ssl_channel_credentials(),)metadata = (("x-token", "YOUR_X_TOKEN"),)# Using stubs generated from Sui's protos, e.g. LedgerService:# from sui.rpc.v2 import ledger_service_pb2, ledger_service_pb2_grpc# stub = ledger_service_pb2_grpc.LedgerServiceStub(channel)# resp = stub.GetServiceInfo(# ledger_service_pb2.GetServiceInfoRequest(), metadata=metadata# )# print(resp.checkpoint_height)
This path is server-side only. The SDK’s browser transport is gRPC-Web, which Chainstack does not serve yet (HTTP 415) — from the browser, use JSON-RPC or proxy gRPC through your backend.