SettleMint
Trading venue

Place stop orders and use time in force

Arm a stop order that reserves nothing while dormant, understand what triggers it and what can invalidate it, and choose between GTC, GTD, and IOC time in force.

A stop order is a signed intent that waits dormant until the market trades through its trigger price. While dormant it reserves nothing, so the wallet's capital stays free; the venue reserves at the moment of trigger and the order then enters normal intake. This page covers placing a stop, the trigger rules, the failure and invalidation paths, and the three time-in-force values. Signing is identical to any other order; see Place and cancel orders for the typed-data walkthrough.

Prerequisites

  • Everything from Place and cancel orders: a registered maker wallet, a trading authorization, and a live market id.
  • The market must be open for continuous trading for a stop to trigger. Stops can arm at any time the market accepts orders.

Place a stop order

A stop is the standard placement request plus triggerTick. The signed EIP-712 order struct is unchanged: the trigger is a platform-side arming condition, and priceTick in the signature is the protection limit the converted order executes within.

curl -X POST "https://your-platform.example.com/api/v2/addons/trading-venue-orders" \
  -H "X-Api-Key: sm_dalp_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "marketId": "0198f1c4-5e6f-7a80-bc13-4d5e6f7a8b9c",
    "maker": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955",
    "recipient": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955",
    "side": "sell",
    "orderType": "market",
    "timeInForce": "gtc",
    "priceTick": "940",
    "triggerTick": "950",
    "quantity": "1000000000000000000",
    "expiry": "1785661200",
    "epoch": "0",
    "salt": "873245987236",
    "maxFeeBps": "25",
    "signature": "0x2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae1b"
  }'

This sell stop arms at trigger 950 with a protection limit of 940: once a settlement-confirmed print reaches 950 or below, the venue reserves the base quantity and places the order, which fills no lower than 940. The order's status is armed from acceptance; it holds no reservation and never appears in depth.

Set the trigger on the correct side of the market: a sell stop triggers on a confirmed print at or below triggerTick, a buy stop at or above it.

Trigger rules

RuleBehavior
Trigger sourceSettlement-confirmed venue prints only. A match that later fails settlement never fires a stop; an auction clearing print does.
Trigger windowOnly while the market is open for continuous trading. A condition met during a halt queues and fires on resume.
OrderingMultiple stops fire in trigger-price-then-time order, with a bounded cascade per print, deterministically.
ConversionThe venue reserves at trigger, then the order enters normal intake as a marketable limit bounded by your signed priceTick and the market's protection band.
Trigger failureIf the trigger-time reservation fails (funds moved, authorization lapsed), the stop is rejected, not retried. The order shows rejected with the trigger failure as its close reason.

Because reservation happens at trigger, an armed stop is a promise your wallet must still be able to keep when it fires. Keep the committed quantity spendable, or accept that the stop can reject exactly when you wanted it to fire.

What invalidates a dormant stop

An armed stop faces every invalidation an ordinary order faces:

  • Your on-chain bulk cancel (epoch bump) kills it.
  • Cancelling it directly through DELETE /api/v2/addons/trading-venue-orders/{orderId} works like any cancel.
  • An address freeze, removal from a private market's participant list, or a delisting prunes it.
  • Its own signed expiry passes: the expiry sweep removes dormant stops too.

Armed stops count against your open-order cap per market, together with pending, working, and partially filled orders.

Time in force

timeInForce takes one of three values on every order, stop or not:

ValueMeaning
gtcGood till cancelled. The order works until it fills, you cancel it, or its signed expiry passes. Persists across sessions and days.
gtdGood till date. Identical machinery to gtc, but the expiry is the point: intake requires a real expiry, and the platform enforces it at intake, at match, and on-chain at execution.
iocImmediate or cancel. The order matches what it can on arrival and never rests; the remainder cancels with its reservation released.

The signed expiry field is enforced for every order regardless of time in force; gtd makes the deadline an explicit, first-class label your order management can filter on.

Errors

StatusWhat happenedWhat to do
422Intake rejected the placement: the usual checks, or a gtd order without a usable expiry.Correct the named check and submit a new signed order.
409 on cancelThe stop already left the armed state: it triggered, expired, or was invalidated.Refresh the working-orders list.

A trigger failure is not an HTTP error, because triggering happens after placement: watch your orders for rejected with the stop-trigger failure reason, through polling or the order list.

On this page