---
title: "Get Message Explainability"
method: GET
path: "/api/chats/{chat_id}/messages/{message_id}/explainability"
tags: ["chats"]
---

# Get Message Explainability

`GET /api/chats/{chat_id}/messages/{message_id}/explainability`

## Request

- Base URL: `https://app.thinqos.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.thinqos.com/api/chats/{chat_id}/messages/{message_id}/explainability`
- Auth: none declared

Return the unified 'Explain this response' envelope for an assistant message.

## Path parameters

- `chat_id` string, uuid, required
- `message_id` string, uuid, required

## Headers

- `x-impersonate-identity-id` string, nullable

## Response `200`

Successful Response

- ExplainabilityEnvelope
  - `schema_version` string
  - `message_id` string, required
  - `receipt` ReceiptMetrics, required
    - `total_provider_cost_exact_usd` string, nullable
    - `total_charged_cost_exact_usd` string, nullable
    - `charge_complete` boolean
    - `primary_cost_scope` string
    - `funding_allocations` FundingAllocation[]
      - `funding_source` string, required
      - `amount_usd` string, nullable, required
      - `provider_cost_usd` string, nullable, required
      - `payer` string, required
      - `billable_record_ids` string[], required
      - `scope` string, required
    - `browser_timing` BrowserTiming
      - `send_to_first_visible_us` integer, nullable
      - `send_to_answer_complete_us` integer, required
      - `observation_id` string, required
      - `source` string
      - `resolution_us` integer
      - `evidence` string
      - `completion_evidence` string
      - `displayed_estimates` DisplayedEstimate[]
        - `activity_id` string, required
        - `label` string, required
        - `observed_after_send_us` integer, required
        - `lower_seconds` number, required
        - `upper_seconds` number, required
        - `estimate_observed_at` string, required
        - `cohort_version` string, nullable
        - `cohort_scope` string, nullable
        - `sample_size` integer, nullable
    - `duration_source` string
    - `total_provider_cost_usd` number, nullable, required
    - `total_charged_cost_usd` number, nullable, required
    - `payers` ReceiptPayer[]
      - `identity_id` string, required
      - `amount_usd` number, required
      - `is_viewer` boolean, required
    - `post_turn_learning_cost_usd` number, nullable
    - `post_turn_learning_call_count` integer
    - `total_duration_ms` integer, nullable, required
    - `stage_timings` StageTiming[]
      - `key` string, required
      - `label` string, required
      - `duration_ms` integer, required
    - `model` string, nullable, required
    - `provider` string, nullable, required
    - `model_parameters` ModelParameters: What the answer call actually ran with (TOS-6894). Read from the answer run's ``model_runs`` row, never from the template or the catalog: the receipt says what executed, not what was configured. ``request_retained`` is False once retention has nulled ``raw_request`` (30 days), at which point the request-derived fields are None because the evidence is gone, not because the call had no such setting.
      - `request_retained` boolean, required
      - `reasoning_effort` string, nullable
      - `reasoning_toggle` string, nullable
      - `reasoning_budget_tokens` integer, nullable
      - `max_output_tokens` integer, nullable
      - `temperature` number, nullable
      - `response_format` string, nullable
      - `context_ceiling_tokens` integer, nullable
      - `reserved_output_tokens` integer, nullable
      - `available_prompt_tokens` integer, nullable
      - `turn_class` string, nullable
      - `stop_reason` string, nullable
      - `config_source` string, nullable
      - `route_tier` string, nullable
      - `route_tier_reason` string, nullable
    - `input_tokens` integer, nullable, required
    - `output_tokens` integer, nullable, required
    - `context_items_used` integer, required
    - `grounding_summary` string, nullable, required
    - `retrieval_status_label` string, nullable, required
    - `retrieval_status_tone` string, required
  - `trace_tree` TraceTree
    - `trace_id` string, required
    - `schema_version` string, required
    - `integrity_status` string, required
    - `issues` string[], required
    - `root` TraceNode, required
      - `kind` string
      - `action` string
      - `outcome_summary` string, nullable
      - `ai_use` string
      - `ai_evidence` string, nullable
      - `timing` StepTiming
        - `start_offset_us` integer, nullable
        - `duration_us` integer, nullable
        - `source` string
        - `resolution_us` integer, nullable
        - `state` 'measured' | 'derived' | 'below_resolution' | 'event' | 'not_run' | 'unknown'
        - `raw_duration_ms` integer, nullable
      - `charge` StepCharge
        - `state` 'billed' | 'no_ai_charge' | 'included' | 'non_billed' | 'not_applicable' | 'unknown'
        - `amount_usd` string, nullable
        - `included_in_id` string, nullable
        - `billable_record_ids` string[]
        - `scope` string
      - `model_run_id` string, nullable
      - `tool_call_id` string, nullable
      - `span_id` string, required
      - `parent_span_id` string, nullable, required
      - `trace_id` string, required
      - `category` string, required
      - `operation` string, required
      - `label` string, required
      - `duration_ms` integer, required
      - `percent_of_parent` number, nullable, required
      - `cost_usd` number, nullable, required
      - `status` string, required
      - `relationship` string, required
      - `evidence` string, required
      - `started_at` string, date-time, nullable, required
      - `ended_at` string, date-time, nullable, required
      - `coverage` TraceCoverage, required
        - `parent_duration_ms` integer, required
        - `covered_ms` integer, required
        - `coverage_pct` number, required
        - `unattributed_ms` integer, required
        - `overlap_ms` integer, required
        - `async_ms` integer, required
        - `completeness` string, required
        - `parent_duration_us` integer, nullable
        - `covered_us` integer, nullable
        - `unattributed_us` integer, nullable
        - `overlap_us` integer, nullable
        - `clock_quality` string
        - `measured_coverage_complete` boolean
      - `attributes` object
      - `children` TraceNode[]
    - `detached_nodes` TraceNode[]
      - `kind` string
      - `action` string
      - `outcome_summary` string, nullable
      - `ai_use` string
      - `ai_evidence` string, nullable
      - `timing` StepTiming
        - `start_offset_us` integer, nullable
        - `duration_us` integer, nullable
        - `source` string
        - `resolution_us` integer, nullable
        - `state` 'measured' | 'derived' | 'below_resolution' | 'event' | 'not_run' | 'unknown'
        - `raw_duration_ms` integer, nullable
      - `charge` StepCharge
        - `state` 'billed' | 'no_ai_charge' | 'included' | 'non_billed' | 'not_applicable' | 'unknown'
        - `amount_usd` string, nullable
        - `included_in_id` string, nullable
        - `billable_record_ids` string[]
        - `scope` string
      - `model_run_id` string, nullable
      - `tool_call_id` string, nullable
      - `span_id` string, required
      - `parent_span_id` string, nullable, required
      - `trace_id` string, required
      - `category` string, required
      - `operation` string, required
      - `label` string, required
      - `duration_ms` integer, required
      - `percent_of_parent` number, nullable, required
      - `cost_usd` number, nullable, required
      - `status` string, required
      - `relationship` string, required
      - `evidence` string, required
      - `started_at` string, date-time, nullable, required
      - `ended_at` string, date-time, nullable, required
      - `coverage` TraceCoverage, required
        - `parent_duration_ms` integer, required
        - `covered_ms` integer, required
        - `coverage_pct` number, required
        - `unattributed_ms` integer, required
        - `overlap_ms` integer, required
        - `async_ms` integer, required
        - `completeness` string, required
        - `parent_duration_us` integer, nullable
        - `covered_us` integer, nullable
        - `unattributed_us` integer, nullable
        - `overlap_us` integer, nullable
        - `clock_quality` string
        - `measured_coverage_complete` boolean
      - `attributes` object
      - `children` TraceNode[]
    - `recorded_span_count` integer
  - `decision_path` DecisionPathStep[], required
    - `key` string, required
    - `status` string, required
    - `status_label` string, required
    - `status_tone` string, required
    - `title` string, required
    - `detail` string, nullable, required
    - `count` integer, nullable, required
  - `context_items` ContextItem[], required
    - `kind` string, required
    - `title` string, required
    - `detail` string, nullable, required
    - `status_label` string, required
    - `status_tone` string, required
    - `mind_repair_evaluation_id` string, nullable
    - `mind_repair_proposition_id` string, nullable
    - `mind_context_owner_identity_id` string, nullable
  - `mind_path` MindPathStage[], required
    - `key` string, required
    - `label` string, required
    - `detail` string, required
  - `grounding_boundaries` GroundingBoundary[], required
    - `raw` string, required
    - `label` string, required
    - `kind` string, required
  - `gap_cards` GapCard[], required
    - `title` string, required
    - `body` string, required
  - `limits_card` GapCard, required
    - `title` string, required
    - `body` string, required

## Other responses

- `422`: Validation Error

---

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