For the complete documentation index, see llms.txt. This page is also available as Markdown.

registeredOutcomes

Get recent registered prediction market outcomes.

Returns a list of recently registered prediction market outcomes that have not yet been settled, ordered by most recent first.

POST Request

Field
Type
Description

type

string

Must be "registeredOutcomes"

limit

integer

Max results to return, default 100, max 100 (optional)

kind

string

"all" (default), "price", or "canonical" — see The kind filter (optional)

name

string

Filter by outcome name (optional)

class

string

Filter by outcome class, e.g. "priceBinary" (optional)

underlying

string

Filter by underlying asset, e.g. "HYPE" (optional)

period

string

Filter by period, e.g. "15m" (optional)

category

string

Filter by canonical-market category, case-insensitive (optional)

subCategory

string

Filter by canonical-market sub-category, case-insensitive (optional)

search

string

Free-text search across name, description, category and subCategory — see Free-text search (optional)

venue

string

Only outcomes deployed by this permissionless venue, e.g. "skew". 2–4 ASCII letters, case-insensitive (optional)

deployedBy

string

"all" (default), "validator" (registered by validator quorum, no venue), or "venue" (any permissionless venue) (optional)

By default (kind omitted) all outcome kinds are returned. Pass kind: "price" for structured price markets only, or kind: "canonical" for HIP-4 prose markets only. See The kind filter.

curl -X POST https://api.hydromancer.xyz/info \
  -H "Authorization: Bearer $HYDROMANCER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "registeredOutcomes",
    "limit": 10,
    "underlying": "HYPE"
  }'
import requests
import os

response = requests.post(
    'https://api.hydromancer.xyz/info',
    json={
        'type': 'registeredOutcomes',
        'limit': 10,
        'underlying': 'HYPE'
    },
    headers={
        'Authorization': f'Bearer {os.environ.get("HYDROMANCER_API_KEY")}',
        'Content-Type': 'application/json'
    }
)

print(response.json())

Only outcomes deployed by the skew venue, then only validator-deployed outcomes:


Response Fields

Returns an object with two arrays: outcomes (the registered outcome objects, sorted descending by outcomeId) and questions (the parent HIP-4 questions of any priceBucket children that appear in outcomes, sorted descending by questionId). Both arrays are always present, even when empty.

The limit and the filter parameters (name, class, underlying, period, search) apply to outcomes only. questions is derived from the resulting outcomes — a question is included if at least one of its children (named or fallback) is in the outcomes result. Practical implications: filtering by class: "priceBinary" yields priceBinary outcomes plus an empty questions array (standalone outcomes have no parent question); filtering by class: "priceBucket" yields priceBucket children plus their parent question(s).

Outcome object

Field
Type
Description

outcomeId

integer

The outcome ID

kind

string

"price" for structured markets, "canonical" for HIP-4 validator-voted (prose) markets

name

string

Outcome name from the register event

description

string

Pipe-separated description (`class:...

sideSpecs

array

Side specifications, e.g. [{"name":"Yes"},{"name":"No"}]

class

string?

"priceBinary" or "priceBucket". null when kind is "canonical"

underlying

string?

Underlying asset, e.g. "HYPE". null when kind is "canonical"

expiry

string?

Expiry timestamp, e.g. "20260508-1300". null when kind is "canonical"

targetPrice

string?

Numeric strike for priceBinary; bucket-range string for priceBucket (see Target price formats below). null when kind is "canonical"

period

string?

Period, e.g. "15m". null when kind is "canonical"

category

string?

Canonical-market category. null on price markets

subCategory

string?

Canonical-market sub-category. null on price markets

quoteToken

string

Quote token ID

yesAssetId

string

YES-side asset ID, format "#{outcomeId * 10}"

noAssetId

string

NO-side asset ID, format "#{outcomeId * 10 + 1}"

yesStats

object

Market stats for the YES side. Always present; zero-valued when no fills (see Stats object below)

noStats

object

Market stats for the NO side

deployerAddress

string?

Permissionless-venue deployer address; null on validator-registered outcomes

deployerVenue

string?

Permissionless venue name (see outcomeMeta.deployers); null on validator-registered outcomes

deployerFeeScale

string?

Multiplier applied to the deployer fee for this market, e.g. "10". null on validator-registered outcomes and when the chain uses its default scale of 1

Question object

Question entries appear when the response includes priceBucket children — each such child has a parent question grouping 3 named children plus one fallback child. Question fields:

Field
Type
Description

questionId

integer

The question ID (assigned by chain)

kind

string

"price" or "canonical"

name

string

Question name

description

string

Pipe-separated description; named children copy this as-is

class

string?

"priceBucket". null when kind is "canonical"

underlying

string?

Underlying asset. null when kind is "canonical"

expiry

string?

Expiry timestamp. null when kind is "canonical"

period

string?

Period. null when kind is "canonical"

priceThresholds

string?

Sorted comma-separated list of 2 cut-points. null when kind is "canonical"

category

string?

Canonical-market category. null on price questions

subCategory

string?

Canonical-market sub-category. null on price questions

quoteToken

string

Quote token ID

fallbackOutcome

integer

outcomeId of the fallback child

fallbackName

string

Name of the fallback child

fallbackDescription

string

Description of the fallback child

namedOutcomes

array of integers

outcomeIds of the named children still open, in named-index order. A child that settles moves to settledNamedOutcomes

settledNamedOutcomes

array of integers

outcomeIds of named children already settled. Disjoint from namedOutcomes, matching outcomeMeta. A question can have settled children while it is still open

stats

object

Aggregate trading stats across the question's children. Always present; zero-valued when no fills. See Stats object below.

deployerAddress

string?

Permissionless-venue deployer address; null on validator-registered questions

deployerVenue

string?

Permissionless venue name; null on validator-registered questions

deployerFeeScale

string?

Multiplier applied to the deployer fee, e.g. "10". null on validator-registered questions and when the chain uses its default scale of 1

Stats object

All stats fields reflect orderbook trading. The object is always emitted — when there are no fills, every numeric field is zero and timestamps are 0.

Field
Type
Description

coin

string

Asset ID for this side

trades

integer

Number of fills

uniqueTraders

integer

Distinct users that traded this side

volumeNotional

string

Sum of px * sz across fills

volumeContracts

string

Sum of sz across fills

lastPrice

string

Price of the most recent fill

vwap

number

Volume-weighted average price

minPrice

string

Minimum fill price

maxPrice

string

Maximum fill price

avgTradeNotional

number

Mean px * sz

medianTradeNotional

number

Median px * sz

largestTrade

string

Maximum px * sz of any fill

firstTrade

integer

Timestamp (ms) of earliest fill

lastTrade

integer

Timestamp (ms) of latest fill

Question stats object

Question stats are intentionally trimmed compared to outcome stats. Price-shaped metrics (lastPrice, vwap, minPrice, maxPrice, largestTrade, avgTradeNotional, medianTradeNotional) don't aggregate cleanly across the children's YES + NO assets, so they aren't reported. There's no coin field — questions don't own a single asset. Settlement and the four HIP-4 conversion ops (Split Outcome, Negate Outcome, Merge Outcome, Merge Question) are excluded from all metrics.

Field
Type
Description

trades

integer

Number of orderbook matches across all child YES + NO assets. Counts each chain match exactly once (filters to dir = 'Buy'; every match emits one Buy + one Sell).

uniqueTraders

integer

Distinct users that traded any child asset (Buy or Sell).

volumeNotional

string

Sum of px * sz across dir = 'Buy' fills on any child.

volumeContracts

string

Sum of sz across dir = 'Buy' fills on any child.

firstTrade

integer

Timestamp (ms) of the earliest orderbook fill on any child.

lastTrade

integer

Timestamp (ms) of the latest orderbook fill on any child.

Target price formats

The targetPrice field on each outcome is a string whose format depends on the outcome's class.

priceBinary — a single numeric strike. The outcome resolves YES if the underlying's settle price meets the strike, NO otherwise.

priceBucket — outcomes belong to a parent question that defines priceThresholds (a sorted comma-separated list of 2 cut-points splitting the price line into 3 buckets). The question has 3 named children plus one fallback child. Each named child resolves YES if the settle price falls in its bucket; the fallback child resolves YES if all named children resolve NO. The format mirrors interval notation:

Child role

targetPrice value

Example (thresholds 80828, 81071)

First named child (index 0)

<t0

<80828

Middle named child (index 1)

[t0,t1)

[80828,81071)

Last named child (index 2)

>=t1

>=81071

Fallback child

raw threshold list

80828,81071

The fallback's literal comma-separated value signals "any price not covered by a named child" rather than a specific range. Use the parent question's priceThresholds field if you need to render the fallback's range yourself.

Response

The example covers a priceBucket child (outcomeId: 7609), the corresponding fallback child (7606), a standalone priceBinary outcome (7605), and a child of a different question (7470) — plus both parent questions. Question 275 shows non-zero stats (16 fills); question 303 shows the zero-state.


The optional search field matches case-insensitively against name, description, category and subCategory, combining with every other filter. A row matches when the whole query appears as a substring of one of those fields, or when every word of the query matches some word of a field:

  • exactly, or

  • as a prefix (for query words of at least 4 characters), or

  • within a spelling-error budget (Damerau-Levenshtein distance): words of 5–8 characters allow 1 error, 9 or more allow 2. Words of up to 4 characters get no error budget — tickers and venue codes like BTC never near-match.

Examples: "world cup" matches World Cup Final: Spain vs Argentina; so do "wolrd cup" (typo) and "spain argent" (partial words, any order). "BTX" does not match BTC. Result order and limit semantics are unchanged.

The kind filter

A single optional kind request field selects which markets are returned:

kind

Returns

"all" (default)

Both kinds in one outcomes / questions envelope.

"price"

Structured price markets only.

"canonical"

HIP-4 validator-voted (prose) markets only.

The response shape is identical regardless of kind; each row carries a kind field telling you which it is.

Nullability by kind. On a kind: "price" response the structured fields (class, underlying, expiry, targetPrice, period) are always populated and category / subCategory are null. On a kind: "canonical" response those structured fields are null and category / subCategory are populated. A kind: "all" response mixes both, so treat every structured field as nullable and branch on kind.

Last updated