Skip to main content
GET
/
v1
/
jobs
/
{job_id}
Get Job Status
curl --request GET \
  --url https://api.chicago.global/v1/jobs/{job_id} \
  --header 'Authorization: Bearer <token>'
{
  "job_id": "<string>",
  "status": "pending",
  "progress": {
    "step": "<string>",
    "percent": 123,
    "message": "<string>"
  },
  "result": {
    "success": true,
    "result": {
      "portfolio_parameters": {
        "start_date": "<string>",
        "end_date": "<string>",
        "base_currency": "<string>",
        "benchmark": "<string>",
        "initial_value": 123,
        "include_transaction_costs": true,
        "transaction_costs_applied": {}
      },
      "data_quality": {
        "total_rics_requested": 123,
        "rics_found_in_database": 123,
        "missing_rics": [
          "<string>"
        ],
        "missing_rics_count": 123,
        "data_completeness_pct": 123
      },
      "portfolio_summary": {
        "final_value": 123,
        "total_return": 123,
        "total_price_pl": 123,
        "total_fx_pl": 123,
        "total_pl": 123,
        "total_transaction_cost": 123,
        "transaction_cost_pct_of_initial": 123,
        "include_transaction_costs": true
      },
      "turnover_analysis": {
        "summary": {
          "days_in_period": 123,
          "num_rebalances": 123,
          "annualized_turnover_pct": 123,
          "total_transaction_cost": 123,
          "annualized_cost_pct": 123,
          "total_buy_value": 123,
          "total_sell_value": 123,
          "include_transaction_costs": true
        },
        "by_rebalance": "<array>",
        "by_market": {}
      },
      "performance_metrics": {
        "portfolio": {
          "total_return": 123,
          "annualized_return": 123,
          "annualized_volatility": 123,
          "max_drawdown": 123,
          "sharpe_ratio": 123,
          "sortino_ratio": 123,
          "calmar_ratio": 123,
          "win_rate": 123,
          "var_95": 123,
          "var_99": 123
        },
        "benchmark": {
          "total_return": 123,
          "annualized_return": 123,
          "sharpe_ratio": 123,
          "max_drawdown": 123
        },
        "relative": {
          "beta": 123,
          "alpha_annualized": 123,
          "correlation": 123,
          "information_ratio": 123,
          "tracking_error": 123,
          "excess_return": 123
        }
      },
      "rolling_metrics": {},
      "drawdown_analysis": {},
      "portfolio_scores": {
        "value": 123,
        "quality": 123,
        "momentum": 123,
        "defensive": 123,
        "tactical": 123,
        "total": 123,
        "coverage": 123
      },
      "concentration_metrics": {},
      "transactions": [
        {
          "date": "<string>",
          "ric": "<string>",
          "transaction_qty": 123,
          "transaction_value": 123,
          "transaction_type": "BUY"
        }
      ],
      "latest_holdings": [
        {
          "ric": "<string>",
          "name": "<string>",
          "quantity": 123,
          "weight": 123,
          "ending_value": 123,
          "market": "<string>",
          "sector": "<string>"
        }
      ],
      "market_allocation": "<array>",
      "sector_allocation": "<array>",
      "currency_allocation": "<array>",
      "company_contribution": "<array>",
      "sector_contribution": "<array>",
      "market_contribution": "<array>",
      "time_period_returns": {},
      "monthly_returns": "<array>",
      "annual_returns": "<array>",
      "benchmark_prices": "<array>",
      "daily_summary": [
        {
          "date": "<string>",
          "portfolio_value": 123,
          "daily_return": 123,
          "cumulative_return": 123,
          "benchmark_value": 123,
          "benchmark_daily_return": 123,
          "benchmark_cumulative_return": 123
        }
      ]
    },
    "error": "<string>",
    "timestamp": "2023-11-07T05:31:56Z"
  },
  "error": "<string>"
}
Poll this endpoint to check the status of any async job (portfolio analysis, stock reports, etc.).

Job Status Values

StatusDescription
pendingJob queued, not yet started
processingJob running, check progress for details
completedJob finished, results in result field
failedJob failed, error message in error field

Progress Information

While processing, the response includes progress details:
{
  "job_id": "port-xxx",
  "status": "processing",
  "progress": {
    "step": "Processing portfolio",
    "percent": 40,
    "message": "Calculating daily positions and P&L..."
  }
}

Completed Response

When status is completed, the results are in the result field. The structure depends on the job type: Portfolio Analysis:
{
  "job_id": "port-xxx",
  "status": "completed",
  "result": {
    "success": true,
    "result": {
      "portfolio_summary": { ... },
      "performance_metrics": { ... }
    }
  }
}
Stock Report:
{
  "job_id": "stock-xxx",
  "status": "completed",
  "result": {
    "success": true,
    "symbol": "AAPL.O",
    "pdf_url": "https://...",
    "html_url": "https://...",
    "json_url": "https://..."
  }
}
Jobs expire after 30 minutes. Retrieve results promptly after completion.

Authorizations

Authorization
string
header
required

API key passed as Bearer token

Path Parameters

job_id
string
required

The job ID returned from the analyze endpoint

Response

Job status retrieved

job_id
string

Job identifier

status
enum<string>

Current job status

Available options:
pending,
processing,
completed,
failed
progress
object

Progress information (when processing)

result
object

Analysis result (when completed)

error
string

Error message (when failed)