REST
Every public REST read and write — network, markets, accounts, orders, agents, bridge and records — with examples in Python, TypeScript and cURL.
The base address is https://rpc.vordium.com. Examples use the testnet.
| Route | Answers |
|---|
GET /status | chain id, chain head, genesis, sync state, whether trading and deposits are open, oracle and reserve health |
GET /truth/v1 | facts several validators agree on (ok: false with a reason when they cannot) |
GET /network-spec.json | the whole network description |
GET /releases.json | the signed list of node releases |
import requests
s = requests.get("https://testnet.vordex.xyz/chain/status", timeout=10).json()
print("chain", s["chain_id"], "head", s["chain_head"], "genesis", s["genesis_sha256"][:16], "trading open:", s["trading_open"])
| Route | Answers |
|---|
GET /api/pairs/perps | the perpetual markets |
GET /markets/specs | every market's rules: step sizes, maintenance margin, liquidation fee, price band, order limits |
GET /oracle/{pair} | oracle, mark and index prices of one market, as integers with 6 decimals |
GET /oracle/prices | oracle and mark prices of every market, as decimal numbers |
GET /orderbook/{pair} | the book: bids and asks |
GET /funding/{pair} | the last funding rate, the next settlement and open interest |
GET /trades/{pair} | recent trades, with which kind of key signed each side |
GET /stats/volume, GET /stats/oi | volume and open interest |
import requests
API = "https://testnet.vordex.xyz/chain"
mark = requests.get(f"{API}/oracle/1", timeout=10).json()["mark_price"] / 1e6
book = requests.get(f"{API}/orderbook/1", timeout=10).json()
bids, asks = book.get("bids") or [], book.get("asks") or []
print(f"ETH mark {mark:.2f} · best bid {bids[0] if bids else '—'} · best ask {asks[0] if asks else '—'}")
| Route | Answers |
|---|
GET /account/equity/{address} | USDC: total, free_balance (what a new order can use), held in positions and orders |
GET /positions/{address} | open positions with their exact liquidation_price |
GET /orders/{address} | open orders: id, side, type, price, filled_18dec, remaining_18dec |
GET /orders/history/{address} | closed orders, with which key signed each (signed_with) |
GET /twaps/{address} | running TWAP orders |
GET /schedule-cancel/{address} | the dead-man switch time, if armed |
GET /markets/account/{address} | open orders against the cap, request allowance used, market-maker tier, rebates |
GET /session/get?owner= | the session the account holds |
GET /session/valid?owner=&session_key= | whether a session key is valid and confirmed |
All are signed POST requests (Signing).
| Route | Signed by | Body |
|---|
POST /order/place | account or session | owner, sessionKey, pairId, side ("buy"/"sell"), orderType ("Market"/"Limit"), size_18dec, price, leverageBps, reduceOnly, post_only, trigger_price_8dec, trigger_dir, clientNonce, signature |
POST /order/cancel | account or session | order_id, owner, session_key, signature |
POST /order/cancel-all | account or session | owner, pairId (0 = every market), nonce, signature |
POST /order/modify | account or session | a signed ModifyOrderV2 |
POST /order/batch-signed | account or session | a signed BatchOrders: places (any time in force), cancels |
POST /tpsl/set | account or session | a signed SetTpSl for an open position |
POST /twap/place, POST /twap/cancel | the account only | a signed PlaceTwap / CancelTwap |
POST /schedule-cancel | account or session | a signed ScheduleCancel |
POST /account/mmp | account or session | a signed SetMmp |
A full worked example — sign, send, read back, cancel — is the Python quickstart.
| Route | Signed by | Body |
|---|
POST /session/create | the account | owner, session_key, expires_at, nonce, signature (a signed SessionCreate) |
POST /session/revoke | the account | owner, session_key, nonce, signature (a signed SessionRevoke) |
| Route | Answers |
|---|
GET /agents/{account} | the account's agents |
GET /agents/{account}/{agent} | one agent: status, name, expiry, policy, market limits, lock, raise clock |
GET /events/agent/{agent} | what the agent did and what was refused, with the reason |
POST /submit | a signed agent operation (Agents) |
| Route | Answers |
|---|
GET /bridge/v4/vaults | the vault, its handler, whether deposits are open per chain, minimums, routes, fees |
GET /bridge/v4/deposits/{address} | the account's deposits and their status |
GET /bridge/v4/deposit/tx/{hash} | one deposit by its transaction on the source chain |
GET /bridge/v4/withdraw-nonce/{account} | the next withdrawal nonce |
POST /bridge/v4/withdraw | a signed WithdrawIntentV4 |
GET /bridge/v4/withdrawals/{account} | the account's withdrawals: pending or paid |
GET /bridge/v4/withdrawal/{account}/{nonce}/call | the exact vault call for a ready payout |
GET /reserves | the vault's balance against what Vordium owes |
| Route | Answers |
|---|
GET /events/account/{address} | the account's trading records |
GET /events/range?from=&to= | every record in a range of heights |
GET /events/coverage | which heights this node's records cover |
GET /block/{n}/events | the records of one block |
GET /batch/{n}, GET /batches | batches and the votes that agreed them |
See State and records for how to read records without mistaking a gap for nothing.
| Route | Answers |
|---|
GET /registry/set | the validator set: seated, others, rules, epoch, voting power |
GET /registry/entry/{address} | one validator |
Network facts last checked against the network 2026-10-22 13:00:37 UTC · mainnet spec v28 · testnet spec v8