Skip to main content
Trading on HIP-4 markets follows a four-step flow: initialize an agent key, fetch the market and side you want to trade, place the order, and inspect the result. The SDK handles signing, tick alignment, and notional validation automatically-placeOrder never throws, so you can always branch on result.success.
You must call hip4.auth.initAuth before placing or cancelling any orders. Attempting to trade without authentication will return { success: false, error: "auth not initialized" }.

Place a limit order

1

Initialize authentication

Generate or load an agent key and pass it to initAuth. The agent key signs orders silently on behalf of the user’s wallet.
The agent must be approved on-chain before trading. See the auth-eoa.ts example in the SDK repository for the full approval flow using getAgentApprovalTypedData and submitAgentApproval.
2

Fetch the market and side

Retrieve the market you want to trade. The sides array on each market object carries the pre-computed coin identifier you pass to placeOrder.
3

Place the limit order

Call hip4.trading.placeOrder with the market ID, the side coin, and your price and amount. Pass markPx to enable pre-submission min-shares validation.
4

Check the result

Inspect result.success before reading other fields. The status field tells you whether the order filled immediately or is resting on the book.

Place a market order

For a market order, set type: "market" and omit price. The SDK uses the FrontendMarket time-in-force with extreme prices (0.99999 for buys, 0.00001 for sells) so the exchange handles best-execution.

Cancel an order

Pass an array of cancel targets to hip4.trading.cancelOrder. Each target requires the marketId, orderId, and the outcome coin (used to resolve the correct asset ID).
cancelOrder throws on failure. Wrap it in a try/catch if you need to handle errors gracefully.

Order params reference

Pricing rules

Tick-aligned prices - limit order prices are rounded to 5 significant figures before signing. For example, 0.55001 becomes 0.55001 and 0.550012 becomes 0.55001. You don’t need to pre-format prices yourself. Min-notional - orders below 10 USDC notional value are rejected client-side before the order is signed or sent. Notional is calculated as price × amount. Pass markPx to enable this check; omit it to skip it.

Time-in-force options

Market orders always use FrontendMarket regardless of the timeInForce field.

Builder fees

Builder fees let you attach a referral address and collect a fee on every order placed through your integration. Set builderFee in tenths of basis points (100 = 0.1%) and provide builderAddress. Both fields must be present together.