v1.0.11 (January 2026)
Breaking Changes
This is a critical signing update. Existing signing implementations must be updated.
The transaction signing has been updated with the correct wincode serialization format:
Key Changes:
- Action types now use u32 enum discriminants (not length-prefixed strings)
- Order items (
order, cancel, cancelAll) use u32 discriminants
- Pubkeys and Hashes are serialized as raw 32 bytes (decoded from base58)
- Added support for
cloid (client order ID) as Option<Hash>
- Faucet user field is now raw 32-byte pubkey (not string)
Action Discriminants:
const ACTION_CODES = {
order: 0,
oracle: 1,
faucet: 2,
updateUserSettings: 3,
agentWalletCreation: 4,
};
Order Item Discriminants:
const ORDER_ITEM_CODES = {
order: 0,
cancel: 1,
cancelAll: 2,
};
See Transaction Signing for the complete implementation with binary layout reference.
v1.0.10 (January 2026)
Breaking Changes
These changes require updates to your integration.
Nonce Requirement for Signed Transactions
All signed transactions now require a nonce field (u64) for replay protection.
Before:
{
"action": {
"type": "order",
"orders": [...]
},
"account": "...",
"signer": "...",
"signature": "..."
}
After:
{
"action": {
"type": "order",
"orders": [...],
"nonce": 1704067200000000000
},
"account": "...",
"signer": "...",
"signature": "..."
}
Recommendation: Use nanosecond timestamps: BigInt(Date.now()) * 1_000_000n
Affected endpoints:
POST /order - Place/cancel orders
POST /agent-wallet - Manage agent wallets
POST /user-settings - Update user settings
POST /private/faucet - Request testnet funds
New Features
Subscription confirmations now return topic strings instead of numeric IDs.
New Format:
{
"type": "subscriptionResponse",
"topics": ["ticker.BTC-USD", "trades.BTC-USD"]
}
WebSocket: Unsubscription via Topic String
{
"method": "unsubscribe",
"topic": "ticker.BTC-USD"
}
WebSocket: Batched Account Subscriptions
Subscribe to multiple accounts in a single request:
{
"method": "subscribe",
"subscription": [{
"type": "account",
"user": ["pubkey1", "pubkey2", "pubkey3"]
}]
}
WebSocket: Unified orderUpdate Message
All order state changes now use a single orderUpdate message type with comprehensive state information.
{
"type": "account",
"data": {
"type": "orderUpdate",
"status": "filled",
"symbol": "BTC-USD",
"orderId": "...",
"price": 100000.0,
"originalSize": 0.1,
"size": 0.0,
"filledSize": 0.1,
"vwap": 100025.5,
"isBuy": true,
"maker": false,
"timestamp": 1763316177219383423,
"reason": null
},
"topic": "account.pubkey"
}
Account Query: New Query Types
Three new query types added to POST /account:
positions - Closed position history (last 5000)
fundingHistory - Funding payment history (last 5000)
orderHistory - Terminal order history (last 5000)
{"type": "positions", "user": "..."}
{"type": "fundingHistory", "user": "..."}
{"type": "orderHistory", "user": "..."}
WebSocket: Frontend Context Stream
New stream for aggregated market data across all symbols:
{
"method": "subscribe",
"subscription": [{"type": "frontendContext"}]
}
Returns summary data for all markets every 2 seconds.
WebSocket: Risk Metrics Stream
Subscribe to coin-based risk metrics:
{
"method": "subscribe",
"subscription": [{
"type": "risk",
"symbol": "BTC-USD"
}]
}
Improvements
Expanded Order Status Types
Added granular status types for better order tracking:
| Status | Description |
|---|
placed | Order placed and resting on book |
working | Partial fills, still resting |
filled | Fully filled |
partiallyFilled | Partially filled and terminal |
cancelled | Cancelled by user |
cancelledRiskLimit | Cancelled - risk limit exceeded |
cancelledSelfCrossing | Cancelled - self-trade prevention |
cancelledReduceOnly | Cancelled - would increase position |
cancelledIOC | IOC expired without full fill |
rejectedCrossing | Post-only rejected for crossing |
rejectedDuplicate | Duplicate order ID |
rejectedRiskLimit | Rejected - risk limit on submission |
rejectedInvalid | Invalid order parameters |
L2 Delta Stream Behavior
L2 Delta provides an initial snapshot (latest cached book state) on subscription, followed by real-time delta updates for every price level change.
Enhanced Account Snapshot
Account snapshot now includes additional fields:
originalSize - Original order size
vwap - Volume-weighted average fill price
maker - Maker/taker indicator
reduceOnly - Reduce-only flag
tif - Time in force
Migration Guide
1. Add Nonce to Signed Transactions
const nonce = BigInt(Date.now()) * 1_000_000n;
const action = {
type: "order",
orders: [...],
nonce: nonce // Required
};
Update your bincode serialization to include nonce.
2. Update WebSocket Subscription Handling
// Old way (deprecated)
ws.on('message', (data) => {
const msg = JSON.parse(data);
if (msg.channel === 'subscriptionResponse') {
// Handle numeric IDs
}
});
// New way
ws.on('message', (data) => {
const msg = JSON.parse(data);
if (msg.type === 'subscriptionResponse') {
console.log('Subscribed to:', msg.topics);
}
});
3. Handle New Order Status Types
switch(orderUpdate.status) {
case 'placed':
case 'working':
// Non-terminal - order is active
break;
case 'filled':
case 'partiallyFilled':
case 'cancelled':
case 'cancelledRiskLimit':
case 'cancelledSelfCrossing':
case 'cancelledReduceOnly':
case 'cancelledIOC':
case 'rejectedCrossing':
case 'rejectedDuplicate':
case 'rejectedRiskLimit':
case 'rejectedInvalid':
// Terminal - order is complete
break;
}
Previous Versions
v1.0.0
- Initial public API release
- HTTP REST API
- WebSocket streaming
- Ed25519 transaction signing