Skip to main content
POST
/
v1
/
signals
Generate AI strategy signal
curl --request POST \
  --url https://api.example.com/v1/signals \
  --header 'Content-Type: application/json' \
  --data '
{
  "force": false,
  "market_id": "KXFED-26MAR19",
  "market_query": "",
  "platform": "kalshi"
}
'
{
  "confidence": 0.82,
  "edge": 0.09,
  "expires_at": "2026-03-22T14:30:00Z",
  "generated_at": "2026-03-21T14:30:00Z",
  "market_id": "KXFED-26MAR19",
  "platform": "kalshi",
  "recommendation": "BUY_YES",
  "risk_rating": "low",
  "size_pct": 0.035,
  "target_price": 0.62,
  "time_horizon": "days",
  "title": "Will the Fed cut rates at the March 2026 meeting?"
}

Query Parameters

wait
boolean
default:false

Block until analysis completes (up to 5 min)

expand
string
default:""

Comma-separated expansions

Body

application/json

Request body for the signal endpoint.

platform
string
default:""

Filter by platform: 'kalshi', 'polymarket', or 'robinhood'

market_id
string
default:""

Platform-specific market identifier

market_query
string
default:""

Free-text market question (used if market_id not provided)

force
boolean
default:false

Force fresh analysis even if a cached result exists

Response

Successful Response

Actionable trading signal with position sizing.

The core product — everything needed to execute a trade.

platform
string
required

kalshi, polymarket, or robinhood

market_id
string
required

Platform-specific market identifier

title
string
required

Market question

recommendation
enum<string>
required

Actionable recommendation

Available options:
BUY_YES,
BUY_NO,
NO_TRADE
target_price
number
required

Suggested entry price (0.0-1.0)

Required range: 0 <= x <= 1
edge
number
required

estimated_prob - market_price (positive = underpriced YES)

confidence
number
required

Confidence in the signal

Required range: 0 <= x <= 1
risk_rating
enum<string>
required

Overall risk assessment

Available options:
low,
medium,
high
size_pct
number
required

Kelly-derived position size as fraction of bankroll

Required range: 0 <= x <= 1
time_horizon
string
required

Expected resolution: 'hours', 'days', 'weeks'

expires_at
string<date-time>
required

Signal staleness window — do not trade after this time

hedge
string | null

Suggested hedge, e.g. 'Buy NO on KXFED-26MAR19 at 0.82'

causal
CausalDecomposition · object

Causal decomposition (?expand=causal)

Example:
{
"factors": [
{
"claim": "Inflation is within Fed's comfort zone",
"confidence": 0.9,
"direction": "supports_yes",
"evidence": [
"PCE Feb 2026: 2.1%",
"Core CPI declining 3 months"
],
"posterior": 0.82,
"prior": 0.6,
"weight": 0.35
},
{
"claim": "Fed rhetoric is dovish",
"confidence": 0.75,
"direction": "supports_yes",
"evidence": [
"Waller speech March 12",
"Bostic: 'open to adjustment'"
],
"posterior": 0.68,
"prior": 0.5,
"weight": 0.3
},
{
"claim": "Tariff uncertainty creates headwinds",
"confidence": 0.6,
"direction": "supports_no",
"evidence": [
"New tariffs announced March 5",
"Trade deficit widening"
],
"posterior": 0.45,
"prior": 0.4,
"weight": 0.2
}
],
"generated_at": "2026-03-21T12:00:00Z",
"method": "weighted_bayesian",
"overall_confidence": 0.82,
"overall_probability": 0.71
}
freshness
enum<string> | null

Data freshness of the underlying analysis

Available options:
fresh,
stale,
expired
generated_at
string<date-time>

When this signal was produced