Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio.
Approved portfolio upload import request for a managed paper portfolio.
draft
object
required
User-approved edited draft to import as a managed paper portfolio.
Show child attributes
output_id
string
required
Stable portfolio_import output id for idempotency.
Required string length: 1 - 240
approval_token
string
Signed approval token returned by import preflight for the approved draft.
Required string length: 1 - 4000
draft_file
object
Optional draft.json file reference used for auditability.
Show child attributes
Response
Portfolio import validation result. An unvalued holding makes book_summary NAV and all weights null, with valuation_unavailable_reason.
Option 1
Option 2
Successful portfolio import preflight response.
allocated_amount_usd
string
required
USD capital allocated from cash and holdings with a current USD valuation. If valuation_coverage is partial, this excludes unvalued holdings and is not the complete portfolio market value.
Minimum string length: 1
approval_token
string
required
Signed token authorizing import of the currently validated draft.
Minimum string length: 1
execution_mode
enum<string>
required
Execution mode that will be used by import.
Available options:
paper
holding_prices
object[]
required
Provider current prices resolved during preflight for display in the review UI. Inspect valuation_coverage and unvalued_holding_row_ids before treating allocated_amount_usd as a complete value.
Show child attributes
imported_cash_count
integer
required
Count of included cash rows accepted by preflight.
Required range: x >= 0
imported_holding_count
integer
required
Count of included holding rows accepted by preflight.
Required range: x >= 0
ok
enum<boolean>
required
True when preflight succeeded.
Available options:
true
portfolio_type
enum<string>
required
Portfolio type that will be created by import.
Available options:
managed
source_broker
enum<string> | null
required
Broker metadata accepted from the draft, or null when absent.
Available options:
trading212,
robinhood,
zerodha,
alpaca,
ibkr,
other,
null
unvalued_holding_row_ids
string[]
required
Included holding row ids without a current USD value. Review these rows before approving a partial valuation. Empty for complete or not_rechecked coverage.
valuation_coverage
enum<string>
required
complete means every included holding has a current USD value; partial means some included holdings are unvalued; not_rechecked is an idempotent preflight for an already imported portfolio.
Available options:
complete,
partial,
not_rechecked
book_summary
object
Long, short, gross, and net exposure. Cash counts only in NAV. An unvalued holding makes its leg, gross value, net value, NAV and all weights null, with valuation_unavailable_reason.
Show child attributes
normalized_draft
object
Provider-verified draft used to create the approval token, including exact symbol, currency, and quote-unit metadata resolved during preflight.
Show child attributes
portfolio_value
object
Reviewed value provenance and its difference from the current provider mark, when comparable.
Show child attributes
row_warnings
object[]
Per-holding valuation warnings with row_id. Price warnings use field price: price_not_fetched means the vendor did not answer; no_recent_close means no usable close in the last 14 days. holding_fx_unavailable uses field currency and names the missing exchange rate to USD. Warnings do not block confirmation.
Show child attributes
{"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":"api-reference/endpoints/post__portfolios_import_validate","slug":"/api-reference/endpoints/post__portfolios_import_validate","pageMetadata":{"title":"Validate uploaded paper portfolio import","description":"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio.\n\nOperation ID: post__portfolios_import_validate.","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","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Operation ID: post__portfolios_import_validate.\"\n })]\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Validate uploaded paper portfolio import","description":"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio.\n\nOperation ID: post__portfolios_import_validate.","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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio.\n\nOperation ID: post__portfolios_import_validate.","operationId":"post__portfolios_import_validate","requestBody":"b1b07389-5549-4f1b-a2fb-aca65aa54013","responses":{"200":"328bfad7-1c16-4b50-a1bc-0ff4b7a635bd","401":"55747adc-f069-4884-aeac-876ab74e47b8","403":"15ba38ed-e230-476d-97db-ec7bf903a541","500":"38a4e4ff-55e9-4420-b7c3-da078b095b64"},"security":["6a78ca23-58c7-4149-bed9-46aab84be0cb"],"summary":"Validate uploaded paper portfolio import","tags":["Portfolios"],"x-mint":{"href":"/api-reference/endpoints/post__portfolios_import_validate","metadata":{"playground":"simple","sidebarTitle":"Validate uploaded paper portfolio import","title":"Validate uploaded paper portfolio import"}},"method":"post","type":"path","servers":["885fa0e1-2ea5-48b1-835e-2157d8c1a66e"],"path":"/portfolios/import/validate","baseUrlOptions":["https://api.itoflow.ai"],"title":"Validate uploaded paper portfolio import","codeSamples":[],"requestExampleLanguages":["bash","python","javascript"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","disableProxy":true,"urlDisplay":"full"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"Approved portfolio upload import request for a managed paper portfolio.","properties":{"draft":{"additionalProperties":false,"description":"User-approved edited draft to import as a managed paper portfolio.","properties":{"draft_id":{"description":"Stable id for this parsed portfolio draft across review revisions.","maxLength":120,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.draft_id","typeLabel":"string"},"execution_mode":{"description":"Always paper for chat portfolio uploads; this import cannot create a live portfolio.","enum":["paper"],"type":"string","isRequired":true,"uniqueKey":"draft.execution_mode","typeLabel":"enum\u003cstring>"},"holdings":{"description":"Parsed holding rows for user review and possible import.","items":{"additionalProperties":false,"description":"One parsed holding row for the editable portfolio upload review.","properties":{"quantity":{"description":"Signed number of shares or units held: positive for a long, negative for a short. Never market value, allocation weight, total cost, or cash.","pattern":"^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].quantity","typeLabel":"string"},"row_id":{"description":"Stable row id used for edits, validation errors, and import diagnostics.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].row_id","typeLabel":"string"},"symbol":{"description":"Fully qualified holding symbol in SYMBOL.EXCHANGE format, matching symbol_resolution.symbol after lookup.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].symbol","typeLabel":"string"},"cost_basis":{"description":"Optional average entry price per one share/unit in currency and price_unit terms; omit when unknown and never use 0 as a placeholder; never copy total cost, total invested, or current value into this field. A deterministic per-unit value reconciled from quantity, market value, signed unrealized P\u0026L, explicit currency evidence, and available current-price evidence is allowed when the derivation is recorded as a row warning.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","uniqueKey":"draft.holdings.items.[INDEX].cost_basis","typeLabel":"string"},"currency":{"description":"Ledger currency established by source or user edit evidence, or by verified Itoflow provider symbol metadata; never infer it from unverified symbol text, exchange, broker, country, or filename.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","uniqueKey":"draft.holdings.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"included":{"default":true,"description":"Whether this holding row should be imported if the user confirms.","type":"boolean","uniqueKey":"draft.holdings.items.[INDEX].included","typeLabel":"boolean"},"issues":{"default":[],"description":"Row-scoped parser or validation issues; error severity blocks confirmation.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].issues.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].issues.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"draft.holdings.items.[INDEX].issues.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"draft.holdings.items.[INDEX].issues.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"draft.holdings.items.[INDEX].issues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"draft.holdings.items.[INDEX].issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"draft.holdings.items.[INDEX].issues","typeLabel":"object[]"},"price_unit":{"default":"NATIVE","description":"Quote denomination for unit_value and cost_basis; use NATIVE unless the source or selected Itoflow symbol metadata explicitly quotes GBX, ZAC, or ILA.","enum":["NATIVE","GBX","ZAC","ILA"],"type":"string","uniqueKey":"draft.holdings.items.[INDEX].price_unit","typeLabel":"enum\u003cstring>"},"side":{"description":"Optional position side copied from a side column: long or L, short or S, in any case. A short side turns a positive quantity negative; omit side when the quantity already carries its sign.","pattern":"^(?:[Ll][Oo][Nn][Gg]|[Ll]|[Ss][Hh][Oo][Rr][Tt]|[Ss])$","type":"string","uniqueKey":"draft.holdings.items.[INDEX].side","typeLabel":"string"},"source":{"description":"Short source note for the row, such as filename, screenshot area, or sheet name.","maxLength":240,"type":"string","uniqueKey":"draft.holdings.items.[INDEX].source","typeLabel":"string"},"symbol_resolution":{"additionalProperties":false,"description":"Selected Itoflow symbol lookup result for a holding; this is not free text.","properties":{"code":{"description":"Provider ticker code from the selected Itoflow symbol result.","maxLength":40,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.code","typeLabel":"string"},"exchange":{"description":"Exchange code from the selected Itoflow symbol result.","maxLength":40,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.exchange","typeLabel":"string"},"name":{"description":"Instrument name from the selected Itoflow symbol result.","maxLength":240,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.name","typeLabel":"string"},"symbol":{"description":"Fully qualified Itoflow symbol selected from lookup, e.g. AAPL.US.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.symbol","typeLabel":"string"},"currency":{"oneOf":[{"description":"Currency or quote-unit alias returned by the selected Itoflow symbol result.","pattern":"^(?:[A-Z]{3}|GBp)$","type":"string","uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.currency.oneOf.0","typeLabel":"string"},{"description":"Currency or quote-unit alias returned by the selected Itoflow symbol result.","pattern":"^(?:[A-Z]{3}|GBp)$","type":"null","uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.currency.oneOf.1","typeLabel":"null"}],"uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.currency","typeLabel":"string | null"},"type":{"oneOf":[{"description":"Instrument type from the selected Itoflow symbol result when known.","maxLength":120,"type":"string","uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.type.oneOf.0","typeLabel":"string"},{"description":"Instrument type from the selected Itoflow symbol result when known.","maxLength":120,"type":"null","uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution.type","typeLabel":"string | null"}},"required":["code","exchange","name","symbol"],"type":"object","uniqueKey":"draft.holdings.items.[INDEX].symbol_resolution","typeLabel":"object"},"unit_scale":{"description":"Required only for supported quote subdivisions GBX, ZAC, or ILA; omit for NATIVE price units.","enum":["0.01"],"type":"string","uniqueKey":"draft.holdings.items.[INDEX].unit_scale","typeLabel":"enum\u003cstring>"},"unit_value":{"description":"Optional parsed current market price per one share/unit in currency and price_unit terms; omit when unknown. Import validation ignores this field and resolves provider current prices for display when available; never total row value, market value, account value, invested value, or position value.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","uniqueKey":"draft.holdings.items.[INDEX].unit_value","typeLabel":"string"}},"required":["quantity","row_id","symbol"],"type":"object","uniqueKey":"draft.holdings.items.[INDEX]","typeLabel":"object"},"maxItems":3000,"type":"array","isRequired":true,"uniqueKey":"draft.holdings","typeLabel":"object[]"},"portfolio_name":{"description":"User-editable name for the managed paper portfolio to create.","maxLength":100,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.portfolio_name","typeLabel":"string"},"portfolio_type":{"description":"Always managed for chat portfolio uploads; this import cannot create a reference portfolio.","enum":["managed"],"type":"string","isRequired":true,"uniqueKey":"draft.portfolio_type","typeLabel":"enum\u003cstring>"},"revision":{"description":"Draft revision number; it increases each time the draft is reparsed or repaired.","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"draft.revision","typeLabel":"integer"},"schema_version":{"description":"Portfolio upload draft schema version; currently v1.","enum":["v1"],"type":"string","isRequired":true,"uniqueKey":"draft.schema_version","typeLabel":"enum\u003cstring>"},"approved_at":{"oneOf":[{"type":"string","description":"ISO timestamp set when the user approved this edited draft.","format":"date-time","uniqueKey":"draft.approved_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"string","description":"ISO timestamp set when the user approved this edited draft.","format":"date-time","uniqueKey":"draft.approved_at.oneOf.1","typeLabel":"string\u003cdate-time>"}],"uniqueKey":"draft.approved_at","typeLabel":"string\u003cdate-time>"},"cash":{"default":[],"description":"Optional parsed cash balances to import alongside holdings.","items":{"additionalProperties":false,"description":"One parsed cash balance row for the editable portfolio upload review.","properties":{"amount":{"description":"Cash amount in the row currency; negative for borrowed cash such as a margin loan. Never a security quantity or portfolio total unless explicitly a cash balance.","pattern":"^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"draft.cash.items.[INDEX].amount","typeLabel":"string"},"row_id":{"description":"Stable cash row id used for edits, validation errors, and import diagnostics.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.cash.items.[INDEX].row_id","typeLabel":"string"},"currency":{"description":"Ledger currency established by source or user edit evidence, or by verified Itoflow provider symbol metadata; never infer it from unverified symbol text, exchange, broker, country, or filename.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","uniqueKey":"draft.cash.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"included":{"default":true,"description":"Whether this cash row should be imported if the user confirms.","type":"boolean","uniqueKey":"draft.cash.items.[INDEX].included","typeLabel":"boolean"},"issues":{"default":[],"description":"Cash-row parser or validation issues; error severity blocks confirmation.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.cash.items.[INDEX].issues.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.cash.items.[INDEX].issues.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"draft.cash.items.[INDEX].issues.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"draft.cash.items.[INDEX].issues.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"draft.cash.items.[INDEX].issues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"draft.cash.items.[INDEX].issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"draft.cash.items.[INDEX].issues","typeLabel":"object[]"},"source":{"description":"Short source note for the cash row, such as filename, screenshot area, or sheet name.","maxLength":240,"type":"string","uniqueKey":"draft.cash.items.[INDEX].source","typeLabel":"string"}},"required":["amount","row_id"],"type":"object","uniqueKey":"draft.cash.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"draft.cash","typeLabel":"object[]"},"parser_warnings":{"default":[],"description":"Draft-level parsing warnings from ambiguous or incomplete source evidence.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.parser_warnings.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.parser_warnings.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"draft.parser_warnings.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"draft.parser_warnings.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"draft.parser_warnings.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"draft.parser_warnings.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"draft.parser_warnings","typeLabel":"object[]"},"portfolio_value":{"additionalProperties":false,"description":"Optional user/source value to reconcile with quantity-bearing holdings. Omit when the current provider-priced mark is the only known value.","properties":{"amount":{"description":"Decimal string without commas or currency symbols.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"draft.portfolio_value.amount","typeLabel":"string"},"as_of_date":{"description":"Date of the user or source portfolio value, not the import timestamp.","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string","isRequired":true,"uniqueKey":"draft.portfolio_value.as_of_date","typeLabel":"string"},"basis":{"description":"Use portfolio_value for any new portfolio notional, including a fund NAV found at the user's request. fund_total_nav is only for an explicit, user-declared fund-total-NAV statement.","enum":["portfolio_value","fund_total_nav"],"type":"string","isRequired":true,"uniqueKey":"draft.portfolio_value.basis","typeLabel":"enum\u003cstring>"},"currency":{"description":"Ledger currency established by source or user edit evidence, or by verified Itoflow provider symbol metadata; never infer it from unverified symbol text, exchange, broker, country, or filename.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","isRequired":true,"uniqueKey":"draft.portfolio_value.currency","typeLabel":"enum\u003cstring>"},"source":{"description":"Where the one stated portfolio value came from.","enum":["user_declared","source_document"],"type":"string","isRequired":true,"uniqueKey":"draft.portfolio_value.source","typeLabel":"enum\u003cstring>"}},"required":["amount","as_of_date","basis","currency","source"],"type":"object","uniqueKey":"draft.portfolio_value","typeLabel":"object"},"source_attachments":{"default":[],"description":"Compact references to the files or screenshots used to parse this draft.","items":{"additionalProperties":false,"description":"Compact reference to a source attachment used to parse the draft.","properties":{"filename":{"description":"Original uploaded filename or screenshot label.","maxLength":240,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.source_attachments.items.[INDEX].filename","typeLabel":"string"},"attachment_id":{"description":"Stable chat attachment id when available.","type":"string","uniqueKey":"draft.source_attachments.items.[INDEX].attachment_id","typeLabel":"string"},"media_type":{"description":"Attachment MIME/media type when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"draft.source_attachments.items.[INDEX].media_type","typeLabel":"string"},"sha256":{"description":"Hash of the source attachment when available.","maxLength":128,"minLength":8,"type":"string","uniqueKey":"draft.source_attachments.items.[INDEX].sha256","typeLabel":"string"},"workspace_path":{"description":"Workspace path for the attachment artifact when available.","maxLength":400,"minLength":1,"type":"string","uniqueKey":"draft.source_attachments.items.[INDEX].workspace_path","typeLabel":"string"}},"required":["filename"],"type":"object","uniqueKey":"draft.source_attachments.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"draft.source_attachments","typeLabel":"object[]"},"source_broker":{"description":"Broker or platform the user appears to keep this portfolio in; metadata only, never evidence for row currency or quote unit.","enum":["trading212","robinhood","zerodha","alpaca","ibkr","other"],"type":"string","uniqueKey":"draft.source_broker","typeLabel":"enum\u003cstring>"},"validation_issues":{"default":[],"description":"Draft-level validation issues not tied to one holding or cash row.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.validation_issues.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft.validation_issues.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"draft.validation_issues.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"draft.validation_issues.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"draft.validation_issues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"draft.validation_issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"draft.validation_issues","typeLabel":"object[]"}},"required":["draft_id","execution_mode","holdings","portfolio_name","portfolio_type","revision","schema_version"],"type":"object","isRequired":true,"uniqueKey":"draft","typeLabel":"object"},"output_id":{"description":"Stable portfolio_import output id for idempotency.","maxLength":240,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"output_id","typeLabel":"string"},"approval_token":{"description":"Signed approval token returned by import preflight for the approved draft.","maxLength":4000,"minLength":1,"type":"string","uniqueKey":"approval_token","typeLabel":"string"},"draft_file":{"additionalProperties":false,"description":"Optional draft.json file reference used for auditability.","properties":{"path":{"description":"Workspace-relative path to the validated draft JSON file.","maxLength":240,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"draft_file.path","typeLabel":"string"},"sha256":{"description":"Hash of the draft JSON file when available.","maxLength":128,"minLength":8,"type":"string","uniqueKey":"draft_file.sha256","typeLabel":"string"},"size_bytes":{"description":"Draft JSON file size in bytes when available.","minimum":0,"type":"integer","uniqueKey":"draft_file.size_bytes","typeLabel":"integer"}},"required":["path"],"type":"object","uniqueKey":"draft_file","typeLabel":"object"}},"required":["draft","output_id"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"draft":{"draft_id":"\u003cstring>","execution_mode":"paper","holdings":[{"quantity":"\u003cstring>","row_id":"\u003cstring>","symbol":"\u003cstring>","cost_basis":"\u003cstring>","included":true,"issues":[],"price_unit":"NATIVE","side":"\u003cstring>","source":"\u003cstring>","unit_scale":"0.01","unit_value":"\u003cstring>"}],"portfolio_name":"\u003cstring>","portfolio_type":"managed","revision":1,"schema_version":"v1","approved_at":"2023-11-07T05:31:56Z","cash":[],"parser_warnings":[],"source_attachments":[],"validation_issues":[]},"output_id":"\u003cstring>","approval_token":"\u003cstring>"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"328bfad7-1c16-4b50-a1bc-0ff4b7a635bd":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Successful portfolio import preflight response.","required":["approval_token","allocated_amount_usd","valuation_coverage","unvalued_holding_row_ids","holding_prices","execution_mode","imported_cash_count","imported_holding_count","ok","portfolio_type","source_broker"],"properties":{"allocated_amount_usd":{"description":"USD capital allocated from cash and holdings with a current USD valuation. If valuation_coverage is partial, this excludes unvalued holdings and is not the complete portfolio market value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.allocated_amount_usd","typeLabel":"string"},"approval_token":{"description":"Signed token authorizing import of the currently validated draft.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.approval_token","typeLabel":"string"},"execution_mode":{"description":"Execution mode that will be used by import.","enum":["paper"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.execution_mode","typeLabel":"enum\u003cstring>"},"holding_prices":{"description":"Provider current prices resolved during preflight for display in the review UI. Inspect valuation_coverage and unvalued_holding_row_ids before treating allocated_amount_usd as a complete value.","items":{"additionalProperties":false,"description":"Provider current price attached to a holding during import preflight; this is display data, not user input.","properties":{"currency":{"description":"Ledger currency for the provider price after quote-unit normalization.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.holding_prices.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"price_unit":{"description":"Quote denomination for unit_value as returned for review display.","enum":["NATIVE","GBX","ZAC","ILA"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.holding_prices.items.[INDEX].price_unit","typeLabel":"enum\u003cstring>"},"row_id":{"description":"Holding row id this provider price belongs to.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.holding_prices.items.[INDEX].row_id","typeLabel":"string"},"symbol":{"description":"Fully qualified Itoflow symbol this provider price belongs to.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.holding_prices.items.[INDEX].symbol","typeLabel":"string"},"unit_value":{"description":"Provider current market price per one share/unit in currency and price_unit terms.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"oneOf.0.holding_prices.items.[INDEX].unit_value","typeLabel":"string"},"price_date":{"oneOf":[{"description":"Provider market-data date for this current price when available.","maxLength":40,"minLength":1,"type":"string","uniqueKey":"oneOf.0.holding_prices.items.[INDEX].price_date.oneOf.0","typeLabel":"string"},{"description":"Provider market-data date for this current price when available.","maxLength":40,"minLength":1,"type":"null","uniqueKey":"oneOf.0.holding_prices.items.[INDEX].price_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.holding_prices.items.[INDEX].price_date","typeLabel":"string | null"},"unit_scale":{"description":"Quote-unit subdivision scale when price_unit is GBX, ZAC, or ILA.","enum":["0.01"],"type":"string","uniqueKey":"oneOf.0.holding_prices.items.[INDEX].unit_scale","typeLabel":"enum\u003cstring>"}},"required":["currency","price_unit","row_id","symbol","unit_value"],"type":"object","uniqueKey":"oneOf.0.holding_prices.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"oneOf.0.holding_prices","typeLabel":"object[]"},"imported_cash_count":{"description":"Count of included cash rows accepted by preflight.","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"oneOf.0.imported_cash_count","typeLabel":"integer"},"imported_holding_count":{"description":"Count of included holding rows accepted by preflight.","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"oneOf.0.imported_holding_count","typeLabel":"integer"},"ok":{"description":"True when preflight succeeded.","enum":[true],"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.ok","typeLabel":"enum\u003cboolean>"},"portfolio_type":{"description":"Portfolio type that will be created by import.","enum":["managed"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_type","typeLabel":"enum\u003cstring>"},"source_broker":{"oneOf":[{"description":"Broker metadata accepted from the draft, or null when absent.","enum":["trading212","robinhood","zerodha","alpaca","ibkr","other",null],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.source_broker.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Broker metadata accepted from the draft, or null when absent.","enum":["trading212","robinhood","zerodha","alpaca","ibkr","other",null],"type":"null","isRequired":true,"uniqueKey":"oneOf.0.source_broker.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.source_broker","typeLabel":"enum\u003cstring> | null"},"unvalued_holding_row_ids":{"description":"Included holding row ids without a current USD value. Review these rows before approving a partial valuation. Empty for complete or not_rechecked coverage.","items":{"type":"string","uniqueKey":"oneOf.0.unvalued_holding_row_ids.items.[INDEX]","typeLabel":"string"},"type":"array","isRequired":true,"uniqueKey":"oneOf.0.unvalued_holding_row_ids","typeLabel":"string[]"},"valuation_coverage":{"description":"complete means every included holding has a current USD value; partial means some included holdings are unvalued; not_rechecked is an idempotent preflight for an already imported portfolio.","enum":["complete","partial","not_rechecked"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.valuation_coverage","typeLabel":"enum\u003cstring>"},"book_summary":{"additionalProperties":false,"description":"Long, short, gross, and net exposure. Cash counts only in NAV. An unvalued holding makes its leg, gross value, net value, NAV and all weights null, with valuation_unavailable_reason.","properties":{"gross_value":{"oneOf":[{"description":"Sum of absolute holding values in USD: long value less short value; null when any holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.gross_value.oneOf.0","typeLabel":"string"},{"description":"Sum of absolute holding values in USD: long value less short value; null when any holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.gross_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.gross_value","typeLabel":"string | null"},"gross_weight":{"oneOf":[{"description":"Gross value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.gross_weight.oneOf.0","typeLabel":"string"},{"description":"Gross value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.gross_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.gross_weight","typeLabel":"string | null"},"long_value":{"oneOf":[{"description":"Sum of long holding values in USD; null when a long holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.long_value.oneOf.0","typeLabel":"string"},{"description":"Sum of long holding values in USD; null when a long holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.long_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.long_value","typeLabel":"string | null"},"long_weight":{"oneOf":[{"description":"Long value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.long_weight.oneOf.0","typeLabel":"string"},{"description":"Long value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.long_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.long_weight","typeLabel":"string | null"},"nav":{"oneOf":[{"description":"Cash plus signed holding values in USD; null when any holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.nav.oneOf.0","typeLabel":"string"},{"description":"Cash plus signed holding values in USD; null when any holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.nav.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.nav","typeLabel":"string | null"},"net_value":{"oneOf":[{"description":"Sum of signed holding values in USD: long value plus short value; null when any holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.net_value.oneOf.0","typeLabel":"string"},{"description":"Sum of signed holding values in USD: long value plus short value; null when any holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.net_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.net_value","typeLabel":"string | null"},"net_weight":{"oneOf":[{"description":"Net value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.net_weight.oneOf.0","typeLabel":"string"},{"description":"Net value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.net_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.net_weight","typeLabel":"string | null"},"short_value":{"oneOf":[{"description":"Sum of short holding values in USD; zero or negative, or null when a short holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.short_value.oneOf.0","typeLabel":"string"},{"description":"Sum of short holding values in USD; zero or negative, or null when a short holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.short_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.short_value","typeLabel":"string | null"},"short_weight":{"oneOf":[{"description":"Short value over NAV, zero or negative; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.book_summary.short_weight.oneOf.0","typeLabel":"string"},{"description":"Short value over NAV, zero or negative; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.0.book_summary.short_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.book_summary.short_weight","typeLabel":"string | null"},"valuation_unavailable_reason":{"description":"Why net asset value and weights are unknown when a holding has no current USD value.","minLength":1,"type":"string","uniqueKey":"oneOf.0.book_summary.valuation_unavailable_reason","typeLabel":"string"}},"required":["long_value","short_value","gross_value","net_value","nav","long_weight","short_weight","gross_weight","net_weight"],"type":"object","uniqueKey":"oneOf.0.book_summary","typeLabel":"object"},"normalized_draft":{"additionalProperties":false,"description":"Provider-verified draft used to create the approval token, including exact symbol, currency, and quote-unit metadata resolved during preflight.","properties":{"draft_id":{"description":"Stable id for this parsed portfolio draft across review revisions.","maxLength":120,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.draft_id","typeLabel":"string"},"execution_mode":{"description":"Always paper for chat portfolio uploads; this import cannot create a live portfolio.","enum":["paper"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.execution_mode","typeLabel":"enum\u003cstring>"},"holdings":{"description":"Parsed holding rows for user review and possible import.","items":{"additionalProperties":false,"description":"One parsed holding row for the editable portfolio upload review.","properties":{"quantity":{"description":"Signed number of shares or units held: positive for a long, negative for a short. Never market value, allocation weight, total cost, or cash.","pattern":"^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].quantity","typeLabel":"string"},"row_id":{"description":"Stable row id used for edits, validation errors, and import diagnostics.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].row_id","typeLabel":"string"},"symbol":{"description":"Fully qualified holding symbol in SYMBOL.EXCHANGE format, matching symbol_resolution.symbol after lookup.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol","typeLabel":"string"},"cost_basis":{"description":"Optional average entry price per one share/unit in currency and price_unit terms; omit when unknown and never use 0 as a placeholder; never copy total cost, total invested, or current value into this field. A deterministic per-unit value reconciled from quantity, market value, signed unrealized P\u0026L, explicit currency evidence, and available current-price evidence is allowed when the derivation is recorded as a row warning.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].cost_basis","typeLabel":"string"},"currency":{"description":"Ledger currency established by source or user edit evidence, or by verified Itoflow provider symbol metadata; never infer it from unverified symbol text, exchange, broker, country, or filename.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"included":{"default":true,"description":"Whether this holding row should be imported if the user confirms.","type":"boolean","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].included","typeLabel":"boolean"},"issues":{"default":[],"description":"Row-scoped parser or validation issues; error severity blocks confirmation.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].issues.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].issues.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].issues.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].issues.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].issues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].issues","typeLabel":"object[]"},"price_unit":{"default":"NATIVE","description":"Quote denomination for unit_value and cost_basis; use NATIVE unless the source or selected Itoflow symbol metadata explicitly quotes GBX, ZAC, or ILA.","enum":["NATIVE","GBX","ZAC","ILA"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].price_unit","typeLabel":"enum\u003cstring>"},"side":{"description":"Optional position side copied from a side column: long or L, short or S, in any case. A short side turns a positive quantity negative; omit side when the quantity already carries its sign.","pattern":"^(?:[Ll][Oo][Nn][Gg]|[Ll]|[Ss][Hh][Oo][Rr][Tt]|[Ss])$","type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].side","typeLabel":"string"},"source":{"description":"Short source note for the row, such as filename, screenshot area, or sheet name.","maxLength":240,"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].source","typeLabel":"string"},"symbol_resolution":{"additionalProperties":false,"description":"Selected Itoflow symbol lookup result for a holding; this is not free text.","properties":{"code":{"description":"Provider ticker code from the selected Itoflow symbol result.","maxLength":40,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.code","typeLabel":"string"},"exchange":{"description":"Exchange code from the selected Itoflow symbol result.","maxLength":40,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.exchange","typeLabel":"string"},"name":{"description":"Instrument name from the selected Itoflow symbol result.","maxLength":240,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.name","typeLabel":"string"},"symbol":{"description":"Fully qualified Itoflow symbol selected from lookup, e.g. AAPL.US.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.symbol","typeLabel":"string"},"currency":{"oneOf":[{"description":"Currency or quote-unit alias returned by the selected Itoflow symbol result.","pattern":"^(?:[A-Z]{3}|GBp)$","type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.currency.oneOf.0","typeLabel":"string"},{"description":"Currency or quote-unit alias returned by the selected Itoflow symbol result.","pattern":"^(?:[A-Z]{3}|GBp)$","type":"null","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.currency.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.currency","typeLabel":"string | null"},"type":{"oneOf":[{"description":"Instrument type from the selected Itoflow symbol result when known.","maxLength":120,"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.type.oneOf.0","typeLabel":"string"},{"description":"Instrument type from the selected Itoflow symbol result when known.","maxLength":120,"type":"null","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution.type","typeLabel":"string | null"}},"required":["code","exchange","name","symbol"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].symbol_resolution","typeLabel":"object"},"unit_scale":{"description":"Required only for supported quote subdivisions GBX, ZAC, or ILA; omit for NATIVE price units.","enum":["0.01"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].unit_scale","typeLabel":"enum\u003cstring>"},"unit_value":{"description":"Optional parsed current market price per one share/unit in currency and price_unit terms; omit when unknown. Import validation ignores this field and resolves provider current prices for display when available; never total row value, market value, account value, invested value, or position value.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX].unit_value","typeLabel":"string"}},"required":["quantity","row_id","symbol"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.holdings.items.[INDEX]","typeLabel":"object"},"maxItems":3000,"type":"array","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.holdings","typeLabel":"object[]"},"portfolio_name":{"description":"User-editable name for the managed paper portfolio to create.","maxLength":100,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.portfolio_name","typeLabel":"string"},"portfolio_type":{"description":"Always managed for chat portfolio uploads; this import cannot create a reference portfolio.","enum":["managed"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.portfolio_type","typeLabel":"enum\u003cstring>"},"revision":{"description":"Draft revision number; it increases each time the draft is reparsed or repaired.","minimum":0,"type":"integer","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.revision","typeLabel":"integer"},"schema_version":{"description":"Portfolio upload draft schema version; currently v1.","enum":["v1"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.schema_version","typeLabel":"enum\u003cstring>"},"approved_at":{"oneOf":[{"type":"string","description":"ISO timestamp set when the user approved this edited draft.","format":"date-time","uniqueKey":"oneOf.0.normalized_draft.approved_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"string","description":"ISO timestamp set when the user approved this edited draft.","format":"date-time","uniqueKey":"oneOf.0.normalized_draft.approved_at.oneOf.1","typeLabel":"string\u003cdate-time>"}],"uniqueKey":"oneOf.0.normalized_draft.approved_at","typeLabel":"string\u003cdate-time>"},"cash":{"default":[],"description":"Optional parsed cash balances to import alongside holdings.","items":{"additionalProperties":false,"description":"One parsed cash balance row for the editable portfolio upload review.","properties":{"amount":{"description":"Cash amount in the row currency; negative for borrowed cash such as a margin loan. Never a security quantity or portfolio total unless explicitly a cash balance.","pattern":"^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].amount","typeLabel":"string"},"row_id":{"description":"Stable cash row id used for edits, validation errors, and import diagnostics.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].row_id","typeLabel":"string"},"currency":{"description":"Ledger currency established by source or user edit evidence, or by verified Itoflow provider symbol metadata; never infer it from unverified symbol text, exchange, broker, country, or filename.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"included":{"default":true,"description":"Whether this cash row should be imported if the user confirms.","type":"boolean","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].included","typeLabel":"boolean"},"issues":{"default":[],"description":"Cash-row parser or validation issues; error severity blocks confirmation.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].issues.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].issues.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].issues.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].issues.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].issues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].issues","typeLabel":"object[]"},"source":{"description":"Short source note for the cash row, such as filename, screenshot area, or sheet name.","maxLength":240,"type":"string","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX].source","typeLabel":"string"}},"required":["amount","row_id"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.cash.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.0.normalized_draft.cash","typeLabel":"object[]"},"parser_warnings":{"default":[],"description":"Draft-level parsing warnings from ambiguous or incomplete source evidence.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.parser_warnings.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.parser_warnings.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.parser_warnings.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.parser_warnings.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.parser_warnings.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.parser_warnings.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.0.normalized_draft.parser_warnings","typeLabel":"object[]"},"portfolio_value":{"additionalProperties":false,"description":"Optional user/source value to reconcile with quantity-bearing holdings. Omit when the current provider-priced mark is the only known value.","properties":{"amount":{"description":"Decimal string without commas or currency symbols.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.portfolio_value.amount","typeLabel":"string"},"as_of_date":{"description":"Date of the user or source portfolio value, not the import timestamp.","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.portfolio_value.as_of_date","typeLabel":"string"},"basis":{"description":"Use portfolio_value for any new portfolio notional, including a fund NAV found at the user's request. fund_total_nav is only for an explicit, user-declared fund-total-NAV statement.","enum":["portfolio_value","fund_total_nav"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.portfolio_value.basis","typeLabel":"enum\u003cstring>"},"currency":{"description":"Ledger currency established by source or user edit evidence, or by verified Itoflow provider symbol metadata; never infer it from unverified symbol text, exchange, broker, country, or filename.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.portfolio_value.currency","typeLabel":"enum\u003cstring>"},"source":{"description":"Where the one stated portfolio value came from.","enum":["user_declared","source_document"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.portfolio_value.source","typeLabel":"enum\u003cstring>"}},"required":["amount","as_of_date","basis","currency","source"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.portfolio_value","typeLabel":"object"},"source_attachments":{"default":[],"description":"Compact references to the files or screenshots used to parse this draft.","items":{"additionalProperties":false,"description":"Compact reference to a source attachment used to parse the draft.","properties":{"filename":{"description":"Original uploaded filename or screenshot label.","maxLength":240,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.source_attachments.items.[INDEX].filename","typeLabel":"string"},"attachment_id":{"description":"Stable chat attachment id when available.","type":"string","uniqueKey":"oneOf.0.normalized_draft.source_attachments.items.[INDEX].attachment_id","typeLabel":"string"},"media_type":{"description":"Attachment MIME/media type when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.source_attachments.items.[INDEX].media_type","typeLabel":"string"},"sha256":{"description":"Hash of the source attachment when available.","maxLength":128,"minLength":8,"type":"string","uniqueKey":"oneOf.0.normalized_draft.source_attachments.items.[INDEX].sha256","typeLabel":"string"},"workspace_path":{"description":"Workspace path for the attachment artifact when available.","maxLength":400,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.source_attachments.items.[INDEX].workspace_path","typeLabel":"string"}},"required":["filename"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.source_attachments.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.0.normalized_draft.source_attachments","typeLabel":"object[]"},"source_broker":{"description":"Broker or platform the user appears to keep this portfolio in; metadata only, never evidence for row currency or quote unit.","enum":["trading212","robinhood","zerodha","alpaca","ibkr","other"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.source_broker","typeLabel":"enum\u003cstring>"},"validation_issues":{"default":[],"description":"Draft-level validation issues not tied to one holding or cash row.","items":{"additionalProperties":false,"description":"Typed validation or parser issue attached to the portfolio draft.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.validation_issues.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.normalized_draft.validation_issues.items.[INDEX].message","typeLabel":"string"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.validation_issues.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"oneOf.0.normalized_draft.validation_issues.items.[INDEX].row_id","typeLabel":"string"},"severity":{"default":"error","description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","uniqueKey":"oneOf.0.normalized_draft.validation_issues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"}},"required":["code","message"],"type":"object","uniqueKey":"oneOf.0.normalized_draft.validation_issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.0.normalized_draft.validation_issues","typeLabel":"object[]"}},"required":["draft_id","execution_mode","holdings","portfolio_name","portfolio_type","revision","schema_version"],"type":"object","uniqueKey":"oneOf.0.normalized_draft","typeLabel":"object"},"portfolio_value":{"additionalProperties":false,"description":"Reviewed value provenance and its difference from the current provider mark, when comparable.","properties":{"amount_usd":{"description":"Reviewed portfolio value in USD.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.amount_usd","typeLabel":"string"},"as_of_date":{"oneOf":[{"description":"Date of the reviewed value, when known.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.as_of_date.oneOf.0","typeLabel":"string"},{"description":"Date of the reviewed value, when known.","type":"null","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.as_of_date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.as_of_date","typeLabel":"string | null"},"basis":{"description":"Role of the reviewed value.","enum":["portfolio_value","fund_total_nav"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.basis","typeLabel":"enum\u003cstring>"},"current_mark_as_of_date":{"oneOf":[{"description":"Date of the provider-priced mark, when known.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.current_mark_as_of_date.oneOf.0","typeLabel":"string"},{"description":"Date of the provider-priced mark, when known.","type":"null","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.current_mark_as_of_date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.current_mark_as_of_date","typeLabel":"string | null"},"current_mark_usd":{"oneOf":[{"description":"Current provider-priced mark in USD, when available.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.current_mark_usd.oneOf.0","typeLabel":"string"},{"description":"Current provider-priced mark in USD, when available.","type":"null","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.current_mark_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.current_mark_usd","typeLabel":"string | null"},"difference_usd":{"oneOf":[{"description":"Reviewed value less the current provider mark in USD, when comparable.","type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.difference_usd.oneOf.0","typeLabel":"string"},{"description":"Reviewed value less the current provider mark in USD, when comparable.","type":"null","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.difference_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.difference_usd","typeLabel":"string | null"},"source":{"description":"Provenance of the reviewed value.","enum":["provider_derived","user_declared","source_document"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.portfolio_value.source","typeLabel":"enum\u003cstring>"}},"required":["amount_usd","as_of_date","basis","current_mark_usd","current_mark_as_of_date","difference_usd","source"],"type":"object","uniqueKey":"oneOf.0.portfolio_value","typeLabel":"object"},"row_warnings":{"description":"Per-holding valuation warnings with row_id. Price warnings use field price: price_not_fetched means the vendor did not answer; no_recent_close means no usable close in the last 14 days. holding_fx_unavailable uses field currency and names the missing exchange rate to USD. Warnings do not block confirmation.","items":{"additionalProperties":false,"description":"Normalized validation or parser issue returned by portfolio import APIs.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.row_warnings.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.0.row_warnings.items.[INDEX].message","typeLabel":"string"},"severity":{"description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","isRequired":true,"uniqueKey":"oneOf.0.row_warnings.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.0.row_warnings.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"oneOf.0.row_warnings.items.[INDEX].row_id","typeLabel":"string"}},"required":["code","message","severity"],"type":"object","uniqueKey":"oneOf.0.row_warnings.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.0.row_warnings","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Failed portfolio import preflight with prices and exposure for valid rows when available.","required":["error","message","ok","row_errors"],"properties":{"error":{"description":"Stable machine-readable import error code.","maxLength":120,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"message":{"description":"Short user-facing explanation of why validation or import failed.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"ok":{"description":"False when validation or import failed.","enum":[false],"type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.ok","typeLabel":"enum\u003cboolean>"},"row_errors":{"description":"Typed row-level errors, for showing beside fields and for fixing rows.","items":{"additionalProperties":false,"description":"Normalized validation or parser issue returned by portfolio import APIs.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.row_errors.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.row_errors.items.[INDEX].message","typeLabel":"string"},"severity":{"description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","isRequired":true,"uniqueKey":"oneOf.1.row_errors.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.1.row_errors.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"oneOf.1.row_errors.items.[INDEX].row_id","typeLabel":"string"}},"required":["code","message","severity"],"type":"object","uniqueKey":"oneOf.1.row_errors.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"oneOf.1.row_errors","typeLabel":"object[]"},"allocated_amount_usd":{"description":"USD capital requested by the draft when calculable.","minLength":1,"type":"string","uniqueKey":"oneOf.1.allocated_amount_usd","typeLabel":"string"},"available":{"description":"Available value for balance or capacity failures when available.","minLength":1,"type":"string","uniqueKey":"oneOf.1.available","typeLabel":"string"},"book_summary":{"additionalProperties":false,"description":"Long, short, gross, and net exposure. Cash counts only in NAV. An unvalued holding makes its leg, gross value, net value, NAV and all weights null, with valuation_unavailable_reason.","properties":{"gross_value":{"oneOf":[{"description":"Sum of absolute holding values in USD: long value less short value; null when any holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.gross_value.oneOf.0","typeLabel":"string"},{"description":"Sum of absolute holding values in USD: long value less short value; null when any holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.gross_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.gross_value","typeLabel":"string | null"},"gross_weight":{"oneOf":[{"description":"Gross value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.gross_weight.oneOf.0","typeLabel":"string"},{"description":"Gross value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.gross_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.gross_weight","typeLabel":"string | null"},"long_value":{"oneOf":[{"description":"Sum of long holding values in USD; null when a long holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.long_value.oneOf.0","typeLabel":"string"},{"description":"Sum of long holding values in USD; null when a long holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.long_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.long_value","typeLabel":"string | null"},"long_weight":{"oneOf":[{"description":"Long value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.long_weight.oneOf.0","typeLabel":"string"},{"description":"Long value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.long_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.long_weight","typeLabel":"string | null"},"nav":{"oneOf":[{"description":"Cash plus signed holding values in USD; null when any holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.nav.oneOf.0","typeLabel":"string"},{"description":"Cash plus signed holding values in USD; null when any holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.nav.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.nav","typeLabel":"string | null"},"net_value":{"oneOf":[{"description":"Sum of signed holding values in USD: long value plus short value; null when any holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.net_value.oneOf.0","typeLabel":"string"},{"description":"Sum of signed holding values in USD: long value plus short value; null when any holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.net_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.net_value","typeLabel":"string | null"},"net_weight":{"oneOf":[{"description":"Net value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.net_weight.oneOf.0","typeLabel":"string"},{"description":"Net value over NAV; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.net_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.net_weight","typeLabel":"string | null"},"short_value":{"oneOf":[{"description":"Sum of short holding values in USD; zero or negative, or null when a short holding has no current USD value.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.short_value.oneOf.0","typeLabel":"string"},{"description":"Sum of short holding values in USD; zero or negative, or null when a short holding has no current USD value.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.short_value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.short_value","typeLabel":"string | null"},"short_weight":{"oneOf":[{"description":"Short value over NAV, zero or negative; null when NAV is unknown or not above zero.","minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.book_summary.short_weight.oneOf.0","typeLabel":"string"},{"description":"Short value over NAV, zero or negative; null when NAV is unknown or not above zero.","minLength":1,"type":"null","isRequired":true,"uniqueKey":"oneOf.1.book_summary.short_weight.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.book_summary.short_weight","typeLabel":"string | null"},"valuation_unavailable_reason":{"description":"Why net asset value and weights are unknown when a holding has no current USD value.","minLength":1,"type":"string","uniqueKey":"oneOf.1.book_summary.valuation_unavailable_reason","typeLabel":"string"}},"required":["long_value","short_value","gross_value","net_value","nav","long_weight","short_weight","gross_weight","net_weight"],"type":"object","uniqueKey":"oneOf.1.book_summary","typeLabel":"object"},"holding_prices":{"description":"Prices for valid rows while other rows have blocking errors. These prices do not authorize import.","items":{"additionalProperties":false,"description":"Provider current price attached to a holding during import preflight; this is display data, not user input.","properties":{"currency":{"description":"Ledger currency for the provider price after quote-unit normalization.","enum":["USD","EUR","GBP","ZAR","ILS","JPY","CAD","AUD","CHF","INR","HKD","SEK","NOK","DKK","PLN","SGD","KRW","TWD","CNY","SAR","TRY","QAR","AED","ISK","NZD"],"type":"string","isRequired":true,"uniqueKey":"oneOf.1.holding_prices.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"price_unit":{"description":"Quote denomination for unit_value as returned for review display.","enum":["NATIVE","GBX","ZAC","ILA"],"type":"string","isRequired":true,"uniqueKey":"oneOf.1.holding_prices.items.[INDEX].price_unit","typeLabel":"enum\u003cstring>"},"row_id":{"description":"Holding row id this provider price belongs to.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.holding_prices.items.[INDEX].row_id","typeLabel":"string"},"symbol":{"description":"Fully qualified Itoflow symbol this provider price belongs to.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.holding_prices.items.[INDEX].symbol","typeLabel":"string"},"unit_value":{"description":"Provider current market price per one share/unit in currency and price_unit terms.","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","type":"string","isRequired":true,"uniqueKey":"oneOf.1.holding_prices.items.[INDEX].unit_value","typeLabel":"string"},"price_date":{"oneOf":[{"description":"Provider market-data date for this current price when available.","maxLength":40,"minLength":1,"type":"string","uniqueKey":"oneOf.1.holding_prices.items.[INDEX].price_date.oneOf.0","typeLabel":"string"},{"description":"Provider market-data date for this current price when available.","maxLength":40,"minLength":1,"type":"null","uniqueKey":"oneOf.1.holding_prices.items.[INDEX].price_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.holding_prices.items.[INDEX].price_date","typeLabel":"string | null"},"unit_scale":{"description":"Quote-unit subdivision scale when price_unit is GBX, ZAC, or ILA.","enum":["0.01"],"type":"string","uniqueKey":"oneOf.1.holding_prices.items.[INDEX].unit_scale","typeLabel":"enum\u003cstring>"}},"required":["currency","price_unit","row_id","symbol","unit_value"],"type":"object","uniqueKey":"oneOf.1.holding_prices.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.1.holding_prices","typeLabel":"object[]"},"requested":{"description":"Requested value for balance or capacity failures when available.","minLength":1,"type":"string","uniqueKey":"oneOf.1.requested","typeLabel":"string"},"row_warnings":{"description":"Per-holding valuation warnings with row_id. Price warnings use field price: price_not_fetched means the vendor did not answer; no_recent_close means no usable close in the last 14 days. holding_fx_unavailable uses field currency and names the missing exchange rate to USD. Warnings do not block confirmation.","items":{"additionalProperties":false,"description":"Normalized validation or parser issue returned by portfolio import APIs.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.row_warnings.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"oneOf.1.row_warnings.items.[INDEX].message","typeLabel":"string"},"severity":{"description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","isRequired":true,"uniqueKey":"oneOf.1.row_warnings.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"oneOf.1.row_warnings.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"oneOf.1.row_warnings.items.[INDEX].row_id","typeLabel":"string"}},"required":["code","message","severity"],"type":"object","uniqueKey":"oneOf.1.row_warnings.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"oneOf.1.row_warnings","typeLabel":"object[]"},"valuation_scope":{"description":"On a failed review, book_summary covers only rows that passed validation; it is not exposure for the full book.","enum":["valid_rows"],"type":"string","uniqueKey":"oneOf.1.valuation_scope","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"allocated_amount_usd":"\u003cstring>","approval_token":"\u003cstring>","execution_mode":"paper","holding_prices":[{"currency":"USD","price_unit":"NATIVE","row_id":"\u003cstring>","symbol":"\u003cstring>","unit_value":"\u003cstring>","price_date":"\u003cstring>","unit_scale":"0.01"}],"imported_cash_count":1,"imported_holding_count":1,"ok":true,"portfolio_type":"managed","source_broker":"trading212","unvalued_holding_row_ids":["\u003cstring>"],"valuation_coverage":"complete","book_summary":{"gross_value":"\u003cstring>","gross_weight":"\u003cstring>","long_value":"\u003cstring>","long_weight":"\u003cstring>","nav":"\u003cstring>","net_value":"\u003cstring>","net_weight":"\u003cstring>","short_value":"\u003cstring>","short_weight":"\u003cstring>","valuation_unavailable_reason":"\u003cstring>"},"normalized_draft":{"draft_id":"\u003cstring>","execution_mode":"paper","holdings":[{"quantity":"\u003cstring>","row_id":"\u003cstring>","symbol":"\u003cstring>","cost_basis":"\u003cstring>","currency":"USD","included":true,"issues":[],"price_unit":"NATIVE","side":"\u003cstring>","source":"\u003cstring>","symbol_resolution":{"code":"\u003cstring>","exchange":"\u003cstring>","name":"\u003cstring>","symbol":"\u003cstring>","currency":"\u003cstring>","type":"\u003cstring>"},"unit_scale":"0.01","unit_value":"\u003cstring>"}],"portfolio_name":"\u003cstring>","portfolio_type":"managed","revision":1,"schema_version":"v1","approved_at":"2023-11-07T05:31:56Z","cash":[],"parser_warnings":[],"portfolio_value":{"amount":"\u003cstring>","as_of_date":"\u003cstring>","basis":"portfolio_value","currency":"USD","source":"user_declared"},"source_attachments":[],"source_broker":"trading212","validation_issues":[]},"portfolio_value":{"amount_usd":"\u003cstring>","as_of_date":"\u003cstring>","basis":"portfolio_value","current_mark_as_of_date":"\u003cstring>","current_mark_usd":"\u003cstring>","difference_usd":"\u003cstring>","source":"provider_derived"},"row_warnings":[{"code":"\u003cstring>","message":"\u003cstring>","severity":"info","field":"\u003cstring>","row_id":"\u003cstring>"}]}}},"exampleType":"generated"}},"description":"Portfolio import validation result. An unvalued holding makes book_summary NAV and all weights null, with valuation_unavailable_reason.","exampleType":"generated"},"55747adc-f069-4884-aeac-876ab74e47b8":{"content":{"application/json":{"schema":{"properties":{"error":{"description":"Error type or code","type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"available":{"description":"Optional available amount or value","type":"string","uniqueKey":"available","typeLabel":"string"},"billing_action":{"description":"Action that resolves a billing-related rejection","properties":{"href":{"type":"string","isRequired":true,"uniqueKey":"billing_action.href","typeLabel":"string"},"kind":{"enum":["upgrade","payment_method","spending_cap","billing"],"type":"string","isRequired":true,"uniqueKey":"billing_action.kind","typeLabel":"enum\u003cstring>"},"label":{"type":"string","isRequired":true,"uniqueKey":"billing_action.label","typeLabel":"string"}},"required":["href","label","kind"],"type":"object","uniqueKey":"billing_action","typeLabel":"object"},"code":{"description":"Machine-readable error code","type":"string","uniqueKey":"code","typeLabel":"string"},"currentVersion":{"description":"Current server-side version, when relevant","type":"number","uniqueKey":"currentVersion","typeLabel":"number"},"details":{"description":"Optional structured error details","uniqueKey":"details","typeLabel":"any"},"expectedVersion":{"description":"Client-provided expected version, when relevant","type":"number","uniqueKey":"expectedVersion","typeLabel":"number"},"message":{"description":"Human-readable error message","type":"string","uniqueKey":"message","typeLabel":"string"},"requested":{"description":"Optional requested amount or value","type":"string","uniqueKey":"requested","typeLabel":"string"},"usage":{"description":"Optional usage metadata for limit errors","uniqueKey":"usage","typeLabel":"any"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","available":"\u003cstring>","billing_action":{"href":"\u003cstring>","kind":"upgrade","label":"\u003cstring>"},"code":"\u003cstring>","currentVersion":123,"details":"\u003cunknown>","expectedVersion":123,"message":"\u003cstring>","requested":"\u003cstring>","usage":"\u003cunknown>"}}},"exampleType":"generated"}},"description":"Authentication required","exampleType":"generated"},"15ba38ed-e230-476d-97db-ec7bf903a541":{"content":{"application/json":{"schema":{"properties":{"error":{"description":"Error type or code","type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"available":{"description":"Optional available amount or value","type":"string","uniqueKey":"available","typeLabel":"string"},"billing_action":{"description":"Action that resolves a billing-related rejection","properties":{"href":{"type":"string","isRequired":true,"uniqueKey":"billing_action.href","typeLabel":"string"},"kind":{"enum":["upgrade","payment_method","spending_cap","billing"],"type":"string","isRequired":true,"uniqueKey":"billing_action.kind","typeLabel":"enum\u003cstring>"},"label":{"type":"string","isRequired":true,"uniqueKey":"billing_action.label","typeLabel":"string"}},"required":["href","label","kind"],"type":"object","uniqueKey":"billing_action","typeLabel":"object"},"code":{"description":"Machine-readable error code","type":"string","uniqueKey":"code","typeLabel":"string"},"currentVersion":{"description":"Current server-side version, when relevant","type":"number","uniqueKey":"currentVersion","typeLabel":"number"},"details":{"description":"Optional structured error details","uniqueKey":"details","typeLabel":"any"},"expectedVersion":{"description":"Client-provided expected version, when relevant","type":"number","uniqueKey":"expectedVersion","typeLabel":"number"},"message":{"description":"Human-readable error message","type":"string","uniqueKey":"message","typeLabel":"string"},"requested":{"description":"Optional requested amount or value","type":"string","uniqueKey":"requested","typeLabel":"string"},"usage":{"description":"Optional usage metadata for limit errors","uniqueKey":"usage","typeLabel":"any"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","available":"\u003cstring>","billing_action":{"href":"\u003cstring>","kind":"upgrade","label":"\u003cstring>"},"code":"\u003cstring>","currentVersion":123,"details":"\u003cunknown>","expectedVersion":123,"message":"\u003cstring>","requested":"\u003cstring>","usage":"\u003cunknown>"}}},"exampleType":"generated"}},"description":"Forbidden","exampleType":"generated"},"38a4e4ff-55e9-4420-b7c3-da078b095b64":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"Portfolio import validation or import failure response.","properties":{"error":{"description":"Stable machine-readable import error code.","maxLength":120,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"description":"Short user-facing explanation of why validation or import failed.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"ok":{"description":"False when validation or import failed.","enum":[false],"type":"boolean","isRequired":true,"uniqueKey":"ok","typeLabel":"enum\u003cboolean>"},"row_errors":{"description":"Typed row-level errors, for showing beside fields and for fixing rows.","items":{"additionalProperties":false,"description":"Normalized validation or parser issue returned by portfolio import APIs.","properties":{"code":{"description":"Stable machine-readable issue code.","maxLength":80,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"row_errors.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Short user-facing explanation of the issue.","maxLength":500,"minLength":1,"type":"string","isRequired":true,"uniqueKey":"row_errors.items.[INDEX].message","typeLabel":"string"},"severity":{"description":"Issue severity; error blocks confirmation.","enum":["info","warning","error"],"type":"string","isRequired":true,"uniqueKey":"row_errors.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"field":{"description":"Draft field path or row control this issue belongs to when known.","maxLength":120,"minLength":1,"type":"string","uniqueKey":"row_errors.items.[INDEX].field","typeLabel":"string"},"row_id":{"description":"Row id this issue belongs to when the issue is row-scoped.","maxLength":80,"minLength":1,"type":"string","uniqueKey":"row_errors.items.[INDEX].row_id","typeLabel":"string"}},"required":["code","message","severity"],"type":"object","uniqueKey":"row_errors.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"row_errors","typeLabel":"object[]"},"allocated_amount_usd":{"description":"USD capital requested by the draft when calculable.","minLength":1,"type":"string","uniqueKey":"allocated_amount_usd","typeLabel":"string"},"available":{"description":"Available value for balance or capacity failures when available.","minLength":1,"type":"string","uniqueKey":"available","typeLabel":"string"},"requested":{"description":"Requested value for balance or capacity failures when available.","minLength":1,"type":"string","uniqueKey":"requested","typeLabel":"string"}},"required":["error","message","ok","row_errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","message":"\u003cstring>","ok":false,"row_errors":[{"code":"\u003cstring>","message":"\u003cstring>","severity":"info","field":"\u003cstring>","row_id":"\u003cstring>"}],"allocated_amount_usd":"\u003cstring>","available":"\u003cstring>","requested":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Server error","exampleType":"generated"}},"security":{"6a78ca23-58c7-4149-bed9-46aab84be0cb":{"bearerAuth":{"bearerFormat":"JWT","description":"Itoflow access token issued for the Itoflow API.","scheme":"bearer","type":"http","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"885fa0e1-2ea5-48b1-835e-2157d8c1a66e":{"description":"Itoflow API","url":"https://api.itoflow.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"bearerFormat":"JWT","description":"Itoflow access token issued for the Itoflow API.","scheme":"bearer","type":"http","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Itoflow access token issued for the Itoflow API.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/itoflow-public.openapi.json"},"subdomain":"itoflow","siteName":"Itoflow developer docs","title":"Validate uploaded paper portfolio import - Itoflow developer docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T07:47:25.476Z","originalFileLocation":"api-reference/endpoints/post__portfolios_import_validate.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=\"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio. Operation ID: post__portfolios_import_validate.\">\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=\"Validate uploaded paper portfolio import - Itoflow developer docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio. Operation ID: post__portfolios_import_validate.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Itoflow developer docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate\">\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=Portfolios\u0026amp;title=Validate+uploaded+paper+portfolio+import\u0026amp;description=Validate+holdings+and+cash+for+a+managed+paper-portfolio+import.+This+preflight+returns+the+complete+review+result+and+an+approval+token+but+does+not+create+a+p\u0026amp;theme=dad8b8aab01d3e9507fe66b3\u0026amp;signature=142ef8784aebdf08a0b3b0a32f1064f51652cc51bf162eeb4a7e8bd300b02e3a\">\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=\"Validate uploaded paper portfolio import - Itoflow developer docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio. Operation ID: post__portfolios_import_validate.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://itoflow.mintlify.site/_mintlify/api/og/v2?division=Portfolios\u0026amp;title=Validate+uploaded+paper+portfolio+import\u0026amp;description=Validate+holdings+and+cash+for+a+managed+paper-portfolio+import.+This+preflight+returns+the+complete+review+result+and+an+approval+token+but+does+not+create+a+p\u0026amp;theme=dad8b8aab01d3e9507fe66b3\u0026amp;signature=142ef8784aebdf08a0b3b0a32f1064f51652cc51bf162eeb4a7e8bd300b02e3a\">\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/api-reference/endpoints/post__portfolios_import_validate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoints/post__portfolios_import_validate.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/api-reference/endpoints/post__portfolios_import_validate#webpage\",\"url\":\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate\",\"name\":\"Validate uploaded paper portfolio import\",\"description\":\"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio. Operation ID: post__portfolios_import_validate.\",\"dateModified\":\"2026-11-13T07:47:25.476Z\",\"isPartOf\":{\"@id\":\"https://docs.itoflow.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.itoflow.ai/api-reference/endpoints/get__account_billing_costs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Portfolios\",\"item\":\"https://docs.itoflow.ai/api-reference/endpoints/get__portfolios\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Validate uploaded paper portfolio import\",\"item\":\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate#apireference\",\"headline\":\"Validate uploaded paper portfolio import\",\"name\":\"Validate uploaded paper portfolio import\",\"description\":\"Validate holdings and cash for a managed paper-portfolio import. This preflight returns the complete review result and an approval token but does not create a portfolio. Operation ID: post__portfolios_import_validate.\",\"url\":\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate\",\"mainEntityOfPage\":{\"@id\":\"https://docs.itoflow.ai/api-reference/endpoints/post__portfolios_import_validate#webpage\"},\"dateModified\":\"2026-11-13T07:47:25.476Z\",\"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":"/api-reference/endpoints/post__portfolios_import_validate.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","href":"/features/portfolios"},{"title":"Strategies","href":"/features/strategies"},{"title":"Monitors","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","description":"Commit the normalized draft returned by preflight only after explicit user approval. Set draft.approved_at, use the reviewed output id with an :approved suffix, and pass the current approval token. If pricing or any material input changed, revalidate and review again.\n\nOperation ID: post__portfolios_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","description":"Operation ID: get__transition_taskId_.","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":"Validate uploaded paper portfolio import - Itoflow developer docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}