API

Read-only JSON endpoints backing the explorer — the same data layer the UI uses. All GET routes are rate-limited to 30 requests/minute per client; /simulate to 10/minute. No API key required.

GET/api/contract/:id

Executable type, WASM hash, and instance storage for a contract.

example: /api/contract/CDPUJYCTPGPEGS6MBXYLEWTYSGCPVKUHCURLF2ORT3RAVL5TF5JKIAI5

GET/api/contract/:id/wasm

WASM bytecode size and a best-effort parsed ABI: function names, args and return types, any events the contract declares (name, topics, data fields), and its own type definitions (structs, unions, enums).

example: /api/contract/CDPUJYCTPGPEGS6MBXYLEWTYSGCPVKUHCURLF2ORT3RAVL5TF5JKIAI5/wasm

404s if the contract has no WASM (e.g. a Stellar Asset Contract).

GET/api/contract/:id/events

Events emitted by the contract.

params: limit (default 50)

example: /api/contract/CDPUJYCTPGPEGS6MBXYLEWTYSGCPVKUHCURLF2ORT3RAVL5TF5JKIAI5/events?limit=10

Full history since the indexer started, when one is configured (see indexer/). Otherwise bounded by the RPC node's retention window (~24h on public nodes).

GET/api/contract/:id/invocations

Invocation history for the contract.

params: limit (default 20)

example: /api/contract/CDPUJYCTPGPEGS6MBXYLEWTYSGCPVKUHCURLF2ORT3RAVL5TF5JKIAI5/invocations

Full history since the indexer started, when one is configured. Otherwise derived from recent events and bounded by the same RPC retention window — contracts that never emit events won't show up.

GET/api/contract/:id/storage/full

Every storage key observed for the contract, at its latest known value.

example: /api/contract/CDPUJYCTPGPEGS6MBXYLEWTYSGCPVKUHCURLF2ORT3RAVL5TF5JKIAI5/storage/full

Requires the indexer (returns 501 without one) — this is the one thing plain RPC access genuinely cannot do (no method exists to list a contract's storage keys). Forward-only: reflects activity since the indexer started, not full chain history.

GET/api/contract/:id/storage

Look up one persistent/temporary storage entry by key.

params: key (required), kind: symbol|string|u32|address (required), durability: persistent|temporary (default persistent)

example: /api/contract/:id/storage?key=Admin&kind=symbol&durability=persistent

Works against live chain state via RPC regardless of whether an indexer is configured — you have to already know the key. For enumeration without knowing keys in advance, see /storage/full.

POST/api/contract/:id/simulate

Simulate a function call against current ledger state (read-only preview).

body: { "functionName": "current_root", "args": [{ "value": "42", "type": "U32" }] }

example: /api/contract/CDPUJYCTPGPEGS6MBXYLEWTYSGCPVKUHCURLF2ORT3RAVL5TF5JKIAI5/simulate

No signing, no submission, no funds at risk. Rate-limited more tightly than the read routes (10/min).

GET/api/tx/:hash

Transaction detail plus decoded Soroban invocation (function/args) and resource usage, if any.

example: /api/tx/c4a99120ad6b2c66d4b705b76e334f60c2c99af3f70d8b03be02c9df7dfe2fa6

GET/api/ledger/:seq

Ledger detail by sequence number.

example: /api/ledger/4064026