Releases: Monaco-Research/monaco-sdk
@0xmonaco/types@0.7.0
Minor Changes
-
5b23770: ### Add perp v1 to the SDK
Adds first-class perp support across the SDK: margin accounts, isolated positions, perp market metadata, perp-aware order placement, and a
conditional_order_updatewebsocket event. Also adds ausePositionsReact hook and extendsuseMarket/useTradewith perp helpers.sdk.marginAccounts— margin account management// Create an isolated-margin account (USDC is the default collateral) const { margin_account_id } = await sdk.marginAccounts.createMarginAccount({ label: "perp-main", collateralAsset: "USDC", }); // List accounts and inspect equity / margin usage const { accounts } = await sdk.marginAccounts.listMarginAccounts({ page: 1, page_size: 20, }); const summary = await sdk.marginAccounts.getMarginAccountSummary( margin_account_id ); // summary.equity, summary.free_collateral, summary.maintenance_margin_required, ... // How much of a given asset is sitting in the wallet vs. transferable to margin const collateral = await sdk.marginAccounts.getAvailableCollateral({ asset: "USDC", }); // Move collateral in / out of a margin account await sdk.marginAccounts.transferCollateralToMarginAccount( margin_account_id, { asset: "USDC", amount: "1000", } ); await sdk.marginAccounts.transferCollateralFromMarginAccount( margin_account_id, { asset: "USDC", amount: "250", } ); // Audit trail of deposits, withdrawals, PnL, funding, fees, etc. const { movements } = await sdk.marginAccounts.getMarginAccountMovements( margin_account_id, { page: 1, page_size: 50, } ); // Pre-flight check: would this order be accepted and what does it do to the account? const risk = await sdk.marginAccounts.simulateOrderRisk(margin_account_id, { tradingPairId, side: "BUY", positionSide: "LONG", orderType: "LIMIT", price: "2000", quantity: "1.5", leverage: "10", reduceOnly: false, }); // risk.accepted, risk.estimated_liquidation_price, risk.free_collateral_after, ...
sdk.positions— position management// List open / closed positions, optionally filtered const { positions } = await sdk.positions.listPositions({ margin_account_id, status: "OPEN", }); const position = await sdk.positions.getPosition(positionId); // position.side, position.size, position.entry_price, position.mark_price, // position.unrealized_pnl, position.liquidation_price, position.leverage, ... // Live risk snapshot (mark, liquidation price, margin ratio) const risk = await sdk.positions.getPositionRisk(positionId); // Close: full market close, partial close, or limit close await sdk.positions.closePosition(positionId, { closeType: "MARKET" }); await sdk.positions.closePosition(positionId, { closeType: "LIMIT", limitPrice: "2050.00", quantity: "0.5", }); // Adjust isolated margin on an existing position await sdk.positions.addPositionMargin(positionId, { amount: "200", asset: "USDC", }); await sdk.positions.reducePositionMargin(positionId, { amount: "100" }); // Attach take-profit and/or stop-loss conditional orders to a position await sdk.positions.attachPositionTpSl(positionId, { takeProfit: { triggerPrice: "2200", orderType: "MARKET" }, stopLoss: { triggerPrice: "1900", orderType: "LIMIT", limitPrice: "1895" }, }); // Position lifecycle events (opens, fills, funding, liquidations, closes) const { events } = await sdk.positions.listPositionHistory({ position_id: positionId, });
sdk.market— perp market metadata// Perp market config: tick/lot size, max leverage, margin tiers, etc. const config = await sdk.market.getPerpMarketConfig(tradingPairId); // Summary stats: mark, index, funding, open interest, 24h volume const summary = await sdk.market.getPerpMarketSummary(tradingPairId); // Individual metrics const mark = await sdk.market.getMarkPrice(tradingPairId); const index = await sdk.market.getIndexPrice(tradingPairId); const funding = await sdk.market.getFundingState(tradingPairId); const oi = await sdk.market.getOpenInterest(tradingPairId); // Historical funding payments const { records } = await sdk.market.listFundingHistory(tradingPairId, { page: 1, page_size: 100, });
sdk.trading— perp-aware order placementplaceLimitOrderandplaceMarketOrdernow accept perp options (marginAccountId,positionSide,leverage,reduceOnly):// Open a 10x long on a perp pair await sdk.trading.placeLimitOrder(tradingPairId, "BUY", "1.5", "2000", { marginAccountId, positionSide: "LONG", leverage: "10", }); // Reduce-only market close of a short await sdk.trading.placeMarketOrder(tradingPairId, "BUY", "0.5", { marginAccountId, positionSide: "SHORT", reduceOnly: true, });
WebSocket —
conditional_order_updateeventConditional-order lifecycle updates (TP/SL created, triggered, cancelled, failed) now stream over the existing websocket:
// Subscribe to all conditional-order events for the authenticated user, // or scope to a single trading pair by passing its UUID. const unsubscribe = sdk.ws.conditionalOrders((evt) => { // evt.data.conditionalOrderId, evt.data.state, evt.data.reason, // evt.data.triggeredOrderId, evt.data.triggerPrice, ... }); // Later: unsubscribe();
@0xmonaco/react—usePositionshookimport { usePositions } from "@0xmonaco/react"; function PositionsPanel({ marginAccountId }: { marginAccountId: string }) { const { listPositions, getPosition, getPositionRisk, closePosition, addPositionMargin, reducePositionMargin, attachPositionTpSl, listPositionHistory, } = usePositions(); // e.g. const load = async () => { const { positions } = await listPositions({ margin_account_id: marginAccountId, status: "OPEN", }); return positions; }; }
useMarketgainsgetPerpMarketConfig,getPerpMarketSummary,getMarkPrice,getIndexPrice,getFundingState,listFundingHistory, andgetOpenInterest.useTrade'splaceLimitOrder/placeMarketOrderaccept the same perp options shown above. -
f803401: Flatten data wrapper pattern in trades and market response types to match monaco-core#653
Breaking changes:
GetTradingPairsResponse.data(PaginatedTradingPairs) →GetTradingPairsResponse.trading_pairswith pagination fields directly on responseGetTradingPairResponse.data→GetTradingPairResponse.trading_pair- Removed
PaginatedTradingPairsinterface (fields now directly onGetTradingPairsResponse) - Raw trades response
data.trades→trades(internal, flattened) - React
useMarket().getPaginatedTradingPairs()now returnsGetTradingPairsResponseinstead ofPaginatedTradingPairs
Migration:
// Before const response = await sdk.market.getPaginatedTradingPairs(); const pairs = response.data.data; // TradingPair[] // After const response = await sdk.market.getPaginatedTradingPairs(); const pairs = response.trading_pairs; // TradingPair[]
-
f803401: Remove redundant success booleans from API response types to match monaco-core#646
Breaking changes:
- Removed
successfield fromBatchCancelOrdersResponse - Removed
successfield fromBatchCancelResult - Removed
successfield fromBatchCreateOrdersResponse - Removed
successfield fromBatchCreateResult - Removed
successfield fromBatchReplaceOrdersResponse - Removed
successfield fromBatchReplaceResult - Removed
successfield fromGetTradingPairsResponse - Removed
successfield fromGetTradingPairResponse - Removed
successfield fromGetCandlestickResponse - Removed
successfield from raw trades response
HTTP status codes / gRPC status already convey success/failure, making these fields redundant.
For batch operations, usetotal_failed === 0or check individual resulterrorfields instead. - Removed
-
f803401: Standardize trading pair field naming to match monaco-core#643
Breaking changes:
Order.trading_pair→Order.trading_pair_id(UUID field)GetPaginatedOrdersParams.trading_pair→GetPaginatedOrdersParams.trading_pair_idProfileOrder.trading_pair→ProfileOrder.symbol(symbol string like "ETH-USD")CommonOrderEventData.tradingPair→CommonOrderEventData.symbol(WS event symbol field)BackendCommonOrderEventData.trading_pair→BackendCommonOrderEventData.symbol
Internal changes (no public API impact):
- Raw orderbook response field
pair→symbol - Raw trade event field
pair_id→trading_pair_id - WebSocket orderbook/OHLCV events read
symbolinstead ofpair - WebSocket trade events read
trading_pair_idinstead ofpair_id - Query parameter
trading_pair→trading_pair_idfor paginated orders endpoint
Patch Changes
-
f803401: ### Standardize pagination to
page/page_sizeacross all endpointsBREAKING CHANGES:
@0xmonaco/types- Renamed
limit→page_sizeinGetTradingPairsParams,GetUserMovementsParams,GetUserTradesParams, and their corresponding response types (PaginatedTradingPairs,GetPaginatedUserMovementsResponse, `...
- Renamed
@0xmonaco/react@0.7.0
Minor Changes
-
5b23770: ### Add perp v1 to the SDK
Adds first-class perp support across the SDK: margin accounts, isolated positions, perp market metadata, perp-aware order placement, and a
conditional_order_updatewebsocket event. Also adds ausePositionsReact hook and extendsuseMarket/useTradewith perp helpers.sdk.marginAccounts— margin account management// Create an isolated-margin account (USDC is the default collateral) const { margin_account_id } = await sdk.marginAccounts.createMarginAccount({ label: "perp-main", collateralAsset: "USDC", }); // List accounts and inspect equity / margin usage const { accounts } = await sdk.marginAccounts.listMarginAccounts({ page: 1, page_size: 20, }); const summary = await sdk.marginAccounts.getMarginAccountSummary( margin_account_id ); // summary.equity, summary.free_collateral, summary.maintenance_margin_required, ... // How much of a given asset is sitting in the wallet vs. transferable to margin const collateral = await sdk.marginAccounts.getAvailableCollateral({ asset: "USDC", }); // Move collateral in / out of a margin account await sdk.marginAccounts.transferCollateralToMarginAccount( margin_account_id, { asset: "USDC", amount: "1000", } ); await sdk.marginAccounts.transferCollateralFromMarginAccount( margin_account_id, { asset: "USDC", amount: "250", } ); // Audit trail of deposits, withdrawals, PnL, funding, fees, etc. const { movements } = await sdk.marginAccounts.getMarginAccountMovements( margin_account_id, { page: 1, page_size: 50, } ); // Pre-flight check: would this order be accepted and what does it do to the account? const risk = await sdk.marginAccounts.simulateOrderRisk(margin_account_id, { tradingPairId, side: "BUY", positionSide: "LONG", orderType: "LIMIT", price: "2000", quantity: "1.5", leverage: "10", reduceOnly: false, }); // risk.accepted, risk.estimated_liquidation_price, risk.free_collateral_after, ...
sdk.positions— position management// List open / closed positions, optionally filtered const { positions } = await sdk.positions.listPositions({ margin_account_id, status: "OPEN", }); const position = await sdk.positions.getPosition(positionId); // position.side, position.size, position.entry_price, position.mark_price, // position.unrealized_pnl, position.liquidation_price, position.leverage, ... // Live risk snapshot (mark, liquidation price, margin ratio) const risk = await sdk.positions.getPositionRisk(positionId); // Close: full market close, partial close, or limit close await sdk.positions.closePosition(positionId, { closeType: "MARKET" }); await sdk.positions.closePosition(positionId, { closeType: "LIMIT", limitPrice: "2050.00", quantity: "0.5", }); // Adjust isolated margin on an existing position await sdk.positions.addPositionMargin(positionId, { amount: "200", asset: "USDC", }); await sdk.positions.reducePositionMargin(positionId, { amount: "100" }); // Attach take-profit and/or stop-loss conditional orders to a position await sdk.positions.attachPositionTpSl(positionId, { takeProfit: { triggerPrice: "2200", orderType: "MARKET" }, stopLoss: { triggerPrice: "1900", orderType: "LIMIT", limitPrice: "1895" }, }); // Position lifecycle events (opens, fills, funding, liquidations, closes) const { events } = await sdk.positions.listPositionHistory({ position_id: positionId, });
sdk.market— perp market metadata// Perp market config: tick/lot size, max leverage, margin tiers, etc. const config = await sdk.market.getPerpMarketConfig(tradingPairId); // Summary stats: mark, index, funding, open interest, 24h volume const summary = await sdk.market.getPerpMarketSummary(tradingPairId); // Individual metrics const mark = await sdk.market.getMarkPrice(tradingPairId); const index = await sdk.market.getIndexPrice(tradingPairId); const funding = await sdk.market.getFundingState(tradingPairId); const oi = await sdk.market.getOpenInterest(tradingPairId); // Historical funding payments const { records } = await sdk.market.listFundingHistory(tradingPairId, { page: 1, page_size: 100, });
sdk.trading— perp-aware order placementplaceLimitOrderandplaceMarketOrdernow accept perp options (marginAccountId,positionSide,leverage,reduceOnly):// Open a 10x long on a perp pair await sdk.trading.placeLimitOrder(tradingPairId, "BUY", "1.5", "2000", { marginAccountId, positionSide: "LONG", leverage: "10", }); // Reduce-only market close of a short await sdk.trading.placeMarketOrder(tradingPairId, "BUY", "0.5", { marginAccountId, positionSide: "SHORT", reduceOnly: true, });
WebSocket —
conditional_order_updateeventConditional-order lifecycle updates (TP/SL created, triggered, cancelled, failed) now stream over the existing websocket:
// Subscribe to all conditional-order events for the authenticated user, // or scope to a single trading pair by passing its UUID. const unsubscribe = sdk.ws.conditionalOrders((evt) => { // evt.data.conditionalOrderId, evt.data.state, evt.data.reason, // evt.data.triggeredOrderId, evt.data.triggerPrice, ... }); // Later: unsubscribe();
@0xmonaco/react—usePositionshookimport { usePositions } from "@0xmonaco/react"; function PositionsPanel({ marginAccountId }: { marginAccountId: string }) { const { listPositions, getPosition, getPositionRisk, closePosition, addPositionMargin, reducePositionMargin, attachPositionTpSl, listPositionHistory, } = usePositions(); // e.g. const load = async () => { const { positions } = await listPositions({ margin_account_id: marginAccountId, status: "OPEN", }); return positions; }; }
useMarketgainsgetPerpMarketConfig,getPerpMarketSummary,getMarkPrice,getIndexPrice,getFundingState,listFundingHistory, andgetOpenInterest.useTrade'splaceLimitOrder/placeMarketOrderaccept the same perp options shown above. -
f803401: Flatten data wrapper pattern in trades and market response types to match monaco-core#653
Breaking changes:
GetTradingPairsResponse.data(PaginatedTradingPairs) →GetTradingPairsResponse.trading_pairswith pagination fields directly on responseGetTradingPairResponse.data→GetTradingPairResponse.trading_pair- Removed
PaginatedTradingPairsinterface (fields now directly onGetTradingPairsResponse) - Raw trades response
data.trades→trades(internal, flattened) - React
useMarket().getPaginatedTradingPairs()now returnsGetTradingPairsResponseinstead ofPaginatedTradingPairs
Migration:
// Before const response = await sdk.market.getPaginatedTradingPairs(); const pairs = response.data.data; // TradingPair[] // After const response = await sdk.market.getPaginatedTradingPairs(); const pairs = response.trading_pairs; // TradingPair[]
-
f803401: Remove redundant success booleans from API response types to match monaco-core#646
Breaking changes:
- Removed
successfield fromBatchCancelOrdersResponse - Removed
successfield fromBatchCancelResult - Removed
successfield fromBatchCreateOrdersResponse - Removed
successfield fromBatchCreateResult - Removed
successfield fromBatchReplaceOrdersResponse - Removed
successfield fromBatchReplaceResult - Removed
successfield fromGetTradingPairsResponse - Removed
successfield fromGetTradingPairResponse - Removed
successfield fromGetCandlestickResponse - Removed
successfield from raw trades response
HTTP status codes / gRPC status already convey success/failure, making these fields redundant.
For batch operations, usetotal_failed === 0or check individual resulterrorfields instead. - Removed
-
f803401: Standardize trading pair field naming to match monaco-core#643
Breaking changes:
Order.trading_pair→Order.trading_pair_id(UUID field)GetPaginatedOrdersParams.trading_pair→GetPaginatedOrdersParams.trading_pair_idProfileOrder.trading_pair→ProfileOrder.symbol(symbol string like "ETH-USD")CommonOrderEventData.tradingPair→CommonOrderEventData.symbol(WS event symbol field)BackendCommonOrderEventData.trading_pair→BackendCommonOrderEventData.symbol
Internal changes (no public API impact):
- Raw orderbook response field
pair→symbol - Raw trade event field
pair_id→trading_pair_id - WebSocket orderbook/OHLCV events read
symbolinstead ofpair - WebSocket trade events read
trading_pair_idinstead ofpair_id - Query parameter
trading_pair→trading_pair_idfor paginated orders endpoint
Patch Changes
-
f803401: ### Standardize pagination to
page/page_sizeacross all endpointsBREAKING CHANGES:
@0xmonaco/types- Renamed
limit→page_sizeinGetTradingPairsParams,GetUserMovementsParams,GetUserTradesParams, and their corresponding response types (PaginatedTradingPairs,GetPaginatedUserMovementsResponse, `...
- Renamed
@0xmonaco/mcp-server@0.7.0
Minor Changes
-
f803401: Standardize trading pair field naming to match monaco-core#643
Breaking changes:
Order.trading_pair→Order.trading_pair_id(UUID field)GetPaginatedOrdersParams.trading_pair→GetPaginatedOrdersParams.trading_pair_idProfileOrder.trading_pair→ProfileOrder.symbol(symbol string like "ETH-USD")CommonOrderEventData.tradingPair→CommonOrderEventData.symbol(WS event symbol field)BackendCommonOrderEventData.trading_pair→BackendCommonOrderEventData.symbol
Internal changes (no public API impact):
- Raw orderbook response field
pair→symbol - Raw trade event field
pair_id→trading_pair_id - WebSocket orderbook/OHLCV events read
symbolinstead ofpair - WebSocket trade events read
trading_pair_idinstead ofpair_id - Query parameter
trading_pair→trading_pair_idfor paginated orders endpoint
Patch Changes
-
f803401: ### Standardize pagination to
page/page_sizeacross all endpointsBREAKING CHANGES:
@0xmonaco/types- Renamed
limit→page_sizeinGetTradingPairsParams,GetUserMovementsParams,GetUserTradesParams, and their corresponding response types (PaginatedTradingPairs,GetPaginatedUserMovementsResponse,GetUserTradesResponse) - Replaced
limit/offsetwithpage/page_sizeinGetUserBalancesParamsandGetUserBalancesResponse - Renamed
total_count→totalinGetPaginatedUserMovementsResponse,GetUserBalancesResponse, andGetUserTradesResponse - Added
total_pagestoGetUserBalancesResponsefor consistency with other paginated responses - Replaced
skip/limitwithpage/page_sizeinMonacoSDK.trades.getTradesoptions - Renamed
limit/offset→page_size/pageinSearchTradingPairsSchemavalidation - Renamed
limit→page_sizeinGetUserMovementsSchemaandGetUserTradesSchemavalidation
@0xmonaco/core- Updated
MarketAPIImpl,ProfileAPIImpl, andTradesAPIImplto sendpage/page_sizequery parameters instead oflimit/offset/skip
@0xmonaco/react- Updated
useProfile,useTradeFeed, anduseUserMovementshooks to usepage_sizeinstead oflimit
@0xmonaco/mcp-serverget-tradesMCP tool parameters changed fromskip/limittopage/page_size- Refactored SDK singleton with dependency injection (
createSDKInstance,resetSDK) for testability
- Renamed
-
Updated dependencies [5b23770]
-
Updated dependencies [1fd5d17]
-
Updated dependencies [f803401]
-
Updated dependencies [f803401]
-
Updated dependencies [f803401]
-
Updated dependencies [f803401]
- @0xmonaco/types@0.7.0
- @0xmonaco/core@0.7.0
@0xmonaco/core@0.7.0
Minor Changes
-
5b23770: ### Add perp v1 to the SDK
Adds first-class perp support across the SDK: margin accounts, isolated positions, perp market metadata, perp-aware order placement, and a
conditional_order_updatewebsocket event. Also adds ausePositionsReact hook and extendsuseMarket/useTradewith perp helpers.sdk.marginAccounts— margin account management// Create an isolated-margin account (USDC is the default collateral) const { margin_account_id } = await sdk.marginAccounts.createMarginAccount({ label: "perp-main", collateralAsset: "USDC", }); // List accounts and inspect equity / margin usage const { accounts } = await sdk.marginAccounts.listMarginAccounts({ page: 1, page_size: 20, }); const summary = await sdk.marginAccounts.getMarginAccountSummary( margin_account_id ); // summary.equity, summary.free_collateral, summary.maintenance_margin_required, ... // How much of a given asset is sitting in the wallet vs. transferable to margin const collateral = await sdk.marginAccounts.getAvailableCollateral({ asset: "USDC", }); // Move collateral in / out of a margin account await sdk.marginAccounts.transferCollateralToMarginAccount( margin_account_id, { asset: "USDC", amount: "1000", } ); await sdk.marginAccounts.transferCollateralFromMarginAccount( margin_account_id, { asset: "USDC", amount: "250", } ); // Audit trail of deposits, withdrawals, PnL, funding, fees, etc. const { movements } = await sdk.marginAccounts.getMarginAccountMovements( margin_account_id, { page: 1, page_size: 50, } ); // Pre-flight check: would this order be accepted and what does it do to the account? const risk = await sdk.marginAccounts.simulateOrderRisk(margin_account_id, { tradingPairId, side: "BUY", positionSide: "LONG", orderType: "LIMIT", price: "2000", quantity: "1.5", leverage: "10", reduceOnly: false, }); // risk.accepted, risk.estimated_liquidation_price, risk.free_collateral_after, ...
sdk.positions— position management// List open / closed positions, optionally filtered const { positions } = await sdk.positions.listPositions({ margin_account_id, status: "OPEN", }); const position = await sdk.positions.getPosition(positionId); // position.side, position.size, position.entry_price, position.mark_price, // position.unrealized_pnl, position.liquidation_price, position.leverage, ... // Live risk snapshot (mark, liquidation price, margin ratio) const risk = await sdk.positions.getPositionRisk(positionId); // Close: full market close, partial close, or limit close await sdk.positions.closePosition(positionId, { closeType: "MARKET" }); await sdk.positions.closePosition(positionId, { closeType: "LIMIT", limitPrice: "2050.00", quantity: "0.5", }); // Adjust isolated margin on an existing position await sdk.positions.addPositionMargin(positionId, { amount: "200", asset: "USDC", }); await sdk.positions.reducePositionMargin(positionId, { amount: "100" }); // Attach take-profit and/or stop-loss conditional orders to a position await sdk.positions.attachPositionTpSl(positionId, { takeProfit: { triggerPrice: "2200", orderType: "MARKET" }, stopLoss: { triggerPrice: "1900", orderType: "LIMIT", limitPrice: "1895" }, }); // Position lifecycle events (opens, fills, funding, liquidations, closes) const { events } = await sdk.positions.listPositionHistory({ position_id: positionId, });
sdk.market— perp market metadata// Perp market config: tick/lot size, max leverage, margin tiers, etc. const config = await sdk.market.getPerpMarketConfig(tradingPairId); // Summary stats: mark, index, funding, open interest, 24h volume const summary = await sdk.market.getPerpMarketSummary(tradingPairId); // Individual metrics const mark = await sdk.market.getMarkPrice(tradingPairId); const index = await sdk.market.getIndexPrice(tradingPairId); const funding = await sdk.market.getFundingState(tradingPairId); const oi = await sdk.market.getOpenInterest(tradingPairId); // Historical funding payments const { records } = await sdk.market.listFundingHistory(tradingPairId, { page: 1, page_size: 100, });
sdk.trading— perp-aware order placementplaceLimitOrderandplaceMarketOrdernow accept perp options (marginAccountId,positionSide,leverage,reduceOnly):// Open a 10x long on a perp pair await sdk.trading.placeLimitOrder(tradingPairId, "BUY", "1.5", "2000", { marginAccountId, positionSide: "LONG", leverage: "10", }); // Reduce-only market close of a short await sdk.trading.placeMarketOrder(tradingPairId, "BUY", "0.5", { marginAccountId, positionSide: "SHORT", reduceOnly: true, });
WebSocket —
conditional_order_updateeventConditional-order lifecycle updates (TP/SL created, triggered, cancelled, failed) now stream over the existing websocket:
// Subscribe to all conditional-order events for the authenticated user, // or scope to a single trading pair by passing its UUID. const unsubscribe = sdk.ws.conditionalOrders((evt) => { // evt.data.conditionalOrderId, evt.data.state, evt.data.reason, // evt.data.triggeredOrderId, evt.data.triggerPrice, ... }); // Later: unsubscribe();
@0xmonaco/react—usePositionshookimport { usePositions } from "@0xmonaco/react"; function PositionsPanel({ marginAccountId }: { marginAccountId: string }) { const { listPositions, getPosition, getPositionRisk, closePosition, addPositionMargin, reducePositionMargin, attachPositionTpSl, listPositionHistory, } = usePositions(); // e.g. const load = async () => { const { positions } = await listPositions({ margin_account_id: marginAccountId, status: "OPEN", }); return positions; }; }
useMarketgainsgetPerpMarketConfig,getPerpMarketSummary,getMarkPrice,getIndexPrice,getFundingState,listFundingHistory, andgetOpenInterest.useTrade'splaceLimitOrder/placeMarketOrderaccept the same perp options shown above. -
f803401: Flatten data wrapper pattern in trades and market response types to match monaco-core#653
Breaking changes:
GetTradingPairsResponse.data(PaginatedTradingPairs) →GetTradingPairsResponse.trading_pairswith pagination fields directly on responseGetTradingPairResponse.data→GetTradingPairResponse.trading_pair- Removed
PaginatedTradingPairsinterface (fields now directly onGetTradingPairsResponse) - Raw trades response
data.trades→trades(internal, flattened) - React
useMarket().getPaginatedTradingPairs()now returnsGetTradingPairsResponseinstead ofPaginatedTradingPairs
Migration:
// Before const response = await sdk.market.getPaginatedTradingPairs(); const pairs = response.data.data; // TradingPair[] // After const response = await sdk.market.getPaginatedTradingPairs(); const pairs = response.trading_pairs; // TradingPair[]
-
f803401: Remove redundant success booleans from API response types to match monaco-core#646
Breaking changes:
- Removed
successfield fromBatchCancelOrdersResponse - Removed
successfield fromBatchCancelResult - Removed
successfield fromBatchCreateOrdersResponse - Removed
successfield fromBatchCreateResult - Removed
successfield fromBatchReplaceOrdersResponse - Removed
successfield fromBatchReplaceResult - Removed
successfield fromGetTradingPairsResponse - Removed
successfield fromGetTradingPairResponse - Removed
successfield fromGetCandlestickResponse - Removed
successfield from raw trades response
HTTP status codes / gRPC status already convey success/failure, making these fields redundant.
For batch operations, usetotal_failed === 0or check individual resulterrorfields instead. - Removed
-
f803401: Standardize trading pair field naming to match monaco-core#643
Breaking changes:
Order.trading_pair→Order.trading_pair_id(UUID field)GetPaginatedOrdersParams.trading_pair→GetPaginatedOrdersParams.trading_pair_idProfileOrder.trading_pair→ProfileOrder.symbol(symbol string like "ETH-USD")CommonOrderEventData.tradingPair→CommonOrderEventData.symbol(WS event symbol field)BackendCommonOrderEventData.trading_pair→BackendCommonOrderEventData.symbol
Internal changes (no public API impact):
- Raw orderbook response field
pair→symbol - Raw trade event field
pair_id→trading_pair_id - WebSocket orderbook/OHLCV events read
symbolinstead ofpair - WebSocket trade events read
trading_pair_idinstead ofpair_id - Query parameter
trading_pair→trading_pair_idfor paginated orders endpoint
Patch Changes
-
1fd5d17: Align close-position requests with the REST contract by keeping
position_idin the URL path only. -
f803401: ### Standardize pagination to
page/page_sizeacross all endpointsBREAKING CHANGES:
@0xmonaco/types- Renamed
limit→page_sizeinGetTradingPairsParams,GetUserMovementsParams, `GetUserTrad...
- Renamed
@0xmonaco/contracts@0.7.0
@0xmonaco/contracts@0.7.0
@0xmonaco/types@0.6.3
@0xmonaco/react@0.6.3
@0xmonaco/mcp-server@0.6.3
@0xmonaco/core@0.6.3
@0xmonaco/contracts@0.6.3
Patch Changes
- 7007f45: Release v 6.3.0