---
title: "What could change the choice, and why"
method: GET
path: "/workspaces/{id}/questions/{questionId}/investigation"
tags: ["switching"]
---

# What could change the choice, and why

`GET /workspaces/{id}/questions/{questionId}/investigation`

## Request

- Base URL: `https://api.swingfactor.ai/v1`
- URL: `https://api.swingfactor.ai/v1/workspaces/{id}/questions/{questionId}/investigation`
- Auth: HTTP bearer

Each variable is critical if an accepted range crosses an accepted break-even the evidence gives (derived, published or a criterion), or accepted ranges lie either side of one; not-critical otherwise; incomplete if nothing accepted can be tested. A party’s asserted threshold the ranges reach is listed apart, as theirs. Reasons, not a score, and never ranked. Value choices are listed apart.

## Path parameters

- `id` string, uuid, required
- `questionId` string, uuid, required

## Response `200`

The investigation set.

- InvestigationSet
  - `questionId` string, uuid, required
  - `variables` object[], required
    - `variableId` string, uuid, required
    - `name` string, required
    - `unit` string, nullable, required
    - `propositionId` string, uuid, required
    - `problemKind` 'epistemic' | 'capability' | 'normative', required
    - `status` 'critical' | 'not-critical' | 'incomplete', required
    - `acceptedEstimates` integer, required
    - `acceptedBreakEvens` integer, required: The evidence’s: derived, published or criterion.
    - `crossings` object[], required
      - `breakEvenId` string, uuid, required
      - `variableId` string, uuid, required
      - `threshold` number, required
      - `horizon` 'transition' | 'early' | 'medium' | 'long' | 'every' | 'null', nullable: The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every.
      - `consequence` string, required: What changes at the threshold.
      - `basis` 'derived' | 'published' | 'criterion' | 'asserted', required: How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right.
      - `derivation` string, nullable: For a derived one: the arithmetic.
      - `source` string, nullable: Where it is published, or asserted.
      - `assertedBy` string, nullable: For an asserted one: who draws the line.
      - `belowOutcome` string, nullable: What occurs below the threshold.
      - `aboveOutcome` string, nullable: What occurs above it.
      - `compares` object[], required: The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s.
        - `optionId` string, uuid, required
        - `configurationId` string, uuid, nullable
      - `configurationId` string, uuid, nullable: For a break-even comparing no options: the configuration it holds under.
      - `scenarioId` string, uuid, nullable
      - `everyScenario` boolean
      - `measuredAgainst` string, nullable: What it is measured against: compared with a range’s baseline, never bridged.
      - `estimateIds` string[], required
    - `disagreements` object[], required
      - `breakEvenId` string, uuid, required
      - `variableId` string, uuid, required
      - `threshold` number, required
      - `horizon` 'transition' | 'early' | 'medium' | 'long' | 'every' | 'null', nullable: The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every.
      - `consequence` string, required: What changes at the threshold.
      - `basis` 'derived' | 'published' | 'criterion' | 'asserted', required: How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right.
      - `derivation` string, nullable: For a derived one: the arithmetic.
      - `source` string, nullable: Where it is published, or asserted.
      - `assertedBy` string, nullable: For an asserted one: who draws the line.
      - `belowOutcome` string, nullable: What occurs below the threshold.
      - `aboveOutcome` string, nullable: What occurs above it.
      - `compares` object[], required: The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s.
        - `optionId` string, uuid, required
        - `configurationId` string, uuid, nullable
      - `configurationId` string, uuid, nullable: For a break-even comparing no options: the configuration it holds under.
      - `scenarioId` string, uuid, nullable
      - `everyScenario` boolean
      - `measuredAgainst` string, nullable: What it is measured against: compared with a range’s baseline, never bridged.
      - `belowEstimateIds` string[], required
      - `aboveEstimateIds` string[], required
    - `sides` object[], required: Every accepted break-even, whoever’s, and which accepted ranges lie below, above and across it.
      - `breakEvenId` string, uuid, required
      - `variableId` string, uuid, required
      - `threshold` number, required
      - `horizon` 'transition' | 'early' | 'medium' | 'long' | 'every' | 'null', nullable: The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every.
      - `consequence` string, required: What changes at the threshold.
      - `basis` 'derived' | 'published' | 'criterion' | 'asserted', required: How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right.
      - `derivation` string, nullable: For a derived one: the arithmetic.
      - `source` string, nullable: Where it is published, or asserted.
      - `assertedBy` string, nullable: For an asserted one: who draws the line.
      - `belowOutcome` string, nullable: What occurs below the threshold.
      - `aboveOutcome` string, nullable: What occurs above it.
      - `compares` object[], required: The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s.
        - `optionId` string, uuid, required
        - `configurationId` string, uuid, nullable
      - `configurationId` string, uuid, nullable: For a break-even comparing no options: the configuration it holds under.
      - `scenarioId` string, uuid, nullable
      - `everyScenario` boolean
      - `measuredAgainst` string, nullable: What it is measured against: compared with a range’s baseline, never bridged.
      - `belowEstimateIds` string[], required
      - `aboveEstimateIds` string[], required
      - `acrossEstimateIds` string[], required
      - `withoutRange` object[]: The sides it compares with no accepted range read against them: nothing is filled in for them.
        - `optionId` string, uuid, required
        - `configurationId` string, uuid, nullable
      - `notCompared` object[]: The variable’s accepted ranges not read against it, and why, dimension by dimension: shown, never bridged.
        - `estimateId` string, uuid, required
        - `mismatches` object[], required
          - `dimension` 'horizon' | 'scenario' | 'baseline' | 'option' | 'configuration', required
          - `result` 'mismatch' | 'not-stated', required
          - `side` 'range' | 'threshold' | 'either'
          - `says` string, required
    - `attributed` object[], required: A party’s asserted threshold that the accepted ranges reach or lie either side of: listed as theirs, never the model’s, and never what makes the variable critical.
      - `breakEvenId` string, uuid, required
      - `variableId` string, uuid, required
      - `threshold` number, required
      - `horizon` 'transition' | 'early' | 'medium' | 'long' | 'every' | 'null', nullable: The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every.
      - `consequence` string, required: What changes at the threshold.
      - `basis` 'derived' | 'published' | 'criterion' | 'asserted', required: How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right.
      - `derivation` string, nullable: For a derived one: the arithmetic.
      - `source` string, nullable: Where it is published, or asserted.
      - `assertedBy` string, nullable: For an asserted one: who draws the line.
      - `belowOutcome` string, nullable: What occurs below the threshold.
      - `aboveOutcome` string, nullable: What occurs above it.
      - `compares` object[], required: The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s.
        - `optionId` string, uuid, required
        - `configurationId` string, uuid, nullable
      - `configurationId` string, uuid, nullable: For a break-even comparing no options: the configuration it holds under.
      - `scenarioId` string, uuid, nullable
      - `everyScenario` boolean
      - `measuredAgainst` string, nullable: What it is measured against: compared with a range’s baseline, never bridged.
      - `belowEstimateIds` string[], required
      - `aboveEstimateIds` string[], required
      - `acrossEstimateIds` string[], required
      - `withoutRange` object[]: The sides it compares with no accepted range read against them: nothing is filled in for them.
        - `optionId` string, uuid, required
        - `configurationId` string, uuid, nullable
      - `notCompared` object[]: The variable’s accepted ranges not read against it, and why, dimension by dimension: shown, never bridged.
        - `estimateId` string, uuid, required
        - `mismatches` object[], required
          - `dimension` 'horizon' | 'scenario' | 'baseline' | 'option' | 'configuration', required
          - `result` 'mismatch' | 'not-stated', required
          - `side` 'range' | 'threshold' | 'either'
          - `says` string, required
    - `incompleteBecause` 'no-break-even' | 'no-range' | 'no-range-in-its-scope' | 'no-range-at-its-horizon' | 'null', nullable: Why it is not yet testable: no break-even the evidence gives is established; or one is, and the ranges to test it are missing.
  - `valueChoices` string[], required: Propositions no range resolves: people decide them.
  - `untested` string[]: Accepted or qualified empirical and mixed propositions that state nothing which would change them. Absent from an older snapshot.
  - `unresolved` object[]: Claims a person has left unresolved, with what resolving each takes: open matters, whether or not a figure could settle them. Absent from an older snapshot.
    - `propositionId` string, uuid, required
    - `problemKind` 'epistemic' | 'capability' | 'normative', required: While unresolved: investigate (epistemic), build capacity, or decide (normative).
  - `constraint` object, nullable: What limits the investigation, when the question names it.
    - `kind` string, required
    - `note` string, nullable
    - `deadline` string, nullable
  - `undefinedOptions` string[]: Accepted options with no accepted configuration, where the question uses the frontier: a gap to fill, never a verdict.
  - `availabilityUnexamined` object[]: Accepted options with no decided claim on whether they could be obtained, or would last — only where the question engages availability. Listed, and not counted against readiness.
    - `optionId` string, uuid, required
    - `obtainable` boolean, required
    - `durable` boolean, required
  - `availability` object: Whether the question engages availability, and what it says of it.
    - `engaged` boolean, required
    - `stated` 'engaged' | 'not-material' | 'null', nullable
  - `priorities` object: A person's priorities under that constraint, by proposition id.

## Other responses

- `401`: No token, or not a valid one: `unauthorized`.
- `404`: No such question.

---

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