GET
/api/v1/signals
Published Quotient trade signals
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| window | query | integer | Lookback window in hours for the latest forecast update, not signal publication. Active signals may have been published earlier. Default: 24 |
| status | query | string | Comma-separated subset of: actionable, unconfirmed, paused, done, retired. Default: actionable, unconfirmed (paused, done, and retired rows are omitted). |
| side | query | "YES" | "NO" | Filter by the signal's trade side |
| market | query | string | Filter by market slug |
| venue | query | "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. |
| min_conviction | query | integer | Minimum conviction tier (1-3). Tiers measure the forecaster's ensemble-draw agreement, not spread. |
| min_capacity_usd | query | number | Minimum near-touch capacity in USD (capacity_usd_at_2c). Signals with unknown capacity pass only via the volume fallback (24h volume >= 5000). |
| exclude_drawdown_risk | query | boolean | When true, omit signals whose drawdown_risk_elevated is true. Signals with a null read (no risk-model coverage) are kept — null means unknown, not safe. |
| exclude_crash_risk | query | boolean | Deprecated former name for exclude_drawdown_risk. Accepted for one release; exclude_drawdown_risk wins when both are sent. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| signals | TradeSignalItem[] |
Billing and limits
Calls are billed to prepaid credits, or per call over x402. The price above is the reference price; the 402 challenge returned at request time is what a call actually costs.
One request may be in flight at a time, and request starts must be at least one second apart. A rejected 429 is not billed. See rate limits.
curl
curl -H "x-quotient-api-key: qt_…" \
"https://quotient-api-gateway.onrender.com/api/v1/signals"Run sends this request with preset parameters on Quotient’s demo key. Your credits are not spent.
200 · application/json
{
"signals": [
{
"id": "3f9d2c1e-6b7a-4f7e-9c2d-1a2b3c4d5e6f",
"created_at": "2026-08-01T14:15:00Z",
"published_at": "2026-08-01T14:15:00Z",
"forecast_updated_at": "2026-08-03T16:20:00Z",
"is_new_today": false,
"is_fresh": true,
"is_active": true,
"side": "NO",
"entry_q": 22,
"entry_pm": 44,
"entry_spread_pp": 22,
"window_days": 12,
"resolves_in_window": false,
"status": "actionable",
"retired_reason": null,
"conviction_tier": 3,
"conviction": "high",
"has_band": true,
"latest_q": 0.22,
"q_side": "NO",
"q_value_cents": 78,
"entry_cost_cents": 56,
"current_cost_cents": 58,
"distance_to_convergence_cents": 20,
"converge_upside_pct": 34,
"live_priced": true,
"priced_at": "2026-08-01T16:00:00Z",
"capacity_usd_at_2c": 3400,
"capacity_available": true,
"capacity_basis": "depth-2c",
"capacity_as_of": "2026-08-01T02:31:00Z",
"drawdown_risk_elevated": false,
"crash_risk_elevated": false,
"market": {
"venue": "polymarket",
"nativeMarketId": "789012",
"nativeEventId": "34567",
"seriesTicker": null,
"marketKey": "polymarket:789012",
"slug": "russia-ukraine-ceasefire-2026",
"marketUrl": "https://polymarket.com/event/russia-ukraine-ceasefire-2026",
"sourceUrl": "https://gamma-api.polymarket.com/markets/789012",
"question": "Will there be a Russia-Ukraine ceasefire in 2026?",
"condition_id": "0x1234abcd",
"end_date": "2026-12-31T00:00:00Z",
"market_odds": 0.42,
"volume_24h": 120000,
"quotientUrl": "https://app.quotient.social/market/polymarket%3A789012",
"polymarketUrl": "https://polymarket.com/event/russia-ukraine-ceasefire-2026"
}
}
]
}