POST /execution/orders places one market order on that venue. It does not quote first, and it does not split across venues.
To show a price before committing, quote and fill instead.
Authenticate with x-app-id and Authorization: Bearer.
pending. Statuses after that are on Order lifecycle.
maxSpend is the most a buy can be charged, fees included. sellShares bounds how many contracts a sell closes, not the proceeds. Set slipCapBps on a sell when the default 5% cap is too wide.
externalId
externalId is required and unique within the app. Two users of the same app cannot share one. Retrying a timeout with the same value is safe: the repeat does not place a second trade. A request rejected before its order was queued, such as on a balance check, does not use up the value, so you can fix the cause and resend with the same externalId. Once the call returns pending the value stays used, even if the order later fails. GET /execution/orders?externalId= also lists the rejected attempt’s order, with status failed. The idempotency table, including the 409 and how to find the order after a timeout, is on Errors.
Naming the outcome
Pass the id fromvenueMarketOutcomes[].id for the venue you named. That is the form that pins the outcome.
An id from another venue is resolved through matched outcomes instead of rejected, so a mismatched id can still place an order on the outcome the match selected. If several outcomes on the requested venue match and none is the one you named, the request fails with 400 and code: "outcome_ambiguous".
On a sell, that resolution runs over the positions held on the venue, not over every outcome. Read positions first when it matters which one closes.
Fee overrides
appFeeBips, appFeeBipsByVenue, referrer, referrerFeeBips, and referrerFeeBipsByVenue override the fee for one order. They need x-app-api-key. For a ...ByVenue map, the entry for venue applies. See Fees.
To have a wallet of yours pay Hyperliquid’s activation fee for an unactivated referrer, send referralActivationSponsorAddress. See Fees.
Skipping the quote
skipQuote: true skips the route solver and sends the order straight to the venue you named.
- Venues:
predict,hyperliquid,novig, andprophetxonly. Any other venue returns400. An outcome id from another venue is resolved through matched outcomes, as withoutskipQuote. - Requires a
read_writex-app-api-key.401without a key,403with areadkey. Do not put that key in a browser. priceis optional. It is a 0–1 decimal such as0.52, not a 6-decimal integer. If you omit it, submission uses the best ask on a buy or the best bid on a sell, and an empty side returns400. A Hyperliquid buy is sized as the whole contracts that fitmaxSpendatpriceplus slippage.prophetxignoresprice. The venue prices the order withinslipCapBps. The user needs a KYC-verified wallet, or the call returns400. See KYC.novigandprophetxsettle in USDC on Solana, so a buy needs that USDC already there.- Referral fields apply to a buy as they do without
skipQuote. On a sell they return400referral_invalid:skipQuotesells carry no fees. - No bridging. Funds must already sit on the venue’s own chain, in its own token.
allowedSourceChainIdsandchainBalancesare ignored. A buy the user’s stored balance cannot fund returns400quote_insufficient_balancebefore the order is accepted, so itsexternalIdstays free. skipBalance: truetogether withskipQuoteskips the balance check and the fund hold on a buy. Nothing checks the balance, and an underfunded order fails at the venue.skipBalance: truewithoutskipQuotekeeps the route and skips only the quote-time balance refresh, so the route uses the last stored balances. The fund hold and the balance check still run. A stale balance can fail the order after it was accepted, and it cannot overspend. Either form requires aread_writekey.- Sells are always position-checked.
skipBalancedoes not apply to them. - You own the price and the minimum checks. An order the venue refuses fails after it was accepted, and that
externalIdis used up. Retry with a new one.
maxSpend stays the buy ceiling, and the app fee still applies.
Reconciling filled orders
executionPrice on GET /execution/orders is the effective filled USD per
received/sold share: filledAmountRaw / actualSharesRaw. Both inputs use
6-decimal atomic units, so their scales cancel. The decimal price is truncated
to 18 fractional digits. It is null when either quantity is unavailable or
invalid, or when the share quantity is zero; it never substitutes the quote.
Use this ratio to reconcile the reported cash and share quantities. Fees
already reflected in those quantities affect the effective price, so it is not
a venue’s pre-fee VWAP. quotedPriceRaw remains the quote reference and
averageFillPriceRaw remains the separate limit-order field. An accepted order
is not a confirmed fill; reconcile the eventual order status and quantities.