Skip to main content
The Ondo provider exposes trading actions in the 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 across placeOrder and placeTriggerOrder:
  • Cross margin only. marginMode: ISOLATED is rejected.
  • LIMIT and MARKET order types only (type defaults to LIMIT when omitted).
  • price required for a limit order and validated on the market’s price grid; size is validated on the size grid.
  • Time-in-force: GTC, IOC, POST_ONLY on limit orders (post-only submits as GTC with the post-only flag). A reduce-only limit order is coerced to IOC regardless 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 explicit IOC (or none) and rejects GTC / POST_ONLY.
  • No order expiryexpiresAt must be omitted.
  • Trigger legs execute at market — a limitPrice or a size on a takeProfit / stopLoss leg is rejected; the leg always closes the entire position.
  • clientOrderId. Every placeOrder request carries a fresh UUID generated by the SDK. Ondo rejects a reused id with clientOrderID_collision (NonceAlreadyUsed), so a replayed signed body cannot be placed twice.
  • builderCode. placeOrder attaches the LI.FI builder code when one is configured. placeTwapOrder has 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.

updateLeverage

Sets the cross-margin leverage for a market.