Skip to main content
HyperliquidPolymarket
Creates one or more signed orders for Hyperliquid perpetuals, spot pairs, and outcomes, or Polymarket outcomes, through Notional’s unified execution surface.

Endpoint

Request Body

action

action.orders[]

The account is derived from the signer; do not add a separate user field to the action. Use the exchange signing flow with the account owner or an approved API wallet. The server generates Notional order IDs; c and financing are unsupported and explicitly rejected in each order specification. For Hyperliquid perpetuals, prices use at most 6 - szDecimals decimal places; spot prices use at most 8 - szDecimals. Non-integer prices additionally use at most five significant figures. Sizes must respect the market’s szDecimals. Read market metadata before constructing the order.

HIP-3 isolated perpetuals

Send the 16-character assetId returned by Market Metadata. HIP-3 orders require assigned execution (hip3.executionPolicy: "exclusive_subaccount") and a valid execution-account binding. They support FrontendMarket, Ioc, and resting Gtc/Alo orders. Select leverage through Update Leverage. Check Market Trading State for isolated.permissions before submitting. A market may remain visible while new risk is disabled. Assigned reduce-only orders use Hyperliquid’s native enforcement on your execution account. Notional forwards the requested size with venue reduce-only enabled and relays venue acceptance or rejection. Local position, side, size, aggregate close-capacity, and native minimum-notional checks do not restrict these orders. You may attempt multiple resting exits or a close larger than the locally observed position; Hyperliquid decides what can execute. Local TP/SL intents reserve no close capacity while waiting for their trigger. When triggered, they use the assigned execution path, including stop-limit TP/SL. An incoming close or triggered stop does not cancel or trim resting exits to free Notional close capacity. Assignment binding, authorization, permissions, structural validation, and the tracked TP/SL lifecycle still apply. Assigned markets do not expose the closeCapacity projection. A missing or invalid HIP-3 assignment is rejected; orders do not fall back to the shared omnibus wallet.

Close capacity

This rule applies to perpetual markets using the shared omnibus wallet. Assigned exclusive_subaccount orders are excluded. Closing orders are admitted against the market’s free close capacity — |position| − Σ remaining size of your live closing orders when a live reduce-only order is present or the incoming live order is reduce-only. Both plain and reduce-only closing orders count. Local TP/SL intents waiting for a trigger do not reserve this capacity; admission runs when they trigger and attempt venue submission. A resting close that exceeds capacity is rejected with code: "CLOSE_CAPACITY_EXCEEDED" and free: "<size>" (the remaining close capacity as a decimal string). On native omnibus perpetual markets an immediate reduce-only close (FrontendMarket / Ioc, or a fired TP/SL) larger than free is accepted instead: it frees only the capacity it needs from your newest resting closing orders (whole cancellations while needed, and one reduction of the order it straddles), waits for their outcomes, then submits clamped to what is free; older resting closes keep resting. While that close is in progress, new closing orders on the market are rejected with code: "CLOSE_IN_PROGRESS". If no capacity could be freed the close is rejected with CLOSE_CAPACITY_EXCEEDED and the cancellations already sent are not reversed. Read closeCapacity.free and closeCapacity.barrierOpen from Market Trading State.

Automatic Polymarket borrowing

Ordinary authenticated Polymarket buys automatically use owned pUSD first, then borrow the exact reservation shortfall against eligible Notional collateral when pool policy and risk limits allow. The reservation includes the fee/rounding ceiling. No pUSD financing object, signed rate policy, separate borrowing approval, or account opt-in is required. The financing field is rejected on all order requests. Normal order signing, nonce, size, price, and expiry rules still apply. Read account pUSD buying power and variable APR from Asset Balances, not activeAssetData. Unused funding returned after cancellation repays debt before becoming supplier cash. Order responses contain execution status; read debt and buying power from balance responses. Historical origination records remain internal accounting facts. The pusdFundingVersion event marker is internal and cannot be supplied by clients. Sells, withdrawals, splits, system actions, and unsupported order types gain no new borrowing permission. Pool activation, policy, recovery, custody, liquidity, collateral, caps, and release qualification remain authoritative. Deploy the frontend and API cutover together.

HIP-3 stored cash debt

Orders do not accept a financing object. Normal margin-financing borrow remains governed by protocol risk limits. An order that would increase stored cross-account USDC cash debt is rejected; removing the request field does not grant additional stored-debt authority.

Order type configuration

Limit order config

Gtc rests until filled or canceled, Ioc and FrontendMarket execute immediately and cancel any remainder, and Alo is post-only.

Trigger order config

Response

response.data.statuses contains exactly one result per input order, in the same order. Each result carries its Notional oid, including rejected and pending orders. The exchange envelope resembles Hyperliquid; these result objects use the Notional contract below.
totalSz and avgPx are decimal strings included when authoritative execution evidence is available. A durable retry can report the current lifecycle without an aggregate fill price. Internal fills also include executionSource: "internal", matchId, and counterparty. A venue order ID or financing breakdown is not included. For standalone batches, handle each result independently. Grouped TP/SL admission remains atomic. A pending response or transport timeout is not a rejection and must not cause a new signed order to be submitted automatically. Retrying the identical signed action preserves its original identities; unrecorded items in a partially committed batch remain unresolved.

Outcome Order from outcomeMarkets

Use the 16-character side AssetId returned by outcomeMarkets:
Hyperliquid outcomes support standalone FrontendMarket market orders and Gtc or Alo limits. They use whole-share size, require a positive price, and enforce a 10 USDC minimum notional. The example submits 20 shares at 0.55 USDC, for 11 USDC notional.

Outcome Order from a Token ID

A Polymarket outcome uses a 68-character PM_Outcome AssetId. For decimal token ID 12345678901234567890, the AssetId is:
For Polymarket, both buy and sell s values are outcome shares. p is a probability price and also the worst acceptable price for immediate orders; never send p: "0".

Additional Time in Force Values

These additional values apply to the 68-character PM_Outcome AssetId. Gtd expiry must be later than the signed request nonce and at least four minutes after protocol acceptance. expiresAt is a Unix-millisecond timestamp, separate from the request-level expiresAfter. No other TIF may include t.limit.expiresAt.

Token-ID Outcome Validation

  • grouping must be "na".
  • Prices must be within the live market’s [tickSize, 1 - tickSize] range and exactly tick-aligned.
  • Prices support at most 8 decimal places. Share sizes support at most 6 and must meet the live minimum order size.
  • Reduce-only, triggers, TP/SL, TWAP, and mixed Polymarket/Hyperliquid batches are unsupported.
  • Buys reserve canonical pUSD collateral from the user’s assets balance. Sells reserve outcome shares.
  • If placement is temporarily closed, the request returns an error instead of accepting a non-executable order.