> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chicago.global/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate Update

> Dry-run validation for an update (same optional fields as /update).

Merges the payload onto the stored registry + holdings, then validates the
resulting definition — the same snapshot /update would persist if accepted.



## OpenAPI

````yaml POST /v1/portfolio/{portfolio_key}/validate
openapi: 3.1.0
info:
  title: Parallax API
  description: >-
    Parallax by Chicago Global — AI-powered investment research and portfolio
    analytics. Multi-factor scoring, portfolio analysis and tracking, financial
    statements, analyst estimates, ETF analytics, valuation (DCF & multiples),
    macro and market telemetry, and AI-generated research reports.
  version: 1.1.0
servers:
  - url: https://api.chicago.global
security:
  - HTTPBearer: []
paths:
  /v1/portfolio/{portfolio_key}/validate:
    post:
      tags:
        - v1
        - Portfolio Tracker
      summary: Validate Portfolio Update
      description: >-
        Dry-run validation for an update (same optional fields as /update).


        Merges the payload onto the stored registry + holdings, then validates
        the

        resulting definition — the same snapshot /update would persist if
        accepted.
      operationId: validate_portfolio_update_v1_portfolio__portfolio_key__validate_post
      parameters:
        - name: portfolio_key
          in: path
          required: true
          schema:
            type: string
            title: Portfolio Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePortfolioRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioValidateResponse'
        '404':
          description: Not found
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '500':
          description: Internal server error
      security:
        - HTTPBearer: []
components:
  schemas:
    UpdatePortfolioRequest:
      properties:
        portfolio:
          anyOf:
            - items:
                $ref: '#/components/schemas/PortfolioHolding'
              type: array
            - type: 'null'
          title: Portfolio
          description: Optional new holdings to replace the existing portfolio definition.
        base_currency:
          anyOf:
            - type: string
            - type: 'null'
          title: Base Currency
          description: Override base currency for this portfolio.
          example: USD
        benchmark:
          anyOf:
            - type: string
            - type: 'null'
          title: Benchmark
          description: Override benchmark for this portfolio.
          example: ACWI.OQ
        initial_value:
          anyOf:
            - type: number
            - type: 'null'
          title: Initial Value
          description: Override initial portfolio value in base currency.
          example: 10000
        include_transaction_costs:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Include Transaction Costs
          description: Override transaction cost setting for this update.
        transaction_cost_config:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Transaction Cost Config
          description: Override transaction cost config for this update.
      type: object
      title: UpdatePortfolioRequest
      description: >-
        Request model for updating a tracked portfolio.


        All fields are optional — send only what you want to change. If
        `portfolio`

        is provided, holdings are fully replaced. Analytics are recomputed in
        the

        background up to the latest trading day; extending the series through a

        specific date without changing definition is /increment's job.
    PortfolioValidateResponse:
      properties:
        valid:
          type: boolean
          title: Valid
          description: True when the portfolio would pass track/update validation
        error_count:
          type: integer
          title: Error Count
        warning_count:
          type: integer
          title: Warning Count
        errors:
          items:
            $ref: '#/components/schemas/ValidationIssueResponse'
          type: array
          title: Errors
        warnings:
          items:
            $ref: '#/components/schemas/ValidationIssueResponse'
          type: array
          title: Warnings
        normalized:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Normalized
          description: Portfolio definition after weight renormalization (only when valid)
      type: object
      required:
        - valid
        - error_count
        - warning_count
        - errors
        - warnings
      title: PortfolioValidateResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    PortfolioHolding:
      properties:
        date:
          type: string
          title: Date
          description: Rebalance date in YYYY-MM-DD format
          example: '2024-01-01'
        symbol:
          type: string
          title: Symbol
          description: Stock symbol or RIC (e.g., AAPL or AAPL.O)
          example: AAPL
        weight:
          type: number
          title: Weight
          description: Portfolio weight (as decimal, e.g., 0.25 for 25%)
          example: 0.25
      additionalProperties: false
      type: object
      required:
        - date
        - symbol
        - weight
      title: PortfolioHolding
    ValidationIssueResponse:
      properties:
        code:
          type: string
          title: Code
          description: Machine-readable issue code
        message:
          type: string
          title: Message
          description: Human-readable description
        field:
          anyOf:
            - type: string
            - type: 'null'
          title: Field
          description: JSON-path-style field hint
      type: object
      required:
        - code
        - message
      title: ValidationIssueResponse
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````