Stellar RPC — Soroban & Horizon API
Last updated:
Get API key Read the documentation
Network details
| Network | Stellar mainnet (Pubnet) |
|---|---|
| Chain ID | None — Stellar is not an EVM network; read the network passphrase from getNetwork |
| Currency | XLM |
| Soroban JSON-RPC | https://triport.io/rpc/stellar |
| Horizon REST | https://triport.io/rpc/stellar/horizon |
| Horizon SSE | https://triport.io/rpc/stellar/horizon/{ledgers|transactions}?cursor=now |
| Authentication | x-token: $TRIPORT_API_KEY, scope stellar:rpc |
| Transaction submission | Not part of the product |
What works today
| Capability | Status | Notes |
|---|---|---|
| Soroban RPC reads and simulation | Available | simulateTransaction is a read; sendTransaction is not part of the product. |
| Soroban ledgers, events and transactions | Available | getEvents takes a named params object; beyond_retention is an error, not empty history. |
| Horizon REST (read) | Limited | Horizon is served through one measured operator, best-effort, no dedicated SLA. POST /transactions is not part of the product. |
| Horizon SSE (ledgers, transactions) | Limited | Starts at cursor=now with Accept: text/event-stream; after a disconnect recover with REST reads, no arbitrary SSE replay. |
simulateTransaction is a read, not a send
It returns the simulated result, the footprint and the resource fee without touching the network — which is exactly what you want before assembling a real transaction, and exactly not what you want if you expected it to submit. Submission is not part of this product: there is no sendTransaction here and no POST /transactions on our Horizon. Sign and broadcast through your own endpoint.
History: a window, and an error at its edge
Soroban history covers about 120,960 ledgers; Horizon's measured retention is far longer, at 6,307,191 ledgers. The part worth designing around is the edge: a request past the Soroban window returns beyond_retention — an error, not an empty list. An empty list would let a client conclude "nothing happened"; an error tells it to reach for its own store instead. Handle it explicitly, and see getEvents.
Two shapes trip up first integrations: getEvents takes a named parameters object rather than a positional array, and getLedgers and getTransactions accept a limit of up to 200 per page.
Horizon and SSE, and what we do not claim
Both are published as limited: Horizon is served through one measured operator, best-effort, no dedicated SLA. POST /transactions is not part of the product. The SSE stream starts at cursor=now and delivers only new records, so there is no arbitrary replay — after a disconnect, close the gap with REST reads and resubscribe. HAL _links and _embedded fields pass through unchanged, and paging uses the usual cursor with a limit of up to 200. See the SSE reference and the Horizon REST reference.
Limits and plans
| Capability | Free trial (7 days) | Basic | Pro | Business | Enterprise |
|---|---|---|---|---|---|
| Soroban + Horizon reads | 15 | 20 | 100 | 250 | no per-category cap |
| Heavy reads (events, ledger history) | 15 | 20 | 100 | 250 | no per-category cap |
| Transaction submission | — | — | — | — | — |
The heavy budget equals the ordinary read budget on Stellar, so event and ledger history are not rationed separately — the binding constraint is the retention window, not the rate. Plans: Basic $20, Pro $249, Business $499, Enterprise from $999 per month; Free is a 7-day trial with a single key in the EU region. See Stellar rate limits and tiers.
Quickstart
# Soroban: latest ledger
curl https://triport.io/rpc/stellar \
-H 'x-token: $TRIPORT_API_KEY' -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestLedger"}'
# Soroban: events take a NAMED params object
curl https://triport.io/rpc/stellar \
-H 'x-token: $TRIPORT_API_KEY' -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getEvents","params":{"startLedger":1234567,"pagination":{"limit":200}}}'
# Horizon REST
curl 'https://triport.io/rpc/stellar/horizon/ledgers?limit=200' -H 'x-token: $TRIPORT_API_KEY'
# Horizon SSE (new records only)
curl -N 'https://triport.io/rpc/stellar/horizon/transactions?cursor=now' \
-H 'Accept: text/event-stream' -H 'x-token: $TRIPORT_API_KEY'FAQ
- What is the Stellar RPC URL?
- https://triport.io/rpc/stellar for Soroban JSON-RPC and https://triport.io/rpc/stellar/horizon for Horizon REST and SSE. Authenticate with the x-token header (Authorization: Bearer also works) and the stellar:rpc scope.
- What is Stellar's chain ID?
- Stellar has no EVM-style chain ID — it is not an EVM network. Clients identify the network by its passphrase, which you can read from the Soroban getNetwork method rather than hard-coding a number.
- Does simulateTransaction submit anything?
- No. simulateTransaction is a read: it returns the simulated result and footprint without sending. Submission is not part of the Triport Stellar product on either surface, so signing and broadcasting needs your own Horizon or Soroban endpoint.
- How far back does Soroban history go?
- About 120,960 ledgers. Asking for something older returns a beyond_retention error rather than an empty list — treat it as a signal to fall back to your own store, not as proof that nothing happened in that range.
- Why does getEvents reject my parameters?
- getEvents takes a named parameters object, not a positional array, and getLedgers and getTransactions accept a limit of up to 200 per page. A positional array is the most common cause of an invalid-params error here.
- Is Horizon on Triport production-grade?
- Horizon REST and SSE are served through a single measured operator, best-effort, without a dedicated SLA — that is why they are published as limited. POST /transactions is not part of the product.
- Can I replay the SSE stream after a disconnect?
- No. The stream starts at cursor=now with Accept: text/event-stream and delivers only new records, so there is no arbitrary replay. After a disconnect, close the gap with Horizon REST reads and then resubscribe.
- What are the Stellar rate limits?
- Reads 15/20/100/250 RPS on Free trial/Basic/Pro/Business, and the heavy budget is the same on each plan. Enterprise has no per-category cap. These are policy quotas, not measured upstream capacity.
Soroban RPC methods
- getEvents
- getFeeStats
- getHealth
- getLatestLedger
- getLedgerEntries
- getLedgers
- getNetwork
- getTransactions
- getVersionInfo
- simulateTransaction
Horizon routes are documented separately, with one page per endpoint — see the Horizon REST reference.