Endpoint
/exchange/userOutcome is not a separate URL. userOutcome is the action type sent to the shared
/exchange endpoint.
Request Body
action
action.mergeOutcome
Use the numeric
outcomeId, not a side assetId, hlEncoding, or question ID.
When amount is null, Notional computes:
total - hold. If either side has no available shares, the request is
rejected. Explicit amounts must be positive integer-valued strings; fractional sets are not
supported.
Signing
Sign the completeaction and nonce using Notional’s NotionalExchange domain:
signature.r, signature.s, and signature.v in the request. The user wallet or an
approved API wallet may sign.
Response
- 200: Accepted
- 400: No Balance
Progress and Balance Effects
OutcomeMergeRequestedreservesamounton both outcome sides.- Notional submits the merge to Hyperliquid asynchronously.
OutcomeMergeExecutedremoves the reserved Yes and No shares and credits the same amount in USDC.OutcomeMergeFailedreleases both reservations without crediting USDC.
userTransactions to track these transaction types. After an executed or failed
event, refresh outcomeBalances and assets.
After an uncertain response, retry only by resubmitting the identical signed body and nonce. Do not
change the amount or nonce while reusing the old signature.
Validation Rules
- Use an
outcomeIdreturned byoutcomeMarkets; both sides must be quoted in USDC. - The user must have enough unheld shares on both sides.
- The amount must be a positive whole number of outcome sets.
- Frozen accounts and accounts in active liquidation cannot submit the action.
- Only
mergeOutcomeis currently enabled underuserOutcome.
splitOutcome, mergeQuestion, and negateOutcome are not public actions. Requests containing
those variants currently return HTTP 400.
See Outcome Markets for outcome ids,
Outcome Balances for available shares, and
Signing, Nonces, and API Wallets for signature details.