API Overview
Radix exposes four APIs at different abstraction levels. Most developers only need the Gateway API.
| API | Purpose | Best For | Access |
|---|---|---|---|
| Gateway | High-level ledger queries and transaction submission | dApps, wallets, explorers | Public endpoints |
| Core | Low-level transaction and state data from nodes | Exchanges, analytics, integrators | Private / self-hosted |
| Engine State | Complete current ledger state at engine level | Advanced state queries | Self-hosted (requires node config) |
| System | Node health and diagnostics | Node operators | Local only |
Gateway API
The Gateway API is the primary interface for dApp developers. It provides entity state queries, transaction submission, stream queries, and historical state access – all via JSON POST requests with cursor-based pagination.
Official Endpoints
| Network | URL |
|---|---|
| Mainnet | https://mainnet.radixdlt.com |
| Stokenet | https://stokenet.radixdlt.com |
These are rate-limited by IP. For production dApps, use a third-party provider or run your own Gateway.
Key Endpoint Groups
/state/*– entity details, resource balances, metadata, vault contents/transaction/*– submit, preview, and check transaction status/stream/transactions– query committed transactions with filters/status/gateway-status– current ledger state version and epoch
Use the Gateway SDK (@radixdlt/babylon-gateway-api-sdk) for typed TypeScript access.
What the Gateway Does When the Ledger Stops
The Gateway is not a passive mirror of the ledger. It refuses to answer a state query once its own database has fallen too far behind, and it names the threshold in the error it returns. That behaviour became observable for the first time on 1 September 2026, during the network halt that followed the Hyperlane asset drain: mainnet committed its last round at 21:19:48 UTC on 31 August, and the public Gateway at mainnet.radixdlt.com spent the following day answering almost nothing.
Probed at 23:08:58 UTC on 1 September 2026, twenty-five hours and forty-nine minutes after the last committed round:
| Endpoint | Response |
|---|---|
/status/gateway-status | 200 – returns the last state the Gateway ingested |
/status/network-configuration | 200 – static network metadata |
/transaction/preview | 200 – full receipt, simulated against the frozen state |
/transaction/construction | 500 NotSyncedUpError (request_type: Construction) |
/state/entity/details | 500 NotSyncedUpError (request_type: Read) |
/state/validators/list | 500 NotSyncedUpError |
/stream/transactions | 500 NotSyncedUpError |
The error body carries the rule rather than leaving it to the documentation: current_sync_delay_seconds: 92992 against max_allowed_sync_delay_seconds: 720. Twelve minutes is the whole tolerance. Past it, a read fails rather than returning a value the Gateway can no longer vouch for.
A halted network is an error, not a stale number
A dApp reading balances through the public Gateway does not degrade gracefully to yesterday's figures when consensus stops – it degrades to HTTP 500. Frontends that only handle network failures and empty result sets will surface an unexplained crash. Read details.type and treat NotSyncedUpError as its own state, with current_sync_delay_seconds as the number to show the user.
Two exceptions are worth knowing. /status/gateway-status keeps answering because the Gateway’s last ingested state is its payload. Through the halt that was state version 557,840,622, stamped 21:19:06, five versions short of the ledger’s last commit – it is how you measure the outage, and it is what tells you the epoch has not moved. And /transaction/preview keeps answering with a complete receipt, because an Engine simulation runs against whatever state the node holds and needs no freshness guarantee. During a halt you can still dry-run a manifest against the exact ledger as it stood at the final committed round; you simply cannot build a real transaction against it, because the epoch that would go in the header is the one endpoint the Gateway will not serve.
Mainnet restarted on 11 September 2026. Read on 14 September, /status/gateway-status returned epoch 340,755 and /state/entity/details answered normally.
Core API
The Core API gives direct access to a node's view of the ledger – transaction-level detail, raw state, and streaming committed transactions. It includes an LTS (Long-Term Support) sub-API designed for exchange integrators.
LTS Endpoints
/lts/transaction/submit– submit a notarized transaction/lts/transaction/status– check transaction status by intent hash/lts/state/account-all-fungible-resource-balances– all token balances for an account/lts/transaction/construction– get current epoch for building transactions
The Core API requires running your own node, and in practice that is now close to the only option. Of the two providers the documentation lists, only NowNodes is still operating, serving the Core API at xrd.nownodes.io under paid plans with a month-long free trial. The other, Grove, stopped running the gateway that served Radix: it announced on 10 November 2025 that it was stepping away from operating the Grove Portal, migrated its public endpoint traffic to Pocket Network over that month, and has since wound down as a company, with all 195 repositories in its GitHub organisation archived. radix-mainnet.rpc.grove.city – the endpoint Radix's documentation still offers as immediate free access, capped at 5 million requests a day – no longer resolves in DNS, and neither does portal.grove.city. Pocket Network's public endpoints do not carry Radix, so following that step in the official docs reaches nothing at all.
Engine State and System APIs
Engine State API
Provides complete current state at the Radix Engine abstraction level. More comprehensive than Core API state queries but requires explicit node configuration (available since node v1.1.3.1). Useful for advanced state inspection without running a full Gateway.
System API
Node diagnostics only – health checks, connection info, performance metrics. Used for monitoring, not application development.
Which API Should I Use?
| Use Case | API |
|---|---|
| Frontend dApp reading account state | Gateway SDK |
| Submitting transactions from dApp | Gateway (via dApp Toolkit) |
| Exchange integration (deposits, withdrawals) | Core API (LTS endpoints) |
| Indexing / analytics pipeline | Core API (streaming) |
| Node health monitoring | System API |
Next Steps
- Gateway SDK: Reading Ledger State – the typed client most applications should use over raw HTTP
- Building on Radix – the wider index of tooling, SDKs, and community services
External Links
- Gateway API reference
- Core API reference
- Gateway API providers
- Core API providers
- API comparison (Learn Radix)
Note: the previous *.redoc.ly spec hosts have been retired; all API specifications now live on the consolidated Radix documentation site.
