https://os.superform.xyz/api/strategy. Routes below use upstream /api/v1 paths. The browser BFF checks the session and vault role and forwards upstream credentials server-side. Direct service writes require a separately approved integration; this reference is not a token-acquisition or writer tutorial.
vault_id uses chainId_vaultAddress, such as the public Flagship USDC vault ID 8453_0x11820afe50ea96851ee2bdbae329d97771e41ec6. Copy the returned ID instead of reconstructing it from a differently formatted identifier.
Access boundary
Unknown anonymous query keys can be rejected, and anonymous list limits are clamped to 100. A transaction hash or execution ID alone does not establish public vault scope. See Authentication and the tested public GET workflow.
Strategies
Create fields include
id, vault_id, name, indicators, rules, action_config, and max_concurrent. Priority is not a create/update field. Reorder uses vault_id, lane, and ordered_strategy_ids, containing every non-archived USER_DEFINED strategy in that lane exactly once. Do not include EMERGENCY_EXIT definitions.
Read back ID, version, state, rule, size, and plan after a write. On 409 Conflict, reload and reconcile changes before retrying. Stop and reload before a risk-changing update; stopping does not cancel already submitted OMS transactions. See safe updates.
Action plan
action_config carries the action, numeric size_expr, objective, target, execution account, source type, and execution parameters. The current plan is execution_params.plan.steps, alongside execution_params.strategy_address. Each step specifies its hook, chain, target, arguments, amount-chaining behavior, and effects.
A legacy single-hook body containing only execution_name and execution_address is not a complete current plan. The editor builds the registry-backed configuration; Action Config explains what to select and inspect.
Size uses the first step’s input denomination, not universally underlying assets. Static validation does not prove runtime arithmetic, data freshness, liquidity, or settlement. See Strategy DSL.
Lifecycle and locks
USER_DEFINED strategies use the normal canvas. System-managed EMERGENCY_EXIT strategies belong to Pause Operations.
A lock identifies
strategy_id, target_address, started_at, and optional reason. It blocks user-defined publication to that target, not every strategy sharing a balance. Emergency exits do not bypass vault kill switches or rate limits.
Intent history
Search supports
vault_id, strategy_id, action/state, chain, time ranges, and other filters according to access scope. Use repeated array keys, such as state=FAILED&state=COMPLETED, not bracketed state[]. The public example shows a verified filter set. Use the returned next_cursor for continued cursor pagination when present; do not assume an older intent remains on page one.
Match intent_id, strategy_id, and execution_id before interpreting a fill. Lifecycle timestamps and aggregate fields can be absent while execution is in flight. Raw amounts and placeholder token addresses must not be treated as a complete economic result; follow the transaction receipt.
Simulations
Explicit persisted
strategy_ids can include CREATED or IDLE definitions. They run in memory without changing production state. Results use synthetic outcomes, not OMS submission. Lookup can load a cached result; unsupported inputs can prevent admission. See Simulation for run, save, and load controls.