GET

/api/v1/markets/{slug}/signals

Article evidence for a market

Complete list of live Article-RELEVANT_TO-Market evidence (title, correlation reasoning, URL, source, confidence, evidence quote, and timestamps), newest first. Direction is null when the correlation layer does not assess it. These are distinct from published trade signals at /api/v1/signals. If none exist, the route returns 404 and the gateway does not bill or settle the request.

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

Parameters

NameInTypeDescription
slugpath, requiredstringMarket slug identifier
venuequery"polymarket" | "polymarket_us" | "kalshi" | "limitless"Optional prediction-market venue filter. Omit it on catalog/feed routes to include every covered venue. On legacy slug or condition-ID lookups, omission retains the Polymarket namespace; prefer marketKey for collision-safe cross-venue lookup.

Responses

200: Article evidence, newest first
FieldTypeDescription
marketCanonicalMarketWithRelationships
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

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
market_slugstring
quotientUrlstring | nullCanonical Quotient market page: https://quotient.social/markets/{quotientMarketId} (URL-encoded). The id form resolves for every venue; a market with no Quotient coverage yet may not have a page.
polymarketUrlstring | nullLegacy Polymarket navigation alias. Populated only for Polymarket International rows and null for Polymarket US, Kalshi, and Limitless; use marketUrl for venue-neutral navigation.
signalsSignalItem[]
signals fields
FieldTypeDescription
id
required
string | nullStable article identifier, normally its URL
title
required
stringArticle or source title
comment
required
stringWhy the article was correlated to the market, when available
direction
required
"yes" | "no" | "neutral" | nullDirection relative to the market question; null when the article correlation does not assess direction
url
required
string | nullSource article URL

Format: uri

source
required
string | nullSource publication name
published_at
required
string | nullBest available article publication or ingestion time

Format: date-time

correlated_at
required
string | nullWhen Quotient correlated or ingested the article for this market

Format: date-time

confidence
required
string | nullCorrelation confidence when available
evidence_quote
required
string | nullSupporting quote recorded on the correlation when available
totalintegerTotal number of signals for this market
last_updatedstring | nullPublication/ingestion time of the newest returned article

Format: date-time

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.
404: Invalid market slug or no article evidence. The gateway does not bill or settle 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.
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/markets/example-slug/signals'
200 · application/json
{
  "market": {
    "venue": "polymarket",
    "nativeMarketId": "example",
    "nativeEventId": "example",
    "seriesTicker": "example",
    "marketKey": "example",
    "quotientMarketId": "example",
    "slug": "example",
    "marketUrl": "example",
    "sourceUrl": "example",
    "broker_channels": [
      "robinhood"
    ],
    "robinhood_category": "example",
    "robinhood_url": "example",
    "relationships": {
      "assets": [
        {
          "relationship": "HAS_MARKET",
          "direction": "incoming",
          "via": "direct",
          "id": "example",
          "assetKey": "example",
          "name": "example",
          "ticker": "example",
          "asset_type": "example"
        }
      ],
      "markets": [
        {
          "relationship": "HAS_MARKET",
          "direction": "incoming",
          "via": "direct",
          "marketKey": "example",
          "venue": "polymarket",
          "nativeMarketId": "example",
          "question": "example"
        }
      ],
      "signals": [
        {
          "relationship": "HAS_MARKET",
          "direction": "incoming",
          "via": "direct",
          "id": "example",
          "signal_type": "prediction_market",
          "canonical_endpoint": "/api/v1/signals",
          "side": "example",
          "published_at": "example"
        }
      ],
      "truncated": {
        "assets": false,
        "markets": false,
        "signals": false
      }
    }
  },
  "market_slug": "example",
  "quotientUrl": "example",
  "polymarketUrl": "example",
  "signals": [
    {
      "id": "example",
      "title": "example",
      "comment": "example",
      "direction": "yes",
      "url": "example",
      "source": "example",
      "published_at": "2027-01-01T00:00:00Z",
      "correlated_at": "2027-01-01T00:00:00Z",
      "confidence": "example",
      "evidence_quote": "example"
    }
  ],
  "total": 0,
  "last_updated": "2027-01-01T00:00:00Z"
}