Skip to content

Releases: Monaco-Research/monaco-sdk

@0xmonaco/types@0.7.0

28 Apr 16:50
d5943c3

Choose a tag to compare

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_update websocket event. Also adds a usePositions React hook and extends useMarket / useTrade with 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 placement

    placeLimitOrder and placeMarketOrder now 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_update event

    Conditional-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/reactusePositions hook

    import { 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;
      };
    }

    useMarket gains getPerpMarketConfig, getPerpMarketSummary, getMarkPrice, getIndexPrice, getFundingState, listFundingHistory, and getOpenInterest. useTrade's placeLimitOrder / placeMarketOrder accept 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_pairs with pagination fields directly on response
    • GetTradingPairResponse.dataGetTradingPairResponse.trading_pair
    • Removed PaginatedTradingPairs interface (fields now directly on GetTradingPairsResponse)
    • Raw trades response data.tradestrades (internal, flattened)
    • React useMarket().getPaginatedTradingPairs() now returns GetTradingPairsResponse instead of PaginatedTradingPairs

    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 success field from BatchCancelOrdersResponse
    • Removed success field from BatchCancelResult
    • Removed success field from BatchCreateOrdersResponse
    • Removed success field from BatchCreateResult
    • Removed success field from BatchReplaceOrdersResponse
    • Removed success field from BatchReplaceResult
    • Removed success field from GetTradingPairsResponse
    • Removed success field from GetTradingPairResponse
    • Removed success field from GetCandlestickResponse
    • Removed success field from raw trades response

    HTTP status codes / gRPC status already convey success/failure, making these fields redundant.
    For batch operations, use total_failed === 0 or check individual result error fields instead.

  • f803401: Standardize trading pair field naming to match monaco-core#643

    Breaking changes:

    • Order.trading_pairOrder.trading_pair_id (UUID field)
    • GetPaginatedOrdersParams.trading_pairGetPaginatedOrdersParams.trading_pair_id
    • ProfileOrder.trading_pairProfileOrder.symbol (symbol string like "ETH-USD")
    • CommonOrderEventData.tradingPairCommonOrderEventData.symbol (WS event symbol field)
    • BackendCommonOrderEventData.trading_pairBackendCommonOrderEventData.symbol

    Internal changes (no public API impact):

    • Raw orderbook response field pairsymbol
    • Raw trade event field pair_idtrading_pair_id
    • WebSocket orderbook/OHLCV events read symbol instead of pair
    • WebSocket trade events read trading_pair_id instead of pair_id
    • Query parameter trading_pairtrading_pair_id for paginated orders endpoint

Patch Changes

  • f803401: ### Standardize pagination to page/page_size across all endpoints

    BREAKING CHANGES:

    @0xmonaco/types

    • Renamed limitpage_size in GetTradingPairsParams, GetUserMovementsParams, GetUserTradesParams, and their corresponding response types (PaginatedTradingPairs, GetPaginatedUserMovementsResponse, `...
Read more

@0xmonaco/react@0.7.0

28 Apr 16:50
d5943c3

Choose a tag to compare

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_update websocket event. Also adds a usePositions React hook and extends useMarket / useTrade with 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 placement

    placeLimitOrder and placeMarketOrder now 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_update event

    Conditional-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/reactusePositions hook

    import { 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;
      };
    }

    useMarket gains getPerpMarketConfig, getPerpMarketSummary, getMarkPrice, getIndexPrice, getFundingState, listFundingHistory, and getOpenInterest. useTrade's placeLimitOrder / placeMarketOrder accept 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_pairs with pagination fields directly on response
    • GetTradingPairResponse.dataGetTradingPairResponse.trading_pair
    • Removed PaginatedTradingPairs interface (fields now directly on GetTradingPairsResponse)
    • Raw trades response data.tradestrades (internal, flattened)
    • React useMarket().getPaginatedTradingPairs() now returns GetTradingPairsResponse instead of PaginatedTradingPairs

    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 success field from BatchCancelOrdersResponse
    • Removed success field from BatchCancelResult
    • Removed success field from BatchCreateOrdersResponse
    • Removed success field from BatchCreateResult
    • Removed success field from BatchReplaceOrdersResponse
    • Removed success field from BatchReplaceResult
    • Removed success field from GetTradingPairsResponse
    • Removed success field from GetTradingPairResponse
    • Removed success field from GetCandlestickResponse
    • Removed success field from raw trades response

    HTTP status codes / gRPC status already convey success/failure, making these fields redundant.
    For batch operations, use total_failed === 0 or check individual result error fields instead.

  • f803401: Standardize trading pair field naming to match monaco-core#643

    Breaking changes:

    • Order.trading_pairOrder.trading_pair_id (UUID field)
    • GetPaginatedOrdersParams.trading_pairGetPaginatedOrdersParams.trading_pair_id
    • ProfileOrder.trading_pairProfileOrder.symbol (symbol string like "ETH-USD")
    • CommonOrderEventData.tradingPairCommonOrderEventData.symbol (WS event symbol field)
    • BackendCommonOrderEventData.trading_pairBackendCommonOrderEventData.symbol

    Internal changes (no public API impact):

    • Raw orderbook response field pairsymbol
    • Raw trade event field pair_idtrading_pair_id
    • WebSocket orderbook/OHLCV events read symbol instead of pair
    • WebSocket trade events read trading_pair_id instead of pair_id
    • Query parameter trading_pairtrading_pair_id for paginated orders endpoint

Patch Changes

  • f803401: ### Standardize pagination to page/page_size across all endpoints

    BREAKING CHANGES:

    @0xmonaco/types

    • Renamed limitpage_size in GetTradingPairsParams, GetUserMovementsParams, GetUserTradesParams, and their corresponding response types (PaginatedTradingPairs, GetPaginatedUserMovementsResponse, `...
Read more

@0xmonaco/mcp-server@0.7.0

28 Apr 16:50
d5943c3

Choose a tag to compare

Minor Changes

  • f803401: Standardize trading pair field naming to match monaco-core#643

    Breaking changes:

    • Order.trading_pairOrder.trading_pair_id (UUID field)
    • GetPaginatedOrdersParams.trading_pairGetPaginatedOrdersParams.trading_pair_id
    • ProfileOrder.trading_pairProfileOrder.symbol (symbol string like "ETH-USD")
    • CommonOrderEventData.tradingPairCommonOrderEventData.symbol (WS event symbol field)
    • BackendCommonOrderEventData.trading_pairBackendCommonOrderEventData.symbol

    Internal changes (no public API impact):

    • Raw orderbook response field pairsymbol
    • Raw trade event field pair_idtrading_pair_id
    • WebSocket orderbook/OHLCV events read symbol instead of pair
    • WebSocket trade events read trading_pair_id instead of pair_id
    • Query parameter trading_pairtrading_pair_id for paginated orders endpoint

Patch Changes

  • f803401: ### Standardize pagination to page/page_size across all endpoints

    BREAKING CHANGES:

    @0xmonaco/types

    • Renamed limitpage_size in GetTradingPairsParams, GetUserMovementsParams, GetUserTradesParams, and their corresponding response types (PaginatedTradingPairs, GetPaginatedUserMovementsResponse, GetUserTradesResponse)
    • Replaced limit/offset with page/page_size in GetUserBalancesParams and GetUserBalancesResponse
    • Renamed total_counttotal in GetPaginatedUserMovementsResponse, GetUserBalancesResponse, and GetUserTradesResponse
    • Added total_pages to GetUserBalancesResponse for consistency with other paginated responses
    • Replaced skip/limit with page/page_size in MonacoSDK.trades.getTrades options
    • Renamed limit/offsetpage_size/page in SearchTradingPairsSchema validation
    • Renamed limitpage_size in GetUserMovementsSchema and GetUserTradesSchema validation

    @0xmonaco/core

    • Updated MarketAPIImpl, ProfileAPIImpl, and TradesAPIImpl to send page/page_size query parameters instead of limit/offset/skip

    @0xmonaco/react

    • Updated useProfile, useTradeFeed, and useUserMovements hooks to use page_size instead of limit

    @0xmonaco/mcp-server

    • get-trades MCP tool parameters changed from skip/limit to page/page_size
    • Refactored SDK singleton with dependency injection (createSDKInstance, resetSDK) for testability
  • 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

28 Apr 16:50
d5943c3

Choose a tag to compare

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_update websocket event. Also adds a usePositions React hook and extends useMarket / useTrade with 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 placement

    placeLimitOrder and placeMarketOrder now 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_update event

    Conditional-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/reactusePositions hook

    import { 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;
      };
    }

    useMarket gains getPerpMarketConfig, getPerpMarketSummary, getMarkPrice, getIndexPrice, getFundingState, listFundingHistory, and getOpenInterest. useTrade's placeLimitOrder / placeMarketOrder accept 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_pairs with pagination fields directly on response
    • GetTradingPairResponse.dataGetTradingPairResponse.trading_pair
    • Removed PaginatedTradingPairs interface (fields now directly on GetTradingPairsResponse)
    • Raw trades response data.tradestrades (internal, flattened)
    • React useMarket().getPaginatedTradingPairs() now returns GetTradingPairsResponse instead of PaginatedTradingPairs

    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 success field from BatchCancelOrdersResponse
    • Removed success field from BatchCancelResult
    • Removed success field from BatchCreateOrdersResponse
    • Removed success field from BatchCreateResult
    • Removed success field from BatchReplaceOrdersResponse
    • Removed success field from BatchReplaceResult
    • Removed success field from GetTradingPairsResponse
    • Removed success field from GetTradingPairResponse
    • Removed success field from GetCandlestickResponse
    • Removed success field from raw trades response

    HTTP status codes / gRPC status already convey success/failure, making these fields redundant.
    For batch operations, use total_failed === 0 or check individual result error fields instead.

  • f803401: Standardize trading pair field naming to match monaco-core#643

    Breaking changes:

    • Order.trading_pairOrder.trading_pair_id (UUID field)
    • GetPaginatedOrdersParams.trading_pairGetPaginatedOrdersParams.trading_pair_id
    • ProfileOrder.trading_pairProfileOrder.symbol (symbol string like "ETH-USD")
    • CommonOrderEventData.tradingPairCommonOrderEventData.symbol (WS event symbol field)
    • BackendCommonOrderEventData.trading_pairBackendCommonOrderEventData.symbol

    Internal changes (no public API impact):

    • Raw orderbook response field pairsymbol
    • Raw trade event field pair_idtrading_pair_id
    • WebSocket orderbook/OHLCV events read symbol instead of pair
    • WebSocket trade events read trading_pair_id instead of pair_id
    • Query parameter trading_pairtrading_pair_id for paginated orders endpoint

Patch Changes

  • 1fd5d17: Align close-position requests with the REST contract by keeping position_id in the URL path only.

  • f803401: ### Standardize pagination to page/page_size across all endpoints

    BREAKING CHANGES:

    @0xmonaco/types

    • Renamed limitpage_size in GetTradingPairsParams, GetUserMovementsParams, `GetUserTrad...
Read more

@0xmonaco/contracts@0.7.0

28 Apr 16:50
d5943c3

Choose a tag to compare

@0xmonaco/contracts@0.7.0

@0xmonaco/types@0.6.3

13 Apr 18:18
801e5ee

Choose a tag to compare

Patch Changes

  • 7007f45: Release v 6.3.0
  • Updated dependencies [7007f45]
    • @0xmonaco/contracts@0.6.3

@0xmonaco/react@0.6.3

13 Apr 18:18
801e5ee

Choose a tag to compare

Patch Changes

  • 7007f45: Release v 6.3.0
  • Updated dependencies [7007f45]
    • @0xmonaco/core@0.6.3
    • @0xmonaco/types@0.6.3

@0xmonaco/mcp-server@0.6.3

13 Apr 18:18
801e5ee

Choose a tag to compare

Patch Changes

  • 7007f45: Release v 6.3.0
  • Updated dependencies [7007f45]
    • @0xmonaco/core@0.6.3
    • @0xmonaco/types@0.6.3

@0xmonaco/core@0.6.3

13 Apr 18:18
801e5ee

Choose a tag to compare

Patch Changes

  • 7007f45: Release v 6.3.0
  • Updated dependencies [7007f45]
    • @0xmonaco/contracts@0.6.3
    • @0xmonaco/types@0.6.3

@0xmonaco/contracts@0.6.3

13 Apr 18:18
801e5ee

Choose a tag to compare

Patch Changes