---
title: "Get backtests"
method: GET
path: "/api/v1/research/backtests/{id}"
tags: ["research"]
---

# Get backtests

`GET /api/v1/research/backtests/{id}`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/research/backtests/{id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Get one Research backtest's calibration: the situation every twin read, the study's single-choice questions, which one asks the decision and how much of usual buying each of its options keeps (the member's mapping), the outcome the member recorded, and every run of the study: what it asked (its respondent models and any context its twins read after the situation), how many twins chose each option, the forecast change those answers add up to with its 95% range, how far it stands from the outcome in points, whether both moved the same way and the range holds the outcome, and the share of answers it holds in common with the first run. Also how many twins a rerun would ask. A campaign that is no backtest is refused 404. `id` is the campaign's id.

## Path parameters

- `id` string, uuid, required: The backtest's campaign id.

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- ResearchBacktestsGetResponse
  - `campaignId` string, uuid, required
  - `campaignName` string, required
  - `situation` string, nullable, required: What every twin read first.
  - `questions` object[], required
    - `id` string, required
    - `title` string, required
    - `prompt` string, required
    - `options` string[], required
  - `mapping` object, nullable, required
    - `questionId` string, required
    - `keeps` number[], required
  - `outcome` object, nullable, required
    - `metric` string, required
    - `change` number, required
    - `note` string, nullable, required
    - `recordedAt` string, date-time, required
  - `runs` object[], required
    - `runId` string, uuid, required
    - `sequence` integer, required
    - `entry` string, nullable, required: launch for the first run, run_now for a rerun.
    - `status` string, required
    - `startedAt` string, date-time, required
    - `completedAt` string, date-time, nullable, required
    - `respondentModelIds` string[], required
    - `requestedModelId` string, nullable, required
    - `steeringContext` string, nullable, required
    - `counts` integer[], nullable, required
    - `forecast` object, nullable, required
      - `counted` integer, required: The twins whose answers count.
      - `change` number, required: The forecast change in buying, as a fraction.
      - `low` number, required: The forecast's 95% range, most loss first.
      - `high` number, required
    - `comparison` object, nullable, required
      - `gapPoints` integer, required: Forecast less outcome, in points; negative when the twins expected more loss.
      - `directionMatched` boolean, required
      - `rangeHoldsActual` boolean, required
    - `overlapWithFirst` number, nullable, required
    - `drivers` object[], nullable, required: The finished run's counted answers split by each participant attribute that varies among them, strongest first; null until the run has finished under a mapping.
      - `attribute` string, required: The customer attribute's key.
      - `label` string, required
      - `strengthPoints` integer, nullable, required: The spread between its highest and lowest bucket forecast, in points, over buckets large enough to read; null with fewer than two.
      - `buckets` object[], required
        - `value` string, required
        - `n` integer, required: The twins in it whose answers count.
        - `forecast` number, nullable, required: Its forecast change in buying, as a fraction, as the run's forecast.
        - `tooSmall` boolean, required: Too few twins to read; shown with its n.
  - `rerunTwins` integer, required

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

[API](https://skmtc.dev/point11/apis/point11-api.md) · [All operations](https://skmtc.dev/point11/apis/point11-api/llms.txt) · [OpenAPI document](https://skmtc.dev/point11/apis/point11-api/revisions/36a84c7aca11?raw)
