TON rate limits and tiers

TON requests on Triport are metered per second in two buckets, ton_read_rpc for the three cheap status calls and ton_read_rpc_heavy for 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.

CategoryFreeBasicProBusinessEnterprise
ton_read_rpc15 / 3020 / 40100 / 200250 / 500unlimited
ton_read_rpc_heavy15 / 3020 / 40100 / 200250 / 500unlimited

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.

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 getBlockHeader calls in one batch spend ten of the ton_read_rpc_heavy budget.
  • Polling getMasterchainInfo for the latest seqno costs the cheap bucket; fetching the block itself costs the heavy one. Poll the first and fetch the second only when the seqno moves.
  • A historical seqno below the selected liteserver's retention floor returns -32602 with beyond_retention and oldest 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.