Self-Match Prevention (SMP)

Prevents order matching between orders placed by the same user.

What is the Self-Match(SMP) Prevention feature?

Self-Match Prevention (SMP) is a feature that prevents orders placed by the same user on opposite sides of the order book from matching with each other.

It helps prevent unintended self-trading and unnecessary trading fees.

How to Set SMP?

SMP can be configured using the following API endpoints and parameters.

EndpointParameter
Create Order (POST /v1/orders)smp_type
Cancel and New Order (POST /v1/orders/cancel_and_new)new_smp_type

SMP is optional and is not applied by default. If smp_type is omitted, the order is processed in the same way as when smp_type=none is specified.

What SMP modes are available?

SMP operates based on the mode specified for the taker order. If the maker and taker orders have different SMP settings, the taker order's setting takes precedence.

The following values are supported:

smp_typeDescription
cancel_makerCancels the maker order while keeping the taker order to prevent self-trading.
cancel_takerCancels the taker order while keeping the maker order to prevent self-trading.
reduceReduces the overlapping quantity from both maker and taker orders to prevent self-trading. Orders with remaining quantities stay open.
noneDoes not apply SMP. Orders placed by the same user may match and execute.

If smp_type is not specified, SMP is not applied. This is equivalent to explicitly setting smp_type=none.

Additional SMP Information

How does SMP work with Post Only orders?

For orders with time_in_force=post_only, the following rules apply:

  • smp_type=none can be used with post_only.
  • If smp_type is omitted, the order is processed in the same way as when smp_type=none is specified.
  • smp_type=cancel_maker, cancel_taker, and reduce cannot be used with post_only.

How can I check if an order was prevented from executing due to SMP?

If an order is canceled or its quantity is reduced due to SMP, the following fields in the order response can be used to check the result.

FieldDescription
smp_typeSMP mode applied to the order.
Returns none when SMP is not applied.
prevented_volumeVolume or amount prevented from execution due to SMP.
prevented_lockedFor buy orders, the prevented locked amount.
For sell orders, the prevented order volume.

When subscribing to My Order and Trade (MyOrder) data via WebSocket, you can check the SMP result using the state field.

  • prevented: The order quantity or amount was reduced due to SMP.
  • cancel: The order was canceled because no remaining quantity or amount was left after SMP was applied.

Notes

  • SMP is optional. If smp_type is omitted or set to none, SMP is not applied, and orders placed by the same user may match and execute.
  • Self-matching is checked at the time of trade execution, not at the time the order is placed.
  • SMP supports applicable order types, including market, limit, stop-limit, IOC/FOK, and cancel-and-replace orders.
  • For orders with time_in_force=post_only, omit smp_type or set it to none. The cancel_maker, cancel_taker, and reduce modes cannot be used with post_only.
  • The prevented_volume and prevented_locked fields are provided as follows:
    • Buy orders: prevented_volume represents the prevented amount including fees, while prevented_locked represents the prevented locked amount.
    • Sell orders: Both fields represent the prevented order volume.
  • The smp_type, prevented_volume, and prevented_locked fields are always included in order-related REST API responses.
  • If smp_type is omitted from the order request, the response returns none.
  • If SMP is not applied, prevented_volume and prevented_locked return 0.
  • For orders created before November 9, 2026, without specifyin smp_type, the response also returns none.
  • The SMP-related fields are also included in MyOrder WebSocket responses. When SMP is not applied, smp_type returns none instead of null.