> ## 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.

# Generate ETF Report

> Generate an ETF research report (ASYNC - returns job_id immediately). Poll GET /v1/jobs/{job_id}; when status="completed" the result carries pdf_url, html_url and json_url. Reports contain no recommendation labels, for any organization.

**Workflow:**
1. POST /etf-report → job_id (returns in <1s)
2. Poll GET /v1/jobs/{job_id}
3. status="completed" → result has pdf_url / html_url / json_url

**Credits:** 10 credits per job. Charged when the job completes successfully. Polling is free.

Generate an ETF research report as HTML, PDF and JSON. Submit the fund's symbol,
then poll the returned `check_url` until the job completes.

The report describes holdings, factor scores, performance and risk. It contains
no recommendation labels, house verdict or buy/hold/sell mix, for any organization.

Reports are shared across organizations. A report generated today in Singapore
time can be reused when `force` is `false`. Set `force` to `true` to regenerate.

When the job completes, its result contains `html_url`, `pdf_url` and `json_url`.


## OpenAPI

````yaml POST /v1/etf-report
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. Credits can
    be fractional. Per-symbol reads cost 0.05 credits per submitted symbol; see
    each operation for its price. A 503 indicates an availability failure, not
    data age.
  version: 1.1.0
servers:
  - url: https://api.chicago.global
security:
  - HTTPBearer: []
paths:
  /v1/etf-report:
    post:
      tags:
        - v1
        - ETF Reports
      summary: Etf Report
      description: >-
        Generate an ETF research report (ASYNC - returns job_id immediately).
        Poll GET /v1/jobs/{job_id}; when status="completed" the result carries
        pdf_url, html_url and json_url. Reports contain no recommendation
        labels, for any organization.


        **Workflow:**

        1. POST /etf-report → job_id (returns in <1s)

        2. Poll GET /v1/jobs/{job_id}

        3. status="completed" → result has pdf_url / html_url / json_url


        **Credits:** 10 credits per job. Charged when the job completes
        successfully. Polling is free.
      operationId: etf_report_v1_etf_report_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ETFReportRequest'
        required: true
      responses:
        '202':
          description: Job created successfully
          content:
            application/json:
              schema: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
        '422':
          description: Fund not supported for reports; no job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - HTTPBearer: []
components:
  schemas:
    ETFReportRequest:
      properties:
        symbol:
          type: string
          title: Symbol
          description: ETF symbol/RIC identifier
          example: SPY
        force:
          type: boolean
          title: Force
          description: Force regeneration even if recent report exists
          default: false
      type: object
      required:
        - symbol
      title: ETFReportRequest
    ErrorResponse:
      properties:
        success:
          type: boolean
          title: Success
        error:
          type: string
          title: Error
        timestamp:
          type: string
          title: Timestamp
        details:
          anyOf:
            - type: string
            - type: 'null'
          title: Details
      type: object
      required:
        - success
        - error
        - timestamp
      title: ErrorResponse
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.