active while its heartbeat is paused, and pausing the heartbeat never archives or closes the thesis.
CLI
API
Authorization: Bearer sf_live_... (or browser session). 404 if the thesis isn’t owned by the caller.
GET response
PATCH body
All fields optional. Any combination is accepted; unknown fields are ignored.400 No valid fields to update if nothing recognised is sent.
| Field | Type | Default | Range / values | Notes |
|---|---|---|---|---|
newsIntervalMin | number | 240 | 15 – 1440 | Minutes between news/context scans. |
xIntervalMin | number | 240 | 60 – 1440 | Minutes between social/X scans. |
evalModelTier | string | "cheap" | cheap, base, medium, heavy | Model tier for the evaluation step. |
monthlyBudgetUsd | number | 15 | >= 0 (0 = unlimited) | Monthly LLM + search ceiling. Heartbeat auto-pauses when exceeded. |
paused | boolean | false | — | Pauses the loop without changing thesis lifecycle. Server tags the pause as manual so it does not auto-resume next month. |
smartModel | boolean | true | — | Run cheap by default, auto-escalate to medium on a significant change (confidence delta > 3%, kill condition, or node prob shift > 15%). Forces a medium deep eval at least every 24 h. |
closedLoop | boolean | object | { entry: false, exit: false } | true ⇒ both, false ⇒ neither, or { entry, exit } | Allow the monitor to create entry / exit intents. Booleans inside the object are individually validated. |
PATCH response
Errors
| Status | Body error | Cause |
|---|---|---|
400 | newsIntervalMin must be 15-1440 | Out-of-range value. |
400 | xIntervalMin must be 60-1440 | Out-of-range value. |
400 | evalModelTier must be cheap, base, medium, or heavy | Invalid tier. |
400 | monthlyBudgetUsd must be >= 0 | Negative budget. |
400 | closedLoop must be boolean or { entry, exit } | Wrong shape. |
400 | closedLoop.entry must be boolean / closedLoop.exit must be boolean | Wrong member type. |
400 | No valid fields to update | Body had no recognised fields. |
401 | Unauthorized. Provide a valid API key (Bearer sf_live_xxx) or session. | Missing / invalid auth. |
404 | Thesis not found | Thesis does not exist or does not belong to the caller. |
Curl
What heartbeat is not
- Not an order router. It can write evaluations, signals, alerts, and (when
closedLoopis enabled) execution intents. Orders still go through the intent / runtime / risk-gate path. - Not the same as thesis lifecycle status. To archive, close, or publish a thesis, use the Thesis API. To stop background evaluation only, set
paused: truehere. - Not a global setting. Each thesis has its own heartbeat config, and the dashboard / CLI lets you tune them independently.
Next steps
Thesis API
Full thesis lifecycle HTTP surface.
Portfolio autopilot
Separate portfolio-tick loop and risk gates.