---
title: "Get Backtest Curve"
method: GET
path: "/v1/backtests/{job_id}/curve"
tags: ["backtests"]
---

# Get Backtest Curve

`GET /v1/backtests/{job_id}/curve`

## Request

- Base URL: `https://api.usekeel.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.usekeel.io/v1/backtests/{job_id}/curve`
- Auth: none declared

Compact equity + drawdown series for a completed run (Q-1505).

The MCP result card draws its chart in-card, so it needs a series it
can carry in the tool envelope rather than the presigned pointer at
the full ``results.json``. Same access rule as ``/results``
(``backtest.results.read``), same 409 before completion; warm-up is
trimmed and the series downsampled by ``utils.backtest_curve`` so the
card's chart starts and dips where the tearsheet's does.

## Path parameters

- `job_id` string, required

## Query parameters

- `points` integer: Maximum points to return (extreme-preserving downsample).
- `references` boolean: Serve the BTC/ETH/SOL price-only hold lines over the curve's span (or reference_start..reference_end). Off by default: the lines cost a multi-month price read, and only a caller that draws them asks.
- `reference_start` string, nullable: First UTC day (YYYY-MM-DD) of the span the hold references cover; with reference_end, replaces the curve's own trimmed span — a comparison asks for the span every run covers.
- `reference_end` string, nullable: Exclusive end UTC day (YYYY-MM-DD) of that span.

## Headers

- `Authorization` string, nullable
- `X-Org-Id` string, nullable

## Response `200`

Successful Response

- BacktestCurveResponse: Compact equity + drawdown series for the result card (Q-1505). Warm-up trimmed and extreme-preserving downsampled by ``utils.backtest_curve`` — the ONE computation owner. ``points`` is empty (with ``source_points == 0``) when the run stored no curve. ``references`` (spec 03 §2.2): BTC first, then ETH and SOL — one entry per symbol, ``null`` where the span has fewer than two daily closes for it (never a fabricated series). Empty when the curve itself is empty.
  - `job_id` string, required
  - `points` BacktestCurvePoint[], required
    - `t` string, required
    - `equity` number, required
    - `drawdown_pct` number, required
  - `start` string, nullable
  - `end` string, nullable
  - `source_points` integer, required
  - `references` BacktestReference[]
    - `label` string, required
    - `basis` string, required
    - `symbol` string, required
    - `rebased_at` string, required
    - `end_close_at` string, required
    - `start_close` number, required
    - `end_close` number, required
    - `ret_pct` number, required
    - `dd_pct` number, required
    - `series` BacktestReferencePoint[], required
      - `t` string, required
      - `equity` number, required
  - `reference_span` object, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/usekeel/apis/keel-api.md) · [All operations](https://skmtc.dev/usekeel/apis/keel-api/llms.txt) · [OpenAPI document](https://skmtc.dev/usekeel/apis/keel-api/revisions/3191ca10b0ab?raw)
