Skip to main content
A trade intent is a server-owned object that says “I want to buy/sell X at price Y, conditional on conditions Z”. Once submitted, the autopilot or terminal executes when conditions are met, subject to risk gates.

Lifecycle

Create

Or via API:

List

Cancel

Reasons an intent can be rejected

The server runs a gate evaluator on every intent before persisting:
  • RISK_GATE_FAIL — exceeds per-market or per-day risk limits.
  • STALE_PRICE — the price you specified is no longer reachable.
  • INSUFFICIENT_BALANCE — Kalshi/Polymarket balance below what the order would require.
  • CATEGORY_BLOCKED — your config excludes the market’s category (e.g., sports).
  • THESIS_MISMATCH — the intent’s edge doesn’t match the linked thesis’s direction.
See Errors for the full code list.

Execution

Once pending, intents are picked up by:
  • portfolio-autopilot ticks if execution_mode = 'live'.
  • manual execution via the web terminal trade ticket.
  • direct CLI via sf buy / sf sell, which bypass the intent layer entirely.

Next steps

Intents API

Endpoint shapes for create / list / cancel.

Risk gates

The pre-trade checks every intent runs through.

Thesis lifecycle

Link intents to theses for automated edge tracking.