Outcome markets
Outcome markets are HIP-4 markets with named outcomes and a fixed expiry.
They are optional. Check /v1/runtime-config and only show outcome UI when outcomes_enabled is true. When outcomes are disabled, outcome routes are unavailable.
Outcome reads expose metadata and price history. When outcome writes are
enabled, the prepare flows (orders, cancels, conversions) require an
active approved agent wallet; if the API returns outcome_agent_not_approved, call
POST /v1/agent/approve first, then retry the prepare step.
When the deployment gates access (waitlist enabled), every protected outcome
route — both prepare and submit, plus reads such as open orders and
order-status — also enforces RIPBET allowlist access and returns 403 —
not_allowlisted for a waitlisted user, or access_revoked for a blocked or
revoked user. The one exception is
GET /v1/outcomes/conversions/history, which is JWT-only.
List markets
curl -s "{API_BASE_URL}/v1/outcomes/meta"
The response includes:
| Field | Meaning |
|---|---|
outcomeId | Market outcome id |
name | Display name |
sides | Tradable sides and coins |
expired | Terminal state |
settling | In settlement or grace window |
questions | Related question metadata |
Use sides[].coin for WebSocket outcome subscriptions and order preparation.
Price history
curl -s "{API_BASE_URL}/v1/outcomes/price-history?coins=%2336010"
URL-encode # as %23.
Transfer collateral
Outcome trading may require moving USDH into the right balance class. Use prepare/submit:
curl -s -X POST "{API_BASE_URL}/v1/outcomes/transfer/prepare" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"amount":"25"}'
The user signs the returned transfer action. Submit the signature:
{
"actionHash": "0x...",
"signature": "0x..."
}
Place an outcome order
Prepare a limit order:
curl -s -X POST "{API_BASE_URL}/v1/outcomes/orders/prepare" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{
"outcomeId": 3601,
"side": 0,
"isBuy": true,
"sz": "95",
"mode": {
"kind": "limit",
"limitPx": "0.556"
}
}'
Prepare a market-style order:
{
"outcomeId": 3601,
"side": 0,
"isBuy": true,
"sz": "95",
"mode": {
"kind": "market",
"slippageBps": 300
}
}
The prepare response contains orderId, actionHash, connectionId, eip712Domain, and agentMessage. Sign the returned agent message, then submit:
{
"orderId": "9c07d350-0000-4000-8000-000000000000",
"actionHash": "0x...",
"hlSignature": "0x..."
}
Cancel
Outcome cancels use the same prepare/submit pattern:
{
"outcomeId": 3601,
"side": 0,
"cloid": "0x0123456789abcdef0123456789abcdef"
}
Read open orders and status
curl -s "{API_BASE_URL}/v1/outcomes/orders/open/0xabc..." \
-H "Authorization: Bearer $JWT"
curl -s -X POST "{API_BASE_URL}/v1/outcomes/order-status" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"address":"0xabc...","cloid":"0x0123456789abcdef0123456789abcdef"}'
Provide exactly one of oid or cloid.