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