Skip to main content
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:
MilestoneDate
Testnet public JSON-RPC offWeek of Jul 6, 2026
Mainnet public JSON-RPC offWeek of Jul 20, 2026
Public JSON-RPC fully retiredJul 31, 2026

What is actually being deprecated

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.

Chainstack Sui endpoints

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.
InterfaceEndpointAuthentication
JSON-RPC (HTTPS)YOUR_CHAINSTACK_ENDPOINTauth token or basic auth, built into the endpoint
gRPCsui-mainnet.core.chainstack.com:443x-token metadata header
Testnet gRPC is sui-testnet.core.chainstack.com:443. For every authentication option, see Authentication methods available on Chainstack. See Sui tooling for SDK setup and per-language connection code.

Method mapping

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.

Maps to gRPC

JSON-RPC methodgRPC service and method
sui_getChainIdentifierLedgerService/GetServiceInfo (read chainId)
sui_getLatestCheckpointSequenceNumberLedgerService/GetServiceInfo (read checkpointHeight)
sui_getCheckpointLedgerService/GetCheckpoint
sui_getObjectLedgerService/GetObject
sui_multiGetObjectsLedgerService/BatchGetObjects
sui_getTransactionBlockLedgerService/GetTransaction
sui_multiGetTransactionBlocksLedgerService/BatchGetTransactions
suix_getLatestSuiSystemStateLedgerService/GetEpoch (system state in read mask)
suix_getCommitteeInfoLedgerService/GetEpoch (committee in read mask)
sui_getProtocolConfigLedgerService/GetEpoch (protocol config in read mask)
suix_getBalanceStateService/GetBalance
suix_getAllBalancesStateService/ListBalances
suix_getCoinsStateService/ListOwnedObjects (filter type: 0x2::coin::Coin)
suix_getCoinMetadataStateService/GetCoinInfo
suix_getTotalSupplyStateService/GetCoinInfo
suix_getOwnedObjectsStateService/ListOwnedObjects
suix_getDynamicFieldsStateService/ListDynamicFields
sui_dryRunTransactionBlockTransactionExecutionService/SimulateTransaction
sui_devInspectTransactionBlockTransactionExecutionService/SimulateTransaction (checksEnabled: false)
sui_executeTransactionBlockTransactionExecutionService/ExecuteTransaction
sui_getNormalizedMoveModuleMovePackageService/GetPackage
sui_getNormalizedMoveFunctionMovePackageService/GetFunction
sui_getNormalizedMoveStructMovePackageService/GetDatatype
suix_resolveNameServiceAddressNameService/LookupName
suix_resolveNameServiceNamesNameService/ReverseLookupName

No gRPC equivalent — keep on JSON-RPC

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

Indexer and analytics methods

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 methodWhat to use instead
suix_getEpochsFor 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.
suix_getNetworkMetrics, suix_getAddressMetrics, suix_getMoveCallMetricsNetwork 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.

gRPC quickstart

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
grpcurl -H "x-token: YOUR_X_TOKEN" \
  sui-mainnet.core.chainstack.com:443 \
  sui.rpc.v2.LedgerService/GetServiceInfo
grpcurl -H "x-token: YOUR_X_TOKEN" \
  -d '{"sequence_number": 296000000}' \
  sui-mainnet.core.chainstack.com:443 \
  sui.rpc.v2.LedgerService/GetCheckpoint
GetServiceInfo returns the chain, current epoch, and the node’s checkpoint range:
{
  "chainId": "4btiuiMPvEENsttpZC7CZ53DruC3MAgfznDbASZ7DR6S",
  "chain": "mainnet",
  "epoch": "1184",
  "checkpointHeight": "296723264",
  "lowestAvailableCheckpoint": "253124671",
  "server": "sui-node/1.74.1-8fc60f1fa966"
}
To inspect any service’s methods and message shapes, describe it:
grpcurl -H "x-token: YOUR_X_TOKEN" \
  sui-mainnet.core.chainstack.com:443 \
  describe sui.rpc.v2.LedgerService

gRPC from code

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-js
import { 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 call
channel = 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.

Next steps

Last modified on July 13, 2026