GET

/api/v1/signals/perps

Deprecated alias for calibrated asset price outlooks

Compatibility alias for GET /api/v1/price-outlooks. It returns the same asset-price/1 response across equities, crypto, and commodities. New clients should use the canonical price-outlooks route and get_price_outlooks tool.

Price $0.01Auth x-quotient-api-key or x402Limit 20/s · 600/min · 20,000/day

Parameters

NameInTypeDescription
assetquerystringOptional asset key tail or full namespaced assetKey.
anchorquerystringOptional open-set anchor cadence.
asset_classquerystringOptional asset class; company is accepted as an alias for equity.

Responses

200: The canonical price-outlooks response
FieldTypeDescription
as_of
required
string

Format: date-time

contract
required
"asset-price/1"
filters
required
object
filters fields
FieldTypeDescription
asset
required
string | null
anchor
required
string | null
asset_class
required
string | null
series_count
required
integer
series
required
PriceOutlookSeriesEntry[]
series fields
FieldTypeDescription
series_id
required
string{assetKey}:price-outlook:{anchorType}. Read asset_key and anchor_type from their own fields; asset keys contain a colon,; use the explicit fields.
asset_key
required
stringNamespaced asset key, e.g. commodity:wti, crypto:btc, company:nvda
asset_class
required
string | nullcommodity | crypto | equity
anchor_type
required
stringAnchor cadence, e.g. daily, two-day, weekly, monthly. The cadence set is open.
display_namestring | null
venuestring | nullDeprecated display alias; use basis_groups[].contributing_venues.
contributing_venues
required
string[]
venue_seriesstring | null
observablestring | null
mode
required
string | nullsignal = a venue ladder informs the outlook blend; coverage = a house/Q outlook without one. This diagnostic does not indicate whether a current PriceSignal exists; read price_signals for that separate call.
mode_reasonstring | null
headlinestring | null
maturitystring | null
is_primary_horizon
required
booleanTrue for the nearest still-open anchor for this asset in the response. Selection is chronological including neutral horizons.
basis_groups
required
PriceOutlookBasisGroup[]Authoritative settlement-source groups. Presence, including an empty array, prohibits fallback to legacy singular fields.
basis_groups fields
FieldTypeDescription
source
required
"basis-head" | "legacy-head-fallback"Outlook pointer source. basis-head selects the per-series, basis, and target-family pointer. legacy-head-fallback uses the newest legacy outlook as an exact-Hyperliquid group when basis heads are absent. Basis-head groups take precedence.
basis_id
required
string
target_family_key
required
string | nullContent-derived compatible-curve identity. Each target family is evaluated separately within a basis_id.
forecast_target_keys
required
string[]Exact contract/rung target keys represented by this curve.
forecast_target_key
required
string | null
resolution_reference
required
SourceReferenceV1Settlement observable and contract semantics. provider identifies the instrument used by the settlement rules. Estimated values are attributed to the estimate block's provider. Asset identity is recorded separately.
resolution_reference fields
FieldTypeDescription
schema_version
required
"1"
basis_id
required
string | null
settlement_spec_id
required
string | null
forecast_target_keystring | null
observable_id
required
string | null
provider
required
string | null
instrument_id
required
string | null
symbolstring | null
contract_monthstring | null
roll_rulestring | null
unitstring | null
currencystring | null
price_fieldstring | null
candle_intervalstring | null
sessionstring | null
windowstring | null
timezonestring | null
roundingstring | null
value
required
number | null
value_kind
required
ValueKindobserved = a provider print. estimated = Quotient's basis estimate carrying a mandatory estimate block; the value belongs to the estimator, not to the settlement provider the rules name.
estimate
required
EstimateV1 | nullPresent exactly when value_kind is estimated; a malformed block fails closed as a missing value.
estimate fields
FieldTypeDescription
provider
required
stringThe estimator, e.g. quotient-basis. Attribution belongs here, not to the rules provider.
method
required
stringEstimator method identity, e.g. ewma-log/1.
ci_low
required
number
ci_high
required
number
inputs_at
required
stringWhen the estimator's inputs were observed.

Format: date-time

estimate_version
required
string | null
provider_timestampstring | null

Format: date-time

source_timestampstring | null

Format: date-time

observed_atstring | null

Format: date-time

freshness
required
CapabilityState
collection_transportstring | null
strikenumber | null
comparatorstring | null
fixing_window_startstring | null
fixing_window_endstring | null
barrier_window_startstring | null
barrier_window_endstring | null
payout_semanticsstring | null
rules_urlstring | null

Format: uri

rules_hashstring | null
rules_versionstring | null
mapping_provenancestring | null
mapping_status
required
CapabilityState
reference_quote
required
UnderlyingObservationV1 | null
reference_quote fields
FieldTypeDescription
schema_version
required
"1"
observation_idstring | null
basis_id
required
string | null
observable_id
required
string | null
value
required
number | nullUnderlying settlement-reference value.
value_kind
required
ValueKindobserved = a provider print. estimated = Quotient's basis estimate carrying a mandatory estimate block; the value belongs to the estimator, not to the settlement provider the rules name.
estimate
required
EstimateV1 | nullPresent exactly when value_kind is estimated; a malformed block fails closed as a missing value.
estimate fields
FieldTypeDescription
provider
required
stringThe estimator, e.g. quotient-basis. Attribution belongs here, not to the rules provider.
method
required
stringEstimator method identity, e.g. ewma-log/1.
ci_low
required
number
ci_high
required
number
inputs_at
required
stringWhen the estimator's inputs were observed.

Format: date-time

estimate_version
required
string | null
provider_timestampstring | null

Format: date-time

source_timestampstring | null

Format: date-time

observed_at
required
string | null

Format: date-time

freshness
required
CapabilityState
confidencenumber | null
publisherstring | nullThe estimator (quotient-basis) when value_kind is estimated.
collection_transportstring | null
execution_reference
required
SourceReferenceV1 | nullSettlement observable and contract semantics. provider identifies the instrument used by the settlement rules. Estimated values are attributed to the estimate block's provider. Asset identity is recorded separately.
execution_reference fields
FieldTypeDescription
schema_version
required
"1"
basis_id
required
string | null
settlement_spec_id
required
string | null
forecast_target_keystring | null
observable_id
required
string | null
provider
required
string | null
instrument_id
required
string | null
symbolstring | null
contract_monthstring | null
roll_rulestring | null
unitstring | null
currencystring | null
price_fieldstring | null
candle_intervalstring | null
sessionstring | null
windowstring | null
timezonestring | null
roundingstring | null
value
required
number | null
value_kind
required
ValueKindobserved = a provider print. estimated = Quotient's basis estimate carrying a mandatory estimate block; the value belongs to the estimator, not to the settlement provider the rules name.
estimate
required
EstimateV1 | nullPresent exactly when value_kind is estimated; a malformed block fails closed as a missing value.
estimate fields
FieldTypeDescription
provider
required
stringThe estimator, e.g. quotient-basis. Attribution belongs here, not to the rules provider.
method
required
stringEstimator method identity, e.g. ewma-log/1.
ci_low
required
number
ci_high
required
number
inputs_at
required
stringWhen the estimator's inputs were observed.

Format: date-time

estimate_version
required
string | null
provider_timestampstring | null

Format: date-time

source_timestampstring | null

Format: date-time

observed_atstring | null

Format: date-time

freshness
required
CapabilityState
collection_transportstring | null
strikenumber | null
comparatorstring | null
fixing_window_startstring | null
fixing_window_endstring | null
barrier_window_startstring | null
barrier_window_endstring | null
payout_semanticsstring | null
rules_urlstring | null

Format: uri

rules_hashstring | null
rules_versionstring | null
mapping_provenancestring | null
mapping_status
required
CapabilityState
basis_gap
required
BasisGapV1 | nullDisplay-only settlement-versus-execution basis observation. Values retain their own settlement and execution sources.
basis_gap fields
FieldTypeDescription
settlement_value
required
number
settlement_value_kind
required
ValueKindobserved = a provider print. estimated = Quotient's basis estimate carrying a mandatory estimate block; the value belongs to the estimator, not to the settlement provider the rules name.
execution_value
required
number
absolute
required
number
percentage
required
number | null
observed_at
required
string | null

Format: date-time

feed_basis
required
FeedBasisV1 | nullThe asset's learned venue↔Hyperliquid feed gap: each settled venue ladder's own closing print against the Hyperliquid close at the same fixing instant, averaged per (asset, venue). gap_pct > 0 means the venue's settlement feed prints above the Hyperliquid mark. Null until enough settled prints accumulate (typically ~3 daily fixings).
feed_basis fields
FieldTypeDescription
venue
required
string | nullThe venue the gap was learned on, e.g. kalshi.
gap_log
required
numberln(venue settlement print) − ln(Hyperliquid close), exponentially weighted.
gap_pct
required
numberexp(gap_log) − 1: the venue feed's premium over Hyperliquid.
sigma_log
required
number | null
observation_count
required
integer | null
method
required
string | null
as_of
required
string | null

Format: date-time

last_observed_at
required
string | null

Format: date-time

basis_status
required
BasisStatus
grounding_status
required
GroundingStatusactionable requires a verified settlement mapping and every required fresh source input. estimated authorizes the same reads as actionable and are attributed to Quotient: the reference value is Quotient's basis estimate (value_kind estimated) with a tight confidence interval. Ordering: actionable > estimated > diagnostic > unavailable; automated use and execution handoffs require actionable or estimated grounding.
suppression_reason
required
string | null
outlook
required
PriceOutlookReadingThe latest calibrated reading for one series: all five published quantiles, named scenarios, a whole-distribution directional take, and the separate execution state. The newest revision per anchor wins.
outlook fields
FieldTypeDescription
outlook_id
required
string
anchor_date
required
stringYYYY-MM-DD settlement anchor
anchor_atstring | null

Format: date-time

window_start_atstring | null

Format: date-time

horizon_daysinteger | null
status
required
string | null
state
required
string | null
side
required
string | null
strength
required
string | null
lean_side
required
string | nullSub-threshold p50-based state-machine lean. Current execution calls are returned in price_signals.
lean_sigma
required
number | null
revisioninteger | null
revisions
required
integerRecorded revisions for this anchor
median_price
required
number | null
p10
required
number | null
p25
required
number | null
p75
required
number | null
p90
required
number | null
scenarios
required
PriceOutlookScenariosHuman names for the five published terminal-price quantiles: p10 tail, p25 bear, p50 base, p75 bull, p90 tail. These are points on one curve, not competing estimates; p75 has 75% of represented outcomes at or below it and 25% above it.
scenarios fields
FieldTypeDescription
downside_tail
required
PriceOutlookScenario
downside_tail fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
bear_case
required
PriceOutlookScenario
bear_case fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
base_case
required
PriceOutlookScenario
base_case fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
bull_case
required
PriceOutlookScenario
bull_case fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
upside_tail
required
PriceOutlookScenario
upside_tail fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
directional_take
required
PriceOutlookDirectionalTake | nullDescriptive bullish/bearish read from the represented terminal-price distribution. It integrates both probability and move magnitude across the curve. The value describes the forecast distribution. Current execution calls are returned in price_signals.
directional_take fields
FieldTypeDescription
side
required
"bullish" | "bearish" | "neutral"Descriptive label: bullish at score_sigma >= 0.05, bearish at <= -0.05, otherwise neutral. Execution calls use separate publication criteria.
strength
required
"neutral" | "lean" | "moderate" | "strong"Descriptive absolute score band: neutral below 0.05σ, lean below 0.15σ, moderate below 0.30σ, then strong. The bands describe score magnitude.
label
required
stringStable display label: Neutral, Leans bullish/bearish, Bullish/Bearish, or Strongly bullish/bearish.
score_sigma
required
numberE[ln(S_T / spot_at_obs)] across the represented terminal-price curve, divided by sigma_diffusive. Use this field to rank comparable outlooks.
payoff_balance
required
numberExpected log-upside minus downside divided by their sum

Minimum: -1; Maximum: 1

probability_above_spot
required
number

Minimum: 0; Maximum: 1

expected_price
required
number | null
expected_return_pct
required
number | null
expected_log_return
required
number
expected_upside_log
required
number

Minimum: 0

expected_downside_log
required
number

Minimum: 0

range_status
required
"complete" | "clamped" | "unknown"
truncated_percentiles
required
number[]
method
required
"full_quantile_curve" | "published_percentiles"published_percentiles is the backward-compatible five-quantile approximation for older records
version
required
string
is_price_signal
required
false
auditPriceOutlookAudit | nullImmutable calculation audit. Null on older records. Source creation times belong to retained Q forecasts, not outlook publication or research-evidence age. An interpolated Q leg inherits original weekly source lineage. Complete lineage and a contributing Q leg are separate gates. Generation versions identify the price pipeline; source forecasting-model versions remain null when unknown.
audit fields
FieldTypeDescription
version
required
"price-outlook-audit/1"
source_manifest_complete
required
boolean
q_leg_present
required
boolean
q_leg_contributing
required
boolean
q_interpolated
required
boolean
market_backed_rungs
required
integer | null

Minimum: 0

synthetic_backed_rungs
required
integer | null

Minimum: 0

q_stale_dropped
required
integer | null

Minimum: 0

retained_q_rung_count
required
integer

Minimum: 0

distinct_q_forecast_count
required
integer

Minimum: 0

q_sources_missing_timestamp
required
integer

Minimum: 0

q_market_backed
required
boolean | null
source_staleness_disabled
required
boolean | null
oldest_q_source_at
required
string | null

Format: date-time

newest_q_source_at
required
string | null

Format: date-time

quote_collected_at
required
string | null

Format: date-time

max_epoch_source_age_hours
required
number | null

Minimum: 0

max_daily_source_age_hours
required
number | null

Minimum: 0

generation
required
object
generation fields
FieldTypeDescription
contract_versionstring | null
config_shastring | null
config_versionstring | null
pool_versionstring | null
decide_versionstring | null
manifest_sha256string | null
source_run_idstring | null
backfilledboolean | null
q_sources
required
object[]
q_sources fields
FieldTypeDescription
rung_id
required
string | null
forecast_id
required
string | null
kind
required
"venue" | "synthetic"
created_at
required
string | null

Format: date-time

probability
required
number | null

Minimum: 0; Maximum: 1

model_version
required
string | null
config_version
required
string | null
spot_at_obsnumber | nullSpot price at observation time
spot_gap_pctnumber | nullmedian_price / spot_at_obs − 1. On asset-price/2 records this is the displacement the side is decided from (sides are decided against the live Hyperliquid price in every mode); null on records before 2026-08-18
spot_gap_sigmanumber | nullThe spot gap in horizon-sigma units; null on records before 2026-08-18
spot_alignedboolean | nullWhether the side points the same way as median-vs-spot. True on asset-price/2 records (the side is decided from that very gap), except a commodity outlook holding its old side while a flip pends its second confirming read; false otherwise survives only on records from the venue-refereed era (2026-08-18 through the cutover). Null when sideless or on records before 2026-08-18
sigma_diffusivenumber | null
sigma_totalnumber | null
implied_meannumber | null
implied_sigmanumber | null
displacement_sigmanumber | nullMedian-vs-reference displacement in sigma units
edge_pctnumber | null
ref_mediannumber | null
reference_basisstring | null
tiltPriceOutlookTilt | nullPost-blend factor tilt attribution; null on records published before the tilt engine
tilt fields
FieldTypeDescription
applied
required
booleanWhether the tilt was applied to the published distribution
total_sigma
required
numberNet capped sigma push across all components
components
required
PriceOutlookTiltComponent[]
components fields
FieldTypeDescription
factor
required
stringFactor identity, e.g. venue_gap or a macro factor key
sigma_push
required
numberThe signed, capped sigma push this factor contributed. 0.0 with a reason when the factor was configured but carried no evidence
weight
required
number | null
cap
required
number | nullPer-factor sigma cap
inputs
required
object | nullFactor-specific provenance inputs, published verbatim for attribution
reason
required
string | nullWhy the push is zero or clamped, e.g. stale_observation or basket_empty
version
required
string | nullTilt contract version, e.g. tilt/1
freshness_statestring | null
freshness_reasonstring | null
observed_atstring | null

Format: date-time

published_atstring | null

Format: date-time

provenance
required
ForecastProvenanceV1
provenance fields
FieldTypeDescription
source_type
required
string | null
source_id
required
string | null
input_at
required
string | null

Format: date-time

model_version
required
string | null
config_version
required
string | null
evidence_epoch
required
string | null
input_hash
required
string | null
forecast_target_key
required
string | null
basis_id
required
string
price_signals
required
PriceSignalEntry[]The current PriceSignal only, on an exact Hyperliquid execution-basis group. Empty after neutral/stopped and empty on translated or estimated settlement groups.

Maximum items: 1

price_signals fields
FieldTypeDescription
is_price_signal
required
trueExplicit discriminator: this object is a current execution PriceSignal, unlike outlook.directional_take.
signal_id
required
string
outlook_idstring | nullThe reading the call was minted from
modestring | null
side
required
string | nulllong | short
strengthstring | null
revision
required
integer | null
supersedes_signal_idstring | null
entry_ref_pricenumber | nullReference price at publication used as the entry anchor
entry_ref_atstring | null

Format: date-time

entry_ref_basisstring | null
spot_gap_pctnumber | nulltarget / entry_ref_price − 1; on asset-price/2 calls the entry reference is the live Hyperliquid price the side was decided against. Null on calls before 2026-08-18
spot_alignedboolean | nullWhether the side pointed the same way as target-vs-entry at publication. Sides are decided against the live Hyperliquid price on new calls, so this is tautologically true there; false survives only on calls from the venue-refereed era (2026-08-18 through the asset-price/2 cutover). Null before 2026-08-18
targetnumber | null
band_lownumber | null
band_highnumber | null
wide_lownumber | null
wide_highnumber | null
stopnumber | null
stop_touch_probabilitynumber | null
stop_basisstring | null
stop_reasonstring | null
displacement_sigmanumber | null
edge_pctnumber | null
ref_mediannumber | null
reference_basisstring | null
valid_fromstring | null

Format: date-time

expires_atstring | null

Format: date-time

published_at
required
string | null

Format: date-time

confirmed_atstring | null

Format: date-time

confirming_revisionsinteger | null
confirming_span_hoursnumber | null
contributing_venues
required
string[]
outlook
required
PriceOutlookReading | nullExact-Hyperliquid basis-group mirror only; otherwise null.
outlook fields
FieldTypeDescription
outlook_id
required
string
anchor_date
required
stringYYYY-MM-DD settlement anchor
anchor_atstring | null

Format: date-time

window_start_atstring | null

Format: date-time

horizon_daysinteger | null
status
required
string | null
state
required
string | null
side
required
string | null
strength
required
string | null
lean_side
required
string | nullSub-threshold p50-based state-machine lean. Current execution calls are returned in price_signals.
lean_sigma
required
number | null
revisioninteger | null
revisions
required
integerRecorded revisions for this anchor
median_price
required
number | null
p10
required
number | null
p25
required
number | null
p75
required
number | null
p90
required
number | null
scenarios
required
PriceOutlookScenariosHuman names for the five published terminal-price quantiles: p10 tail, p25 bear, p50 base, p75 bull, p90 tail. These are points on one curve, not competing estimates; p75 has 75% of represented outcomes at or below it and 25% above it.
scenarios fields
FieldTypeDescription
downside_tail
required
PriceOutlookScenario
downside_tail fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
bear_case
required
PriceOutlookScenario
bear_case fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
base_case
required
PriceOutlookScenario
base_case fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
bull_case
required
PriceOutlookScenario
bull_case fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
upside_tail
required
PriceOutlookScenario
upside_tail fields
FieldTypeDescription
percentile
required
numberQuantile on the 0-1 scale

Minimum: 0; Maximum: 1

price
required
number | null
return_pct
required
number | nullprice / spot_at_obs - 1
directional_take
required
PriceOutlookDirectionalTake | nullDescriptive bullish/bearish read from the represented terminal-price distribution. It integrates both probability and move magnitude across the curve. The value describes the forecast distribution. Current execution calls are returned in price_signals.
directional_take fields
FieldTypeDescription
side
required
"bullish" | "bearish" | "neutral"Descriptive label: bullish at score_sigma >= 0.05, bearish at <= -0.05, otherwise neutral. Execution calls use separate publication criteria.
strength
required
"neutral" | "lean" | "moderate" | "strong"Descriptive absolute score band: neutral below 0.05σ, lean below 0.15σ, moderate below 0.30σ, then strong. The bands describe score magnitude.
label
required
stringStable display label: Neutral, Leans bullish/bearish, Bullish/Bearish, or Strongly bullish/bearish.
score_sigma
required
numberE[ln(S_T / spot_at_obs)] across the represented terminal-price curve, divided by sigma_diffusive. Use this field to rank comparable outlooks.
payoff_balance
required
numberExpected log-upside minus downside divided by their sum

Minimum: -1; Maximum: 1

probability_above_spot
required
number

Minimum: 0; Maximum: 1

expected_price
required
number | null
expected_return_pct
required
number | null
expected_log_return
required
number
expected_upside_log
required
number

Minimum: 0

expected_downside_log
required
number

Minimum: 0

range_status
required
"complete" | "clamped" | "unknown"
truncated_percentiles
required
number[]
method
required
"full_quantile_curve" | "published_percentiles"published_percentiles is the backward-compatible five-quantile approximation for older records
version
required
string
is_price_signal
required
false
auditPriceOutlookAudit | nullImmutable calculation audit. Null on older records. Source creation times belong to retained Q forecasts, not outlook publication or research-evidence age. An interpolated Q leg inherits original weekly source lineage. Complete lineage and a contributing Q leg are separate gates. Generation versions identify the price pipeline; source forecasting-model versions remain null when unknown.
audit fields
FieldTypeDescription
version
required
"price-outlook-audit/1"
source_manifest_complete
required
boolean
q_leg_present
required
boolean
q_leg_contributing
required
boolean
q_interpolated
required
boolean
market_backed_rungs
required
integer | null

Minimum: 0

synthetic_backed_rungs
required
integer | null

Minimum: 0

q_stale_dropped
required
integer | null

Minimum: 0

retained_q_rung_count
required
integer

Minimum: 0

distinct_q_forecast_count
required
integer

Minimum: 0

q_sources_missing_timestamp
required
integer

Minimum: 0

q_market_backed
required
boolean | null
source_staleness_disabled
required
boolean | null
oldest_q_source_at
required
string | null

Format: date-time

newest_q_source_at
required
string | null

Format: date-time

quote_collected_at
required
string | null

Format: date-time

max_epoch_source_age_hours
required
number | null

Minimum: 0

max_daily_source_age_hours
required
number | null

Minimum: 0

generation
required
object
generation fields
FieldTypeDescription
contract_versionstring | null
config_shastring | null
config_versionstring | null
pool_versionstring | null
decide_versionstring | null
manifest_sha256string | null
source_run_idstring | null
backfilledboolean | null
q_sources
required
object[]
q_sources fields
FieldTypeDescription
rung_id
required
string | null
forecast_id
required
string | null
kind
required
"venue" | "synthetic"
created_at
required
string | null

Format: date-time

probability
required
number | null

Minimum: 0; Maximum: 1

model_version
required
string | null
config_version
required
string | null
spot_at_obsnumber | nullSpot price at observation time
spot_gap_pctnumber | nullmedian_price / spot_at_obs − 1. On asset-price/2 records this is the displacement the side is decided from (sides are decided against the live Hyperliquid price in every mode); null on records before 2026-08-18
spot_gap_sigmanumber | nullThe spot gap in horizon-sigma units; null on records before 2026-08-18
spot_alignedboolean | nullWhether the side points the same way as median-vs-spot. True on asset-price/2 records (the side is decided from that very gap), except a commodity outlook holding its old side while a flip pends its second confirming read; false otherwise survives only on records from the venue-refereed era (2026-08-18 through the cutover). Null when sideless or on records before 2026-08-18
sigma_diffusivenumber | null
sigma_totalnumber | null
implied_meannumber | null
implied_sigmanumber | null
displacement_sigmanumber | nullMedian-vs-reference displacement in sigma units
edge_pctnumber | null
ref_mediannumber | null
reference_basisstring | null
tiltPriceOutlookTilt | nullPost-blend factor tilt attribution; null on records published before the tilt engine
tilt fields
FieldTypeDescription
applied
required
booleanWhether the tilt was applied to the published distribution
total_sigma
required
numberNet capped sigma push across all components
components
required
PriceOutlookTiltComponent[]
components fields
FieldTypeDescription
factor
required
stringFactor identity, e.g. venue_gap or a macro factor key
sigma_push
required
numberThe signed, capped sigma push this factor contributed. 0.0 with a reason when the factor was configured but carried no evidence
weight
required
number | null
cap
required
number | nullPer-factor sigma cap
inputs
required
object | nullFactor-specific provenance inputs, published verbatim for attribution
reason
required
string | nullWhy the push is zero or clamped, e.g. stale_observation or basket_empty
version
required
string | nullTilt contract version, e.g. tilt/1
freshness_statestring | null
freshness_reasonstring | null
observed_atstring | null

Format: date-time

published_atstring | null

Format: date-time

spot_at_obs
required
number | nullExact-Hyperliquid observation alias only; otherwise null.
price_signals
required
PriceSignalEntry[]Exact-Hyperliquid current-signal mirror only; otherwise empty.

Maximum items: 1

price_signals fields
FieldTypeDescription
is_price_signal
required
trueExplicit discriminator: this object is a current execution PriceSignal, unlike outlook.directional_take.
signal_id
required
string
outlook_idstring | nullThe reading the call was minted from
modestring | null
side
required
string | nulllong | short
strengthstring | null
revision
required
integer | null
supersedes_signal_idstring | null
entry_ref_pricenumber | nullReference price at publication used as the entry anchor
entry_ref_atstring | null

Format: date-time

entry_ref_basisstring | null
spot_gap_pctnumber | nulltarget / entry_ref_price − 1; on asset-price/2 calls the entry reference is the live Hyperliquid price the side was decided against. Null on calls before 2026-08-18
spot_alignedboolean | nullWhether the side pointed the same way as target-vs-entry at publication. Sides are decided against the live Hyperliquid price on new calls, so this is tautologically true there; false survives only on calls from the venue-refereed era (2026-08-18 through the asset-price/2 cutover). Null before 2026-08-18
targetnumber | null
band_lownumber | null
band_highnumber | null
wide_lownumber | null
wide_highnumber | null
stopnumber | null
stop_touch_probabilitynumber | null
stop_basisstring | null
stop_reasonstring | null
displacement_sigmanumber | null
edge_pctnumber | null
ref_mediannumber | null
reference_basisstring | null
valid_fromstring | null

Format: date-time

expires_atstring | null

Format: date-time

published_at
required
string | null

Format: date-time

confirmed_atstring | null

Format: date-time

confirming_revisionsinteger | null
confirming_span_hoursnumber | null
401: Unauthorized
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.
402: Payment Required
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.
403: Insufficient credits
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.
422: Invalid request parameters
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.
429: The caller exceeded a per-second, per-minute, daily, or concurrency limit. No credits are debited and no x402 payment is settled for this response.
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.

Set QUOTIENT_API_KEY in your shell and replace example identifiers with returned IDs before running a request.

curl
curl --request GET \
  --header "x-quotient-api-key: $QUOTIENT_API_KEY" \
  'https://quotient-api-gateway.onrender.com/api/v1/signals/perps'
200 · application/json
{
  "as_of": "2027-01-01T00:00:00Z",
  "contract": "asset-price/1",
  "filters": {
    "asset": "example",
    "anchor": "example",
    "asset_class": "example"
  },
  "series_count": 0,
  "series": [
    {
      "series_id": "example",
      "asset_key": "example",
      "asset_class": "example",
      "anchor_type": "example",
      "display_name": "example",
      "venue": "example",
      "contributing_venues": [
        "example"
      ],
      "venue_series": "example",
      "observable": "example",
      "mode": "example",
      "mode_reason": "example",
      "headline": "example",
      "maturity": "example",
      "is_primary_horizon": false,
      "basis_groups": [
        {
          "source": "basis-head",
          "basis_id": "example",
          "target_family_key": "example",
          "forecast_target_keys": [
            "example"
          ],
          "forecast_target_key": "example",
          "resolution_reference": {
            "schema_version": "1",
            "basis_id": "example",
            "settlement_spec_id": "example",
            "forecast_target_key": "example",
            "observable_id": "example",
            "provider": "example",
            "instrument_id": "example",
            "symbol": "example",
            "contract_month": "example",
            "roll_rule": "example",
            "unit": "example",
            "currency": "example",
            "price_field": "example",
            "candle_interval": "example",
            "session": "example",
            "window": "example",
            "timezone": "example",
            "rounding": "example",
            "value": 0,
            "value_kind": "observed",
            "estimate": {
              "provider": null,
              "method": null,
              "ci_low": null,
              "ci_high": null,
              "inputs_at": null,
              "estimate_version": null
            },
            "provider_timestamp": "2027-01-01T00:00:00Z",
            "source_timestamp": "2027-01-01T00:00:00Z",
            "observed_at": "2027-01-01T00:00:00Z",
            "freshness": "verified",
            "collection_transport": "example",
            "strike": 0,
            "comparator": "example",
            "fixing_window_start": "example",
            "fixing_window_end": "example",
            "barrier_window_start": "example",
            "barrier_window_end": "example",
            "payout_semantics": "example",
            "rules_url": "example",
            "rules_hash": "example",
            "rules_version": "example",
            "mapping_provenance": "example",
            "mapping_status": "verified"
          },
          "reference_quote": {
            "schema_version": "1",
            "observation_id": "example",
            "basis_id": "example",
            "observable_id": "example",
            "value": 0,
            "value_kind": "observed",
            "estimate": {
              "provider": null,
              "method": null,
              "ci_low": null,
              "ci_high": null,
              "inputs_at": null,
              "estimate_version": null
            },
            "provider_timestamp": "2027-01-01T00:00:00Z",
            "source_timestamp": "2027-01-01T00:00:00Z",
            "observed_at": "2027-01-01T00:00:00Z",
            "freshness": "verified",
            "confidence": 0,
            "publisher": "example",
            "collection_transport": "example"
          },
          "execution_reference": {
            "schema_version": "1",
            "basis_id": "example",
            "settlement_spec_id": "example",
            "forecast_target_key": "example",
            "observable_id": "example",
            "provider": "example",
            "instrument_id": "example",
            "symbol": "example",
            "contract_month": "example",
            "roll_rule": "example",
            "unit": "example",
            "currency": "example",
            "price_field": "example",
            "candle_interval": "example",
            "session": "example",
            "window": "example",
            "timezone": "example",
            "rounding": "example",
            "value": 0,
            "value_kind": "observed",
            "estimate": {
              "provider": null,
              "method": null,
              "ci_low": null,
              "ci_high": null,
              "inputs_at": null,
              "estimate_version": null
            },
            "provider_timestamp": "2027-01-01T00:00:00Z",
            "source_timestamp": "2027-01-01T00:00:00Z",
            "observed_at": "2027-01-01T00:00:00Z",
            "freshness": "verified",
            "collection_transport": "example",
            "strike": 0,
            "comparator": "example",
            "fixing_window_start": "example",
            "fixing_window_end": "example",
            "barrier_window_start": "example",
            "barrier_window_end": "example",
            "payout_semantics": "example",
            "rules_url": "example",
            "rules_hash": "example",
            "rules_version": "example",
            "mapping_provenance": "example",
            "mapping_status": "verified"
          },
          "basis_gap": {
            "settlement_value": 0,
            "settlement_value_kind": "observed",
            "execution_value": 0,
            "absolute": 0,
            "percentage": 0,
            "observed_at": "2027-01-01T00:00:00Z"
          },
          "feed_basis": {
            "venue": "example",
            "gap_log": 0,
            "gap_pct": 0,
            "sigma_log": 0,
            "observation_count": 0,
            "method": "example",
            "as_of": "2027-01-01T00:00:00Z",
            "last_observed_at": "2027-01-01T00:00:00Z"
          },
          "basis_status": "verified",
          "grounding_status": "actionable",
          "suppression_reason": "example",
          "outlook": {
            "outlook_id": "example",
            "anchor_date": "example",
            "anchor_at": "2027-01-01T00:00:00Z",
            "window_start_at": "2027-01-01T00:00:00Z",
            "horizon_days": 0,
            "status": "example",
            "state": "example",
            "side": "example",
            "strength": "example",
            "lean_side": "example",
            "lean_sigma": 0,
            "revision": 0,
            "revisions": 0,
            "median_price": 0,
            "p10": 0,
            "p25": 0,
            "p75": 0,
            "p90": 0,
            "scenarios": {
              "downside_tail": null,
              "bear_case": null,
              "base_case": null,
              "bull_case": null,
              "upside_tail": null
            },
            "directional_take": {
              "side": null,
              "strength": null,
              "label": null,
              "score_sigma": null,
              "payoff_balance": null,
              "probability_above_spot": null,
              "expected_price": null,
              "expected_return_pct": null,
              "expected_log_return": null,
              "expected_upside_log": null,
              "expected_downside_log": null,
              "range_status": null,
              "truncated_percentiles": null,
              "method": null,
              "version": null,
              "is_price_signal": null
            },
            "audit": {
              "version": null,
              "source_manifest_complete": null,
              "q_leg_present": null,
              "q_leg_contributing": null,
              "q_interpolated": null,
              "market_backed_rungs": null,
              "synthetic_backed_rungs": null,
              "q_stale_dropped": null,
              "retained_q_rung_count": null,
              "distinct_q_forecast_count": null,
              "q_sources_missing_timestamp": null,
              "q_market_backed": null,
              "source_staleness_disabled": null,
              "oldest_q_source_at": null,
              "newest_q_source_at": null,
              "quote_collected_at": null,
              "max_epoch_source_age_hours": null,
              "max_daily_source_age_hours": null,
              "generation": null,
              "q_sources": null
            },
            "spot_at_obs": 0,
            "spot_gap_pct": 0,
            "spot_gap_sigma": 0,
            "spot_aligned": false,
            "sigma_diffusive": 0,
            "sigma_total": 0,
            "implied_mean": 0,
            "implied_sigma": 0,
            "displacement_sigma": 0,
            "edge_pct": 0,
            "ref_median": 0,
            "reference_basis": "example",
            "tilt": {
              "applied": null,
              "total_sigma": null,
              "components": null,
              "version": null
            },
            "freshness_state": "example",
            "freshness_reason": "example",
            "observed_at": "2027-01-01T00:00:00Z",
            "published_at": "2027-01-01T00:00:00Z"
          },
          "provenance": {
            "source_type": "example",
            "source_id": "example",
            "input_at": "2027-01-01T00:00:00Z",
            "model_version": "example",
            "config_version": "example",
            "evidence_epoch": "example",
            "input_hash": "example",
            "forecast_target_key": "example",
            "basis_id": "example"
          },
          "price_signals": [
            {
              "is_price_signal": null,
              "signal_id": null,
              "outlook_id": null,
              "mode": null,
              "side": null,
              "strength": null,
              "revision": null,
              "supersedes_signal_id": null,
              "entry_ref_price": null,
              "entry_ref_at": null,
              "entry_ref_basis": null,
              "spot_gap_pct": null,
              "spot_aligned": null,
              "target": null,
              "band_low": null,
              "band_high": null,
              "wide_low": null,
              "wide_high": null,
              "stop": null,
              "stop_touch_probability": null,
              "stop_basis": null,
              "stop_reason": null,
              "displacement_sigma": null,
              "edge_pct": null,
              "ref_median": null,
              "reference_basis": null,
              "valid_from": null,
              "expires_at": null,
              "published_at": null,
              "confirmed_at": null,
              "confirming_revisions": null,
              "confirming_span_hours": null
            }
          ],
          "contributing_venues": [
            "example"
          ]
        }
      ],
      "outlook": {
        "outlook_id": "example",
        "anchor_date": "example",
        "anchor_at": "2027-01-01T00:00:00Z",
        "window_start_at": "2027-01-01T00:00:00Z",
        "horizon_days": 0,
        "status": "example",
        "state": "example",
        "side": "example",
        "strength": "example",
        "lean_side": "example",
        "lean_sigma": 0,
        "revision": 0,
        "revisions": 0,
        "median_price": 0,
        "p10": 0,
        "p25": 0,
        "p75": 0,
        "p90": 0,
        "scenarios": {
          "downside_tail": {
            "percentile": 0,
            "price": 0,
            "return_pct": 0
          },
          "bear_case": {
            "percentile": 0,
            "price": 0,
            "return_pct": 0
          },
          "base_case": {
            "percentile": 0,
            "price": 0,
            "return_pct": 0
          },
          "bull_case": {
            "percentile": 0,
            "price": 0,
            "return_pct": 0
          },
          "upside_tail": {
            "percentile": 0,
            "price": 0,
            "return_pct": 0
          }
        },
        "directional_take": {
          "side": "bullish",
          "strength": "neutral",
          "label": "example",
          "score_sigma": 0,
          "payoff_balance": -1,
          "probability_above_spot": 0,
          "expected_price": 0,
          "expected_return_pct": 0,
          "expected_log_return": 0,
          "expected_upside_log": 0,
          "expected_downside_log": 0,
          "range_status": "complete",
          "truncated_percentiles": [
            0
          ],
          "method": "full_quantile_curve",
          "version": "example",
          "is_price_signal": false
        },
        "audit": {
          "version": "price-outlook-audit/1",
          "source_manifest_complete": false,
          "q_leg_present": false,
          "q_leg_contributing": false,
          "q_interpolated": false,
          "market_backed_rungs": 0,
          "synthetic_backed_rungs": 0,
          "q_stale_dropped": 0,
          "retained_q_rung_count": 0,
          "distinct_q_forecast_count": 0,
          "q_sources_missing_timestamp": 0,
          "q_market_backed": false,
          "source_staleness_disabled": false,
          "oldest_q_source_at": "2027-01-01T00:00:00Z",
          "newest_q_source_at": "2027-01-01T00:00:00Z",
          "quote_collected_at": "2027-01-01T00:00:00Z",
          "max_epoch_source_age_hours": 0,
          "max_daily_source_age_hours": 0,
          "generation": {
            "contract_version": "example",
            "config_sha": "example",
            "config_version": "example",
            "pool_version": "example",
            "decide_version": "example",
            "manifest_sha256": "example",
            "source_run_id": "example",
            "backfilled": false
          },
          "q_sources": [
            {
              "rung_id": null,
              "forecast_id": null,
              "kind": null,
              "created_at": null,
              "probability": null,
              "model_version": null,
              "config_version": null
            }
          ]
        },
        "spot_at_obs": 0,
        "spot_gap_pct": 0,
        "spot_gap_sigma": 0,
        "spot_aligned": false,
        "sigma_diffusive": 0,
        "sigma_total": 0,
        "implied_mean": 0,
        "implied_sigma": 0,
        "displacement_sigma": 0,
        "edge_pct": 0,
        "ref_median": 0,
        "reference_basis": "example",
        "tilt": {
          "applied": false,
          "total_sigma": 0,
          "components": [
            {
              "factor": null,
              "sigma_push": null,
              "weight": null,
              "cap": null,
              "inputs": null,
              "reason": null
            }
          ],
          "version": "example"
        },
        "freshness_state": "example",
        "freshness_reason": "example",
        "observed_at": "2027-01-01T00:00:00Z",
        "published_at": "2027-01-01T00:00:00Z"
      },
      "spot_at_obs": 0,
      "price_signals": [
        {
          "is_price_signal": true,
          "signal_id": "example",
          "outlook_id": "example",
          "mode": "example",
          "side": "example",
          "strength": "example",
          "revision": 0,
          "supersedes_signal_id": "example",
          "entry_ref_price": 0,
          "entry_ref_at": "2027-01-01T00:00:00Z",
          "entry_ref_basis": "example",
          "spot_gap_pct": 0,
          "spot_aligned": false,
          "target": 0,
          "band_low": 0,
          "band_high": 0,
          "wide_low": 0,
          "wide_high": 0,
          "stop": 0,
          "stop_touch_probability": 0,
          "stop_basis": "example",
          "stop_reason": "example",
          "displacement_sigma": 0,
          "edge_pct": 0,
          "ref_median": 0,
          "reference_basis": "example",
          "valid_from": "2027-01-01T00:00:00Z",
          "expires_at": "2027-01-01T00:00:00Z",
          "published_at": "2027-01-01T00:00:00Z",
          "confirmed_at": "2027-01-01T00:00:00Z",
          "confirming_revisions": 0,
          "confirming_span_hours": 0
        }
      ]
    }
  ]
}