TON rate limits and tiers
TON requests on Triport are metered per second in two buckets,
ton_read_rpcfor the three cheap status calls andton_read_rpc_heavyfor everything that reads blocks, accounts, configuration or contract state. This page lists the per-tier budgets, the method split, and how a 429 tells you which budget you hit.
Endpoint and plans: TON RPC endpoint.
Budgets per tier
Values are sustained RPS / short burst capacity. The included 2× burst buffer absorbs brief traffic spikes at no extra cost and refills at the sustained rate. There is no quota on the number of bursts. Size ongoing traffic to sustained RPS; unlimited categories have no numeric burst ceiling. See Burst capacity.
| Category | Free | Basic | Pro | Business | Enterprise |
|---|---|---|---|---|---|
ton_read_rpc | 15 / 30 | 20 / 40 | 100 / 200 | 250 / 500 | unlimited |
ton_read_rpc_heavy | 15 / 30 | 20 / 40 | 100 / 200 | 250 / 500 | unlimited |
Both rows are unmeasured operational defaults, inherited from the Polygon budgets of the same tier until a dedicated TON capacity test. They are product throttles on your key and do not claim that a public liteserver has the same capacity. An Enterprise "unlimited" entry means no configured tier cap, not unlimited physical capacity. The Free column is the 7-day trial: EU region only, one API key.
There is no daily or monthly request quota: the only limit to plan around is the per-second budget of each category.
Which methods are heavy
The read-only catalog has 13 methods. Ten of them go to the heavy bucket, which is counted separately, so a burst of block scans does not starve your health checks.
| Category | Methods |
|---|---|
ton_read_rpc | getMasterchainInfo, getTime, getVersion |
ton_read_rpc_heavy | getAddressInformation, getBlock, getBlockHeader, getConfigAll, getConfigParam, getShards, getTransactions, lookupBlock, runGetMethod, runSmcMethod |
sendBoc and any other method outside these 13 are not part of the catalog and
are rejected rather than metered; see TON errors.
How requests are counted
- A JSON-RPC batch is charged one request per element, not one per HTTP
call: ten
getBlockHeadercalls in one batch spend ten of theton_read_rpc_heavybudget. - Polling
getMasterchainInfofor the latestseqnocosts the cheap bucket; fetching the block itself costs the heavy one. Poll the first and fetch the second only when theseqnomoves. - A historical
seqnobelow the selected liteserver's retention floor returns-32602withbeyond_retentionandoldest N. Retrying the same request spends budget without changing the answer.
When you hit a limit
Going over sustained + burst returns HTTP 429 with "error": "rate_limited".
The body names the budget you hit — category (for example
ton_read_rpc_heavy), current_tier, limit_rps and burst_capacity — and
the Retry-After header gives the wait in seconds, never less than 1. Wait that
long, then retry with exponential backoff and jitter. A method above your tier
is a different answer: 403 tier_insufficient.
The shared model, response headers and code samples are in the global tier table and the shared error reference.