---
title: "Decision Survival Score (per scenario, with displacement chain)."
method: GET
path: "/entities/{entityId}/decision-survival"
tags: ["Layer 2 — Insight"]
---

# Decision Survival Score (per scenario, with displacement chain).

`GET /entities/{entityId}/decision-survival`

## Request

- Base URL: `https://entidex.com/api/v1`
- URL: `https://entidex.com/api/v1/entities/{entityId}/decision-survival`
- Auth: HTTP bearer

## Path parameters

- `entityId` string, required

## Query parameters

- `scenario` string

## Response `200`

OK

- object
  - `data` union
    - object
      - `available` true, required
      - `survivalRate` number, nullable: Aggregate survival rate across scenarios.
      - `insufficientData` boolean: True when every returned scenario is below the minimum-evidence floor.
      - `scores` DecisionSurvivalScore[], required
        - `entityId` string, required
        - `scenarioKey` string, required
        - `scenarioLabel` string, required
        - `depth` integer: Decision depth of the scenario (3–5).
        - `survivalRate` number, required: 0..1 share of all probe trials (reps × engines) where the entity survived to the final turn.
        - `insufficientData` boolean: True when this scenario sits below the minimum-evidence floor (< 3 engines or < 3 total trials) — the rate is carried but should be rendered as a "measuring" state, not a reading.
        - `enginesEvaluated` integer, required
        - `enginesSurvived` integer, required: Engines where the entity survived at least one replication.
        - `perEngine` object, required: Per-engine count of successful replications (0..reps; 0 | 1 in the legacy single-rep shape).
        - `displacementChain` DisplacementTurn[], required
          - `turn` integer, required
          - `replacedBy` object[], required
            - `entitySlug` string
            - `mentions` integer
        - `transcript` DecisionSurvivalEngineTranscript[]: One representative captured transcript per engine — the exact prompts plus that engine's actual reply per turn. Empty for runs predating the transcript capture.
          - `engine` string, required: Engine id (e.g. 'chatgpt', 'claude').
          - `survived` boolean, required: Whether the focal entity was still recommended at the final turn of this captured run.
          - `turns` object[], required
            - `turn` integer, required
            - `prompt` string, required: The user message posed at this turn.
            - `response` string, required: The engine's reply (truncated).
        - `computedAt` string, date-time, required
        - `confidence` ScoreConfidence: 95% Wilson confidence envelope under a Score (confidenceLayer.ts). All fields optional.
          - `interval95` number[]: [lower, upper] on the same 0..N scale as the score value.
          - `variance` number, nullable
          - `sampleSize` integer: Observations the score is computed over (enginesEvaluated for Decision Survival).
          - `probeRunIds` string[]: Contributing probe_run UUIDs (capped at 20).
          - `lastObservedAt` string, date-time
          - `version` string: Confidence-Layer scoring version.
    - object
      - `available` false, required
      - `reason` 'no_signal_yet' | 'scenario_not_found' | 'entity_type_out_of_scope', required
  - `meta` ResponseMeta
    - `requestId` string, required
    - `timestamp` string, date-time, required
    - `apiVersion` string, required
    - `pagination` object
      - `cursor` string, nullable
      - `hasMore` boolean
      - `limit` integer
    - `rateLimit` object
      - `limit` integer
      - `remaining` integer
      - `resetAt` string, date-time
    - `billing` object
      - `creditsUsed` integer
      - `creditsRemaining` integer, nullable
      - `tier` 'free' | 'layer_0_discovery' | 'layer_1_profile' | 'layer_2_insight' | 'layer_3_drift' | 'layer_4_cohort'
      - `allowedLayers` integer[]: Cumulative layer ladder unlocked by this key (0=discovery … 4=cohort). free → []; layer_2_insight → [0,1,2].
      - `mode` 'demo' | 'free' | 'payg' | 'keyed': How the caller is billed: demo (feedback-loop key), free (monthly allowance), payg (Developer PAYG), keyed (paid subscription).
  - `errors` ApiError[]
    - `code` 'ENTITY_NOT_RESOLVED' | 'ENTITY_NOT_FOUND' | 'INVALID_PARAMETER' | 'RATE_LIMITED' | 'INSUFFICIENT_CREDITS' | 'TIER_NOT_AVAILABLE' | 'UNAUTHENTICATED' | 'FORBIDDEN' | 'INTERNAL_ERROR', required
    - `message` string, required
    - `field` string
    - `candidates` object[]

---

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