actions array from GET /providers. Every trading action is signed by the venue API key (PerpsSigner.SDK) using the hmac signing method and relayed to the venue by the backend — see Signing Model. For setup actions, see Setup. For full parameter schemas, see the Actions API reference.
Order constraints
These apply acrossplaceOrder and placeTriggerOrder:
- Cross margin only.
marginMode: ISOLATEDis rejected. LIMITandMARKETorder types only (typedefaults toLIMITwhen omitted).pricerequired for a limit order and validated on the market’s price grid;sizeis validated on the size grid.- Time-in-force:
GTC,IOC,POST_ONLYon limit orders (post-only submits asGTCwith the post-only flag). A reduce-only limit order is coerced toIOCregardless of the requested value — Ondo rejects any other time-in-force on a reduce-only close. A market order carries no wire time-in-force at all; the SDK accepts an explicitIOC(or none) and rejectsGTC/POST_ONLY. - No order expiry —
expiresAtmust be omitted. - Trigger legs execute at market — a
limitPriceor asizeon atakeProfit/stopLossleg is rejected; the leg always closes the entire position. clientOrderId. EveryplaceOrderrequest carries a fresh UUID generated by the SDK. Ondo rejects a reused id withclientOrderID_collision(NonceAlreadyUsed), so a replayed signed body cannot be placed twice.builderCode.placeOrderattaches the LI.FI builder code when one is configured.placeTwapOrderhas no builder field in Ondo’s TWAP request schema, so no builder code is attached to TWAP orders.
actions
placeOrder
Places a market or limit order. When leverage is supplied, the SDK first submits a leverage step for the market, then the order. Optional takeProfit / stopLoss legs attach trigger orders to the entry.
placeTriggerOrder
Attaches standalone take-profit and/or stop-loss triggers to an open position. Triggers execute at market (no limit price).
placeTwapOrder
Places a TWAP parent order over REST, relayed by the backend as an HMAC-signed venue request (POST /v1/perps/twap/order).
durationSeconds (the venue’s runningTime) is required and must be between 300 and 86,400 seconds. frequencySeconds (the child-order interval) is optional, 1–86,400 seconds, and must evenly divide durationSeconds; the resulting child-order count (durationSeconds / frequencySeconds) must fall between 2 and 200. The descriptor advertises the discrete values 30, 60, 300, 600, 1800, 3600 seconds as picker suggestions, but the backend accepts any interval satisfying the rules above.
When frequencySeconds is omitted, the backend derives it: 30 seconds if it divides durationSeconds evenly within the 200-child ceiling, otherwise the smallest divisor of durationSeconds at or above ceil(durationSeconds / 200).
size must also clear the child-order size grid: size >= sizeIncrement × childCount, since Ondo floors each child order to the market’s size increment and rejects a total that splits into sub-increment children. minPrice/maxPrice must each sit on the market’s quote-increment grid when supplied, and minPrice must be below maxPrice; either or both may be omitted for no bound. randomize must be omitted — Ondo’s REST TWAP endpoint takes no randomization parameter.
cancelOrder
Cancels one or more open orders by id. A single id cancels one order; multiple ids cancel as a batch.
cancelTwapOrder
Cancels a running TWAP parent by id (DELETE /v1/perps/twap/order/{twapId}).
twapId is Ondo’s globally-unique twap_-prefixed identifier returned from placeTwapOrder. market is required by the shared params shape but unused here — Ondo’s TWAP ids need no market to disambiguate.
cancelAllOrders
Cancels every open order on the account.
timeInForce is required and must be 0 — Ondo supports immediate cancel-all only; any other value is rejected. timestampMs is optional.