REST + WebSocket across all 300+ instruments — crypto, forex, indices, commodities, equities. Same matching engine, same execution as the web platform. HMAC-signed private channels, typed event catalogue, full OpenAPI spec.
Available on both account types — Multi-Asset Perpetuals Exchange accounts and Prop Trading Programme accounts. Keys are generated inside the trading platform and scoped per account.
Base URL https://engine.jtxmarkets.com. Public market-data endpoints need no auth; private endpoints take X-API-Key + X-API-Signature headers (HMAC-SHA384 over method+path+body+nonce).
| Method | Path | Summary |
|---|---|---|
| GET | /v1/market/:symbol/ticker | Best bid / ask, mark price, index price, funding rate, next-funding timestamp. |
| GET | /v1/market/:symbol/depth | Full order book — bid + ask price levels, configurable depth. |
| GET | /v1/market/:symbol/klines | Historical candles (1m / 5m / 15m / 1h / 4h / 1d) for charting. |
| POST | /v1/orders | Submit market, limit, stop, TP/SL, TWAP, OCO, or bracket order. |
| DELETE | /v1/orders | Cancel all open orders for a client (optionally narrowed to one symbol). |
| PATCH | /v1/orders/:symbol/:id | In-place modify (price or quantity) — preserves queue priority when reducing size. |
| GET | /v1/positions/:client_id | All open positions across every market for a client. |
| POST | /v1/positions/:client_id/close_all | Reduce-only market sweep to flatten every position. |
| GET | /v1/accounts/:id/detail | Full account snapshot — balance, available, equity, positions, open orders, recent fills. |
| GET | /v1/funding/:symbol | Live funding rate, premium index, settlement countdown. |
| GET | /v1/risk/halts | Currently halted markets and reason. |
This is a subset. openapi.json catalogues every endpoint with request / response schemas.
Single connection at wss://engine.jtxmarkets.com/ws. Subscribe to any combination of public + private channels; events arrive sequence-numbered so you can gap-detect and replay.
| Channel | Emits |
|---|---|
orderbook.{symbol} | Top-N book snapshots, sequence-numbered. |
trades.{symbol} | Public prints — price, size, side, timestamp. |
ticker.{symbol} | Bid / ask / mark / index ticks. |
funding.{symbol} | Funding rate updates and settlement ticks. |
market_status.{symbol} | Open / closed transitions. |
circuit_breaker.{symbol} | Halt activations. |
private.{client_id} | Order acks, fills, account updates, position updates, liquidations, funding payments, margin warnings — HMAC handshake required. |
Copy-paste ready.
# Submit a limit buy order
curl -X POST https://engine.jtxmarkets.com/v1/orders \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{
"client_id": "your-uuid",
"symbol": "BTC-PERP",
"side": "buy",
"order_type": "limit",
"price": "69500.00",
"quantity": "0.5",
"tif": "gtc",
"margin_mode": "cross",
"leverage": 10
}'// Subscribe to BTC-PERP order book + your private channel
const ws = new WebSocket('wss://engine.jtxmarkets.com/ws')
ws.onopen = () => {
ws.send(JSON.stringify({ action: 'subscribe', channel: 'orderbook.BTC-PERP' }))
ws.send(JSON.stringify({ action: 'subscribe', channel: 'private.' + clientId }))
}
ws.onmessage = (evt) => {
const msg = JSON.parse(evt.data)
if (msg.channel === 'orderbook.BTC-PERP') updateBook(msg.data)
if (msg.event === 'fill') handleFill(msg.data)
}# pip install jtxmarkets[ws]
from jtxmarkets import Client
c = Client.engine(base_url="https://engine.jtxmarkets.com", api_key="YOUR_KEY", api_secret="YOUR_SECRET")
# Market data (no auth)
print(c.get_ticker("BTC-PERP"))
# Submit an order
ack = c.submit_order(
client_id="your-uuid",
symbol="BTC-PERP",
side="buy",
order_type="limit",
price="69500.00",
quantity="0.5",
tif="gtc",
)
print(ack["order_id"])Sensible defaults; contact us if your strategy needs more.
| Data centre | AWS ap-northeast-1 (Tokyo) — lowest RTT from APAC clients |
| Private endpoints (per key) | 100 requests / second |
| Market-data endpoints (per IP) | 1,000 requests / second |
| WebSocket connections (per key) | 4 concurrent |
| WebSocket subscriptions (per connection) | 64 |
| Auth method (REST private) | HMAC-SHA384 signature header, timestamp-bound (30s window) |
| Auth method (WebSocket private) | Ticket handshake — fetch from /api/auth/ws-ticket, send as first frame |
| Key permissions | Read · Trade · Withdraw (scoped independently — never grant Withdraw unless required) |
| IP allowlist | Optional per-key CIDR list — recommended for production keys |
Log in, generate a key on the API page inside your account, and hit the endpoints. The OpenAPI spec loads into Postman, Insomnia and Swagger UI unchanged.