Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.
The easiest way: ask your AI assistant. With Itoflow MCP connected to Claude or Codex, paste:
Use Itoflow to draft a paper strategy that holds 5 to 10 large US qualitycompanies, with no position above 15%. Show me the full strategy before creatingit, and create it paused.
Open in Claude
Start this in Claude with the Itoflow plugin.
Open in ChatGPT
Start this in ChatGPT with the Itoflow plugin.
Using another client? Copy the prompt with the button on the code block.No tokens or code needed. You can also do this in the Itoflow app. The rest of this page covers the HTTP API.
A strategy runs a portfolio under a mandate you write. Each run (an execution) reads the mandate, researches, and records a decision: the trades it proposes. Trades record what then happened to each order. Keep execution, decision and trade IDs apart; they are different things.Creating a strategy for an existing portfolio needs a known current value. If an open holding has no usable current price, creation returns 400 PORTFOLIO_VALUE_UNKNOWN with a reason that names each such holding, and leaves the portfolio unlinked.Public showcase holding weights use signed market value divided by net asset value (NAV), including cash. Holdings rank by absolute value and keep their signs. For example, a $1,000 portfolio with $600 and $300 holdings and $100 cash shows 60% and 30%. If value is unknown, each weight is null with valuation_unavailable_reason.
Create a strategy
POST /strategies creates a paper strategy, which trades a simulated portfolio. You can also create one in the app.
{ "name": "Example research strategy", "strategyContent": "Research the listed companies and explain proposed changes before execution.", "constraints": { "min_position_pct": 0.02, "max_position_pct": 0.15, "max_positions": 5 }, "universe": ["AAPL.US", "MSFT.US"], "initialCapital": "10000", "currency": "USD", "rules": { "model_key": "luna" }, "activateImmediately": false}
Field
Rules
strategyContent
Required. The mandate, in plain language.
constraints
Required: min_position_pct and max_position_pct as fractions of NAV (0.02 = 2%), and max_positions. The position limits apply to a position’s size, long or short.
universe or allocationGuidance
One is required: a list of TICKER.EXCHANGE symbols, or guidance on what to invest in.
initialCapital, currency
Starting cash for a new paper portfolio, as a decimal string. Between 1 and 1 billion US dollars, or the equivalent. Required without portfolioId.
portfolioId
Optional. Use an existing portfolio instead of a new one.
rules
Optional extra rules, including model_key.
activateImmediately
false creates the strategy paused.
max_position_pct stays a ratio from 0.001 to 1, and min_cash_pct stays from 0 to 1. Margin and financing are out of scope. A target may hold more than 100% gross across names: thirteen longs at 10% each and three shorts at 10% each make a 130/30 book, and each position stays within its size limit. Trades are paid for from cash already held. A run’s buys need cash above 110% of their value; a cover may also use what the run’s long sales raise. A short sale’s proceeds reach cash once it fills, so they pay for buys in later runs, not in the run that sells short. A paper book therefore builds a 130/30 position over several runs, and after each run its cash stays above a tenth of that run’s buys.name is required without portfolioId. Other optional fields are description and sourceChatId.The 201 response includes id, portfolioId, isActive, executionStatus, and effectiveConstraints and effectiveRules. The effective fields include the defaults Itoflow filled in, so check them rather than assume an omitted control is off.A portfolio watched by a fund-oversight monitor can’t also have a strategy. Choosing one returns 409 PORTFOLIO_HAS_MONITOR.
Read strategies
GET /strategies lists strategies you can see, which may include some you don’t own.
GET /strategies/{id} returns one strategy: mandate, whether you own it, portfolio, constraints, run state and version.
GET /strategies/public lists the public showcase.
GET /strategies/eligible lists strategies that can be linked to a broker. A strategy whose book or latest target holds a short is excluded because live short sales are not supported. A paper book whose current value is not known is also excluded. The response lists these books in ineligibleStrategies, with strategyId, currentValue: null and a reason. It never returns a partial sum as an eligible book’s value.
Only the owner can change a strategy.
Change a mandate
PUT /strategies/{id} takes the fields you want to change. When you change the mandate, constraints, rules, universe or allocation guidance, also send changeDescription, or you get 400 CHANGE_DESC_REQUIRED. Each change creates a new version; the response returns versionId and versionNumber.
Editing cancels pending trades. A new version cancels the strategy’s pending trades, including approved live trades not yet sent to the broker. You can’t edit a running strategy (400 CANNOT_EDIT_RUNNING) unless you change only the model; pause it first.
To avoid overwriting someone else’s edit, send the expectedVersion you last read. If a newer version exists, the request fails; reload the strategy and decide again.
Run a strategy and follow it
Endpoint
What it does
POST /strategies/{id}/control
action: pause, resume or deactivate. Pausing or deactivating cancels unapproved trades; trades you already approved can still run.
POST /strategies/{id}/execute
Queues a run: execution_type: "manual_rebalance", with optional custom_message and trading_date
GET /strategies/{id}/active-execution
The run in progress, if any
GET /strategies/{id}/executions
Run history
GET /strategies/{id}/stream/{executionId}
Live events from a run
GET /strategies/{id}/executions/{executionId}/events
Saved events from a run
GET /strategies/{id}/decisions/{decisionId}/events
Saved events for one decision
execute returns 202 with execution_id, strategy_id, status, estimated_duration_seconds and stream_url. The run has been queued, nothing more, and a 202 is never a fill. Follow it, then check its decision and trades. Each request queues a new run, so if you lose the response, check active-execution before you try again.For strategies on the legacy execution path, each failed automatic run makes
the trigger chain wait before it re-arms: 5 minutes, 30 minutes, 2 hours, then
24 hours for each later failure. A real decision from an automatic run clears
the count. The first failure on a new strategy version starts at one. Manual
runs, cancelled runs, blocked runs, completed runs with no decision, and skips leave the count unchanged.
Re-arming checks the trigger rules again; it does not promise a run at that time.
The failure wait also holds after a scheduler restart or a change to the trigger
rules. A new strategy version does not inherit the old version’s wait.On the legacy execution path, if the model provider rejects saved session
content, the run can retry in a fresh session within its three-attempt limit.
The agent keeps its saved workspace and states that it lost its prior session
context. Follow the run through its final decision or failure.The live stream stays open through retries while the same run remains active,
including runs longer than 65 minutes. It sends the final status when the run
completes, fails or is cancelled. If the run is no longer marked active, the
normal stream timeout applies; check active-execution and the saved events.
A manual run queued behind an active run keeps its stream open while its own
task state is queued. It does not replace the active run’s marker.
Results
/paper-trading/{strategyId}/status, /trades, /decisions, /approvals and /pending-trades return a strategy’s state and history./paper-trading/summaries lists portfolios, each with its trading mode, broker sync status and the strategy that manages it. strategy is null for a broker portfolio no strategy manages. A summary’s decisionType says what the strategy decided, not whether an order filled.A holding’s weight is its signed value divided by the portfolio’s net asset value. A book worth zero or less has no weights, so its status returns empty holdings and a valuationError with code PORTFOLIO_VALUE_NOT_POSITIVE and a message that gives the net asset value. Otherwise valuationError is null. Each summary’s status follows the same rule. Both routes include available and reserved cash in net asset value: $100 stock, $100 available cash and $100 reserved for a pending buy give a stock weight of 33.33%. The agent’s history file and day-start returns count the cash a pending buy held at the time.Before a paper-trading agent receives its input tables, preparation checks the
price, currency and exchange rate of every open holding. If any line cannot be
valued, the decision still runs. The files keep that line with a null value and
a reason naming the symbols. Portfolio value, cash weight, all holding weights
and returns that need the missing value remain null. Pending-trade projections
preserve these null weights. Trade sizing refuses when a stored open holding
cannot be valued; a missed live quote in the input files alone does not refuse
sizing. Historical reports and emails also check stored marks and show unknown
values when the evidence is unusable. An import price placeholder stays out of
the input tables, as it does from trade sizing.The agent’s history file uses a stored daily return only from the holdings
snapshot’s own UTC date. A missing reading on that date gives a null daily
return. Cumulative return uses the latest reading at or before the snapshot;
portfolio value comes from that snapshot’s holdings.For holdings and trade approvals, see Portfolios.
Live strategies
POST /strategies/live creates a strategy for a live portfolio linked to a broker connection. It takes the same body as a paper strategy, but portfolioId must name a live portfolio. Its starting capital is the broker account’s total value when you link it.Every live trade needs your approval before Itoflow sends it to the broker. See Approve trades.
Models
Set rules.model_key to a fusion mode or a single model when you create or edit a strategy; edits without it keep the saved choice. New strategies without a choice use the plan’s default_mode from /pricing/model-access. Each run pins both the main model and Guardian when it starts; retries keep those routes. A single choice uses that model for both agents. If you lose access to a paid choice, new runs stop with “Choose the Free model or upgrade” until you change the choice or upgrade. A connected ChatGPT subscription does not fund strategies. See models and plans.For a walk-through, see Run a strategy under a mandate. To design and test one first, see Build and stress-test a strategy idea.See the strategy endpoint reference for every field.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Itoflow developer docs","description":"Itoflow takes an investment idea from research to live trading, with agents doing the work. Research an idea, have agents watch it and your portfolios around the clock, run it as paper strategies, then trade it live; a person approves every live trade. Each step keeps the context of the last, and Itoflow supplies the market data and compute. Start with one part, such as the factor risk engine with ETF look-through, from Claude, ChatGPT or Codex over MCP, or from your code over HTTP.","colors":{"primary":"#0079AD","light":"#4FB3E4","dark":"#0079AD"},"logo":{"light":"https://mintcdn.com/itoflow/sRxx5iBL0vfWaMBY/assets/logo-light.svg?fit=max\u0026auto=format\u0026n=sRxx5iBL0vfWaMBY\u0026q=85\u0026s=3d23e4b830dc16fd51eb271bce00fa46","dark":"https://mintcdn.com/itoflow/sRxx5iBL0vfWaMBY/assets/logo-dark.svg?fit=max\u0026auto=format\u0026n=sRxx5iBL0vfWaMBY\u0026q=85\u0026s=5d169026671363e61b6117aa443d0dcd"},"favicon":{"light":"https://mintcdn.com/itoflow/sRxx5iBL0vfWaMBY/assets/favicon-light.svg?fit=max\u0026auto=format\u0026n=sRxx5iBL0vfWaMBY\u0026q=85\u0026s=38166eb10bbe84f06f29e63640daddcd","dark":"https://mintcdn.com/itoflow/sRxx5iBL0vfWaMBY/assets/favicon-dark.svg?fit=max\u0026auto=format\u0026n=sRxx5iBL0vfWaMBY\u0026q=85\u0026s=8e46915f491ba449c8d9d0bef5cc78a8"},"api":{"playground":{"display":"interactive","proxy":false,"credentials":false},"examples":{"languages":["curl","python","javascript"],"prefill":false},"url":"full"},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#FDFDFD","dark":"#0B1419"}},"navbar":{"links":[{"href":"https://itoflow.ai/pricing","label":"Pricing"},{"href":"https://itoflow.ai/blog","label":"Blog"}],"primary":{"type":"button","label":"Open Itoflow","href":"https://app.itoflow.ai"}},"footer":{"links":[{"header":"Product","items":[{"label":"Itoflow","href":"https://itoflow.ai"},{"label":"Open the app","href":"https://app.itoflow.ai"},{"label":"Pricing","href":"https://itoflow.ai/pricing"},{"label":"Benchmark","href":"https://itoflow.ai/benchmark"}]},{"header":"Learn","items":[{"label":"Blog","href":"https://itoflow.ai/blog"},{"label":"Help center","href":"https://itoflow.ai/help"}]},{"header":"Trust","items":[{"label":"Security","href":"https://itoflow.ai/security"},{"label":"Privacy","href":"https://itoflow.ai/privacy"},{"label":"Terms","href":"https://itoflow.ai/terms"}]}]},"fonts":{"heading":{"family":"Reckless","weight":400,"source":"assets/fonts/reckless.woff2","format":"woff2"},"body":{"family":"Onest","weight":400,"source":"assets/fonts/onest-latin.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"itoflow","hasAudioNarration":false,"actualSubdomain":"itoflow","customDomains":["docs.itoflow.ai"],"gitSource":{"type":"github","owner":"itoflow","repo":"ai_researcher","deployBranch":"develop","contentDirectory":"developer-docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af6c085993a78013fddf9ab","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Endpoints","count":156},{"language":"default","tag":"Portfolios","count":23},{"language":"default","tag":"Strategies","count":22},{"language":"default","tag":"Billing","count":19},{"language":"default","tag":"Monitors","count":17},{"language":"default","tag":"Market data","count":14},{"language":"default","tag":"Chat","count":13},{"language":"default","tag":"Use cases","count":11},{"language":"default","tag":"Features","count":10},{"language":"default","tag":"Brokers","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"@font-face{font-family:\"Onest\";src:url(\"/assets/fonts/onest-latin.woff2\") format(\"woff2\");font-style:normal;font-weight:400 800;font-display:swap}@font-face{font-family:\"Reckless\";src:url(\"/assets/fonts/reckless.woff2\") format(\"woff2\");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:\"Geist Mono\";src:url(\"/assets/fonts/geist-mono-latin.woff2\") format(\"woff2\");font-style:normal;font-weight:400 600;font-display:swap}h1,h2,h3:not(.sidebar-title),h4,h5,h6{font-weight:400;font-feature-settings:\"cv02\", \"cv03\", \"cv04\", \"cv11\", \"liga\" 1}code,pre,kbd,samp,.font-mono{font-family:\"Geist Mono\", monospace}body{font-weight:450}.sidebar-title{font-weight:650;font-size:0.75rem;letter-spacing:0.06em;text-transform:uppercase}"}],"page":{"pagePath":"features/strategies","slug":"/features/strategies","pageMetadata":{"title":"Strategies","description":"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.","href":"/features/strategies"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Mermaid,Table,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Tip,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The easiest way: ask your AI assistant.`}),` With `,_jsx(_components.a,{href:`/mcp/install`,children:`Itoflow MCP`}),` connected to Claude or Codex, paste:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Use Itoflow to draft a paper strategy that holds 5 to 10 large US quality`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`companies, with no position above 15%. Show me the full strategy before creating`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`it, and create it paused.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(CardGroup,{cols:`2`,children:[_jsx(Card,{title:`Open in Claude`,href:`https://claude.ai/new?q=Use%20the%20Itoflow%20plugin%20(https%3A%2F%2Fgithub.com%2Fitoflow%2Fskills)%20for%20this.%20If%20it%20isn't%20installed%20yet%2C%20first%20tell%20me%20how%20to%20install%20it%20and%20sign%20in%20to%20Itoflow%2C%20and%20wait%20until%20I%20confirm.%20Then%3A%0A%0AUse%20Itoflow%20to%20draft%20a%20paper%20strategy%20that%20holds%205%20to%2010%20large%20US%20quality%20companies%2C%20with%20no%20position%20above%2015%25.%20Show%20me%20the%20full%20strategy%20before%20creating%20it%2C%20and%20create%20it%20paused.`,icon:`message`,children:_jsx(_components.p,{children:`Start this in Claude with the Itoflow plugin.`})}),_jsx(Card,{title:`Open in ChatGPT`,href:`https://chatgpt.com/?q=Use%20the%20Itoflow%20plugin%20(https%3A%2F%2Fgithub.com%2Fitoflow%2Fskills)%20for%20this.%20If%20it%20isn't%20installed%20yet%2C%20first%20tell%20me%20how%20to%20install%20it%20and%20sign%20in%20to%20Itoflow%2C%20and%20wait%20until%20I%20confirm.%20Then%3A%0A%0AUse%20Itoflow%20to%20draft%20a%20paper%20strategy%20that%20holds%205%20to%2010%20large%20US%20quality%20companies%2C%20with%20no%20position%20above%2015%25.%20Show%20me%20the%20full%20strategy%20before%20creating%20it%2C%20and%20create%20it%20paused.`,icon:`comments`,children:_jsx(_components.p,{children:`Start this in ChatGPT with the Itoflow plugin.`})})]}),_jsx(_components.p,{children:`Using another client? Copy the prompt with the button on the code block.`}),_jsxs(_components.p,{children:[`No tokens or code needed. You can also do this in the `,_jsx(_components.a,{href:`https://app.itoflow.ai/strategies/new`,children:`Itoflow app`}),`. The rest of this page covers the HTTP API.`]})]}),`\n`,_jsxs(_components.p,{children:[`A strategy runs a portfolio under a mandate you write. Each `,_jsx(_components.strong,{children:`run`}),` (an execution) reads the mandate, researches, and records a `,_jsx(_components.strong,{children:`decision`}),`: the trades it proposes. `,_jsx(_components.strong,{children:`Trades`}),` record what then happened to each order. Keep execution, decision and trade IDs apart; they are different things.`]}),`\n`,_jsx(Mermaid,{chart:`flowchart TD\n Draft[Mandate and constraints] --> Strategy[Versioned strategy]\n Strategy --> Run[Run]\n Run --> Decision[Decision]\n Decision --> Approval[Your approval, when required]\n Approval --> Trades[Trade outcomes]`}),`\n`,_jsxs(_components.p,{children:[`Creating a strategy for an existing portfolio needs a known current value. If an open holding has no usable current price, creation returns `,_jsx(_components.code,{children:`400 PORTFOLIO_VALUE_UNKNOWN`}),` with a reason that names each such holding, and leaves the portfolio unlinked.`]}),`\n`,_jsxs(_components.p,{children:[`Public showcase holding weights use signed market value divided by net asset value (NAV), including cash. Holdings rank by absolute value and keep their signs. For example, a `,`$1,000 portfolio with $`,`600 and `,`$300 holdings and $`,`100 cash shows 60% and 30%. If value is unknown, each weight is `,_jsx(_components.code,{children:`null`}),` with `,_jsx(_components.code,{children:`valuation_unavailable_reason`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-strategy`,children:`Create a strategy`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`POST /strategies`}),` creates a paper strategy, which trades a simulated portfolio. You can also `,_jsx(_components.a,{href:`https://app.itoflow.ai/strategies/new`,children:`create one in the app`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Example research strategy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"strategyContent\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Research the listed companies and explain proposed changes before execution.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"constraints\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"min_position_pct\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.02`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"max_position_pct\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.15`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"max_positions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"universe\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"AAPL.US\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"MSFT.US\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"initialCapital\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"10000\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"currency\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"USD\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"rules\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"model_key\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"luna\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"activateImmediately\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Rules`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`strategyContent`})}),_jsx(_components.td,{children:`Required. The mandate, in plain language.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`constraints`})}),_jsxs(_components.td,{children:[`Required: `,_jsx(_components.code,{children:`min_position_pct`}),` and `,_jsx(_components.code,{children:`max_position_pct`}),` as fractions of NAV (`,_jsx(_components.code,{children:`0.02`}),` = 2%), and `,_jsx(_components.code,{children:`max_positions`}),`. The position limits apply to a position’s size, long or short.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`universe`}),` or `,_jsx(_components.code,{children:`allocationGuidance`})]}),_jsxs(_components.td,{children:[`One is required: a list of `,_jsx(_components.code,{children:`TICKER.EXCHANGE`}),` symbols, or guidance on what to invest in.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`initialCapital`}),`, `,_jsx(_components.code,{children:`currency`})]}),_jsxs(_components.td,{children:[`Starting cash for a new paper portfolio, as a decimal string. Between 1 and 1 billion US dollars, or the equivalent. Required without `,_jsx(_components.code,{children:`portfolioId`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`portfolioId`})}),_jsx(_components.td,{children:`Optional. Use an existing portfolio instead of a new one.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`rules`})}),_jsxs(_components.td,{children:[`Optional extra rules, including `,_jsx(_components.code,{children:`model_key`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`activateImmediately`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`false`}),` creates the strategy paused.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`max_position_pct`}),` stays a ratio from `,_jsx(_components.code,{children:`0.001`}),` to `,_jsx(_components.code,{children:`1`}),`, and `,_jsx(_components.code,{children:`min_cash_pct`}),` stays from `,_jsx(_components.code,{children:`0`}),` to `,_jsx(_components.code,{children:`1`}),`. Margin and financing are out of scope. A target may hold more than 100% gross across names: thirteen longs at 10% each and three shorts at 10% each make a 130/30 book, and each position stays within its size limit. Trades are paid for from cash already held. A run’s buys need cash above 110% of their value; a cover may also use what the run’s long sales raise. A short sale’s proceeds reach cash once it fills, so they pay for buys in later runs, not in the run that sells short. A paper book therefore builds a 130/30 position over several runs, and after each run its cash stays above a tenth of that run’s buys.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`name`}),` is required without `,_jsx(_components.code,{children:`portfolioId`}),`. Other optional fields are `,_jsx(_components.code,{children:`description`}),` and `,_jsx(_components.code,{children:`sourceChatId`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`201`}),` response includes `,_jsx(_components.code,{children:`id`}),`, `,_jsx(_components.code,{children:`portfolioId`}),`, `,_jsx(_components.code,{children:`isActive`}),`, `,_jsx(_components.code,{children:`executionStatus`}),`, and `,_jsx(_components.code,{children:`effectiveConstraints`}),` and `,_jsx(_components.code,{children:`effectiveRules`}),`. The effective fields include the defaults Itoflow filled in, so check them rather than assume an omitted control is off.`]}),`\n`,_jsxs(_components.p,{children:[`A portfolio watched by a fund-oversight monitor can’t also have a strategy. Choosing one returns `,_jsx(_components.code,{children:`409 PORTFOLIO_HAS_MONITOR`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`read-strategies`,children:`Read strategies`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET /strategies`}),` lists strategies you can see, which may include some you don’t own.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET /strategies/{id}`}),` returns one strategy: mandate, whether you own it, portfolio, constraints, run state and version.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET /strategies/public`}),` lists the public showcase.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET /strategies/eligible`}),` lists strategies that can be linked to a broker. A strategy whose book or latest target holds a short is excluded because live short sales are not supported. A paper book whose current value is not known is also excluded. The response lists these books in `,_jsx(_components.code,{children:`ineligibleStrategies`}),`, with `,_jsx(_components.code,{children:`strategyId`}),`, `,_jsx(_components.code,{children:`currentValue: null`}),` and a `,_jsx(_components.code,{children:`reason`}),`. It never returns a partial sum as an eligible book’s value.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Only the owner can change a strategy.`}),`\n`,_jsx(Heading,{level:`2`,id:`change-a-mandate`,children:`Change a mandate`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`PUT /strategies/{id}`}),` takes the fields you want to change. When you change the mandate, constraints, rules, universe or allocation guidance, also send `,_jsx(_components.code,{children:`changeDescription`}),`, or you get `,_jsx(_components.code,{children:`400 CHANGE_DESC_REQUIRED`}),`. Each change creates a new version; the response returns `,_jsx(_components.code,{children:`versionId`}),` and `,_jsx(_components.code,{children:`versionNumber`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Editing cancels pending trades.`}),` A new version cancels the strategy’s pending trades, including approved live trades not yet sent to the broker. You can’t edit a running strategy (`,_jsx(_components.code,{children:`400 CANNOT_EDIT_RUNNING`}),`) unless you change only the model; pause it first.`]})}),`\n`,_jsxs(_components.p,{children:[`To avoid overwriting someone else’s edit, send the `,_jsx(_components.code,{children:`expectedVersion`}),` you last read. If a newer version exists, the request fails; reload the strategy and decide again.`]}),`\n`,_jsx(Heading,{level:`2`,id:`run-a-strategy-and-follow-it`,children:`Run a strategy and follow it`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Endpoint`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`POST /strategies/{id}/control`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`action`}),`: `,_jsx(_components.code,{children:`pause`}),`, `,_jsx(_components.code,{children:`resume`}),` or `,_jsx(_components.code,{children:`deactivate`}),`. Pausing or deactivating cancels unapproved trades; trades you already approved can still run.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`POST /strategies/{id}/execute`})}),_jsxs(_components.td,{children:[`Queues a run: `,_jsx(_components.code,{children:`execution_type: \"manual_rebalance\"`}),`, with optional `,_jsx(_components.code,{children:`custom_message`}),` and `,_jsx(_components.code,{children:`trading_date`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /strategies/{id}/active-execution`})}),_jsx(_components.td,{children:`The run in progress, if any`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /strategies/{id}/executions`})}),_jsx(_components.td,{children:`Run history`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /strategies/{id}/stream/{executionId}`})}),_jsx(_components.td,{children:`Live events from a run`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /strategies/{id}/executions/{executionId}/events`})}),_jsx(_components.td,{children:`Saved events from a run`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GET /strategies/{id}/decisions/{decisionId}/events`})}),_jsx(_components.td,{children:`Saved events for one decision`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`execute`}),` returns `,_jsx(_components.code,{children:`202`}),` with `,_jsx(_components.code,{children:`execution_id`}),`, `,_jsx(_components.code,{children:`strategy_id`}),`, `,_jsx(_components.code,{children:`status`}),`, `,_jsx(_components.code,{children:`estimated_duration_seconds`}),` and `,_jsx(_components.code,{children:`stream_url`}),`. The run has been queued, nothing more, and a `,_jsx(_components.code,{children:`202`}),` is never a fill. Follow it, then check its decision and trades. Each request queues a new run, so if you lose the response, check `,_jsx(_components.code,{children:`active-execution`}),` before you try again.`]}),`\n`,_jsx(_components.p,{children:`For strategies on the legacy execution path, each failed automatic run makes\nthe trigger chain wait before it re-arms: 5 minutes, 30 minutes, 2 hours, then\n24 hours for each later failure. A real decision from an automatic run clears\nthe count. The first failure on a new strategy version starts at one. Manual\nruns, cancelled runs, blocked runs, completed runs with no decision, and skips leave the count unchanged.\nRe-arming checks the trigger rules again; it does not promise a run at that time.\nThe failure wait also holds after a scheduler restart or a change to the trigger\nrules. A new strategy version does not inherit the old version’s wait.`}),`\n`,_jsx(_components.p,{children:`On the legacy execution path, if the model provider rejects saved session\ncontent, the run can retry in a fresh session within its three-attempt limit.\nThe agent keeps its saved workspace and states that it lost its prior session\ncontext. Follow the run through its final decision or failure.`}),`\n`,_jsxs(_components.p,{children:[`The live stream stays open through retries while the same run remains active,\nincluding runs longer than 65 minutes. It sends the final status when the run\ncompletes, fails or is cancelled. If the run is no longer marked active, the\nnormal stream timeout applies; check `,_jsx(_components.code,{children:`active-execution`}),` and the saved events.\nA manual run queued behind an active run keeps its stream open while its own\ntask state is queued. It does not replace the active run’s marker.`]}),`\n`,_jsx(Heading,{level:`2`,id:`results`,children:`Results`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`/paper-trading/{strategyId}/status`}),`, `,_jsx(_components.code,{children:`/trades`}),`, `,_jsx(_components.code,{children:`/decisions`}),`, `,_jsx(_components.code,{children:`/approvals`}),` and `,_jsx(_components.code,{children:`/pending-trades`}),` return a strategy’s state and history.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`/paper-trading/summaries`}),` lists `,_jsx(_components.strong,{children:`portfolios`}),`, each with its trading mode, broker sync status and the strategy that manages it. `,_jsx(_components.code,{children:`strategy`}),` is `,_jsx(_components.code,{children:`null`}),` for a broker portfolio no strategy manages. A summary’s `,_jsx(_components.code,{children:`decisionType`}),` says what the strategy decided, not whether an order filled.`]}),`\n`,_jsxs(_components.p,{children:[`A holding’s `,_jsx(_components.code,{children:`weight`}),` is its signed value divided by the portfolio’s net asset value. A book worth zero or less has no weights, so its `,_jsx(_components.code,{children:`status`}),` returns empty `,_jsx(_components.code,{children:`holdings`}),` and a `,_jsx(_components.code,{children:`valuationError`}),` with code `,_jsx(_components.code,{children:`PORTFOLIO_VALUE_NOT_POSITIVE`}),` and a message that gives the net asset value. Otherwise `,_jsx(_components.code,{children:`valuationError`}),` is `,_jsx(_components.code,{children:`null`}),`. Each summary’s `,_jsx(_components.code,{children:`status`}),` follows the same rule. Both routes include available and reserved cash in net asset value: `,`$100 stock, $`,`100 available cash and $100 reserved for a pending buy give a stock weight of 33.33%. The agent’s history file and day-start returns count the cash a pending buy held at the time.`]}),`\n`,_jsx(_components.p,{children:`Before a paper-trading agent receives its input tables, preparation checks the\nprice, currency and exchange rate of every open holding. If any line cannot be\nvalued, the decision still runs. The files keep that line with a null value and\na reason naming the symbols. Portfolio value, cash weight, all holding weights\nand returns that need the missing value remain null. Pending-trade projections\npreserve these null weights. Trade sizing refuses when a stored open holding\ncannot be valued; a missed live quote in the input files alone does not refuse\nsizing. Historical reports and emails also check stored marks and show unknown\nvalues when the evidence is unusable. An import price placeholder stays out of\nthe input tables, as it does from trade sizing.`}),`\n`,_jsx(_components.p,{children:`The agent’s history file uses a stored daily return only from the holdings\nsnapshot’s own UTC date. A missing reading on that date gives a null daily\nreturn. Cumulative return uses the latest reading at or before the snapshot;\nportfolio value comes from that snapshot’s holdings.`}),`\n`,_jsxs(_components.p,{children:[`For holdings and trade approvals, see `,_jsx(_components.a,{href:`/features/portfolios`,children:`Portfolios`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`live-strategies`,children:`Live strategies`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`POST /strategies/live`}),` creates a strategy for a live portfolio linked to a `,_jsx(_components.a,{href:`/features/brokers`,children:`broker connection`}),`. It takes the same body as a paper strategy, but `,_jsx(_components.code,{children:`portfolioId`}),` must name a live portfolio. Its starting capital is the broker account’s total value when you link it.`]}),`\n`,_jsxs(_components.p,{children:[`Every live trade needs your approval before Itoflow sends it to the broker. See `,_jsx(_components.a,{href:`/features/portfolios#approve-trades`,children:`Approve trades`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`models`,children:`Models`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`rules.model_key`}),` to a fusion mode or a single model when you create or edit a strategy; edits without it keep the saved choice. New strategies without a choice use the plan’s `,_jsx(_components.code,{children:`default_mode`}),` from `,_jsx(_components.code,{children:`/pricing/model-access`}),`. Each run pins both the main model and Guardian when it starts; retries keep those routes. A single choice uses that model for both agents. If you lose access to a paid choice, new runs stop with “Choose the Free model or upgrade” until you change the choice or upgrade. A connected ChatGPT subscription does not fund strategies. See `,_jsx(_components.a,{href:`/features/billing#models-and-plans`,children:`models and plans`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For a walk-through, see `,_jsx(_components.a,{href:`/use-cases/run-a-strategy`,children:`Run a strategy under a mandate`}),`. To design and test one first, see `,_jsx(_components.a,{href:`/use-cases/stress-test-a-strategy-idea`,children:`Build and stress-test a strategy idea`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/api-reference/coverage#strategies`,children:`strategy endpoint reference`}),` for every field.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Strategies","description":"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.","href":"/features/strategies"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Create a strategy","slug":"create-a-strategy","depth":2,"children":[]},{"title":"Read strategies","slug":"read-strategies","depth":2,"children":[]},{"title":"Change a mandate","slug":"change-a-mandate","depth":2,"children":[]},{"title":"Run a strategy and follow it","slug":"run-a-strategy-and-follow-it","depth":2,"children":[]},{"title":"Results","slug":"results","depth":2,"children":[]},{"title":"Live strategies","slug":"live-strategies","depth":2,"children":[]},{"title":"Models","slug":"models","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"itoflow","siteName":"Itoflow developer docs","title":"Strategies - Itoflow developer docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T08:00:23.335Z","originalFileLocation":"features/strategies.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Itoflow developer docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Strategies - Itoflow developer docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Itoflow developer docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.itoflow.ai/features/strategies\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://itoflow.mintlify.site/_mintlify/api/og/v2?division=Features\u0026amp;title=Strategies\u0026amp;description=Write+a+mandate+and+position+limits%2C+and+an+Itoflow+agent+runs+a+paper+or+live+portfolio+under+them+on+a+schedule.+Version+the+strategy%2C+run+it+on+demand%2C+and+r\u0026amp;theme=dad8b8aab01d3e9507fe66b3\u0026amp;signature=0b4c90193b2569f08105683c891704f439fa4a037da228a1bb3f5b401bc7f00e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Strategies - Itoflow developer docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://itoflow.mintlify.site/_mintlify/api/og/v2?division=Features\u0026amp;title=Strategies\u0026amp;description=Write+a+mandate+and+position+limits%2C+and+an+Itoflow+agent+runs+a+paper+or+live+portfolio+under+them+on+a+schedule.+Version+the+strategy%2C+run+it+on+demand%2C+and+r\u0026amp;theme=dad8b8aab01d3e9507fe66b3\u0026amp;signature=0b4c90193b2569f08105683c891704f439fa4a037da228a1bb3f5b401bc7f00e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/itoflow/TsEkVxPr_ppj41sQ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Itoflow developer docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0079AD\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.itoflow.ai/features/strategies\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/strategies.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.itoflow.ai/#organization\",\"name\":\"Itoflow developer docs\",\"url\":\"https://docs.itoflow.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/itoflow/sRxx5iBL0vfWaMBY/assets/logo-light.svg?fit=max\u0026auto=format\u0026n=sRxx5iBL0vfWaMBY\u0026q=85\u0026s=3d23e4b830dc16fd51eb271bce00fa46\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.itoflow.ai#website\",\"name\":\"Itoflow developer docs\",\"url\":\"https://docs.itoflow.ai\",\"publisher\":{\"@id\":\"https://docs.itoflow.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.itoflow.ai/features/strategies#webpage\",\"url\":\"https://docs.itoflow.ai/features/strategies\",\"name\":\"Strategies\",\"description\":\"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.\",\"dateModified\":\"2026-11-12T08:00:23.335Z\",\"isPartOf\":{\"@id\":\"https://docs.itoflow.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.itoflow.ai/features/strategies#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.itoflow.ai/features/strategies#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.itoflow.ai/features/chat\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strategies\",\"item\":\"https://docs.itoflow.ai/features/strategies\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.itoflow.ai/features/strategies#article\",\"headline\":\"Strategies\",\"name\":\"Strategies\",\"description\":\"Write a mandate and position limits, and an Itoflow agent runs a paper or live portfolio under them on a schedule. Version the strategy, run it on demand, and read each decision with its reasoning and trades. A person approves every live trade.\",\"url\":\"https://docs.itoflow.ai/features/strategies\",\"mainEntityOfPage\":{\"@id\":\"https://docs.itoflow.ai/features/strategies#webpage\"},\"dateModified\":\"2026-11-12T08:00:23.335Z\",\"publisher\":{\"@id\":\"https://docs.itoflow.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.itoflow.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Itoflow developer docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Itoflow developer docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/features/strategies.md","siteName":"Itoflow developer docs","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Itoflow developer docs","sidebarTitle":"Overview","href":"/index"},{"title":"Itoflow MCP","sidebarTitle":"Why use MCP","href":"/mcp/overview"},{"title":"Connect your AI assistant","href":"/mcp/install"},{"title":"Use Itoflow from your assistant","href":"/mcp/usage"},{"title":"Read the docs with AI tools","href":"/guides/ai-tools"}]},{"group":"Platform","pages":[{"title":"How Itoflow works","href":"/platform/how-itoflow-works"},{"title":"The agent harness","href":"/platform/agent-harness"},{"title":"Quant engine and risk model","href":"/platform/quant-engine"},{"title":"Design principles","href":"/guides/design-principles"}]},{"group":"Use cases","pages":[{"title":"Use cases","sidebarTitle":"All use cases","href":"/use-cases/overview"},{"title":"Test a signal or dataset","href":"/use-cases/test-a-signal"},{"title":"Build and stress-test a strategy idea","href":"/use-cases/stress-test-a-strategy-idea"},{"title":"Decide whether a name improves a book","href":"/use-cases/add-a-name-to-a-book"},{"title":"Compare tax-loss harvesting rules","href":"/use-cases/compare-tax-loss-harvesting"},{"title":"Measure a book's factor risk","href":"/use-cases/measure-factor-risk"},{"title":"Analyze your Interactive Brokers portfolio","href":"/use-cases/interactive-brokers-risk"},{"title":"Monitor a portfolio","href":"/use-cases/portfolio-monitoring"},{"title":"Run a strategy under a mandate","href":"/use-cases/run-a-strategy"},{"title":"Get a daily news brief","href":"/use-cases/daily-news-brief"},{"title":"Research with your own code and tools","href":"/use-cases/research-with-your-code"}]},{"group":"Features","pages":[{"title":"Chat","href":"/features/chat"},{"title":"Portfolios and trade approvals","description":"Read holdings and performance, import a portfolio, measure its risk, link a strategy, and approve trades. Paper portfolios can trade on their own; a live portfolio's trades always wait for your approval.","href":"/features/portfolios"},{"title":"Strategies","href":"/features/strategies"},{"title":"Monitors","description":"Create research and fund-oversight monitors, schedule and run reports, and read the news feed.","href":"/features/monitors"},{"title":"Market data and risk","href":"/features/market-data"},{"title":"Broker connections","href":"/features/brokers"},{"title":"Connect GitHub and MCP servers","href":"/features/integrations"},{"title":"Sharing","href":"/features/sharing"},{"title":"Notifications","href":"/features/notifications"},{"title":"Billing and credits","href":"/features/billing"}]},{"group":"HTTP API","pages":[{"title":"Make your first API request","href":"/quickstart/http"},{"title":"Authentication","href":"/authentication"},{"title":"API conventions","href":"/guides/api-conventions"},{"title":"HTTP API overview","href":"/api-reference/overview"},{"title":"Risk runs","href":"/api-reference/risk-runs"},{"title":"Risk measure","href":"/api-reference/risk-measure"},{"title":"API coverage","href":"/api-reference/coverage"},{"title":"Find and resolve symbols","href":"/guides/symbols"},{"title":"SDKs and client libraries","href":"/sdk/overview"}]},{"group":"Troubleshooting","pages":[{"title":"MCP troubleshooting","href":"/mcp/troubleshooting"},{"title":"API troubleshooting","href":"/troubleshooting"}]},{"group":"Endpoints","pages":[{"group":"Account","pages":[{"title":"Get billing costs","deprecated":null,"version":null,"sidebarTitle":"Get billing costs","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /account/billing-costs","href":"/api-reference/endpoints/get__account_billing_costs"},{"title":"Update account display currency","deprecated":null,"version":null,"sidebarTitle":"Update account display currency","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json patch /account/display-currency","href":"/api-reference/endpoints/patch__account_display_currency"},{"title":"Get account display preferences","deprecated":null,"version":null,"sidebarTitle":"Get account display preferences","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /account/preferences","href":"/api-reference/endpoints/get__account_preferences"},{"title":"Get public sign-in configuration","deprecated":null,"version":null,"sidebarTitle":"Get public sign-in configuration","playground":"interactive","openapi":"/openapi/itoflow-public.openapi.json get /auth/client-config","href":"/api-reference/endpoints/getauthclientconfig"},{"title":"Get authenticated user","deprecated":null,"version":null,"sidebarTitle":"Get authenticated user","playground":"interactive","openapi":"/openapi/itoflow-public.openapi.json get /auth/user","href":"/api-reference/endpoints/getauthuser"},{"title":"Get the current user Codex subscription connection","deprecated":null,"version":null,"sidebarTitle":"Get the current user Codex subscription connection","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /codex-subscription","href":"/api-reference/endpoints/get__codex_subscription"},{"title":"Disconnect the subscription and revoke it at the provider","deprecated":null,"version":null,"sidebarTitle":"Disconnect the subscription and revoke it at the provider","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /codex-subscription","href":"/api-reference/endpoints/delete__codex_subscription"},{"title":"Check whether the user has approved the device authorization","deprecated":null,"version":null,"sidebarTitle":"Check whether the user has approved the device authorization","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /codex-subscription/poll","href":"/api-reference/endpoints/post__codex_subscription_poll"},{"title":"Start a device authorization the user approves in a browser","deprecated":null,"version":null,"sidebarTitle":"Start a device authorization the user approves in a browser","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /codex-subscription/start","href":"/api-reference/endpoints/post__codex_subscription_start"}]},{"group":"Sharing and data","pages":[{"title":"Create or reuse a shareable artifact","deprecated":null,"version":null,"sidebarTitle":"Create or reuse a shareable artifact","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /artifacts","href":"/api-reference/endpoints/post__artifacts"},{"title":"Archive a shareable artifact","deprecated":null,"version":null,"sidebarTitle":"Archive a shareable artifact","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /artifacts/{slug}","href":"/api-reference/endpoints/delete__artifacts_slug_"},{"title":"Read a public artifact","deprecated":null,"version":null,"sidebarTitle":"Read a public artifact","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /artifacts/public/{slug}","href":"/api-reference/endpoints/get__artifacts_public_slug_"},{"title":"Read a public artifact dataframe snapshot","deprecated":null,"version":null,"sidebarTitle":"Read a public artifact dataframe snapshot","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /artifacts/public/{slug}/dataframes/{dfId}","href":"/api-reference/endpoints/get__artifacts_public_slug_dataframes_dfid_"}]},{"group":"Market data","pages":[{"title":"List benchmark index prices to compare performance","deprecated":null,"version":null,"sidebarTitle":"List benchmark index prices to compare performance","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /benchmarks","href":"/api-reference/endpoints/get__benchmarks"},{"title":"Compute a point-in-time factor risk covariance matrix","deprecated":null,"version":null,"sidebarTitle":"Compute a point-in-time factor risk covariance matrix","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /factor-risk/covariance","href":"/api-reference/endpoints/post__factor_risk_covariance"},{"title":"Get the exchange rate between two currencies","deprecated":null,"version":null,"sidebarTitle":"Get the exchange rate between two currencies","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /fx-rate","href":"/api-reference/endpoints/get__fx_rate"},{"title":"Get current exchange rates for all supported currencies","deprecated":null,"version":null,"sidebarTitle":"Get current exchange rates for all supported currencies","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /fx-rates","href":"/api-reference/endpoints/get__fx_rates"},{"title":"Get anonymous strategy leaderboard","deprecated":null,"version":null,"sidebarTitle":"Get anonymous strategy leaderboard","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /leaderboard","href":"/api-reference/endpoints/get__leaderboard"},{"title":"Search stored news by query, symbol or monitor","deprecated":null,"version":null,"sidebarTitle":"Search stored news by query, symbol or monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /news","href":"/api-reference/endpoints/get__news"},{"title":"Get latest analytics for a list of symbols","deprecated":null,"version":null,"sidebarTitle":"Get latest analytics for a list of symbols","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /symbols/analytics","href":"/api-reference/endpoints/get__symbols_analytics"},{"title":"Get latest symbol baseline cards","deprecated":null,"version":null,"sidebarTitle":"Get latest symbol baseline cards","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /symbols/baseline","href":"/api-reference/endpoints/get__symbols_baseline"},{"title":"Get symbol cache status","deprecated":null,"version":null,"sidebarTitle":"Get symbol cache status","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /symbols/cache-status","href":"/api-reference/endpoints/get__symbols_cache_status"},{"title":"List symbol exchanges","deprecated":null,"version":null,"sidebarTitle":"List symbol exchanges","playground":"interactive","openapi":"/openapi/itoflow-public.openapi.json get /symbols/exchanges","href":"/api-reference/endpoints/getsymbolsexchanges"},{"title":"Get cached live quotes for symbols","deprecated":null,"version":null,"sidebarTitle":"Get cached live quotes for symbols","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /symbols/quotes","href":"/api-reference/endpoints/post__symbols_quotes"},{"title":"Resolve canonical instrument identifiers","deprecated":null,"version":null,"sidebarTitle":"Resolve canonical instrument identifiers","playground":"interactive","openapi":"/openapi/itoflow-public.openapi.json get /symbols/resolve","href":"/api-reference/endpoints/getsymbolsresolve"},{"title":"Resolve canonical instrument identifiers in bulk","deprecated":null,"version":null,"sidebarTitle":"Resolve canonical instrument identifiers in bulk","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /symbols/resolve/batch","href":"/api-reference/endpoints/post__symbols_resolve_batch"},{"title":"Search or resolve symbols","deprecated":null,"version":null,"sidebarTitle":"Search or resolve symbols","playground":"interactive","openapi":"/openapi/itoflow-public.openapi.json get /symbols/search","href":"/api-reference/endpoints/getsymbolssearch"}]},{"group":"Brokers","pages":[{"title":"Disconnect broker","deprecated":null,"version":null,"sidebarTitle":"Disconnect broker","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /brokers/{connectionId}","href":"/api-reference/endpoints/delete__brokers_connectionid_"},{"title":"Get broker holdings","deprecated":null,"version":null,"sidebarTitle":"Get broker holdings","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /brokers/{connectionId}/holdings","href":"/api-reference/endpoints/get__brokers_connectionid_holdings"},{"title":"Get broker margins","deprecated":null,"version":null,"sidebarTitle":"Get broker margins","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /brokers/{connectionId}/margins","href":"/api-reference/endpoints/get__brokers_connectionid_margins"},{"title":"Reconnect broker connection","deprecated":null,"version":null,"sidebarTitle":"Reconnect broker connection","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /brokers/{connectionId}/reconnect","href":"/api-reference/endpoints/post__brokers_connectionid_reconnect"},{"title":"Get broker connection status","deprecated":null,"version":null,"sidebarTitle":"Get broker connection status","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /brokers/{connectionId}/status","href":"/api-reference/endpoints/get__brokers_connectionid_status"},{"title":"Reconnect Trading 212 with supplied credentials","deprecated":null,"version":null,"sidebarTitle":"Reconnect Trading 212 with supplied credentials","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /brokers/{connectionId}/trading212/reconnect","href":"/api-reference/endpoints/post__brokers_connectionid_trading212_reconnect"},{"title":"Reconnect Trading 212 with stored credentials","deprecated":null,"version":null,"sidebarTitle":"Reconnect Trading 212 with stored credentials","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /brokers/{connectionId}/trading212/reconnect-stored","href":"/api-reference/endpoints/post__brokers_connectionid_trading212_reconnect_stored"},{"title":"Start broker connection","deprecated":null,"version":null,"sidebarTitle":"Start broker connection","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /brokers/connect","href":"/api-reference/endpoints/post__brokers_connect"},{"title":"List broker connections","deprecated":null,"version":null,"sidebarTitle":"List broker connections","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /brokers/connections","href":"/api-reference/endpoints/get__brokers_connections"},{"title":"Connect Trading 212 manually","deprecated":null,"version":null,"sidebarTitle":"Connect Trading 212 manually","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /brokers/trading212/connect-manual","href":"/api-reference/endpoints/post__brokers_trading212_connect_manual"}]},{"group":"Chat","pages":[{"title":"Permanently delete a chat","deprecated":null,"version":null,"sidebarTitle":"Permanently delete a chat","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /chat-runtime/chats/{chatId}","href":"/api-reference/endpoints/chat_delete"},{"title":"Download a file a chat saved in its workspace","deprecated":null,"version":null,"sidebarTitle":"Download a file a chat saved in its workspace","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat-runtime/chats/{chatId}/downloads/workspace/{relativePath}","href":"/api-reference/endpoints/downloadchatworkspacefile"},{"title":"List files a chat saved in its workspace","deprecated":null,"version":null,"sidebarTitle":"List files a chat saved in its workspace","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat-runtime/chats/{chatId}/workspace","href":"/api-reference/endpoints/listchatworkspacedirectory"},{"title":"Create or reuse a public chat share","deprecated":null,"version":null,"sidebarTitle":"Create or reuse a public chat share","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /chat-shares","href":"/api-reference/endpoints/post__chat_shares"},{"title":"Read a public chat share","deprecated":null,"version":null,"sidebarTitle":"Read a public chat share","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat-shares/public/{slug}","href":"/api-reference/endpoints/get__chat_shares_public_slug_"},{"title":"Read a public chat share dataframe snapshot","deprecated":null,"version":null,"sidebarTitle":"Read a public chat share dataframe snapshot","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat-shares/public/{slug}/dataframes/{dfId}","href":"/api-reference/endpoints/get__chat_shares_public_slug_dataframes_dfid_"},{"title":"Read a public chat share plot snapshot","deprecated":null,"version":null,"sidebarTitle":"Read a public chat share plot snapshot","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat-shares/public/{slug}/plots/{plotId}","href":"/api-reference/endpoints/get__chat_shares_public_slug_plots_plotid_"},{"title":"Refresh a public chat share viewing token","deprecated":null,"version":null,"sidebarTitle":"Refresh a public chat share viewing token","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat-shares/public/{slug}/runtime-token","href":"/api-reference/endpoints/get__chat_shares_public_slug_runtime_token"},{"title":"Get chat","deprecated":null,"version":null,"sidebarTitle":"Get chat","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat/{id}","href":"/api-reference/endpoints/get__chat_id_"},{"title":"Get chat events","deprecated":null,"version":null,"sidebarTitle":"Get chat events","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat/{id}/events","href":"/api-reference/endpoints/get__chat_id_events"},{"title":"Sync chat state","deprecated":null,"version":null,"sidebarTitle":"Sync chat state","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chat/{id}/sync","href":"/api-reference/endpoints/get__chat_id_sync"},{"title":"List chats","deprecated":null,"version":null,"sidebarTitle":"List chats","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /chats","href":"/api-reference/endpoints/get__chats"},{"title":"Get dataframe data","deprecated":null,"version":null,"sidebarTitle":"Get dataframe data","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /dataframes/{chatId}/{dfName}","href":"/api-reference/endpoints/get__dataframes_chatid_dfname_"}]},{"group":"GitHub","pages":[{"title":"Availability","deprecated":null,"version":null,"sidebarTitle":"Availability","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /integrations/github/availability","href":"/api-reference/endpoints/githubavailability"},{"title":"Connect","deprecated":null,"version":null,"sidebarTitle":"Connect","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/github/connect","href":"/api-reference/endpoints/github_connect"},{"title":"Disconnect","deprecated":null,"version":null,"sidebarTitle":"Disconnect","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/github/disconnect","href":"/api-reference/endpoints/github_disconnect"},{"title":"Get Connection","deprecated":null,"version":null,"sidebarTitle":"Get Connection","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/github/getConnection","href":"/api-reference/endpoints/github_getconnection"},{"title":"List Repositories","deprecated":null,"version":null,"sidebarTitle":"List Repositories","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/github/listRepositories","href":"/api-reference/endpoints/github_listrepositories"}]},{"group":"Connected MCP servers","pages":[{"title":"Add","deprecated":null,"version":null,"sidebarTitle":"Add","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/add","href":"/api-reference/endpoints/remotemcp_add"},{"title":"Availability","deprecated":null,"version":null,"sidebarTitle":"Availability","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /integrations/remote-mcp/availability","href":"/api-reference/endpoints/remotemcpavailability"},{"title":"Connect","deprecated":null,"version":null,"sidebarTitle":"Connect","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/connect","href":"/api-reference/endpoints/remotemcp_connect"},{"title":"Disconnect","deprecated":null,"version":null,"sidebarTitle":"Disconnect","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/disconnect","href":"/api-reference/endpoints/remotemcp_disconnect"},{"title":"Get Status","deprecated":null,"version":null,"sidebarTitle":"Get Status","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/getStatus","href":"/api-reference/endpoints/remotemcp_getstatus"},{"title":"List","deprecated":null,"version":null,"sidebarTitle":"List","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/list","href":"/api-reference/endpoints/remotemcp_list"},{"title":"List Tools","deprecated":null,"version":null,"sidebarTitle":"List Tools","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/listTools","href":"/api-reference/endpoints/remotemcp_listtools"},{"title":"Remove","deprecated":null,"version":null,"sidebarTitle":"Remove","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/remove","href":"/api-reference/endpoints/remotemcp_remove"},{"title":"Rename","deprecated":null,"version":null,"sidebarTitle":"Rename","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /integrations/remote-mcp/rename","href":"/api-reference/endpoints/remotemcp_rename"}]},{"group":"Notifications","pages":[{"title":"List notification logs","deprecated":null,"version":null,"sidebarTitle":"List notification logs","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /notifications/logs","href":"/api-reference/endpoints/get__notifications_logs"},{"title":"Get notification preferences","deprecated":null,"version":null,"sidebarTitle":"Get notification preferences","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /notifications/preferences","href":"/api-reference/endpoints/get__notifications_preferences"},{"title":"Update notification preferences","deprecated":null,"version":null,"sidebarTitle":"Update notification preferences","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json put /notifications/preferences","href":"/api-reference/endpoints/put__notifications_preferences"},{"title":"Unsubscribe notification recipient","deprecated":null,"version":null,"sidebarTitle":"Unsubscribe notification recipient","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /notifications/unsubscribe","href":"/api-reference/endpoints/post__notifications_unsubscribe"}]},{"group":"Strategies","pages":[{"title":"Get strategy approvals history","deprecated":null,"version":null,"sidebarTitle":"Get strategy approvals history","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /paper-trading/{strategyId}/approvals","href":"/api-reference/endpoints/get__paper_trading_strategyid_approvals"},{"title":"Get strategy decision history","deprecated":null,"version":null,"sidebarTitle":"Get strategy decision history","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /paper-trading/{strategyId}/decisions","href":"/api-reference/endpoints/get__paper_trading_strategyid_decisions"},{"title":"Get strategy pending trades","deprecated":null,"version":null,"sidebarTitle":"Get strategy pending trades","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /paper-trading/{strategyId}/pending-trades","href":"/api-reference/endpoints/get__paper_trading_strategyid_pending_trades"},{"title":"Get strategy performance snapshot","deprecated":null,"version":null,"sidebarTitle":"Get strategy performance snapshot","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /paper-trading/{strategyId}/status","href":"/api-reference/endpoints/get__paper_trading_strategyid_status"},{"title":"Get strategy trade history","deprecated":null,"version":null,"sidebarTitle":"Get strategy trade history","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /paper-trading/{strategyId}/trades","href":"/api-reference/endpoints/get__paper_trading_strategyid_trades"},{"title":"Get paper trading portfolio summaries","deprecated":null,"version":null,"sidebarTitle":"Get paper trading portfolio summaries","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /paper-trading/summaries","href":"/api-reference/endpoints/get__paper_trading_summaries"},{"title":"Assign strategy to portfolio","deprecated":null,"version":null,"sidebarTitle":"Assign strategy to portfolio","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json put /portfolios/{id}/link","href":"/api-reference/endpoints/put__portfolios_id_link"},{"title":"Remove strategy from portfolio","deprecated":null,"version":null,"sidebarTitle":"Remove strategy from portfolio","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /portfolios/{id}/link","href":"/api-reference/endpoints/delete__portfolios_id_link"},{"title":"List strategies visible to user","deprecated":null,"version":null,"sidebarTitle":"List strategies visible to user","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies","href":"/api-reference/endpoints/get__strategies"},{"title":"Create a paper strategy","deprecated":null,"version":null,"sidebarTitle":"Create a paper strategy","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /strategies","href":"/api-reference/endpoints/post__strategies"},{"title":"Get strategy detail","deprecated":null,"version":null,"sidebarTitle":"Get strategy detail","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/{id}","href":"/api-reference/endpoints/get__strategies_id_"},{"title":"Update a strategy","deprecated":null,"version":null,"sidebarTitle":"Update a strategy","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json put /strategies/{id}","href":"/api-reference/endpoints/put__strategies_id_"},{"title":"Get the strategy run in progress","deprecated":null,"version":null,"sidebarTitle":"Get the strategy run in progress","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/{id}/active-execution","href":"/api-reference/endpoints/get__strategies_id_active_execution"},{"title":"Control strategy execution","deprecated":null,"version":null,"sidebarTitle":"Control strategy execution","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /strategies/{id}/control","href":"/api-reference/endpoints/post__strategies_id_control"},{"title":"Get strategy decision events","deprecated":null,"version":null,"sidebarTitle":"Get strategy decision events","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/{id}/decisions/{decisionId}/events","href":"/api-reference/endpoints/get__strategies_id_decisions_decisionid_events"},{"title":"Queue a manual strategy execution","deprecated":null,"version":null,"sidebarTitle":"Queue a manual strategy execution","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /strategies/{id}/execute","href":"/api-reference/endpoints/post__strategies_id_execute"},{"title":"List strategy executions","deprecated":null,"version":null,"sidebarTitle":"List strategy executions","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/{id}/executions","href":"/api-reference/endpoints/get__strategies_id_executions"},{"title":"Get strategy execution events","deprecated":null,"version":null,"sidebarTitle":"Get strategy execution events","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/{id}/executions/{executionId}/events","href":"/api-reference/endpoints/get__strategies_id_executions_executionid_events"},{"title":"Stream strategy execution events","deprecated":null,"version":null,"sidebarTitle":"Stream strategy execution events","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/{id}/stream/{executionId}","href":"/api-reference/endpoints/get__strategies_id_stream_executionid_"},{"title":"List strategies that can go live at a broker","deprecated":null,"version":null,"sidebarTitle":"List strategies that can go live at a broker","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/eligible","href":"/api-reference/endpoints/get__strategies_eligible"},{"title":"Create a live-linked strategy","deprecated":null,"version":null,"sidebarTitle":"Create a live-linked strategy","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /strategies/live","href":"/api-reference/endpoints/post__strategies_live"},{"title":"List public strategy showcase","deprecated":null,"version":null,"sidebarTitle":"List public strategy showcase","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /strategies/public","href":"/api-reference/endpoints/get__strategies_public"}]},{"group":"Portfolios","pages":[{"title":"List user portfolios","deprecated":null,"version":null,"sidebarTitle":"List user portfolios","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios","href":"/api-reference/endpoints/get__portfolios"},{"title":"Create portfolio","deprecated":null,"version":null,"sidebarTitle":"Create portfolio","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios","href":"/api-reference/endpoints/post__portfolios"},{"title":"Get portfolio detail","deprecated":null,"version":null,"sidebarTitle":"Get portfolio detail","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}","href":"/api-reference/endpoints/get__portfolios_id_"},{"title":"Delete portfolio","deprecated":null,"version":null,"sidebarTitle":"Delete portfolio","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /portfolios/{id}","href":"/api-reference/endpoints/delete__portfolios_id_"},{"title":"Update portfolio auto-execute","deprecated":null,"version":null,"sidebarTitle":"Update portfolio auto-execute","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json patch /portfolios/{id}/auto-execute","href":"/api-reference/endpoints/patch__portfolios_id_auto_execute"},{"title":"Set portfolio benchmark comparison basis","deprecated":null,"version":null,"sidebarTitle":"Set portfolio benchmark comparison basis","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json put /portfolios/{id}/benchmark","href":"/api-reference/endpoints/put__portfolios_id_benchmark"},{"title":"Get broker validation status","deprecated":null,"version":null,"sidebarTitle":"Get broker validation status","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}/broker-status","href":"/api-reference/endpoints/get__portfolios_id_broker_status"},{"title":"Get AI trading decisions","deprecated":null,"version":null,"sidebarTitle":"Get AI trading decisions","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}/decisions","href":"/api-reference/endpoints/get__portfolios_id_decisions"},{"title":"Convert portfolio to paper mode","deprecated":null,"version":null,"sidebarTitle":"Convert portfolio to paper mode","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios/{id}/go-paper","href":"/api-reference/endpoints/post__portfolios_id_go_paper"},{"title":"Get historical holdings snapshot","deprecated":null,"version":null,"sidebarTitle":"Get historical holdings snapshot","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}/holdings/history","href":"/api-reference/endpoints/get__portfolios_id_holdings_history"},{"title":"Liquidate portfolio","deprecated":null,"version":null,"sidebarTitle":"Liquidate portfolio","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios/{id}/liquidate","href":"/api-reference/endpoints/post__portfolios_id_liquidate"},{"title":"List pending trades","deprecated":null,"version":null,"sidebarTitle":"List pending trades","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}/pending-trades","href":"/api-reference/endpoints/get__portfolios_id_pending_trades"},{"title":"Cancel pending trades","deprecated":null,"version":null,"sidebarTitle":"Cancel pending trades","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /portfolios/{id}/pending-trades","href":"/api-reference/endpoints/delete__portfolios_id_pending_trades"},{"title":"Approve pending trades","deprecated":null,"version":null,"sidebarTitle":"Approve pending trades","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios/{id}/pending-trades/approve","href":"/api-reference/endpoints/post__portfolios_id_pending_trades_approve"},{"title":"Get portfolio performance history","deprecated":null,"version":null,"sidebarTitle":"Get portfolio performance history","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}/performance","href":"/api-reference/endpoints/get__portfolios_id_performance"},{"title":"Reconcile live portfolio","deprecated":null,"version":null,"sidebarTitle":"Reconcile live portfolio","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios/{id}/reconcile","href":"/api-reference/endpoints/post__portfolios_id_reconcile"},{"title":"Sync live portfolio state","deprecated":null,"version":null,"sidebarTitle":"Sync live portfolio state","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios/{id}/sync-live-state","href":"/api-reference/endpoints/post__portfolios_id_sync_live_state"},{"title":"Get trade history","deprecated":null,"version":null,"sidebarTitle":"Get trade history","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}/trades","href":"/api-reference/endpoints/get__portfolios_id_trades"},{"title":"Get trade execution attempts","deprecated":null,"version":null,"sidebarTitle":"Get trade execution attempts","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/{id}/trades/{tradeId}/attempts","href":"/api-reference/endpoints/get__portfolios_id_trades_tradeid_attempts"},{"title":"List pending approval summaries","deprecated":null,"version":null,"sidebarTitle":"List pending approval summaries","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /portfolios/approvals/pending","href":"/api-reference/endpoints/get__portfolios_approvals_pending"},{"title":"Commit an approved paper portfolio import","deprecated":null,"version":null,"sidebarTitle":"Commit an approved paper portfolio import","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios/import","href":"/api-reference/endpoints/post__portfolios_import"},{"title":"Validate uploaded paper portfolio import","deprecated":null,"version":null,"sidebarTitle":"Validate uploaded paper portfolio import","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /portfolios/import/validate","href":"/api-reference/endpoints/post__portfolios_import_validate"},{"title":"Get portfolio transition status","deprecated":null,"version":null,"sidebarTitle":"Get portfolio transition status","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /transition/{taskId}","href":"/api-reference/endpoints/get__transition_taskid_"}]},{"group":"Billing","pages":[{"title":"Create billing portal session","deprecated":null,"version":null,"sidebarTitle":"Create billing portal session","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/billing-portal","href":"/api-reference/endpoints/post__pricing_billing_portal"},{"title":"Get billing summary","deprecated":null,"version":null,"sidebarTitle":"Get billing summary","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/billing-summary","href":"/api-reference/endpoints/get__pricing_billing_summary"},{"title":"Get current public plan prices, usage allowances and model access","deprecated":null,"version":null,"sidebarTitle":"Get current public plan prices, usage allowances and model access","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/catalog","href":"/api-reference/endpoints/get__pricing_catalog"},{"title":"Get pricing configuration","deprecated":null,"version":null,"sidebarTitle":"Get pricing configuration","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/config","href":"/api-reference/endpoints/get__pricing_config"},{"title":"Confirm payment","deprecated":null,"version":null,"sidebarTitle":"Confirm payment","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/confirm-payment","href":"/api-reference/endpoints/post__pricing_confirm_payment"},{"title":"List credit tiers","deprecated":null,"version":null,"sidebarTitle":"List credit tiers","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/credit-tiers","href":"/api-reference/endpoints/get__pricing_credit_tiers"},{"title":"Get customer balance","deprecated":null,"version":null,"sidebarTitle":"Get customer balance","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/customer-balance","href":"/api-reference/endpoints/get__pricing_customer_balance"},{"title":"Get pricing plans","deprecated":null,"version":null,"sidebarTitle":"Get pricing plans","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/get-plans","href":"/api-reference/endpoints/post__pricing_get_plans"},{"title":"Get subscription","deprecated":null,"version":null,"sidebarTitle":"Get subscription","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/get-subscription","href":"/api-reference/endpoints/post__pricing_get_subscription"},{"title":"List invoices","deprecated":null,"version":null,"sidebarTitle":"List invoices","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/invoices","href":"/api-reference/endpoints/get__pricing_invoices"},{"title":"Get configured agent models and current model access","deprecated":null,"version":null,"sidebarTitle":"Get configured agent models and current model access","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/model-access","href":"/api-reference/endpoints/get__pricing_model_access"},{"title":"List payment methods","deprecated":null,"version":null,"sidebarTitle":"List payment methods","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /pricing/payment-methods","href":"/api-reference/endpoints/get__pricing_payment_methods"},{"title":"Delete payment method","deprecated":null,"version":null,"sidebarTitle":"Delete payment method","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /pricing/payment-methods/{paymentMethodId}","href":"/api-reference/endpoints/delete__pricing_payment_methods_paymentmethodid_"},{"title":"Set default payment method","deprecated":null,"version":null,"sidebarTitle":"Set default payment method","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/payment-methods/default","href":"/api-reference/endpoints/post__pricing_payment_methods_default"},{"title":"Create payment method setup intent","deprecated":null,"version":null,"sidebarTitle":"Create payment method setup intent","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/payment-methods/setup-intent","href":"/api-reference/endpoints/post__pricing_payment_methods_setup_intent"},{"title":"Preview subscription upgrade","deprecated":null,"version":null,"sidebarTitle":"Preview subscription upgrade","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/preview-upgrade","href":"/api-reference/endpoints/post__pricing_preview_upgrade"},{"title":"Refund customer balance","deprecated":null,"version":null,"sidebarTitle":"Refund customer balance","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/refund-balance","href":"/api-reference/endpoints/post__pricing_refund_balance"},{"title":"Set spending cap","deprecated":null,"version":null,"sidebarTitle":"Set spending cap","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/spending-cap","href":"/api-reference/endpoints/post__pricing_spending_cap"},{"title":"Update subscription","deprecated":null,"version":null,"sidebarTitle":"Update subscription","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /pricing/update-subscription","href":"/api-reference/endpoints/post__pricing_update_subscription"}]},{"group":"Risk runs","pages":[{"title":"Measure","deprecated":null,"version":null,"sidebarTitle":"Measure","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /risk/measure","href":"/api-reference/endpoints/startriskmeasure"},{"title":"Read a risk measure","deprecated":null,"version":null,"sidebarTitle":"Read a risk measure","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /risk/measure/{measure_id}","href":"/api-reference/endpoints/getriskmeasure"},{"title":"Stop a risk measure","deprecated":null,"version":null,"sidebarTitle":"Stop a risk measure","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /risk/measure/{measure_id}/cancel","href":"/api-reference/endpoints/cancelriskmeasure"},{"title":"Runs","deprecated":null,"version":null,"sidebarTitle":"Runs","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /risk/runs","href":"/api-reference/endpoints/startriskrun"},{"title":"Read a risk run","deprecated":null,"version":null,"sidebarTitle":"Read a risk run","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /risk/runs/{run_id}","href":"/api-reference/endpoints/getriskrun"},{"title":"Read the full risk run output","deprecated":null,"version":null,"sidebarTitle":"Read the full risk run output","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /risk/runs/{run_id}/artifact","href":"/api-reference/endpoints/getriskrunartifact"},{"title":"Stop a risk run","deprecated":null,"version":null,"sidebarTitle":"Stop a risk run","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /risk/runs/{run_id}/cancel","href":"/api-reference/endpoints/cancelriskrun"}]},{"group":"Monitors","pages":[{"title":"List monitors","deprecated":null,"version":null,"sidebarTitle":"List monitors","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists","href":"/api-reference/endpoints/get__watchlists"},{"title":"Create monitor","deprecated":null,"version":null,"sidebarTitle":"Create monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /watchlists","href":"/api-reference/endpoints/post__watchlists"},{"title":"Get monitor","deprecated":null,"version":null,"sidebarTitle":"Get monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}","href":"/api-reference/endpoints/get__watchlists_id_"},{"title":"Update monitor","deprecated":null,"version":null,"sidebarTitle":"Update monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json put /watchlists/{id}","href":"/api-reference/endpoints/put__watchlists_id_"},{"title":"Delete monitor","deprecated":null,"version":null,"sidebarTitle":"Delete monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json delete /watchlists/{id}","href":"/api-reference/endpoints/delete__watchlists_id_"},{"title":"Get the Monitor run in progress","deprecated":null,"version":null,"sidebarTitle":"Get the Monitor run in progress","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/active-execution","href":"/api-reference/endpoints/get__watchlists_id_active_execution"},{"title":"Get latest monitor analytics snapshot","deprecated":null,"version":null,"sidebarTitle":"Get latest monitor analytics snapshot","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/analytics/latest","href":"/api-reference/endpoints/get__watchlists_id_analytics_latest"},{"title":"Control monitor agent","deprecated":null,"version":null,"sidebarTitle":"Control monitor agent","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /watchlists/{id}/control","href":"/api-reference/endpoints/post__watchlists_id_control"},{"title":"Get the results a Monitor run has shown so far","deprecated":null,"version":null,"sidebarTitle":"Get the results a Monitor run has shown so far","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/executions/{executionId}/results","href":"/api-reference/endpoints/get__watchlists_id_executions_executionid_results"},{"title":"Fork a readable monitor","deprecated":null,"version":null,"sidebarTitle":"Fork a readable monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /watchlists/{id}/fork","href":"/api-reference/endpoints/post__watchlists_id_fork"},{"title":"Read news for a monitor","deprecated":null,"version":null,"sidebarTitle":"Read news for a monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/news","href":"/api-reference/endpoints/getmonitornews"},{"title":"Fetch news for a monitor","deprecated":null,"version":null,"sidebarTitle":"Fetch news for a monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /watchlists/{id}/news/fetch","href":"/api-reference/endpoints/fetchmonitornews"},{"title":"Get cached live quotes for a monitor","deprecated":null,"version":null,"sidebarTitle":"Get cached live quotes for a monitor","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/quotes","href":"/api-reference/endpoints/get__watchlists_id_quotes"},{"title":"List monitor reports","deprecated":null,"version":null,"sidebarTitle":"List monitor reports","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/reports","href":"/api-reference/endpoints/get__watchlists_id_reports"},{"title":"Get monitor report","deprecated":null,"version":null,"sidebarTitle":"Get monitor report","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/reports/{reportId}","href":"/api-reference/endpoints/get__watchlists_id_reports_reportid_"},{"title":"Get the latest completed Monitor report","deprecated":null,"version":null,"sidebarTitle":"Get the latest completed Monitor report","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json get /watchlists/{id}/reports/latest","href":"/api-reference/endpoints/get__watchlists_id_reports_latest"},{"title":"Manually regenerate the current monitor report","deprecated":null,"version":null,"sidebarTitle":"Manually regenerate the current monitor report","playground":"simple","openapi":"/openapi/itoflow-public.openapi.json post /watchlists/{id}/reports/run","href":"/api-reference/endpoints/post__watchlists_id_reports_run"}]}]}]},"basePath":"","title":"Strategies - Itoflow developer docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}