Skip to main content
Modify order price or size without canceling and replacing.

Complete Example

modify-order.ts
import {
  DriftClient,
  ModifyOrderParams,
  BN,
  PRICE_PRECISION,
  BASE_PRECISION,
} from '@drift-labs/sdk';

async function modifyOrder(driftClient: DriftClient, orderId: number) {
  // Get current order
  const user = driftClient.getUser();
  await user.fetchAccounts();
  
  const order = user.getOrder(orderId);
  if (!order) {
    console.error('Order not found');
    return;
  }

  console.log('Current order:');
  console.log('  Price:', convertToNumber(order.price, PRICE_PRECISION));
  console.log('  Size:', convertToNumber(order.baseAssetAmount, BASE_PRECISION));

  // Modify price and size
  const modifyParams: ModifyOrderParams = {
    price: new BN(148).mul(PRICE_PRECISION), // New price
    baseAssetAmount: new BN(2).mul(BASE_PRECISION), // New size
  };

  console.log('\nModifying order...');
  const txSig = await driftClient.modifyOrder(orderId, modifyParams);
  console.log('Order modified:', txSig);

  // Verify modification
  await user.fetchAccounts();
  const modifiedOrder = user.getOrder(orderId);
  
  if (modifiedOrder) {
    console.log('\nModified order:');
    console.log('  Price:', convertToNumber(modifiedOrder.price, PRICE_PRECISION));
    console.log('  Size:', convertToNumber(modifiedOrder.baseAssetAmount, BASE_PRECISION));
  }
}

export { modifyOrder };

Modify by User Order ID

If you set a custom user order ID:
// Place order with custom ID
const orderParams = getLimitOrderParams({
  marketIndex: 0,
  direction: PositionDirection.LONG,
  baseAssetAmount: new BN(1).mul(BASE_PRECISION),
  price: new BN(145).mul(PRICE_PRECISION),
  userOrderId: 42, // Custom ID
});

await driftClient.placePerpOrder(orderParams);

// Modify by user order ID
await driftClient.modifyOrderByUserOrderId(
  42, // user order ID
  {
    price: new BN(147).mul(PRICE_PRECISION),
  }
);

Partial Modifications

Modify only price:
await driftClient.modifyOrder(orderId, {
  price: new BN(150).mul(PRICE_PRECISION),
});
Modify only size:
await driftClient.modifyOrder(orderId, {
  baseAssetAmount: new BN(3).mul(BASE_PRECISION),
});

Modify Multiple Parameters

const modifyParams: ModifyOrderParams = {
  price: new BN(148).mul(PRICE_PRECISION),
  baseAssetAmount: new BN(2).mul(BASE_PRECISION),
  reduceOnly: true,
  postOnly: PostOnlyParams.TRY_POST_ONLY,
  maxTs: new BN(Date.now() / 1000 + 7200), // 2 hours
};

await driftClient.modifyOrder(orderId, modifyParams);
Modifying an order maintains its queue priority if the price improvement stays on the same side.

Next Steps

Cancel Order

Cancel orders

Order Management

Complete order guide

Build docs developers (and LLMs) love