GET

/api/v1/portfolio

Quotient intelligence for a wallet's portfolio across venues

Returns wallet positions joined to the latest forecast, published signal, and calculations using the position's own side. Omitting venues returns the legacy Polymarket shape; include_perps=true adds Polymarket perps. Legacy Polymarket upstream failures return 502 upstream_unavailable. Passing venues returns separate polymarket, polymarket_perps, limitless, and hyperliquid results with per-venue wallets, positions, and availability status. Each venue returns its complete fetched positions or status=unavailable. Kalshi and Polymarket US currently lack a keyless wallet-addressed positions API.

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

Parameters

NameInTypeDescription
walletquerystringWallet address used for every requested venue. Required unless a per-venue wallet is supplied for each one. For Polymarket this is the proxy wallet.

Pattern: ^0x[0-9a-fA-F]{40}$

venuesquerystringComma-separated venues for the multi-venue report: polymarket, polymarket_perps, limitless, hyperliquid, or all. Omit for the legacy Polymarket-only response.
polymarket_walletquerystringOverrides wallet for Polymarket only (proxy wallet).

Pattern: ^0x[0-9a-fA-F]{40}$

polymarket_perps_walletquerystringOverrides wallet for Polymarket perps only.

Pattern: ^0x[0-9a-fA-F]{40}$

limitless_walletquerystringOverrides wallet for Limitless only.

Pattern: ^0x[0-9a-fA-F]{40}$

hyperliquid_walletquerystringOverrides wallet for Hyperliquid only (the trading EOA).

Pattern: ^0x[0-9a-fA-F]{40}$

size_thresholdquerynumberMinimum position size to include (passed to the Polymarket data API)

Default: 1; Minimum: 0

include_perpsquerybooleanLegacy mode only: annex Polymarket perps positions. In multi-venue mode request the polymarket_perps venue instead.

Default: false

Responses

200: Positions joined to Quotient coverage. Legacy shape without `venues`; the multi-venue envelope with it.
FieldTypeDescription
Alternative 1PortfolioResponse

Exactly one alternative

Alternative 1 fields
FieldTypeDescription
wallet
required
string
as_of
required
string

Format: date-time

value_usdnumberSum of open position values
positions_countinteger
covered_countinteger
unmatched_countinteger
positions_cappedbooleanTrue when the wallet may hold more than the 1500-position fetch cap
positions
required
PortfolioPosition[]
positions fields
FieldTypeDescription
condition_idstring
titlestring | null
slugstring | null
event_slugstring | null
outcomestring | nullThe held outcome (Yes/No; other values are uncovered)
sizenumberShares held
avg_pricenumber | null
cur_pricenumber | nullLive price of the held outcome token (data-api)
current_value_usdnumber | null
cash_pnlnumber | null
percent_pnlnumber | null
redeemableboolean
end_datestring | null
quotientobjectQuotient coverage for this position
quotient fields
FieldTypeDescription
coveredboolean
marketobject | null
market fields
FieldTypeDescription
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
nativeEventId
required
string | null
seriesTicker
required
string | null
marketKey
required
string
quotientMarketId
required
stringStable Quotient market-page id: bare numeric for legacy Polymarket rows, venue-prefixed (kalshi:TICKER, polymarket_us:123, …) elsewhere. quotientUrl is exactly https://quotient.social/markets/{quotientMarketId} (URL-encoded) — the id form the market page resolves for every venue. A market with no Quotient coverage yet may not have a page.
slug
required
string | null
marketUrl
required
string | nullConnector-owned market page URL; null when unavailable.

Format: uri

sourceUrl
required
string | nullConnector provenance or API source URL.

Format: uri

broker_channels
required
"robinhood"[]Retail brokers that carry this exact venue contract (same order book, same settlement). A broker distributes the venue contract; venue and marketKey remain the contract's identity. Today only robinhood, stamped on Kalshi rows from Robinhood's public listings; empty when no broker lists the market. Filter with topic=robinhood on /markets, /markets/mispriced and /signals, or tag=robinhood on /markets/search.
robinhood_category
required
string | nullRobinhood's own category slug for the listing (economics, politics, crypto, climate, …); null when not listed on Robinhood.
robinhood_url
required
string | nullDeep link to the Robinhood event page; null when not listed on Robinhood.

Format: uri

question
required
string | null
quotientUrl
required
string | null
polymarketUrl
required
string | nullLegacy Polymarket navigation alias. Populated only for Polymarket International rows and null for Polymarket US, Kalshi, and Limitless; use marketUrl for venue-neutral navigation.
relationships
required
RelationshipsEnvelopeBounded, non-recursive graph references. Each category publishes at most 50 lightweight refs. These refs contain no forecast probability, venue odds, aggregate asset probability, or inferred causal AFFECTS edge.
relationships fields
FieldTypeDescription
assets
required
RelationshipAssetRef[]

Maximum items: 50

assets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string

Format: uuid

assetKey
required
string
name
required
string
ticker
required
string | null
asset_type
required
string
markets
required
RelationshipMarketRef[]

Maximum items: 50

markets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
marketKey
required
string
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
question
required
string | null
signals
required
RelationshipSignalRef[]

Maximum items: 50

signals fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string
signal_type
required
"prediction_market"
canonical_endpoint
required
"/api/v1/signals"
side
required
string | null
published_at
required
string | null
truncated
required
object
truncated fields
FieldTypeDescription
assets
required
boolean
markets
required
boolean
signals
required
boolean
forecastobject | null
forecast fields
FieldTypeDescription
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless" | nullPrediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market
required
CanonicalMarketRouting | null
market fields
FieldTypeDescription
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
nativeEventId
required
string | null
seriesTicker
required
string | null
marketKey
required
string
quotientMarketId
required
stringStable Quotient market-page id: bare numeric for legacy Polymarket rows, venue-prefixed (kalshi:TICKER, polymarket_us:123, …) elsewhere. quotientUrl is exactly https://quotient.social/markets/{quotientMarketId} (URL-encoded) — the id form the market page resolves for every venue. A market with no Quotient coverage yet may not have a page.
slug
required
string | null
marketUrl
required
string | nullConnector-owned market page URL; null when unavailable.

Format: uri

sourceUrl
required
string | nullConnector provenance or API source URL.

Format: uri

broker_channels
required
"robinhood"[]Retail brokers that carry this exact venue contract (same order book, same settlement). A broker distributes the venue contract; venue and marketKey remain the contract's identity. Today only robinhood, stamped on Kalshi rows from Robinhood's public listings; empty when no broker lists the market. Filter with topic=robinhood on /markets, /markets/mispriced and /signals, or tag=robinhood on /markets/search.
robinhood_category
required
string | nullRobinhood's own category slug for the listing (economics, politics, crypto, climate, …); null when not listed on Robinhood.
robinhood_url
required
string | nullDeep link to the Robinhood event page; null when not listed on Robinhood.

Format: uri

id
required
string
probability
required
number
created_at
required
string

Format: date-time

delta_from_priornumber | null
refresh_reasonstring | null
blufstring | null
thesis
required
string | null
resolution_pathwayResolutionPathwayThe market contract and forecast crux needed to review how this forecast can resolve.
resolution_pathway fields
FieldTypeDescription
criteria
required
string | null
crux
required
string | null
deadline
required
string | null

Format: date-time

source
required
string | null
conviction_tierinteger | null
relationships
required
RelationshipsEnvelopeBounded, non-recursive graph references. Each category publishes at most 50 lightweight refs. These refs contain no forecast probability, venue odds, aggregate asset probability, or inferred causal AFFECTS edge.
relationships fields
FieldTypeDescription
assets
required
RelationshipAssetRef[]

Maximum items: 50

assets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string

Format: uuid

assetKey
required
string
name
required
string
ticker
required
string | null
asset_type
required
string
markets
required
RelationshipMarketRef[]

Maximum items: 50

markets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
marketKey
required
string
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
question
required
string | null
signals
required
RelationshipSignalRef[]

Maximum items: 50

signals fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string
signal_type
required
"prediction_market"
canonical_endpoint
required
"/api/v1/signals"
side
required
string | null
published_at
required
string | null
truncated
required
object
truncated fields
FieldTypeDescription
assets
required
boolean
markets
required
boolean
signals
required
boolean
signalobject | null
signal fields
FieldTypeDescription
id
required
string
side
required
"YES" | "NO"
created_at
required
string

Format: date-time

is_active
required
booleanFalse only when the signal is retired; see retired_reason.
retired_reason
required
"resolved" | "flipped" | "fading_q" | "expired" | null
relationships
required
RelationshipsEnvelopeBounded, non-recursive graph references. Each category publishes at most 50 lightweight refs. These refs contain no forecast probability, venue odds, aggregate asset probability, or inferred causal AFFECTS edge.
relationships fields
FieldTypeDescription
assets
required
RelationshipAssetRef[]

Maximum items: 50

assets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string

Format: uuid

assetKey
required
string
name
required
string
ticker
required
string | null
asset_type
required
string
markets
required
RelationshipMarketRef[]

Maximum items: 50

markets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
marketKey
required
string
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
question
required
string | null
signals
required
RelationshipSignalRef[]

Maximum items: 50

signals fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string
signal_type
required
"prediction_market"
canonical_endpoint
required
"/api/v1/signals"
side
required
string | null
published_at
required
string | null
truncated
required
object
truncated fields
FieldTypeDescription
assets
required
boolean
markets
required
boolean
signals
required
boolean
forecast_statusobject | nullThe market's status against Q's read — dual-anchored when a signal exists, forecast-snapshot-anchored otherwise. price_source discloses graph fallback pricing.
forecast_status fields
FieldTypeDescription
state
required
"warning" | "caution" | "converged" | "converging" | "sideways" | "diverging"
cents
required
integerMovement states: gap closed (+) or opened (−) over the window. converged: how far past Q the venue sits. Adverse tiers: the move from the worse anchor in position-space cents (negative).
adverse_move_pct
required
number | nullThe standing worse-of-anchors adverse move, RELATIVE % of anchor cost, positive = against Q's side. Served on every state — a 14.9% move stays visible below the caution line. Negative means the market has moved in Q's favour. Null when no anchor is priced.
basis
required
"since_publish" | "since_forecast"The window the read measured: an adverse tier stamps the anchor that fired; other states carry the surface's measurement window.
price_source
required
"live" | "graph"live = verified venue quote; graph = an explicitly stale graph_snapshot for a venue without a live adapter. Graph snapshots carry stale discovery data.
convergenceobject | nullComputed against the POSITION's side from live position pricing
convergence fields
FieldTypeDescription
alignedbooleanTrue when your side matches Q's side
q_side"YES" | "NO"
q_value_centsinteger
entry_cost_centsinteger
current_cost_centsinteger
distance_to_convergence_centsinteger<= 0 means the market price has reached Q
converge_upside_pctinteger
max_roi_pctinteger% return from current cost if the market resolves on the position's side (share settles at 100¢)
priced_atstring

Format: date-time

unmatched
required
object[]Positions with no matching Quotient market
unmatched fields
FieldTypeDescription
condition_idstring
titlestring | null
slugstring | null
perpsobject | nullOnly when include_perps=true
perps fields
FieldTypeDescription
positionsobject[]
positions fields
FieldTypeDescription
symbolstring
sizenumberSigned: positive long, negative short
entry_pricenumber | null
unrealized_pnlnumber | null
return_on_equitynumber | null
equitynumber | null
errorstring | nullupstream_unavailable when the perps API failed
Alternative 2MultiVenuePortfolioResponseReturned when `venues` is supplied. Each venue degrades independently: an unavailable venue is reported as status=unavailable inside a 200 within the multi-venue report.

Exactly one alternative

Alternative 2 fields
FieldTypeDescription
as_of
required
string

Format: date-time

requested_venues
required
"polymarket" | "polymarket_perps" | "limitless" | "hyperliquid"[]
wallets
required
objectThe address actually used per venue
wallets fields
FieldTypeDescription
[key]stringValue for each object key.
totals
required
object
totals fields
FieldTypeDescription
prediction_value_usdnumberPrediction-market position value; perps equity is reported separately
perps_equity_usdnumber | null
positions_countinteger
covered_countintegerPrediction-market positions with Quotient coverage
venues_okinteger
venues_unavailableinteger
unavailable_venues"polymarket" | "polymarket_perps" | "limitless" | "hyperliquid"[]
venues
required
objectKeyed by venue; only the requested venues are present
venues fields
FieldTypeDescription
[key]PredictionVenueReport | PerpsVenueReportValue for each object key.
[key] fields
FieldTypeDescription
Alternative 1PredictionVenueReportOne prediction-market venue's positions joined to Quotient coverage.

Exactly one alternative

Alternative 1 fields
FieldTypeDescription
venue
required
"polymarket" | "limitless"
kind
required
"prediction"
status
required
"ok" | "unavailable"
wallet
required
string
errorstring | nullupstream_unavailable when this venue's API failed
value_usdnumber
positions_countinteger
covered_countinteger
unmatched_countinteger
positions_cappedboolean
positions
required
PortfolioPosition[]
positions fields
FieldTypeDescription
condition_idstring
titlestring | null
slugstring | null
event_slugstring | null
outcomestring | nullThe held outcome (Yes/No; other values are uncovered)
sizenumberShares held
avg_pricenumber | null
cur_pricenumber | nullLive price of the held outcome token (data-api)
current_value_usdnumber | null
cash_pnlnumber | null
percent_pnlnumber | null
redeemableboolean
end_datestring | null
quotientobjectQuotient coverage for this position
quotient fields
FieldTypeDescription
coveredboolean
marketobject | null
market fields
FieldTypeDescription
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
nativeEventId
required
string | null
seriesTicker
required
string | null
marketKey
required
string
quotientMarketId
required
stringStable Quotient market-page id: bare numeric for legacy Polymarket rows, venue-prefixed (kalshi:TICKER, polymarket_us:123, …) elsewhere. quotientUrl is exactly https://quotient.social/markets/{quotientMarketId} (URL-encoded) — the id form the market page resolves for every venue. A market with no Quotient coverage yet may not have a page.
slug
required
string | null
marketUrl
required
string | nullConnector-owned market page URL; null when unavailable.

Format: uri

sourceUrl
required
string | nullConnector provenance or API source URL.

Format: uri

broker_channels
required
"robinhood"[]Retail brokers that carry this exact venue contract (same order book, same settlement). A broker distributes the venue contract; venue and marketKey remain the contract's identity. Today only robinhood, stamped on Kalshi rows from Robinhood's public listings; empty when no broker lists the market. Filter with topic=robinhood on /markets, /markets/mispriced and /signals, or tag=robinhood on /markets/search.
robinhood_category
required
string | nullRobinhood's own category slug for the listing (economics, politics, crypto, climate, …); null when not listed on Robinhood.
robinhood_url
required
string | nullDeep link to the Robinhood event page; null when not listed on Robinhood.

Format: uri

question
required
string | null
quotientUrl
required
string | null
polymarketUrl
required
string | nullLegacy Polymarket navigation alias. Populated only for Polymarket International rows and null for Polymarket US, Kalshi, and Limitless; use marketUrl for venue-neutral navigation.
relationships
required
RelationshipsEnvelopeBounded, non-recursive graph references. Each category publishes at most 50 lightweight refs. These refs contain no forecast probability, venue odds, aggregate asset probability, or inferred causal AFFECTS edge.
relationships fields
FieldTypeDescription
assets
required
RelationshipAssetRef[]

Maximum items: 50

assets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string

Format: uuid

assetKey
required
string
name
required
string
ticker
required
string | null
asset_type
required
string
markets
required
RelationshipMarketRef[]

Maximum items: 50

markets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
marketKey
required
string
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
question
required
string | null
signals
required
RelationshipSignalRef[]

Maximum items: 50

signals fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string
signal_type
required
"prediction_market"
canonical_endpoint
required
"/api/v1/signals"
side
required
string | null
published_at
required
string | null
truncated
required
object
truncated fields
FieldTypeDescription
assets
required
boolean
markets
required
boolean
signals
required
boolean
forecastobject | null
forecast fields
FieldTypeDescription
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless" | nullPrediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market
required
CanonicalMarketRouting | null
market fields
FieldTypeDescription
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
nativeEventId
required
string | null
seriesTicker
required
string | null
marketKey
required
string
quotientMarketId
required
stringStable Quotient market-page id: bare numeric for legacy Polymarket rows, venue-prefixed (kalshi:TICKER, polymarket_us:123, …) elsewhere. quotientUrl is exactly https://quotient.social/markets/{quotientMarketId} (URL-encoded) — the id form the market page resolves for every venue. A market with no Quotient coverage yet may not have a page.
slug
required
string | null
marketUrl
required
string | nullConnector-owned market page URL; null when unavailable.

Format: uri

sourceUrl
required
string | nullConnector provenance or API source URL.

Format: uri

broker_channels
required
"robinhood"[]Retail brokers that carry this exact venue contract (same order book, same settlement). A broker distributes the venue contract; venue and marketKey remain the contract's identity. Today only robinhood, stamped on Kalshi rows from Robinhood's public listings; empty when no broker lists the market. Filter with topic=robinhood on /markets, /markets/mispriced and /signals, or tag=robinhood on /markets/search.
robinhood_category
required
string | nullRobinhood's own category slug for the listing (economics, politics, crypto, climate, …); null when not listed on Robinhood.
robinhood_url
required
string | nullDeep link to the Robinhood event page; null when not listed on Robinhood.

Format: uri

id
required
string
probability
required
number
created_at
required
string

Format: date-time

delta_from_priornumber | null
refresh_reasonstring | null
blufstring | null
thesis
required
string | null
resolution_pathwayResolutionPathwayThe market contract and forecast crux needed to review how this forecast can resolve.
resolution_pathway fields
FieldTypeDescription
criteria
required
string | null
crux
required
string | null
deadline
required
string | null

Format: date-time

source
required
string | null
conviction_tierinteger | null
relationships
required
RelationshipsEnvelopeBounded, non-recursive graph references. Each category publishes at most 50 lightweight refs. These refs contain no forecast probability, venue odds, aggregate asset probability, or inferred causal AFFECTS edge.
relationships fields
FieldTypeDescription
assets
required
RelationshipAssetRef[]

Maximum items: 50

assets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string

Format: uuid

assetKey
required
string
name
required
string
ticker
required
string | null
asset_type
required
string
markets
required
RelationshipMarketRef[]

Maximum items: 50

markets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
marketKey
required
string
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
question
required
string | null
signals
required
RelationshipSignalRef[]

Maximum items: 50

signals fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string
signal_type
required
"prediction_market"
canonical_endpoint
required
"/api/v1/signals"
side
required
string | null
published_at
required
string | null
truncated
required
object
truncated fields
FieldTypeDescription
assets
required
boolean
markets
required
boolean
signals
required
boolean
signalobject | null
signal fields
FieldTypeDescription
id
required
string
side
required
"YES" | "NO"
created_at
required
string

Format: date-time

is_active
required
booleanFalse only when the signal is retired; see retired_reason.
retired_reason
required
"resolved" | "flipped" | "fading_q" | "expired" | null
relationships
required
RelationshipsEnvelopeBounded, non-recursive graph references. Each category publishes at most 50 lightweight refs. These refs contain no forecast probability, venue odds, aggregate asset probability, or inferred causal AFFECTS edge.
relationships fields
FieldTypeDescription
assets
required
RelationshipAssetRef[]

Maximum items: 50

assets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string

Format: uuid

assetKey
required
string
name
required
string
ticker
required
string | null
asset_type
required
string
markets
required
RelationshipMarketRef[]

Maximum items: 50

markets fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
marketKey
required
string
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
nativeMarketId
required
string
question
required
string | null
signals
required
RelationshipSignalRef[]

Maximum items: 50

signals fields
FieldTypeDescription
relationship
required
"HAS_MARKET" | "ON_MARKET" | "ON_FORECAST" | "HAS_SIGNAL"Exact graph edge at the final hop. The API does not synthesize AFFECTS relationships.
direction
required
"incoming" | "outgoing"Direction of the final graph edge relative to the response subject for direct refs, or relative to the explicit via node for two-hop refs.
via
required
"direct" | "market" | "asset"direct is one graph hop; market or asset names the explicit intermediate node for a bounded two-hop ref.
id
required
string
signal_type
required
"prediction_market"
canonical_endpoint
required
"/api/v1/signals"
side
required
string | null
published_at
required
string | null
truncated
required
object
truncated fields
FieldTypeDescription
assets
required
boolean
markets
required
boolean
signals
required
boolean
forecast_statusobject | nullThe market's status against Q's read — dual-anchored when a signal exists, forecast-snapshot-anchored otherwise. price_source discloses graph fallback pricing.
forecast_status fields
FieldTypeDescription
state
required
"warning" | "caution" | "converged" | "converging" | "sideways" | "diverging"
cents
required
integerMovement states: gap closed (+) or opened (−) over the window. converged: how far past Q the venue sits. Adverse tiers: the move from the worse anchor in position-space cents (negative).
adverse_move_pct
required
number | nullThe standing worse-of-anchors adverse move, RELATIVE % of anchor cost, positive = against Q's side. Served on every state — a 14.9% move stays visible below the caution line. Negative means the market has moved in Q's favour. Null when no anchor is priced.
basis
required
"since_publish" | "since_forecast"The window the read measured: an adverse tier stamps the anchor that fired; other states carry the surface's measurement window.
price_source
required
"live" | "graph"live = verified venue quote; graph = an explicitly stale graph_snapshot for a venue without a live adapter. Graph snapshots carry stale discovery data.
convergenceobject | nullComputed against the POSITION's side from live position pricing
convergence fields
FieldTypeDescription
alignedbooleanTrue when your side matches Q's side
q_side"YES" | "NO"
q_value_centsinteger
entry_cost_centsinteger
current_cost_centsinteger
distance_to_convergence_centsinteger<= 0 means the market price has reached Q
converge_upside_pctinteger
max_roi_pctinteger% return from current cost if the market resolves on the position's side (share settles at 100¢)
priced_atstring

Format: date-time

unmatched
required
object[]Positions with no matching Quotient market
unmatched fields
FieldTypeDescription
condition_idstringconditionId on Polymarket; the marketKey on venues the graph keys by slug
titlestring | null
slugstring | null
Alternative 2PerpsVenueReportOne perpetuals venue's open positions. Perps carry no prediction-market forecast join.

Exactly one alternative

Alternative 2 fields
FieldTypeDescription
venue
required
"polymarket_perps" | "hyperliquid"
kind
required
"perps"
status
required
"ok" | "unavailable"
wallet
required
string
errorstring | nullupstream_unavailable when this venue's API failed
equitynumber | nullAccount value in USD
positions_countinteger
positions
required
object[]
positions fields
FieldTypeDescription
symbolstringWTIOIL-USD on Polymarket perps; the Hyperliquid coin (e.g. BTC, xyz:CL) on Hyperliquid
sizenumberSigned: positive long, negative short
side"long" | "short"
entry_pricenumber | null
position_value_usdnumber | null
unrealized_pnlnumber | null
return_on_equitynumber | null
liquidation_pricenumber | null
leveragenumber | 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 for the requested route
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 (wallet must be a 0x address; venues must name supported venues)
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.
502: Legacy mode only: Polymarket data API unavailable (upstream_unavailable). In multi-venue mode an unavailable venue is reported as status=unavailable inside a 200.
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/portfolio'
200 · application/json
{
  "wallet": "example",
  "as_of": "2027-01-01T00:00:00Z",
  "value_usd": 0,
  "positions_count": 0,
  "covered_count": 0,
  "unmatched_count": 0,
  "positions_capped": false,
  "positions": [
    {
      "condition_id": "example",
      "title": "example",
      "slug": "example",
      "event_slug": "example",
      "outcome": "example",
      "size": 0,
      "avg_price": 0,
      "cur_price": 0,
      "current_value_usd": 0,
      "cash_pnl": 0,
      "percent_pnl": 0,
      "redeemable": false,
      "end_date": "example",
      "quotient": {
        "covered": false,
        "market": {
          "venue": null,
          "nativeMarketId": null,
          "nativeEventId": null,
          "seriesTicker": null,
          "marketKey": null,
          "quotientMarketId": null,
          "slug": null,
          "marketUrl": null,
          "sourceUrl": null,
          "broker_channels": null,
          "robinhood_category": null,
          "robinhood_url": null,
          "question": null,
          "quotientUrl": null,
          "polymarketUrl": null,
          "relationships": null
        },
        "forecast": {
          "venue": "polymarket",
          "market": {
            "venue": null,
            "nativeMarketId": null,
            "nativeEventId": null,
            "seriesTicker": null,
            "marketKey": null,
            "quotientMarketId": null,
            "slug": null,
            "marketUrl": null,
            "sourceUrl": null,
            "broker_channels": null,
            "robinhood_category": null,
            "robinhood_url": null
          },
          "id": "example",
          "probability": 0,
          "created_at": "2027-01-01T00:00:00Z",
          "delta_from_prior": 0,
          "refresh_reason": "example",
          "bluf": "example",
          "thesis": "example",
          "resolution_pathway": {
            "criteria": null,
            "crux": null,
            "deadline": null,
            "source": null
          },
          "conviction_tier": 0,
          "relationships": {
            "assets": null,
            "markets": null,
            "signals": null,
            "truncated": null
          }
        },
        "signal": {
          "id": "example",
          "side": "YES",
          "created_at": "2027-01-01T00:00:00Z",
          "is_active": false,
          "retired_reason": "resolved",
          "relationships": {
            "assets": null,
            "markets": null,
            "signals": null,
            "truncated": null
          }
        },
        "forecast_status": {
          "state": null,
          "cents": null,
          "adverse_move_pct": null,
          "basis": null,
          "price_source": null
        },
        "convergence": {
          "aligned": false,
          "q_side": "YES",
          "q_value_cents": 0,
          "entry_cost_cents": 0,
          "current_cost_cents": 0,
          "distance_to_convergence_cents": 0,
          "converge_upside_pct": 0,
          "max_roi_pct": 0,
          "priced_at": "2027-01-01T00:00:00Z"
        }
      }
    }
  ],
  "unmatched": [
    {
      "condition_id": "example",
      "title": "example",
      "slug": "example"
    }
  ],
  "perps": {
    "positions": [
      {
        "symbol": "example",
        "size": 0,
        "entry_price": 0,
        "unrealized_pnl": 0,
        "return_on_equity": 0
      }
    ],
    "equity": 0,
    "error": "example"
  }
}