---
title: "2. Radix APIs"
url: "https://radix-wiki.miow.me/developers/infrastructure/02-radix-apis"
updated: 2026-10-03
description: "Radix exposes four APIs at different abstraction levels. Most developers only need the Gateway API."
---

# 2. Radix APIs

|  |  |
| --- | --- |
| Gateway Spec | [Gateway API Reference](https://docs.radixdlt.com/api-reference/gateway-api-specs.html) |
| Core Spec | [Core API Reference](https://docs.radixdlt.com/api-reference/core-api-specs.html) |

# 2. Radix APIs

## API Overview

Radix exposes four APIs at different abstraction levels. Most developers only need the **[Gateway API](https://docs.radixdlt.com/docs/network-gateway)**.

| 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](https://docs.radixdlt.com/docs/network-gateway)

The [Gateway API](https://docs.radixdlt.com/api-reference/gateway-api-specs.html) 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](/contents/tech/releases/stokenet) | `https://stokenet.radixdlt.com` |

These are rate-limited by IP. For production dApps, use a third-party provider or [run your own Gateway](/developers/infrastructure/01-running-a-node).

### Key Endpoint Groups

- `/state/*` – entity details, [resource](/contents/tech/core-concepts/resources) balances, metadata, [vault](/contents/tech/core-concepts/buckets-proofs-and-vaults) 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](/developers/frontend/02-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](/contents/history/hyperlane-asset-drain-2026): 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](/contents/tech/core-protocols/radix-engine) simulation runs against whatever state the node holds and needs no freshness guarantee. During a halt you can still dry-run a [manifest](/contents/tech/core-protocols/transaction-manifests) 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](/developers/infrastructure/01-running-a-node#sweep418-how-the-halt-ended). Read on 14 September, `/status/gateway-status` returned epoch 340,755 and `/state/entity/details` answered normally.

## [Core API](https://docs.radixdlt.com/docs/network-apis)

The [Core API](https://docs.radixdlt.com/api-reference/core-api-specs.html) 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](https://docs.radixdlt.com/docs/core-api-providers) 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](https://nownodes.io) 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](https://medium.com/decentralized-infrastructure/groves-next-chapter-moving-up-the-stack-fd7ecaf0a184) that it was stepping away from operating the Grove Portal, migrated its public endpoint traffic to [Pocket Network](https://pocket.network) over that month, and has since [wound down as a company](https://www.grove.city), with all 195 repositories in its [GitHub organisation](https://github.com/buildwithgrove) 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](/contents/tech/core-protocols/radix-engine) abstraction level. More comprehensive than [Core API](https://docs.radixdlt.com/docs/network-apis) 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](/developers/frontend/02-gateway-sdk) |
| Submitting transactions from dApp | Gateway (via [dApp Toolkit](/developers/frontend/01-radix-dapp-toolkit)) |
| Exchange integration (deposits, withdrawals) | [Core API](https://docs.radixdlt.com/docs/network-apis) (LTS endpoints) |
| Indexing / analytics pipeline | [Core API](https://docs.radixdlt.com/docs/core-api-providers) (streaming) |
| Node health monitoring | System API |

## Next Steps

- [Gateway SDK: Reading Ledger State](/developers/frontend/02-gateway-sdk) – the typed client most applications should use over raw HTTP
- [Building on Radix](/developers) – the wider index of tooling, SDKs, and community services

## External Links

- [Gateway API reference](https://docs.radixdlt.com/api-reference/gateway-api-specs.html)
- [Core API reference](https://docs.radixdlt.com/api-reference/core-api-specs.html)
- [Gateway API providers](/contents/tech/core-protocols/radix-gateway-api)
- [Core API providers](/contents/tech/core-protocols/radix-core-api)
- [API comparison (Learn Radix)](https://learn.radixdlt.com/article/what-apis-are-relevant-to-the-radix-public-network)

Note: the previous `*.redoc.ly` spec hosts have been retired; all API specifications now live on the consolidated [Radix documentation site](https://docs.radixdlt.com/docs/network-apis).
