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-Documentation Index
Fetch the complete documentation index at: https://docs.outcome.xyz/llms.txt
Use this file to discover all available pages before exploring further.
placeOrder never throws, so you can always branch on result.success.
Place a limit order
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.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.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.Place a market order
For a market order, settype: "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 tohip4.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
| Field | Type | Required | Description |
|---|---|---|---|
marketId | string | Yes | Outcome ID as a string (e.g. "516") |
outcome | string | Yes | Side coin (e.g. "#5160") |
side | "buy" | "sell" | Yes | Direction |
type | "limit" | "market" | Yes | Order type |
price | string | Limit only | Limit price (e.g. "0.65") |
amount | string | Yes | Number of shares |
timeInForce | "GTC" | "GTD" | "FOK" | "FAK" | No | Default: "GTC" |
markPx | number | No | Current mark price; enables min-shares validation |
builderAddress | string | No | Builder referral address (required when using builderFee) |
builderFee | number | No | Fee in tenths of basis points - 100 = 0.1% |
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 USDH 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
| Value | Behavior |
|---|---|
GTC | Good Til Cancelled - default for limit orders; rests on the book until filled or cancelled |
GTD | Good Til Date - currently behaves like GTC (expiration field accepted but not enforced by the exchange) |
FOK | Fill or Kill - mapped to IOC; may result in partial fills |
FAK | Fill and Kill - mapped to IOC |
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. SetbuilderFee in tenths of basis points (100 = 0.1%) and provide builderAddress. Both fields must be present together.