Portfolio definition after weight renormalization (only when valid)
Last modified on September 21, 2026
⌘I
{"docsConfig":{"theme":"willow","$schema":"https://mintlify.com/docs.json","name":"Parallax API","colors":{"primary":"#2563EB","light":"#3B82F6","dark":"#1D4ED8"},"logo":{"light":"https://mintcdn.com/chicagoglobal/uEgDT_OkWUDv-g5d/logo/light.svg?fit=max\u0026auto=format\u0026n=uEgDT_OkWUDv-g5d\u0026q=85\u0026s=565cc0407dc5c30689133cc13b027def","dark":"https://mintcdn.com/chicagoglobal/uEgDT_OkWUDv-g5d/logo/dark.svg?fit=max\u0026auto=format\u0026n=uEgDT_OkWUDv-g5d\u0026q=85\u0026s=ad5da0157b759789fad5e6010b64b225"},"favicon":"https://mintcdn.com/chicagoglobal/uEgDT_OkWUDv-g5d/favicon.svg?fit=max\u0026auto=format\u0026n=uEgDT_OkWUDv-g5d\u0026q=85\u0026s=7ed1530cae62d0fa4703482a3e63ba5e","navbar":{"links":[{"href":"https://parallax.chicago.global/contact","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://parallax.chicago.global"}},"seo":{"metatags":{"og:site_name":"Parallax"},"indexing":"navigable"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Console","icon":"desktop","href":"https://parallax.chicago.global"},{"anchor":"Blog","icon":"newspaper","href":"https://parallax.chicago.global/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"chicagoglobal","hasAudioNarration":false,"actualSubdomain":"chicagoglobal","customDomains":["docs.chicago.global"],"gitSource":{"type":"github","owner":"arnavv-guptaa","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae740e02083372bfa5474bc","collectionId":"f5d23943-cffc-4c7b-a37e-74dc4448d130","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae740e02083372bfa5474bc"},"entitlements":{},"buildId":"6aed8a018827a331ed2c6f2d","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":84},{"language":"default","tag":"Glossary","count":60},{"language":"default","tag":"Methodology","count":30},{"language":"default","tag":"Investment Terms","count":27},{"language":"default","tag":"Macro Research Terms","count":17},{"language":"default","tag":"Portfolio Tracker","count":13},{"language":"default","tag":"Valuation Terms","count":12},{"language":"default","tag":"Overview","count":9},{"language":"default","tag":"Analyst Data","count":8},{"language":"default","tag":"Console","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":".nav-logo{height:2.5rem}"}],"page":{"pagePath":"api-reference/portfolio-tracker/validate","slug":"/api-reference/portfolio-tracker/validate","pageMetadata":{"title":"Validate Portfolio","openapi":"POST /v1/portfolio/validate","description":"Dry-run validation for a new portfolio definition (same body as /track).\n\nReturns every validation error and warning without persisting anything.\nUse this client-side before calling /track to fix all issues in one pass.\n\n**Credits:** Free (0 credits).","href":"/api-reference/portfolio-tracker/validate"},"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 strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Dry-run validation for a new portfolio definition (same body as /track).\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Returns every validation error and warning without persisting anything.\\nUse this client-side before calling /track to fix all issues in one pass.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Credits:\"\n }), \" Free (0 credits).\"]\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 Portfolio","openapi":"POST /v1/portfolio/validate","description":"Dry-run validation for a new portfolio definition (same body as /track).\n\nReturns every validation error and warning without persisting anything.\nUse this client-side before calling /track to fix all issues in one pass.\n\n**Credits:** Free (0 credits).","href":"/api-reference/portfolio-tracker/validate"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["v1","Portfolio Tracker"],"summary":"Validate Portfolio","description":"Dry-run validation for a new portfolio definition (same body as /track).\n\nReturns every validation error and warning without persisting anything.\nUse this client-side before calling /track to fix all issues in one pass.\n\n**Credits:** Free (0 credits).","operationId":"validate_portfolio_v1_portfolio_validate_post","requestBody":"7d285e48-4450-4a5b-97db-39796759c29b","responses":{"200":"70e06dae-1a78-4b9f-b51c-fd224b3ad4c5","404":"5d1b339c-af72-4fbc-ace4-e9161d45a3a5","422":"bccef9e1-356a-41aa-b3f0-97e909d95fa4","500":"3fde643c-2ab0-4834-a9a1-545b64f193c0"},"security":["92402b6a-61bc-45ef-bc24-aea5a42fa1b8"],"method":"post","type":"path","servers":["4b994acb-2983-4438-970f-df2ec3a2a5b5"],"path":"/v1/portfolio/validate","baseUrlOptions":["https://api.chicago.global"],"title":"Validate Portfolio","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"properties":{"portfolio":{"items":{"properties":{"date":{"type":"string","title":"Date","description":"Rebalance date in YYYY-MM-DD format","example":"2024-01-01","isRequired":true,"uniqueKey":"portfolio.items.[INDEX].date","typeLabel":"string"},"symbol":{"type":"string","title":"Symbol","description":"Stock symbol or RIC (e.g., AAPL or AAPL.O)","example":"AAPL","isRequired":true,"uniqueKey":"portfolio.items.[INDEX].symbol","typeLabel":"string"},"weight":{"type":"number","title":"Weight","description":"Portfolio weight (as decimal, e.g., 0.25 for 25%)","example":0.25,"isRequired":true,"uniqueKey":"portfolio.items.[INDEX].weight","typeLabel":"number"}},"additionalProperties":false,"type":"object","required":["date","symbol","weight"],"title":"PortfolioHolding","uniqueKey":"portfolio.items.[INDEX]","typeLabel":"PortfolioHolding · object"},"type":"array","title":"Portfolio","description":"List of portfolio holdings with dates and weights","isRequired":true,"uniqueKey":"portfolio","typeLabel":"PortfolioHolding · object[]"},"base_currency":{"type":"string","title":"Base Currency","description":"Base currency for portfolio","default":"USD","example":"USD","uniqueKey":"base_currency","typeLabel":"string"},"initial_value":{"type":"number","title":"Initial Value","description":"Initial portfolio value in base currency","default":10000,"example":10000,"uniqueKey":"initial_value","typeLabel":"number"},"benchmark":{"type":"string","title":"Benchmark","description":"Benchmark for comparison","default":"ACWI.OQ","example":"ACWI.OQ","uniqueKey":"benchmark","typeLabel":"string"},"include_transaction_costs":{"type":"boolean","title":"Include Transaction Costs","description":"Apply market-specific transaction costs during rebalancing","default":false,"example":false,"uniqueKey":"include_transaction_costs","typeLabel":"boolean"},"transaction_cost_config":{"oneOf":[{"type":"object","title":"Transaction Cost Config","description":"Custom transaction cost rates by market. Format: {'market_name': {'buy': rate, 'sell': rate}}.","example":{"Singapore":{"buy":0.14,"sell":0.14}},"additionalProperties":true,"uniqueKey":"transaction_cost_config.oneOf.0","typeLabel":"Transaction Cost Config · object"},{"type":"null","title":"Transaction Cost Config","description":"Custom transaction cost rates by market. Format: {'market_name': {'buy': rate, 'sell': rate}}.","example":{"Singapore":{"buy":0.14,"sell":0.14}},"uniqueKey":"transaction_cost_config.oneOf.1","typeLabel":"null"}],"uniqueKey":"transaction_cost_config","typeLabel":"Transaction Cost Config · object | null"}},"type":"object","required":["portfolio"],"title":"TrackPortfolioRequest","description":"Request model for creating a tracked portfolio.","uniqueKey":"","typeLabel":"TrackPortfolioRequest · object"},"examples":{"Example":{"title":"Example","value":{"portfolio":[{"date":"2024-01-01","symbol":"AAPL","weight":0.25}],"base_currency":"USD","initial_value":10000,"benchmark":"ACWI.OQ","include_transaction_costs":false,"transaction_cost_config":{"Singapore":{"buy":0.14,"sell":0.14}}}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"70e06dae-1a78-4b9f-b51c-fd224b3ad4c5":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"valid":{"type":"boolean","title":"Valid","description":"True when the portfolio would pass track/update validation","isRequired":true,"uniqueKey":"valid","typeLabel":"boolean"},"error_count":{"type":"integer","title":"Error Count","isRequired":true,"uniqueKey":"error_count","typeLabel":"integer"},"warning_count":{"type":"integer","title":"Warning Count","isRequired":true,"uniqueKey":"warning_count","typeLabel":"integer"},"errors":{"items":{"properties":{"code":{"type":"string","title":"Code","description":"Machine-readable issue code","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","title":"Field","description":"JSON-path-style field hint","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","title":"Field","description":"JSON-path-style field hint","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"type":"object","required":["code","message"],"title":"ValidationIssueResponse","uniqueKey":"errors.items.[INDEX]","typeLabel":"ValidationIssueResponse · object"},"type":"array","title":"Errors","isRequired":true,"uniqueKey":"errors","typeLabel":"ValidationIssueResponse · object[]"},"warnings":{"items":{"properties":{"code":{"type":"string","title":"Code","description":"Machine-readable issue code","isRequired":true,"uniqueKey":"warnings.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description","isRequired":true,"uniqueKey":"warnings.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","title":"Field","description":"JSON-path-style field hint","uniqueKey":"warnings.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","title":"Field","description":"JSON-path-style field hint","uniqueKey":"warnings.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"warnings.items.[INDEX].field","typeLabel":"string | null"}},"type":"object","required":["code","message"],"title":"ValidationIssueResponse","uniqueKey":"warnings.items.[INDEX]","typeLabel":"ValidationIssueResponse · object"},"type":"array","title":"Warnings","isRequired":true,"uniqueKey":"warnings","typeLabel":"ValidationIssueResponse · object[]"},"normalized":{"oneOf":[{"type":"object","title":"Normalized","description":"Portfolio definition after weight renormalization (only when valid)","additionalProperties":true,"uniqueKey":"normalized.oneOf.0","typeLabel":"Normalized · object"},{"type":"null","title":"Normalized","description":"Portfolio definition after weight renormalization (only when valid)","uniqueKey":"normalized.oneOf.1","typeLabel":"null"}],"uniqueKey":"normalized","typeLabel":"Normalized · object | null"}},"type":"object","required":["valid","error_count","warning_count","errors","warnings"],"title":"PortfolioValidateResponse","uniqueKey":"","typeLabel":"PortfolioValidateResponse · object"},"examples":{"Example":{"title":"Example","value":{"valid":true,"error_count":123,"warning_count":123,"errors":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>"}],"warnings":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>"}],"normalized":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"5d1b339c-af72-4fbc-ace4-e9161d45a3a5":{"description":"Not found","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"bccef9e1-356a-41aa-b3f0-97e909d95fa4":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"},"input":{"oneOf":[{"title":"Input"}],"uniqueKey":"detail.items.[INDEX].input","typeLabel":"any"},"ctx":{"type":"object","title":"Context","uniqueKey":"detail.items.[INDEX].ctx","typeLabel":"Context · object"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>","input":"\u003cunknown>","ctx":{}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"3fde643c-2ab0-4834-a9a1-545b64f193c0":{"description":"Internal server error","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"92402b6a-61bc-45ef-bc24-aea5a42fa1b8":{"HTTPBearer":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"HTTPBearer"}}},"servers":{"4b994acb-2983-4438-970f-df2ec3a2a5b5":{"url":"https://api.chicago.global"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"HTTPBearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"HTTPBearer","name":"Authorization"}],"title":"HTTPBearer"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"chicagoglobal","siteName":"Parallax API","title":"Validate Portfolio - Parallax API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T02:30:08.955Z","gitLastModified":"2026-09-21T07:37:13.000Z","originalFileLocation":"api-reference/portfolio-tracker/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=\"system\"}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=\"Dry-run validation for a new portfolio definition (same body as /track). Returns every validation error and warning without persisting anything. Use this client-side before calling /track to fix all issues in one pass. Credits: Free (0 credits).\">\u003cmeta data-mint-head name=\"application-name\" content=\"Parallax API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/chicagoglobal/Z7lSQ6HZj4LhOKfo/_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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/chicagoglobal/Z7lSQ6HZj4LhOKfo/_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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Validate Portfolio - Parallax API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Dry-run validation for a new portfolio definition (same body as /track). Returns every validation error and warning without persisting anything. Use this client-side before calling /track to fix all issues in one pass. Credits: Free (0 credits).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Parallax\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.chicago.global/api-reference/portfolio-tracker/validate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://chicagoglobal.mintlify.site/_mintlify/api/og/v2?division=Portfolio+Tracker\u0026amp;title=Validate+Portfolio\u0026amp;description=Dry-run+validation+for+a+new+portfolio+definition+%28same+body+as+%2Ftrack%29.%0A%0AReturns+every+validation+error+and+warning+without+persisting+anything.%0AUse+this+clien\u0026amp;theme=0b54319b775399b3a52ef778\u0026amp;signature=09cea7b268db2651f65f23b3ac5040cd4ee53a29122b15bad900ab43e36611ac\">\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 Portfolio - Parallax API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Dry-run validation for a new portfolio definition (same body as /track). Returns every validation error and warning without persisting anything. Use this client-side before calling /track to fix all issues in one pass. Credits: Free (0 credits).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://chicagoglobal.mintlify.site/_mintlify/api/og/v2?division=Portfolio+Tracker\u0026amp;title=Validate+Portfolio\u0026amp;description=Dry-run+validation+for+a+new+portfolio+definition+%28same+body+as+%2Ftrack%29.%0A%0AReturns+every+validation+error+and+warning+without+persisting+anything.%0AUse+this+clien\u0026amp;theme=0b54319b775399b3a52ef778\u0026amp;signature=09cea7b268db2651f65f23b3ac5040cd4ee53a29122b15bad900ab43e36611ac\">\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/chicagoglobal/Z7lSQ6HZj4LhOKfo/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Parallax API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.chicago.global/api-reference/portfolio-tracker/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/portfolio-tracker/validate.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.chicago.global/#organization\",\"name\":\"Parallax API\",\"url\":\"https://docs.chicago.global\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/chicagoglobal/uEgDT_OkWUDv-g5d/logo/light.svg?fit=max\u0026auto=format\u0026n=uEgDT_OkWUDv-g5d\u0026q=85\u0026s=565cc0407dc5c30689133cc13b027def\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.chicago.global#website\",\"name\":\"Parallax API\",\"url\":\"https://docs.chicago.global\",\"publisher\":{\"@id\":\"https://docs.chicago.global/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate#webpage\",\"url\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate\",\"name\":\"Validate Portfolio\",\"description\":\"Dry-run validation for a new portfolio definition (same body as /track). Returns every validation error and warning without persisting anything. Use this client-side before calling /track to fix all issues in one pass. Credits: Free (0 credits).\",\"dateModified\":\"2026-09-21T07:37:13.000Z\",\"isPartOf\":{\"@id\":\"https://docs.chicago.global#website\"},\"breadcrumb\":{\"@id\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portfolio Tracker\",\"item\":\"https://docs.chicago.global/api-reference/portfolio-tracker/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Validate Portfolio\",\"item\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate#apireference\",\"headline\":\"Validate Portfolio\",\"name\":\"Validate Portfolio\",\"description\":\"Dry-run validation for a new portfolio definition (same body as /track). Returns every validation error and warning without persisting anything. Use this client-side before calling /track to fix all issues in one pass. Credits: Free (0 credits).\",\"url\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate\",\"mainEntityOfPage\":{\"@id\":\"https://docs.chicago.global/api-reference/portfolio-tracker/validate#webpage\"},\"dateModified\":\"2026-09-21T07:37:13.000Z\",\"publisher\":{\"@id\":\"https://docs.chicago.global/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.chicago.global#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Parallax API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Parallax API","nav":{"global":{"anchors":[{"anchor":"Console","icon":"desktop","href":"https://parallax.chicago.global"},{"anchor":"Blog","icon":"newspaper","href":"https://parallax.chicago.global/blog"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"Methodology","pages":[{"title":"Methodology","href":"/methodology/overview"}]},{"tab":"Macro Reports","pages":[{"title":"Macro Reports","href":"/macro/overview"}]},{"tab":"Console","pages":[{"title":"Console","href":"/console/overview"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"Parallax API Overview","sidebarTitle":"Introduction","href":"/api-reference/introduction"},{"title":"KYC verification required","href":"/problems/kyc-required"},{"title":"Get Job Status","openapi":"GET /v1/jobs/{job_id}","href":"/api-reference/jobs/status"},{"title":"List Jobs","openapi":"GET /v1/jobs","href":"/api-reference/jobs/list"},{"title":"Health Check","openapi":"GET /health","href":"/api-reference/health"}]},{"group":"Portfolio Analysis","pages":[{"title":"Analyze Portfolio","openapi":"POST /v1/portfolio/analyze","href":"/api-reference/portfolio/analyze"},{"title":"Portfolio Report","openapi":"POST /v1/portfolioreport","href":"/api-reference/portfolio/report"},{"title":"Generate CIO Report","openapi":"POST /v1/cio-report","href":"/api-reference/reports/cio-report"},{"title":"Portfolio Risk","openapi":"POST /v1/portfolio/risk","href":"/api-reference/portfolio/risk"},{"title":"Portfolio Theme Exposure","openapi":"POST /v1/portfolio/theme-exposure","href":"/api-reference/portfolio/theme-exposure"}]},{"group":"Portfolio Tracker","pages":[{"title":"Portfolio Tracker Overview","href":"/api-reference/portfolio-tracker/overview"},{"title":"Track Portfolio","openapi":"POST /v1/portfolio/track","description":"Register a tracked portfolio and kick off its initial analytics in the\nbackground, returning the portfolio_key immediately (no compute wait).\n\n**Credits:** Free (0 credits).","href":"/api-reference/portfolio-tracker/track"},{"title":"Validate Portfolio","openapi":"POST /v1/portfolio/validate","href":"/api-reference/portfolio-tracker/validate"},{"title":"Resolve Portfolio","openapi":"POST /v1/portfolio/resolve","description":"Resolve a portfolio definition and validate the result.\n\nAccepts the same body as /track. Normalizes symbols to RICs, removes unresolvable symbols and future-dated rows, deduplicates entries, removes non-positive weights, and renormalizes weights for each date to sum to 1.0. The result is checked with the same validator used by /track.\n\nReturns HTTP 200 with one of three statuses without persisting changes:\n- \"clean\": the input is valid and returned unchanged.\n- \"resolved\": the returned portfolio contains the corrected definition for submission to /track.\n- \"unresolvable\": the definition requires further changes; see validation.errors for details.\n\nReview the changes and dropped entries before submitting the resolved portfolio.\n\n**Credits:** Free (0 credits).","href":"/api-reference/portfolio-tracker/resolve"},{"title":"Get Portfolio","openapi":"GET /v1/portfolio/{portfolio_key}","href":"/api-reference/portfolio-tracker/get"},{"title":"Get Summary","openapi":"GET /v1/portfolio/{portfolio_key}/summary","href":"/api-reference/portfolio-tracker/summary"},{"title":"Get Analytics","openapi":"GET /v1/portfolio/{portfolio_key}/analytics","href":"/api-reference/portfolio-tracker/analytics"},{"title":"Get Holdings","openapi":"GET /v1/portfolio/{portfolio_key}/holdings","href":"/api-reference/portfolio-tracker/holdings"},{"title":"Latest Holdings","openapi":"GET /v1/portfolio/{portfolio_key}/holdings/latest","href":"/api-reference/portfolio-tracker/holdings-latest"},{"title":"Increment Portfolio","openapi":"POST /v1/portfolio/{portfolio_key}/increment","href":"/api-reference/portfolio-tracker/increment"},{"title":"Update Portfolio","openapi":"POST /v1/portfolio/{portfolio_key}/update","href":"/api-reference/portfolio-tracker/update"},{"title":"Validate Update","openapi":"POST /v1/portfolio/{portfolio_key}/validate","href":"/api-reference/portfolio-tracker/update-validate"},{"title":"Delete Portfolio","openapi":"DELETE /v1/portfolio/{portfolio_key}","href":"/api-reference/portfolio-tracker/delete"}]},{"group":"Builder","pages":[{"title":"Universe Builder","openapi":"POST /v1/builder","href":"/api-reference/builder/build"}]},{"group":"Stock","pages":[{"title":"Stock Search","openapi":"GET /v1/stock/search","href":"/api-reference/stock/search"},{"title":"Generate Stock Report","openapi":"POST /v1/stock-report","href":"/api-reference/stock/report"}]},{"group":"Analysis","pages":[{"title":"Financial Analysis","openapi":"POST /v1/financial-analysis","href":"/api-reference/analysis/financial"},{"title":"Technical Analysis","openapi":"POST /v1/technical-analysis","href":"/api-reference/analysis/technical"},{"title":"Score Analysis","openapi":"POST /v1/score-analysis","href":"/api-reference/analysis/score"},{"title":"Peers Analysis","openapi":"POST /v1/peers-analysis","href":"/api-reference/analysis/peers"},{"title":"Risk-Return Profile","openapi":"GET /v1/risk-return-profile","href":"/api-reference/analysis/risk-return-profile"},{"title":"Macro Context","openapi":"POST /v1/macro-context","href":"/api-reference/analysis/macro-context"},{"title":"Create Assessment","openapi":"POST /v1/assessment","href":"/api-reference/assessment/create"}]},{"group":"News","pages":[{"title":"News Analysis","openapi":"POST /v1/news-analysis","href":"/api-reference/analysis/news"},{"title":"Latest News","openapi":"GET /v1/news","href":"/api-reference/news/latest"}]},{"group":"Company Data","pages":[{"title":"Company Info","openapi":"GET /v1/company-info","href":"/api-reference/company/info"},{"title":"Peers","openapi":"GET /v1/peers","href":"/api-reference/company/peers"},{"title":"Company Background","openapi":"POST /v1/company-background","href":"/api-reference/company/background"}]},{"group":"Analyst Data","pages":[{"title":"Analyst Recommendations","openapi":"GET /v1/analyst-recommendations","href":"/api-reference/analyst/recommendations"},{"title":"Upgrades \u0026 Downgrades","openapi":"GET /v1/upgrades-downgrades","href":"/api-reference/analyst/upgrades-downgrades"},{"title":"Target Price Summary","openapi":"GET /v1/target-summary","href":"/api-reference/analyst/target-summary"},{"title":"Earnings Estimate","openapi":"GET /v1/earnings-estimate","href":"/api-reference/analyst/earnings-estimate"},{"title":"Earnings History","openapi":"GET /v1/earnings-history","href":"/api-reference/analyst/earnings-history"},{"title":"Revenue Estimate","openapi":"GET /v1/revenue-estimate","href":"/api-reference/analyst/revenue-estimate"},{"title":"EPS Trend","openapi":"GET /v1/eps-trend","href":"/api-reference/analyst/eps-trend"},{"title":"EPS Revisions","openapi":"GET /v1/eps-revisions","href":"/api-reference/analyst/eps-revisions"}]},{"group":"Financial Statements","pages":[{"title":"Income Statement","openapi":"GET /v1/income-statement","href":"/api-reference/financial-statements/income-statement"},{"title":"Balance Sheet","openapi":"GET /v1/balance-sheet","href":"/api-reference/financial-statements/balance-sheet"},{"title":"Cash Flow Statement","openapi":"GET /v1/cash-flow","href":"/api-reference/financial-statements/cash-flow"},{"title":"Key Ratios","openapi":"GET /v1/key-ratios","href":"/api-reference/financial-statements/key-ratios"}]},{"group":"Financial Ratios","pages":[{"title":"Altman Z-Score","openapi":"GET /v1/altman-zscore","href":"/api-reference/financial-ratios/altman-zscore"},{"title":"Current Ratios","openapi":"GET /v1/current-ratios","href":"/api-reference/financial-ratios/current-ratios"},{"title":"Piotroski F-Score","openapi":"GET /v1/piotroski-fscore","href":"/api-reference/financial-ratios/piotroski-fscore"}]},{"group":"Financial Data","pages":[{"title":"Financial Summary","openapi":"GET /v1/financial-summary","href":"/api-reference/financial-data/financial-summary"},{"title":"Dividend History","openapi":"GET /v1/dividend-history","href":"/api-reference/financial-data/dividend-history"},{"title":"Dividend Yield History","openapi":"GET /v1/divyield-history","href":"/api-reference/financial-data/divyield-history"}]},{"group":"Scores","pages":[{"title":"Historical Scores","openapi":"GET /v1/historical-scores","href":"/api-reference/scores/historical-scores"},{"title":"Score Metrics","openapi":"GET /v1/score-metrics","href":"/api-reference/scores/score-metrics"},{"title":"Sector Average Scores","openapi":"GET /v1/sector-avg-scores","href":"/api-reference/scores/sector-avg-scores"}]},{"group":"Valuation","pages":[{"title":"DCF Valuation","openapi":"GET /v1/dcf","href":"/api-reference/valuation/dcf"},{"title":"Peer Multiples","openapi":"GET /v1/multiples/{symbol}","href":"/api-reference/valuation/multiples"}]},{"group":"Price Data","pages":[{"title":"Daily Price","openapi":"GET /v1/daily-price","href":"/api-reference/price/daily-price"},{"title":"Returns Calendar","openapi":"GET /v1/returns-calendar","href":"/api-reference/price/returns-calendar"},{"title":"Rolling Volatility","openapi":"GET /v1/rolling-volatility","href":"/api-reference/price/rolling-volatility"},{"title":"Rolling Drawdown","openapi":"GET /v1/rolling-drawdown","href":"/api-reference/price/rolling-drawdown"}]},{"group":"ETF","pages":[{"title":"ETF Search","openapi":"GET /v1/etf/search","href":"/api-reference/etf/search"},{"title":"ETF Profile","openapi":"GET /v1/etf/profile","href":"/api-reference/etf/profile"},{"title":"ETF Scores","openapi":"GET /v1/etf/scores","href":"/api-reference/etf/scores"},{"title":"ETF Holdings","openapi":"GET /v1/etf/holdings","href":"/api-reference/etf/holdings"},{"title":"ETF Daily Price","openapi":"GET /v1/etf/daily-price","href":"/api-reference/etf/daily-price"},{"title":"Validate ETF Symbol","openapi":"GET /v1/etf/validate","href":"/api-reference/etf/validate"},{"title":"Generate ETF Report","openapi":"POST /v1/etf-report","href":"/api-reference/etf/report"}]},{"group":"Macro Reports","pages":[{"title":"Macro Report","openapi":"GET /v1/macro-report","href":"/api-reference/macro/report"},{"title":"List Macro Markets","openapi":"GET /v1/macro-report/markets","href":"/api-reference/macro/markets"}]},{"group":"Telemetry","pages":[{"title":"Telemetry Summary","openapi":"GET /v1/telemetry/summary","href":"/api-reference/telemetry/summary"},{"title":"Telemetry Baskets","openapi":"GET /v1/telemetry/baskets","href":"/api-reference/telemetry/baskets"},{"title":"Basket Detail","openapi":"GET /v1/telemetry/baskets/{basket_id}","href":"/api-reference/telemetry/basket-detail"},{"title":"Telemetry Macro","openapi":"GET /v1/telemetry/macro","href":"/api-reference/telemetry/macro"},{"title":"Telemetry Factor","openapi":"GET /v1/telemetry/factor","href":"/api-reference/telemetry/factor"},{"title":"Telemetry Snapshot (legacy)","openapi":"GET /v1/telemetry","href":"/api-reference/telemetry/snapshot"}]},{"group":"Telemetry Radar","pages":[{"title":"Telemetry Changes","openapi":"GET /v1/telemetry/changes","href":"/api-reference/telemetry-radar/changes"},{"title":"Stock → Basket Lookup","openapi":"GET /v1/telemetry/stock-basket","href":"/api-reference/telemetry-radar/stock-basket"},{"title":"Basket Members","openapi":"GET /v1/telemetry/baskets/{basket_id}/members","href":"/api-reference/telemetry-radar/basket-members"}]},{"group":"Validation","pages":[{"title":"Validate Symbol","openapi":"GET /v1/validate-symbol","href":"/api-reference/validation/validate-symbol"}]}]},{"tab":"MCP Server","pages":[{"title":"MCP Server","href":"/mcp/overview"}]},{"tab":"Glossary","pages":[{"title":"Glossary","href":"/glossary/overview"}]}]},"basePath":"","title":"Validate Portfolio - Parallax API","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}