Appearance
XRP Ledger
| Endpoint | https://rpc.au.ro/xrp |
| Protocol | rippled JSON-RPC over HTTPS (POST) |
| WebSocket | wss://rpc.au.ro/ws/xrp?apikey=<YOUR_API_KEY> (native XRPL WS API) |
| Network | mainnet |
| Batch | — (rippled has no batch) |
rippled's HTTP dialect wraps parameters in a one-element array: {"method":"...","params":[{...}]} — and returns errors insideresult (HTTP stays 200).
Supported methods
Live-verified: server_info, server_state, fee, ledger, ledger_current, account_info, tx, random, submit — the public rippled API. Admin methods are rejected by the node.
Quick test
bash
curl -X POST https://rpc.au.ro/xrp \
-H "apikey: $YOUR_API_KEY" -H 'Content-Type: application/json' \
-d '{"method":"server_info","params":[{}]}'
# {"result":{"info":{"build_version":"3.1.3","complete_ledgers":"104874056-104874578",...}}}SDK integration
xrpl.js's Client class is WebSocket-only — point it at the WS endpoint below. For plain request/response without a socket, the HTTP dialect works directly (it is the same JSON shapes xrpl.js uses):
js
async function xrpl(method, params = {}) {
const res = await fetch('https://rpc.au.ro/xrp', {
method: 'POST',
headers: { apikey: process.env.YOUR_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ method, params: [params] })
})
const { result } = await res.json()
if (result.error) throw new Error(`${result.error}: ${result.error_message ?? ''}`)
return result
}
const { info } = await xrpl('server_info')
console.log('validated ledgers:', info.complete_ledgers)
const fee = await xrpl('fee')
console.log('open ledger fee (drops):', fee.drops.open_ledger_fee)xrpl.js is still the right tool offline — Wallet, transaction autofill templates and encode/sign work without a connection; submit the signed blob via submit.
WebSocket (native transport)
WS is XRPL's primary transport — the full API including streaming subscriptions lives at wss://rpc.au.ro/ws/xrp (key in ?apikey= or the apikey header):
js
import { Client } from 'xrpl'
const client = new Client(`wss://rpc.au.ro/ws/xrp?apikey=${process.env.YOUR_API_KEY}`)
await client.connect()
await client.request({ command: 'subscribe', streams: ['ledger'] })
client.on('ledgerClosed', (l) => console.log('validated ledger', l.ledger_index))Raw frame form: {"id":1,"command":"subscribe","streams":["ledger"]} — the transactions stream and accounts: ["r..."] subscriptions work the same way. Reconnect guidance: WebSockets.
Recipes
Account balance
js
const r = await xrpl('account_info', {
account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',
ledger_index: 'validated'
})
console.log('XRP:', Number(r.account_data.Balance) / 1_000_000)
// unknown accounts throw actNotFound — an account funded below the
// 10 XRP reserve does not exist on-ledgerSubmit a signed transaction
js
const r = await xrpl('submit', { tx_blob: signedHex })
console.log(r.engine_result) // tesSUCCESS | tec*/tem* codesWatch validated ledgers
ledger_current (3 s cache) returns the in-progress index; poll ledger {ledger_index:"validated"} for closed ledgers (~4 s cadence).
Limitations
complete_ledgersshows the node's history window — queries below it returnlgrNotFound.