ottto

Data Dictionary

Metrics catalog version 2026-07-21.cloud-sessions-observability. Public fields use Local enriched, Live telemetry, Integration connectors, Cloud billing connectors, and Calculated by Ottto labels.

Public viewData sourcesSign in

Data Dictionary filters

Source
Stability
Visibility

306 metrics

306 total catalog entries

Metrics catalog entries with source labels, units, and visibility.
MetricDefinitionSourceUnitVisibility

session.row_id

aliases: session.uuid

SessionSummaryResponse.id

Ottto database UUID for fetching session detail.

always

Calculated by Ottto
UUIDPublic

stable

session.id

aliases: session.external_id, session.session_id

SessionSummaryResponse.session_id

External telemetry session identifier.

always after a session row is projected

Local enrichedLocal enrichedLive telemetry
stringPublic

stable

session.display_name

SessionSummaryResponse.session_display_name

Display-safe session title shown in list and detail views.

always

provenance: session_display_name_source

granularity: row

Local enrichedLive telemetryCalculated by Ottto
stringPublic

stable

session.display_name_source

SessionSummaryResponse.session_display_name_source

Provenance label for the display-safe session title.

always; defaults to a safe fallback label

Local enrichedLive telemetryCalculated by Ottto
enumPublic

stable

session.first_seen

SessionSummaryResponse.first_seen

Earliest known session timestamp.

nullable until a source supplies timing evidence

provenance: usage_origin

granularity: row

Local enrichedLocal enrichedLive telemetry
RFC3339 timestampPublic

stable

session.last_seen

SessionSummaryResponse.last_seen

Latest known session activity timestamp.

nullable until a source supplies timing evidence

provenance: timeline_origin

granularity: row

Local enrichedLocal enrichedLive telemetry
RFC3339 timestampPublic

stable

session.tokens.total

aliases: session.total_tokens

SessionSummaryResponse.total_tokens

Total billable token count excluding reasoning to avoid double counting.

always

Calculated by Ottto
tokensPublic

stable

session.tokens.unattributed_total

SessionSummaryResponse.total_unattributed_tokens

Total-only local token evidence that cannot be safely split into input/output/cache dimensions.

0 when no total-only local evidence exists

provenance: usage_origin

granularity: field

Local enrichedLocal enriched
tokensPublic

stable

session.tokens.input

SessionSummaryResponse.total_input_tokens

Input tokens for the session.

always

provenance: usage_origin

granularity: field

Local enrichedLocal enrichedLive telemetry
tokensPublic

stable

session.tokens.output

SessionSummaryResponse.total_output_tokens

Output tokens for the session.

always

provenance: usage_origin

granularity: field

Local enrichedLocal enrichedLive telemetry
tokensPublic

stable

session.tokens.cache_read

SessionSummaryResponse.total_cache_read_tokens

Cached input tokens read during the session.

always

provenance: usage_origin

granularity: field

Local enrichedLocal enrichedLive telemetry
tokensPublic

stable

session.tokens.cache_creation

aliases: session.tokens.cache_write

SessionSummaryResponse.total_cache_creation_tokens

Cached input tokens written during the session.

always

provenance: usage_origin

granularity: field

Local enrichedLocal enrichedLive telemetry
tokensPublic

stable

session.tokens.cache_creation_5m

SessionSummaryResponse.total_cache_creation_5m_tokens

Cached input tokens written to the five-minute prompt-cache tier.

always

provenance: usage_origin

granularity: field

Local enrichedLocal enrichedLive telemetry
tokensPublic

stable

session.tokens.cache_creation_1h

SessionSummaryResponse.total_cache_creation_1h_tokens

Cached input tokens written to the one-hour prompt-cache tier.

always

provenance: usage_origin

granularity: field

Local enrichedLocal enrichedLive telemetry
tokensPublic

stable

session.cache.health

SessionDetailResponse.cache_health

Prompt-cache explanation for the session: hit rate, reuse ratio, and the token-weighted hit/miss split, derived from the canonical cache-metrics helper over the session's normalised token totals.

inner ratios are null when the session has no prompt or cache activity

Calculated by Ottto
objectPublic

stable

session.cache.health.hit_rate

SessionCacheHealthResponse.cache_hit_rate

Share of all prompt-side tokens served from cache: cache_read / (input + cache_read + cache_creation).

null when the session has no prompt tokens

Calculated by Ottto
ratioPublic

stable

session.cache.health.reuse_ratio

SessionCacheHealthResponse.cache_reuse_ratio

How well the cache you paid to write is reused: cache_read / (cache_read + cache_creation).

null when the session has no cache activity at all

Calculated by Ottto
ratioPublic

stable

session.cache.health.hit_token_count

SessionCacheHealthResponse.cache_hit_token_count

Token-weighted cache hits for the session (cache_read tokens).

0 when no cache reads occurred

Calculated by Ottto
tokensPublic

stable

session.cache.health.miss_token_count

SessionCacheHealthResponse.cache_miss_token_count

Token-weighted cache misses for the session: fresh input plus cache writes (prompt-side tokens not served from cache).

0 when there is no prompt-side activity

Calculated by Ottto
tokensPublic

stable

session.context.fill

SessionDetailResponse.context_fill

Reconstructed per-session "% of context window used" (CC-insights A-probe): the most recent prompt-bearing turn's prompt-side tokens (input + cache_read + cache_creation) divided by the model's working context window. The window is family-accurate so the figure is correct cross-agent: 200K Claude-class, 272K GPT-5/Codex, 128K GPT-4-class, 1M Gemini, 300K Amazon Nova Pro/Lite (128K Micro). A Claude turn whose prompt is far past 200K (>300K) is scored against the 1M-context beta window (it can only be the beta) rather than clamped to a false 100%; a 200K-300K overflow keeps its CRITICAL band. Reproduces Claude Code's context-fill indicator from the local JSONL/snapshot path; the figure is flagged as a reconstruction, not Claude Code's own get_context_usage measurement.

null when the session has no prompt-bearing turn or the model's working window cannot be resolved

Calculated by Ottto
objectPublic

stable

session.context.fill.reconciliation

SessionDetailResponse.context_fill_reconciliation

Reconciliation of the A-probe reconstruction (session.context.fill) against Claude Code's OWN captured /context measurement for this session's machine (CC-insights A-live): CC's authoritative working window + percentage, a window-agreement flag (whether the A-probe used CC's real window), a window-corrected probe percentage, and the residual delta. Sourced from the latest context_live_snapshots capture for the machine; only Claude-class sessions are eligible.

null for non-Claude sessions or when no Claude Code /context capture exists for the session's machine

Local enrichedCalculated by Ottto
objectPublic

stable

session.context.footprint

SessionDetailResponse.context_footprint

Session-scoped Claude Code static context footprint from the GOLD context-footprint read model, enriched with scoped usage evidence when attribution facts exist.

null when the session lacks machine/workspace evidence or no matching context-footprint snapshot exists

Local enrichedLive telemetryCalculated by Ottto
objectPublic

stable

session.context.posture

SessionDetailResponse.context_posture

Content-free local context high-water evidence: first and peak prompt tokens, resolved window and peak percentage, compaction event count, and source activity/collection timestamps. Current prompt tokens stay null until the collector captures a true current watermark.

null when the session has no keyed local context-posture GOLD evidence

Local enrichedCalculated by Ottto
objectPublic

stable

session.long_running

SessionDetailResponse.long_running

Long-running-session advisory (CC-insights P3 contributing factor): set when the session has WORKED for 8h+ (active_seconds, the decoded Claude Code long-session threshold; wall-clock elapsed span is the fallback for historical sessions with no active signal). A session this long carries its whole history forward, inflating per-turn context and cost. Advisory only — it never changes a token or dollar figure.

null unless the session crossed the 8h-active threshold

Calculated by Ottto
objectPublic

stable

session.tokens.reasoning_output

aliases: session.tokens.reasoning

SessionSummaryResponse.total_reasoning_output_tokens

Reasoning output tokens, a subset of output tokens.

0 when the source does not report reasoning tokens

provenance: usage_origin

granularity: field

Local enrichedLocal enriched
tokensPublic

stable

session.cost.usd

aliases: session.cost.total_usd

SessionSummaryResponse.cost_usd

Total session cost in USD.

always; may be 0 when pricing is unresolved

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.cost.input_usd

SessionSummaryResponse.total_input_cost_usd

Input-token cost for the session.

nullable when dimension pricing is unresolved

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.cost.output_usd

SessionSummaryResponse.total_output_cost_usd

Output-token cost for the session.

nullable when dimension pricing is unresolved

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.cost.cache_read_usd

SessionSummaryResponse.total_cache_read_cost_usd

Cache-read token cost for the session.

nullable when dimension pricing is unresolved

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.cost.cache_creation_usd

aliases: session.cost.cache_write_usd

SessionSummaryResponse.total_cache_creation_cost_usd

Cache-creation token cost for the session.

nullable when dimension pricing is unresolved

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.cost.cache_creation_5m_usd

SessionSummaryResponse.total_cache_creation_5m_cost_usd

Five-minute prompt-cache creation cost for the session.

nullable when dimension pricing is unresolved

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.cost.cache_creation_1h_usd

SessionSummaryResponse.total_cache_creation_1h_cost_usd

One-hour prompt-cache creation cost for the session.

nullable when dimension pricing is unresolved

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.cost.kind

SessionSummaryResponse.cost_kind

Whether the displayed cost is actual or estimated.

always

provenance: cost_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
enumPublic

stable

session.cost.source_kind

SessionSummaryResponse.cost_source_kind

Internal cost provenance value for the session.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
enumPublic

stable

session.cost.source_label

SessionSummaryResponse.cost_source_label

Human-readable cost source label.

always, using a safe default when unresolved

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
stringPublic

stable

session.cost.projection_status

SessionSummaryResponse.cost_projection_status

Pricing projection state for the session cost.

always

provenance: cost_source_kind

granularity: row

Calculated by OtttoUnresolved
enumPublic

stable

session.cost.materialized_at

SessionSummaryResponse.cost_materialized_at

Timestamp when the selected cost projection was materialized.

nullable before the pricing projector materializes the row

Calculated by OtttoCalculated by Ottto
RFC3339 timestampPublic

stable

session.cost.is_stale

SessionSummaryResponse.is_stale

Whether the cost was projected from a stale pricing catalog snapshot.

always

Calculated by OtttoCalculated by Ottto
boolPublic

stable

session.cost.pricing_provenance

SessionSummaryResponse.pricing_provenance

Sanitized pricing audit snapshot for the selected session cost.

nullable when no pricing projection has been built

provenance: cost_source_kind

granularity: row

Calculated by OtttoCalculated by OtttoUnresolved
objectPublic

stable

session.request_count

SessionSummaryResponse.request_count

Model turns: model interactions recorded from the agent's local transcripts. Sessions tracked only through live telemetry count telemetry records instead; count_basis names the unit.

always

provenance: count_basis

granularity: row

Local enrichedLocal enrichedLive telemetry
countPublic

stable

session.count_basis

SessionSummaryResponse.count_basis

Which unit the session's activity count uses: local_model_turn (model interactions recorded from local transcripts), telemetry_usage_record (live telemetry usage records), or provider_request (provider-reported requests).

always

Calculated by Ottto
stringPublic

stable

session.primary_model

SessionSummaryResponse.primary_model

Model key with the largest token share in the session.

nullable when no model attribution exists

Calculated by Ottto
stringPublic

stable

session.primary_model_display_name

SessionSummaryResponse.primary_model_display_name

Display name for the primary model.

nullable when no model attribution exists

Calculated by Ottto
stringPublic

stable

session.source

SessionSummaryResponse.source

Canonical AI app or telemetry source for the session.

nullable for legacy rows without source inference

Local enrichedLocal enrichedLive telemetry
enumPublic

stable

session.execution_location

SessionSummaryResponse.execution_location

Where the observed work executed: locally, in a provider cloud, by remote control, or unknown.

always

Local enrichedLocal enrichedLive telemetryProvider cloud metadataCalculated by Ottto
enumPublic

experimental

session.cloud.entity_kind

SessionSummaryResponse.cloud_entity_kind

Content-free provider cloud entity classification.

provider-cloud sessions only; nullable for local and legacy rows

Provider cloud metadata
enumPublic

experimental

session.cloud.measurement_basis

SessionSummaryResponse.cloud_measurement_basis

Explicit statement that provider cloud work is observed as metadata, not itemized usage.

provider-cloud sessions only; nullable for local and legacy rows

Provider cloud metadata
enumPublic

experimental

session.cloud.coverage_mask

SessionSummaryResponse.cloud_coverage_mask

Compact bit mask recording which supported provider-cloud metadata dimensions were observed.

provider-cloud sessions only; nullable for local and legacy rows

Provider cloud metadata
bit maskPublic

experimental

session.cloud.semantic_updated_at

SessionSummaryResponse.cloud_semantic_updated_at

Provider-reported time when the cloud entity last changed semantically.

provider-cloud sessions only; nullable for local and legacy rows

Provider cloud metadata
RFC3339 timestampPublic

experimental

session.cloud.lifecycle_status

SessionSummaryResponse.cloud_lifecycle_status

Normalized lifecycle state for an observed provider-cloud task or session.

provider-cloud sessions only; nullable for local and legacy rows

Provider cloud metadata
enumPublic

experimental

session.cloud.attempt_count

SessionSummaryResponse.cloud_attempt_count

Observed provider-cloud attempt count when that provider exposes it.

provider-cloud sessions with attempt coverage only

Provider cloud metadata
countPublic

experimental

session.cloud.environment_kind

SessionSummaryResponse.cloud_environment_kind

Normalized execution-environment class for provider-cloud work.

provider-cloud sessions only; nullable for local and legacy rows

Provider cloud metadata
enumPublic

experimental

session.cloud.metric_availability

SessionSummaryResponse.cloud_metric_availability

Per-dimension explanation of unavailable or intentionally non-itemized cloud metrics.

provider-cloud sessions only; nullable for local and legacy rows

Provider cloud metadataCalculated by Ottto
objectPublic

experimental

session.machine_applicable

SessionSummaryResponse.machine_applicable

Whether machine attribution is meaningful for this session's execution location.

always

Local enrichedLocal enrichedLive telemetryProvider cloud metadataCalculated by Ottto
boolPublic

experimental

session.originator

SessionSummaryResponse.originator

Raw session-surface label from the source session_meta (Codex originator), e.g. codex_work_desktop for the unified ChatGPT desktop app's local Work sessions or codex_cli_rs for the CLI. Persisted raw; the source stays codex.

nullable; only present when the collector forwarded a session originator

Local enriched
stringPublic

stable

session.sub_surface

SessionSummaryResponse.sub_surface

Derived display sub-surface refining session.source: chatgpt_work for the unified ChatGPT desktop app's local Work sessions (originator codex_work_desktop), else null. Deliberately conservative; the source stays codex.

nullable; only chatgpt_work is derived today

Local enrichedCalculated by Ottto
enumPublic

stable

session.initiator

SessionSummaryResponse.initiator

Session-level human-vs-AI origin classification derived from raw local/live origin signals.

always; defaults to unknown when origin evidence is absent

Local enrichedLive telemetryCalculated by Ottto
enumPublic

stable

session.initiator_label

SessionSummaryResponse.initiator_label

Display label for the session-level human-vs-AI origin classification.

always; defaults to Unknown when origin evidence is absent

Local enrichedLive telemetryCalculated by Ottto
stringPublic

stable

session.automation_attribution

SessionSummaryResponse.session_attribution

Positive-only automation origin and neutral workflow facts, each with field-level evidence.

always; empty when no attribution evidence is known

granularity: element

Local enrichedLive telemetryCalculated by Ottto
objectPublic

stable

session.used_workflow_orchestration

SessionSummaryResponse.used_workflow_orchestration

Whether the session ran dynamic workflow orchestration (the Workflow tool, e.g. ultracode); detected from the local wf_*.json footprint and/or a tool_name == Workflow turn. Invisible in token usage (ultracode collapses to xhigh effort).

always; defaults to false when no orchestration evidence exists

Local enrichedLive telemetry
boolPublic

stable

session.agent_identity

SessionSummaryResponse.agent_identity

Where this session sits in a spawned-agent family: its direct parent, its root (the top-level human session), the Claude Code agent type/id, its nesting depth, and the owning Workflow run. Present only for sessions the collector re-keyed off their own subagent transcript.

null unless the session is itself a spawned subagent

Local enrichedCalculated by Ottto
objectPublic

stable

session.family_status

SessionSummaryResponse.family_status

Whether the spawned-agent family numbers on this response can be trusted: available (exact), partial (the family exceeded the per-request member cap), or unavailable (the family read failed, so the family fields are null rather than zero - 'spawned nothing' and 'could not find out' are different answers).

always

Calculated by Ottto
stringPublic

stable

session.subagent_count

SessionSummaryResponse.subagent_count

Number of spawned-agent descendants of this session, at every nesting depth. 0 when the session spawned nothing.

null when family_status is unavailable

Calculated by Ottto
countPublic

stable

session.family.tokens

SessionSummaryResponse.family_total_tokens

Total tokens for this session AND all of its spawned-agent descendants. The session's own total_tokens NEVER includes descendants, so family = own + children, counted exactly once at any depth. Equals the session's own total when it spawned nothing.

null when family_status is unavailable

Calculated by Ottto
tokensPublic

stable

session.family.requests

SessionSummaryResponse.family_request_count

Model turns for this session and all of its spawned agents, under the same no-double-counting rule as session.family.tokens.

null when family_status is unavailable

Calculated by Ottto
countPublic

stable

session.family.cost_usd

SessionSummaryResponse.family_cost_usd

Selected cost for this session and all of its spawned-agent descendants, under the same no-double-counting rule as session.family.tokens.

null when family_status is unavailable

Calculated by Ottto
usdPublic

stable

session.subagents

SessionDetailResponse.subagents

The spawned-agent family hanging off this session: descendant-only totals, the family rollup (own + descendants), and the child list with enough per agent to render a row and deep-link to it.

null when the session spawned no agents

granularity: element

Calculated by Ottto
objectPublic

stable

session.parent

SessionDetailResponse.parent

Backlink from a subagent session to the session that spawned it, plus the root of the whole family.

null unless the session is itself a spawned subagent

Local enrichedCalculated by Ottto
objectPublic

stable

session.machine_id

SessionSummaryResponse.machine_id

Best-known computer identifier for the session.

nullable when no machine evidence exists

Local enrichedSource plan profileLive telemetry
stringPublic

stable

session.machine_name

SessionSummaryResponse.machine_name

Display-safe computer name for the session.

nullable when no display-safe machine name exists

Local enrichedSource plan profileLive telemetryCalculated by Ottto
stringPublic

stable

session.machine_icon_id

SessionSummaryResponse.machine_icon_id

Selected icon identifier for the session computer.

nullable when no icon is configured

Source plan profileCalculated by Ottto
stringPublic

stable

session.machine_icon_url

SessionSummaryResponse.machine_icon_url

Renderable icon URL for the session computer.

nullable when no icon is configured

Source plan profileCalculated by Ottto
URLPublic

stable

session.machine_icon_version

SessionSummaryResponse.machine_icon_version

Version counter for the session computer icon.

always

Source plan profileCalculated by Ottto
countPublic

stable

session.project_label

SessionSummaryResponse.project_label

Display-safe workspace/project label.

nullable when workspace evidence is absent or unsafe

provenance: project_label_source

granularity: row

Local enrichedLive telemetryCalculated by Ottto
stringPublic

stable

session.project_label_source

SessionSummaryResponse.project_label_source

Source marker for the display-safe project label.

always

Local enrichedLive telemetryCalculated by Ottto
enumPublic

stable

session.repository_hash

SessionSummaryResponse.repository_hash

Organization-scoped opaque repository identity for grouping sessions.

nullable when no repository can be resolved locally

Local enriched
opaque identifierPublic

stable

session.repository_label

SessionSummaryResponse.repository_label

Display-safe repository name derived locally without a path or remote URL.

nullable when no safe repository label can be resolved

provenance: repository_label_source

granularity: row

Local enriched
stringPublic

stable

session.repository_label_source

SessionSummaryResponse.repository_label_source

Local derivation source for the display-safe repository label.

nullable when repository_label is absent

Local enriched
enumPublic

stable

session.repository_identity_source

SessionSummaryResponse.repository_identity_source

Local derivation source for the opaque repository identity.

nullable when repository_hash is absent

Local enriched
enumPublic

stable

session.workspace_kind

SessionSummaryResponse.workspace_kind

Local workspace relationship to the repository, such as root or worktree.

nullable when no repository workspace can be resolved

Local enriched
enumPublic

stable

session.branch_label

SessionSummaryResponse.branch_label

Display-safe branch label for the session workspace.

nullable when branch evidence is absent or unsafe

Local enrichedLive telemetryCalculated by Ottto
stringPublic

stable

session.worktree_label

SessionSummaryResponse.worktree_label

Display-safe worktree label for the session workspace.

nullable when worktree evidence is absent or unsafe

Local enrichedCalculated by Ottto
stringPublic

stable

session.lifecycle_status

SessionSummaryResponse.lifecycle_status

Lifecycle state inferred for the session.

always

Local enrichedLocal enrichedLive telemetry
enumPublic

stable

session.source_plan_profile_id

SessionSummaryResponse.source_plan_profile_id

Durable source-plan attribution profile id.

nullable when attribution is unknown

Source plan profileLive telemetryLocal enriched
UUIDPublic

stable

session.source_plan

SessionSummaryResponse.source_plan

Display-safe source-plan summary for subscription/billing attribution.

nullable when no profile is attributed

Source plan profile
objectPublic

stable

session.pricing_status

SessionSummaryResponse.pricing_status

Fine-grained pricing coverage status for the row.

always

provenance: cost_source_kind

granularity: row

Calculated by OtttoUnresolved
enumPublic

stable

session.usage_mode

SessionSummaryResponse.usage_mode

Usage mode selected from source-plan and telemetry attribution.

always

Source plan profileLive telemetryLocal enrichedCalculated by Ottto
enumPublic

stable

session.runtime_defaults

SessionDetailResponse.runtime_defaults

Display-safe runtime defaults captured for the session when local status evidence exists.

nullable when no runtime-default evidence was captured for the session

Local enrichedLocal enrichedCalculated by Ottto
objectPublic

stable

session.attribution

SessionSummaryResponse.attribution

Display-safe billing/model attribution snapshot.

nullable when no attribution evidence exists

Source plan profileLive telemetryLocal enrichedCalculated by Ottto
objectPublic

stable

session.usage_origin

SessionSummaryResponse.usage_origin

Source path that currently owns the session usage totals.

always

provenance: usage_origin

granularity: row

Local enrichedLocal enrichedLive telemetry
enumPublic

stable

session.timeline_origin

SessionSummaryResponse.timeline_origin

Source path that currently owns session timing.

always

provenance: timeline_origin

granularity: row

Local enrichedLive telemetry
enumPublic

stable

session.reconciled_at

SessionSummaryResponse.reconciled_at

Timestamp of the latest local/live reconciliation pass.

nullable until reconciliation runs

Calculated by OtttoReconciledDrift
RFC3339 timestampPublic

stable

session.reconciliation_status

SessionSummaryResponse.reconciliation_status

Status comparing Local enriched and Live telemetry evidence.

always

provenance: reconciliation_status

granularity: row

ReconciledDriftLive telemetry onlyLocal enriched only
enumPublic

stable

session.cost_facts_truncated

SessionDetailResponse.cost_facts_truncated

Whether this session's usage_cost_facts rows were truncated at the per-session fact cap (25,000 OTLP turns). True means the FACT-BACKED numbers (cost breakdown, cost rollups, fact-derived model rollups) cover only the session's first N turns; the session's own totals come from the uncapped session projection and stay complete, so the two disagree by design.

always; defaults to false and is true only past the fact cap

Calculated by Ottto
boolPublic

stable

session.error_count

SessionDetailResponse.error_count

Count of errors associated with the session detail.

always

Live telemetryCalculated by Ottto
countPublic

stable

session.elapsed_seconds

SessionDetailResponse.first_seen + SessionDetailResponse.last_seen

Elapsed wall-clock seconds for a session: last_seen minus first_seen. This is the headline Duration stat on session detail and spans the whole observed run, including idle gaps between bursts of telemetry.

nullable until both session bounds are known

Local enrichedLocal enrichedLive telemetryCalculated by Ottto
secondsPublic

stable

session.active_seconds

SessionDetailResponse.total_active_seconds

Active wall-clock seconds for a session: total time spent on requests with each idle gap capped at 5 minutes. The session header's Duration stat shows the full wall-clock span (last_seen minus first_seen) on top and pairs it with this active-only figure beneath, so a long-running session with idle stretches reads as both a long wall time and a shorter active time.

0 when no activity records exist

Live telemetryCalculated by Ottto
secondsPublic

stable

session.model_breakdown[*]

SessionDetailResponse.model_breakdown

Per-model usage and cost rows for a session.

always

provenance: dimension_cost_source

granularity: row

Local enrichedLocal enrichedLive telemetryCalculated by Ottto
arrayPublic

stable

session.tool_summaries[*]

SessionDetailResponse.tool_summaries

Redaction-safe per-tool session summaries with per-element source tags.

empty when neither path has tool evidence

granularity: element

Live telemetry
arrayPublic

stable

session.mcp_server_summaries[*]

SessionDetailResponse.mcp_server_summaries

Redaction-safe per-MCP-server call rollup (tool calls grouped by server).

empty when the session invoked no MCP tools

granularity: element

Live telemetry
arrayPublic

stable

session.capability_summaries[*]

SessionDetailResponse.capability_summaries

Privacy-safe positive Chrome, browser, and Computer Use calls classified locally from the session record.

empty until a compatible collector positively observes a supported capability

granularity: element

Local enriched
arrayPublic

stable

session.activity.summary

SessionDetailResponse.activity_summary

Content-free local activity evidence for tool, shell, patch, file, line-change, web, MCP, and subagent-spawn counts, with bounded tool, MCP-tool, and consent-gated skill labels.

null until a compatible collector uploads a keyed activity summary

Local enriched
objectPublic

stable

session.file_summaries[*]

SessionDetailResponse.file_summaries

Redaction-safe file/workspace evidence summaries with per-element source tags.

empty when neither path has file evidence

granularity: element

Local enriched
arrayPublic

stable

session.conversation_turns[*]

SessionDetailResponse.conversation_turns

Redaction-safe conversation turn summaries with per-element source tags.

empty when turn evidence is unavailable

granularity: element

Live telemetry
arrayPublic

stable

session.conversation_turn_count

SessionDetailResponse.conversation_turn_count

Total number of token-bearing telemetry records for the session. Lets the UI render an honest 'N of M turns' header when conversation_turns is capped and evenly sampled.

always

Live telemetry
countPublic

stable

session.workflow_markers[*]

SessionDetailResponse.workflow_markers

Display-safe workflow behavior markers derived from telemetry metadata.

empty when no known workflow marker is detected

granularity: element

Local enrichedLive telemetryCalculated by Ottto
arrayPublic

stable

session.tool_summaries[*].source_path

SessionToolSummaryResponse.source_path

Source path attached to each redaction-safe tool summary element.

always

granularity: element

Live telemetry
enumPublic

stable

session.file_summaries[*].source_path

SessionFileSummaryResponse.source_path

Source path attached to each redaction-safe file summary element.

always

granularity: element

Local enriched
enumPublic

stable

session.conversation_turns[*].source_path

SessionConversationTurnSummaryResponse.source_path

Source path attached to each redaction-safe turn summary element.

always

granularity: element

Live telemetry
enumPublic

stable

session.artifacts

SessionDetailResponse.session_artifacts

VCS artifacts (PR / issue / commit) a session produced; opt-in, local-derived.

always

Local enrichedCalculated by Ottto
objectPublic

stable

session.model_breakdown[*].input_cost_usd

SessionModelBreakdownResponse.input_cost_usd

Per-model input-token cost.

nullable when dimension pricing is unresolved

provenance: dimension_cost_source

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.model_breakdown[*].output_cost_usd

SessionModelBreakdownResponse.output_cost_usd

Per-model output-token cost.

nullable when dimension pricing is unresolved

provenance: dimension_cost_source

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.model_breakdown[*].cache_read_cost_usd

SessionModelBreakdownResponse.cache_read_cost_usd

Per-model cache-read token cost.

nullable when dimension pricing is unresolved

provenance: dimension_cost_source

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.model_breakdown[*].cache_creation_cost_usd

SessionModelBreakdownResponse.cache_creation_cost_usd

Per-model cache-creation token cost.

nullable when dimension pricing is unresolved

provenance: dimension_cost_source

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

session.model_breakdown[*].cache_efficiency_ratio

SessionModelBreakdownResponse.cache_efficiency_ratio

Per-model cache reuse ratio: cache_read / (cache_read + cache_creation) over this model's normalised counts, from the canonical cache-metrics helper. 1.0 for read-only (cache_creation == 0) rows.

null when the model row has no cache activity at all

granularity: element

Calculated by Ottto
ratioPublic

stable

session.records[*]

SessionRecordsResponse.records

Live telemetry record rows for a session.

empty when Live telemetry is disabled or has no records

Live telemetry
arrayPublic

stable

session.records[*].id

TelemetryRecordResponse.id

Database id for a live telemetry record.

always

Live telemetry
integerPublic

stable

session.records[*].received_at

TelemetryRecordResponse.received_at

Server receive timestamp for a live telemetry record.

always

Live telemetry
RFC3339 timestampPublic

stable

session.records[*].telemetry_type

TelemetryRecordResponse.telemetry_type

OpenTelemetry signal type for a live telemetry record.

always

Live telemetry
enumPublic

stable

session.records[*].raw_record_material_exposed

TelemetryRecordResponse.raw_record_material_exposed

Invariant proving session record rows omit raw resource and payload material.

always

Calculated by Ottto
boolPublic

stable

session.records[*].model

TelemetryRecordResponse.model

Model identifier attached to a live telemetry record.

nullable when the record does not carry model attribution

Live telemetry
stringPublic

stable

session.records[*].tokens.input

aliases: session.records[*].usage.input_tokens

TelemetryRecordResponse.input_tokens

Input tokens attached to a live telemetry record.

always

Live telemetry
tokensPublic

stable

session.records[*].tokens.output

aliases: session.records[*].usage.output_tokens

TelemetryRecordResponse.output_tokens

Output tokens attached to a live telemetry record.

always

Live telemetry
tokensPublic

stable

session.records[*].tokens.cache_read

aliases: session.records[*].usage.cache_read_tokens

TelemetryRecordResponse.cache_read_tokens

Cache-read tokens attached to a live telemetry record.

always

Live telemetry
tokensPublic

stable

session.records[*].tokens.cache_creation

aliases: session.records[*].usage.cache_creation_tokens

TelemetryRecordResponse.cache_creation_tokens

Cache-creation tokens attached to a live telemetry record.

always

Live telemetry
tokensPublic

stable

session.records[*].reasoning_effort

TelemetryRecordResponse.reasoning_effort

Actual reasoning effort the Codex turn ran at, distinct from the configured default.

nullable; Codex turns that emit a per-turn reasoning signal

Live telemetry
enumPublic

stable

session.records[*].duration_ms

TelemetryRecordResponse.duration_ms

Wall-clock duration of one model request (a single turn) for agents that report per-turn latency over OTLP — Claude Code and Pi. Session detail averages this across the loaded turns as the 'Response time' stat and surfaces the slowest turn (max) alongside it; time to first token is the responsiveness portion.

nullable; agents that emit per-turn latency over OTLP (Claude Code, Pi)

Live telemetry
millisecondsPublic

stable

session.records[*].time_to_first_token_ms

TelemetryRecordResponse.time_to_first_token_ms

Latency to the first output token for the Codex turn attached to a live telemetry record.

nullable; Codex turns that emit per-turn latency

Live telemetry
millisecondsPublic

stable

session.session_avg_duration_ms

SessionDetailResponse.session_avg_duration_ms

Average wall-clock duration of a Codex agentic turn across the session — a rollout `task_complete` task, i.e. model time plus tool execution and idle, so long-running turns can span minutes. The local collector aggregates it per session because Codex never emits per-turn latency over OTLP. Shown in session detail as the 'Turn duration' stat; the average smooths over the longest turn, and time to first token is the model's responsiveness.

nullable; Codex sessions with completed turns

Local enriched
millisecondsPublic

stable

session.session_avg_time_to_first_token_ms

SessionDetailResponse.session_avg_time_to_first_token_ms

Average latency to the first output token across the session's turns, aggregated by the local collector from the Codex rollout (never emitted over OTLP).

nullable; Codex sessions with completed turns

Local enriched
millisecondsPublic

stable

session.session_max_duration_ms

SessionDetailResponse.session_max_duration_ms

Duration of the slowest single Codex agentic turn in the session (the max the average smooths over), aggregated by the local collector from the rollout. Surfaced next to the 'Turn duration' average as the tail signal.

nullable; Codex sessions with completed turns

Local enriched
millisecondsPublic

stable

session.session_max_time_to_first_token_ms

SessionDetailResponse.session_max_time_to_first_token_ms

Slowest time to the first output token across the session's Codex turns, aggregated by the local collector from the rollout (never emitted over OTLP).

nullable; Codex sessions with completed turns

Local enriched
millisecondsPublic

stable

cost.period_start

CostBreakdownResponse.period_start

Inclusive start date for a cost breakdown window.

always

Calculated by Ottto
datePublic

stable

cost.period_end

CostBreakdownResponse.period_end

Inclusive end date for a cost breakdown window.

always

Calculated by Ottto
datePublic

stable

cost.range_preset

CostBreakdownResponse.range_preset

Calendar preset used for a cost breakdown window.

nullable for custom or rolling day windows

Calculated by Ottto
enumPublic

stable

cost.bucket_granularity

CostBreakdownResponse.bucket_granularity

Bucket granularity used for cost trend arrays.

always

Calculated by Ottto
enumPublic

stable

cost.data_basis

CostBreakdownResponse.data_basis

Data projection basis used for the cost breakdown.

always

Calculated by Ottto
stringPublic

stable

cost.date_basis

CostBreakdownResponse.date_basis

Session date field used to assign records to the requested cost window.

always

Calculated by OtttoCalculated by Ottto
stringPublic

stable

cost.cost_basis

CostBreakdownResponse.cost_basis

Cost field selected for cost totals and grouped breakdowns.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
stringPublic

stable

cost.source_filter_applied

CostBreakdownResponse.source_filter_applied

Whether the cost breakdown was filtered to one or more AI app sources.

always

Calculated by OtttoCalculated by Ottto
boolPublic

stable

cost.machine_filter_applied

CostBreakdownResponse.machine_filter_applied

Whether the cost breakdown was filtered to one or more machines.

always

Calculated by OtttoCalculated by Ottto
boolPublic

stable

cost.source_plan_filter_applied

CostBreakdownResponse.source_plan_filter_applied

Whether the cost breakdown was filtered to one or more source-plan profiles.

always

Calculated by OtttoSource plan profileCalculated by Ottto
boolPublic

stable

cost.selector_filter_applied

CostBreakdownResponse.selector_filter_applied

Whether the cost breakdown was filtered by selector dimension values.

always

Calculated by OtttoCalculated by Ottto
boolPublic

stable

cost.model_filter_applied

CostBreakdownResponse.model_filter_applied

Whether the cost breakdown was filtered to one or more models.

always

Calculated by OtttoCalculated by Ottto
boolPublic

stable

cost.cloud

CostBreakdownResponse.cloud

Organization-scope cloud provider billing composed into this window. Present only with include_cloud=true and the integrations.org_scope.read permission; absent from the payload otherwise, so an un-opted-in response is unchanged. Its own gross/credits/net, per-day and per-model rows, tokens, precedence overlap and freshness live inside the block; combined local+cloud figures appear ONLY under cloud.composed and never mutate a session-grain total on this response.

always

Integration connectorCalculated by Ottto
objectPublic

stable

cost.diagnostics

CostBreakdownResponse.diagnostics

Display-safe diagnostics for the requested cost breakdown.

always

Calculated by Ottto
objectPublic

stable

cost.total_usd

aliases: cost.total

CostBreakdownResponse.total_cost_usd

Total cost over the requested window.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

cost.total_session_count

CostBreakdownResponse.total_session_count

Exact distinct session count for the complete response window; clients must not sum by_source[*].session_count.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
countPublic

stable

cost.kind

CostBreakdownResponse.cost_kind

Whether the cost breakdown is actual or estimated.

always

provenance: cost_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
enumPublic

stable

cost.source_kind

CostBreakdownResponse.cost_source_kind

Internal cost provenance value for the breakdown.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
enumPublic

stable

cost.source_label

CostBreakdownResponse.cost_source_label

Human-readable cost source label for the breakdown.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
stringPublic

stable

cost.projection_status

CostBreakdownResponse.cost_projection_status

Pricing projection state for the cost breakdown.

always

provenance: cost_source_kind

granularity: row

Calculated by OtttoUnresolved
enumPublic

stable

cost.is_stale

CostBreakdownResponse.is_stale

Whether the cost breakdown was projected from stale pricing data.

always

Calculated by OtttoCalculated by Ottto
boolPublic

stable

cost.stale_reason

CostBreakdownResponse.stale_reason

Why the cost totals carry a freshness qualifier: an in-flight local-data reconciliation, ordinary gold-rollup lag, or fresh.

always

Local enrichedCalculated by Ottto
enumPublic

stable

cost.reconciliation_active

CostBreakdownResponse.reconciliation_active

Whether a totals-pausing local-data reconciliation (account/machine backfill) is in flight for the cost breakdown.

always

Local enrichedCalculated by Ottto
boolPublic

stable

cost.pricing_provenance

CostBreakdownResponse.pricing_provenance

Sanitized pricing audit snapshot for the breakdown.

nullable when no pricing projection has been built

provenance: cost_source_kind

granularity: row

Calculated by OtttoCalculated by OtttoUnresolved
objectPublic

stable

cost.by_model[*]

CostBreakdownResponse.by_model

Cost and usage totals grouped by model.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_model_daily[*]

CostBreakdownResponse.by_model_daily

Cost and usage buckets grouped by model and day or hour.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_day[*]

CostBreakdownResponse.by_day

Daily cost and usage buckets for the requested window.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_source[*]

CostBreakdownResponse.by_source

Cost and usage totals grouped by AI app/source.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_selector[*]

CostBreakdownResponse.by_selector

Current, previous, and delta cost totals grouped by selector dimension.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_reasoning_effort[*]

CostBreakdownResponse.by_reasoning_effort

Cost and usage totals grouped by per-turn reasoning-effort tier, per source.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_source_daily[*]

CostBreakdownResponse.by_source_daily

Daily cost buckets grouped by AI app/source.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_source_hourly[*]

CostBreakdownResponse.by_source_hourly

Hourly cost buckets grouped by AI app/source.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

cost.by_machine[*]

CostBreakdownResponse.by_machine

Cost and usage totals grouped by computer.

always

Local enrichedSource plan profileCalculated by Ottto
arrayPublic

stable

cost.by_machine_daily[*]

CostBreakdownResponse.by_machine_daily

Daily cost buckets grouped by computer.

always

Local enrichedSource plan profileCalculated by Ottto
arrayPublic

stable

cost.by_machine_hourly[*]

CostBreakdownResponse.by_machine_hourly

Hourly cost buckets grouped by computer.

always

Local enrichedSource plan profileCalculated by Ottto
arrayPublic

stable

cost.by_source_plan[*]

CostBreakdownResponse.by_source_plan

Cost and usage totals grouped by source-plan profile.

always

Source plan profileCalculated by Ottto
arrayPublic

stable

cost.by_source_plan_daily[*]

CostBreakdownResponse.by_source_plan_daily

Daily cost buckets grouped by source-plan profile.

always

Source plan profileCalculated by Ottto
arrayPublic

stable

cost.by_source_plan_hourly[*]

CostBreakdownResponse.by_source_plan_hourly

Hourly cost buckets grouped by source-plan profile.

always

Source plan profileCalculated by Ottto
arrayPublic

stable

cost.by_billing_identity[*]

CostBreakdownResponse.by_billing_identity

Cost and usage totals grouped by billing identity.

always

Source plan profileIntegration connectorCloud billing connectorCalculated by Ottto
arrayPublic

stable

cost.by_billing_identity_daily[*]

CostBreakdownResponse.by_billing_identity_daily

Daily cost buckets grouped by billing identity.

always

Source plan profileIntegration connectorCloud billing connectorCalculated by Ottto
arrayPublic

stable

cost.by_billing_identity_hourly[*]

CostBreakdownResponse.by_billing_identity_hourly

Hourly cost buckets grouped by billing identity.

always

Source plan profileIntegration connectorCloud billing connectorCalculated by Ottto
arrayPublic

stable

agent.context.cost.total_usd

AgentContextResponse.cost.total_cost_usd

Total cost in the bounded agent context pack for the requested scope.

always

provenance: AgentContextResponse.cost.provenance.cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

agent.context.cost.total_tokens

AgentContextResponse.cost.total_tokens

Total tokens in the bounded agent context pack for the requested scope.

always

provenance: AgentContextResponse.cost.provenance.usage_origin

granularity: row

Local enrichedLocal enrichedLive telemetryCalculated by Ottto
tokensPublic

stable

agent.context.cost.total_requests

AgentContextResponse.cost.total_requests

Model turns in the bounded agent context pack for the requested scope.

always

provenance: AgentContextResponse.cost.provenance.usage_origin

granularity: row

Local enrichedLocal enrichedLive telemetry
countPublic

stable

agent.context.cost.total_sessions

AgentContextResponse.cost.total_sessions

Session count in the bounded agent context pack for the requested scope.

always

Calculated by Ottto
countPublic

stable

agent.context.cost.provenance

AgentContextResponse.cost.provenance

Cost, freshness, and customer-facing provenance labels for the agent context cost summary.

always

provenance: AgentContextResponse.cost.provenance.cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by OtttoCalculated by Ottto
objectPublic

stable

agent.context.cost.top_models[*]

AgentContextResponse.cost.top_models

Top model cost rows included in the bounded agent context pack.

always

provenance: dimension_cost_source

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

agent.context.cost.by_source[*]

AgentContextResponse.cost.by_source

Source cost rows included in the bounded agent context pack.

always

provenance: dimension_cost_source

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

agent.context.sources[*]

AgentContextResponse.sources

Source health rows included in the bounded agent context pack.

always

Live telemetryLocal enrichedLocal enrichedCalculated by Ottto
arrayPublic

stable

agent.context.subscriptions[*]

AgentContextResponse.subscriptions

Subscription attribution rows included in the bounded agent context pack.

empty when subscription data is unavailable or cannot be safely scoped

provenance: AgentContextSubscription.provenance.cost_source_kind

granularity: row

Source plan profileLocal enrichedCalculated by OtttoCalculated by Ottto
arrayPublic

stable

agent.context.subscription_totals

AgentContextResponse.subscription_totals

Subscription monthly-vs-PAYG rollup included in the bounded agent context pack.

nullable when subscription totals cannot be safely scoped

provenance: AgentContextSubscription.provenance.cost_source_kind

granularity: row

Source plan profileCalculated by OtttoCalculated by Ottto
objectPublic

stable

dashboard.summary.period_start

SummaryResponse.period_start

Inclusive start date for a dashboard summary window.

always

Calculated by Ottto
datePublic

stable

dashboard.summary.period_end

SummaryResponse.period_end

Inclusive end date for a dashboard summary window.

always

Calculated by Ottto
datePublic

stable

dashboard.summary.days

SummaryResponse.days

Rolling day count used for the dashboard summary window.

always

Calculated by Ottto
daysPublic

stable

dashboard.summary.account_first_telemetry_at

SummaryResponse.account_first_telemetry_at

All-time earliest telemetry received_at for the user. Authoritative anchor for the new-account ramp UI (Day-N pill, pre-tracking spend clip, hour preview, activity backfill). Null when the user has never emitted telemetry.

always

Live telemetry
RFC3339 timestampPublic

stable

dashboard.summary.cloud_work

SummaryResponse.cloud_work

Opt-in provider-cloud work counts, lifecycle mix, coverage, and collector freshness for a supported window.

nullable unless explicitly requested; unavailable when rollout policy, consent, or collector health does not authorize a current view

Provider cloud metadataCalculated by Ottto
objectPublic

experimental

dashboard.summary.total_usage

SummaryResponse.total_usage

Total token usage over the dashboard summary window.

always

provenance: usage_origin

granularity: row

Local enrichedLocal enrichedLive telemetryCalculated by Ottto
TokenUsagePublic

stable

dashboard.summary.total_cost_usd

SummaryResponse.total_cost_usd

Total cost over the dashboard summary window.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
USDPublic

stable

dashboard.summary.cost.kind

SummaryResponse.cost_kind

Whether the dashboard summary cost is actual or estimated.

always

provenance: cost_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
enumPublic

stable

dashboard.summary.cost.source_kind

SummaryResponse.cost_source_kind

Internal cost provenance value for the dashboard summary.

always

provenance: cost_source_kind

granularity: row

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
enumPublic

stable

dashboard.summary.cost.source_label

SummaryResponse.cost_source_label

Human-readable cost source label for the dashboard summary.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolved
stringPublic

stable

dashboard.summary.cost.projection_status

SummaryResponse.cost_projection_status

Pricing projection state for the dashboard summary.

always

provenance: cost_source_kind

granularity: row

Calculated by OtttoUnresolved
enumPublic

stable

dashboard.summary.cost.is_stale

SummaryResponse.is_stale

Whether the dashboard summary cost was projected from stale pricing data.

always

Calculated by OtttoCalculated by Ottto
boolPublic

stable

dashboard.summary.cost.stale_reason

SummaryResponse.stale_reason

Why the dashboard summary totals carry a freshness qualifier: an in-flight local-data reconciliation, ordinary gold-rollup lag, or fresh.

always

Local enrichedCalculated by Ottto
enumPublic

stable

dashboard.summary.cost.reconciliation_active

SummaryResponse.reconciliation_active

Whether a totals-pausing local-data reconciliation (account/machine backfill) is in flight for the dashboard summary totals.

always

Local enrichedCalculated by Ottto
boolPublic

stable

dashboard.summary.cost.pricing_provenance

SummaryResponse.pricing_provenance

Sanitized pricing audit snapshot for the dashboard summary.

nullable when no pricing projection has been built

provenance: cost_source_kind

granularity: row

Calculated by OtttoCalculated by OtttoUnresolved
objectPublic

stable

dashboard.summary.total_requests

aliases: dashboard.summary.requests

SummaryResponse.total_requests

Model turns over the dashboard summary window. Sessions tracked only through live telemetry count telemetry records instead.

always

provenance: usage_origin

granularity: row

Local enrichedLocal enrichedLive telemetry
countPublic

stable

dashboard.summary.total_sessions

SummaryResponse.total_sessions

Total session count over the dashboard summary window.

always

Calculated by Ottto
countPublic

stable

dashboard.summary.by_model[*]

SummaryResponse.by_model

Dashboard summary usage and cost totals grouped by model.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

dashboard.summary.daily[*]

SummaryResponse.daily

Dashboard summary daily usage and cost buckets.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

dashboard.summary.by_source[*]

SummaryResponse.by_source

Dashboard summary usage and cost totals grouped by source.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

dashboard.summary.by_source_daily[*]

SummaryResponse.by_source_daily

Dashboard summary daily cost buckets grouped by source.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

dashboard.summary.by_source_hourly[*]

SummaryResponse.by_source_hourly

Dashboard summary hourly cost buckets grouped by source.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
arrayPublic

stable

dashboard.summary.cost_breakdown

SummaryResponse.cost_breakdown

Cost split for the dashboard summary.

always

Agent-reported actualCalculated by OtttoIntegration connectorUnresolvedCalculated by Ottto
objectPublic

stable

dashboard.summary.by_device[*]

SummaryResponse.by_device

Dashboard summary local device contribution rows.

always

Local enrichedCalculated by Ottto
arrayPublic

stable

dashboard.summary.session_breakdown[*]

SummaryResponse.session_breakdown

Dashboard summary session counts grouped by AI app and computer.

always

Local enrichedLive telemetryCalculated by Ottto
arrayPublic

stable

dashboard.summary.session_model_breakdown[*]

SummaryResponse.session_model_breakdown

Dashboard summary distinct-session counts per model; multi-model sessions count once per model they touched.

always

Local enrichedLive telemetryCalculated by Ottto
arrayPublic

stable

dashboard.summary.previous_period

SummaryResponse.previous_period

Previous equivalent dashboard summary window.

nullable unless compare_previous is requested

Calculated by OtttoCalculated by Ottto
objectPublic

stable

activity.hourly.period_start

HourlyActivityResponse.period_start

Inclusive local calendar start for the hourly activity query.

always

Calculated by Ottto
datePublic

stable

activity.hourly.period_end

HourlyActivityResponse.period_end

Inclusive local calendar end for the hourly activity query.

always

Calculated by Ottto
datePublic

stable

activity.hourly.complete_before

HourlyActivityResponse.complete_before

Exclusive UTC boundary before which hourly buckets are complete enough for recurring-period denominators.

always

Calculated by OtttoCalculated by Ottto
RFC3339 timestampPublic

stable

activity.hourly.days

HourlyActivityResponse.days

Rolling day count for the hourly activity query.

always

Calculated by Ottto
daysPublic

stable

activity.hourly.timezone

HourlyActivityResponse.timezone

IANA timezone used for local day, hour, and weekday fields.

always

Calculated by Ottto
IANA timezonePublic

stable

activity.hourly.dimension

HourlyActivityResponse.dimension

Grouping dimension requested for the hourly activity query; total deduplicates sessions across sources within each hour.

always

Calculated by Ottto
enumPublic

stable

activity.hourly.origin

HourlyActivityResponse.origin

Activity source path used for this response.

always

Local enriched
enumPublic

stable

activity.hourly.coverage_status

HourlyActivityResponse.coverage_status

Whether local activity buckets fully cover the requested period.

complete only when every eligible latest local snapshot has matching bucket totals; partial, unsupported, or empty responses must not be rendered as heatmaps

Local enrichedCalculated by Ottto
enumPublic

stable

activity.hourly.eligible_session_count

HourlyActivityResponse.eligible_session_count

Latest local snapshots considered for hourly activity coverage.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.covered_session_count

HourlyActivityResponse.covered_session_count

Eligible latest local snapshots with complete activity bucket coverage.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.missing_session_count

HourlyActivityResponse.missing_session_count

Eligible latest local snapshots missing complete activity bucket coverage.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.last_bucket_at

HourlyActivityResponse.last_bucket_at

Newest covered UTC activity bucket in the response window.

nullable when no complete bucket rows exist

Local enrichedCalculated by Ottto
RFC3339 timestampPublic

stable

activity.hourly.rows[*]

HourlyActivityResponse.rows

Available exact hourly local activity buckets for complete or partial coverage.

available for complete or partial coverage; empty for empty or unsupported coverage

Local enrichedCalculated by Ottto
arrayPublic

stable

activity.hourly.rows[*].bucket_start

HourlyActivityRowResponse.bucket_start

UTC hour boundary for an activity bucket.

always

Local enriched
RFC3339 timestampPublic

stable

activity.hourly.rows[*].local_date

HourlyActivityRowResponse.local_date

Calendar date for this bucket in the requested timezone.

always

Calculated by OtttoCalculated by Ottto
datePublic

stable

activity.hourly.rows[*].local_hour

HourlyActivityRowResponse.local_hour

Hour of day for this bucket in the requested timezone.

always

Calculated by OtttoCalculated by Ottto
hourPublic

stable

activity.hourly.rows[*].local_weekday

HourlyActivityRowResponse.local_weekday

Weekday for this bucket in the requested timezone, with Monday as 0.

always

Calculated by OtttoCalculated by Ottto
weekdayPublic

stable

activity.hourly.rows[*].dimension

HourlyActivityRowResponse.dimension

Grouping dimension represented by this row.

always

Calculated by Ottto
enumPublic

stable

activity.hourly.rows[*].dimension_key

HourlyActivityRowResponse.dimension_key

Stable grouping key for this activity bucket.

always

Source plan profileLocal enrichedCalculated by Ottto
stringPublic

stable

activity.hourly.rows[*].label

HourlyActivityRowResponse.label

Display label for the row's grouping key.

always

Source plan profileLocal enrichedCalculated by Ottto
stringPublic

stable

activity.hourly.rows[*].source

HourlyActivityRowResponse.source

AI app source for source-grouped activity rows.

nullable for non-source dimensions

Local enriched
enumPublic

stable

activity.hourly.rows[*].source_plan_profile_id

HourlyActivityRowResponse.source_plan_profile_id

Source-plan profile id for source-plan grouped activity rows.

nullable when the selected dimension is not source_plan

Source plan profileLocal enriched
UUIDPublic

stable

activity.hourly.rows[*].billing_identity_id

HourlyActivityRowResponse.billing_identity_id

Shared billing identity id for billing-identity grouped activity rows.

nullable when the selected dimension is not billing_identity

Source plan profileLocal enriched
UUIDPublic

stable

activity.hourly.rows[*].active_session_count

HourlyActivityRowResponse.active_session_count

Distinct local sessions with observed activity in the real clock hour; each session counts at most once within the selected dimension bucket.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.rows[*].request_count

HourlyActivityRowResponse.request_count

Model turns recorded in this activity bucket.

always

Local enriched
countPublic

stable

activity.hourly.detail.period_start

HourlyActivityDetailResponse.period_start

Inclusive local calendar start behind one recurring activity cell.

always

Calculated by Ottto
datePublic

stable

activity.hourly.detail.period_end

HourlyActivityDetailResponse.period_end

Inclusive local calendar end behind one recurring activity cell.

always

Calculated by Ottto
datePublic

stable

activity.hourly.detail.complete_before

HourlyActivityDetailResponse.complete_before

Exclusive UTC boundary used to exclude incomplete activity hours.

always

Calculated by OtttoCalculated by Ottto
RFC3339 timestampPublic

stable

activity.hourly.detail.days

HourlyActivityDetailResponse.days

Resolved calendar-day count for the selected detail window.

always

Calculated by Ottto
daysPublic

stable

activity.hourly.detail.timezone

HourlyActivityDetailResponse.timezone

Persisted organization IANA timezone used by this detail.

always

Organization settings
IANA timezonePublic

stable

activity.hourly.detail.local_weekday

HourlyActivityDetailResponse.local_weekday

Selected local weekday, Monday zero through Sunday six.

always

Calculated by Ottto
weekdayPublic

stable

activity.hourly.detail.local_hour

HourlyActivityDetailResponse.local_hour

Selected local wall-clock hour.

always

Calculated by Ottto
hourPublic

stable

activity.hourly.detail.occurrence_count

HourlyActivityDetailResponse.occurrence_count

Number of completed real clock-hour occurrences in the denominator.

always

Calculated by OtttoCalculated by Ottto
countPublic

stable

activity.hourly.detail.session_occurrence_count

HourlyActivityDetailResponse.session_occurrence_count

Sum of distinct session appearances across completed occurrences.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.detail.average_session_count

HourlyActivityDetailResponse.average_session_count

Session appearances divided by completed real clock-hour occurrences.

always

Local enrichedCalculated by Ottto
count per occurrencePublic

stable

activity.hourly.detail.unique_session_count

HourlyActivityDetailResponse.unique_session_count

Canonical sessions appearing in any selected occurrence, deduplicated across dates.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.detail.occurrences[*]

HourlyActivityDetailResponse.occurrences

Completed local date/hour occurrences behind the selected cell.

always

Local enrichedCalculated by Ottto
arrayPublic

stable

activity.hourly.detail.occurrences[*].local_date

HourlyActivityDetailOccurrenceResponse.local_date

Organization-local calendar date for one occurrence.

always

Calculated by OtttoCalculated by Ottto
datePublic

stable

activity.hourly.detail.occurrences[*].bucket_start

HourlyActivityDetailOccurrenceResponse.bucket_start

Exact UTC gold activity bucket represented by one occurrence.

always

Local enriched
RFC3339 timestampPublic

stable

activity.hourly.detail.occurrences[*].active_session_count

HourlyActivityDetailOccurrenceResponse.active_session_count

Canonical distinct sessions active in this exact hour.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.detail.occurrences[*].request_count

HourlyActivityDetailOccurrenceResponse.request_count

Model turns recorded in this exact hour.

always

Local enriched
countPublic

stable

activity.hourly.detail.sources[*]

HourlyActivityDetailResponse.sources

Session appearances grouped by agent source.

always

Local enrichedCalculated by Ottto
arrayPublic

stable

activity.hourly.detail.sources[*].source

HourlyActivityDetailSourceResponse.source

Canonical agent source for a detail breakdown row.

always

Local enriched
enumPublic

stable

activity.hourly.detail.sources[*].label

HourlyActivityDetailSourceResponse.label

Customer-facing agent source label.

always

Local enrichedCalculated by Ottto
stringPublic

stable

activity.hourly.detail.sources[*].session_count

HourlyActivityDetailSourceResponse.session_count

Session appearances attributed to this agent source.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.hourly.detail.machines[*]

HourlyActivityDetailResponse.machines

Session appearances grouped by content-free machine identity.

always

Local enrichedSource plan profileCalculated by Ottto
arrayPublic

stable

activity.hourly.detail.machines[*].machine_id

HourlyActivityDetailMachineResponse.machine_id

Opaque machine identity for a detail breakdown row.

always

Local enriched
stringPublic

stable

activity.hourly.detail.machines[*].machine_name

HourlyActivityDetailMachineResponse.machine_name

Customer-facing machine label resolved from registered device or source-plan identity.

falls back to the opaque machine id when no display name exists

Source plan profileLocal enrichedCalculated by Ottto
stringPublic

stable

activity.hourly.detail.machines[*].machine_icon_url

HourlyActivityDetailMachineResponse.machine_icon_url

Ready customer-facing machine icon URL.

nullable when no generated machine icon is ready

Source plan profileCalculated by Ottto
URLPublic

stable

activity.hourly.detail.machines[*].machine_icon_version

HourlyActivityDetailMachineResponse.machine_icon_version

Version of the ready customer-facing machine icon.

always

Source plan profileCalculated by Ottto
countPublic

stable

activity.hourly.detail.machines[*].session_count

HourlyActivityDetailMachineResponse.session_count

Session appearances attributed to this machine.

always

Local enrichedCalculated by Ottto
countPublic

stable

activity.events[*]

LiveTelemetryProvider.events

In-memory live telemetry events emitted to the browser.

empty when Live telemetry is disabled or disconnected

Live telemetryLive telemetry
arrayPublic

stable

activity.is_connected

LiveTelemetryProvider.isConnected

Browser-visible live telemetry stream connection state.

always

Live telemetryLive telemetry
boolPublic

stable

source_status.name

SourceStatusResponse.name

Canonical source identifier for one source-status row.

always

Calculated by Ottto
enumPublic

stable

source_status.descriptor

SourceStatusResponse.descriptor

Static source capability and ownership descriptor.

always

Calculated by Ottto
objectPublic

stable

source_status.connected

SourceStatusResponse.connected

Whether the source has recent observed data.

always

Live telemetryIntegration connectorCalculated by Ottto
boolPublic

stable

source_status.first_data_at

SourceStatusResponse.first_data_at

Earliest observed source data timestamp.

nullable until source data exists

Live telemetryIntegration connector
RFC3339 timestampPublic

stable

source_status.last_data_at

SourceStatusResponse.last_data_at

Most recent observed source data timestamp.

nullable until source data exists

Live telemetryIntegration connector
RFC3339 timestampPublic

stable

source_status.record_count_1h

SourceStatusResponse.record_count_1h

Model turns from this source's sessions active in the last hour.

always

provenance: volume_count_kind

granularity: row

Local enrichedLocal enrichedLive telemetryIntegration connector
countPublic

stable

source_status.record_count_24h

SourceStatusResponse.record_count_24h

Model turns from this source's sessions active in the last 24 hours.

always

provenance: volume_count_kind

granularity: row

Local enrichedLocal enrichedLive telemetryIntegration connector
countPublic

stable

source_status.volume_count_kind

SourceStatusResponse.volume_count_kind

Semantic grain for source-status volume counters.

always

Calculated by Ottto
enumPublic

stable

source_status.selector_diagnostics

SourceStatusResponse.selector_diagnostics

Selector completeness diagnostics for one source-status row.

always

Live telemetryLocal enrichedCalculated by Ottto
objectPublic

stable

source_status.selector.status

SourceSelectorDiagnosticsResponse.status

Selector coverage state for one telemetry source.

always

Live telemetryLocal enrichedCalculated by Ottto
enumPublic

stable

source_status.selector.summary_label

SourceSelectorDiagnosticsResponse.summary_label

Display label summarizing selector evidence for one telemetry source.

always

Live telemetryLocal enrichedCalculated by Ottto
stringPublic

stable

source_status.selector.provider_code

SourceSelectorDiagnosticsResponse.provider_code

Pricing provider bucket used for selector-health rollout checks.

always

Calculated by Ottto
enumPublic

stable

source_status.selector.pricing_enabled

SourceSelectorDiagnosticsResponse.selector_pricing_enabled

Whether organization settings allow selector context to affect cost projection.

always

Organization settings
boolPublic

stable

source_status.selector.live_complete

SourceSelectorDiagnosticsResponse.live_selector_complete

Whether live telemetry has reported selector evidence in the last 24 hours.

always

Live telemetryCalculated by Ottto
boolPublic

stable

source_status.selector.local_complete

SourceSelectorDiagnosticsResponse.local_selector_complete

Whether local enriched collection is synced for this source.

always

Local enrichedCalculated by Ottto
boolPublic

stable

source_status.selector.sessions_24h

SourceSelectorDiagnosticsResponse.selector_session_count_24h

Model/selector rows considered by the 24-hour selector-health denominator.

always

Live telemetryLocal enrichedCalculated by Ottto
countPublic

stable

source_status.selector.observed_24h

SourceSelectorDiagnosticsResponse.selector_observation_count_24h

Model/selector rows with selector context observed in the last 24 hours.

always

Live telemetryLocal enrichedCalculated by Ottto
countPublic

stable

source_status.selector.speed_observed_24h

SourceSelectorDiagnosticsResponse.speed_observation_count_24h

Model/selector rows with speed-mode selector context observed in the last 24 hours.

always

Live telemetryLocal enrichedCalculated by Ottto
countPublic

stable

source_status.selector.fast_observed_24h

SourceSelectorDiagnosticsResponse.fast_observation_count_24h

Model/selector rows with fast or priority selector context observed in the last 24 hours.

always

Live telemetryLocal enrichedCalculated by Ottto
countPublic

stable

source_status.selector.missing_24h

SourceSelectorDiagnosticsResponse.missing_selector_count_24h

Model/selector rows blocked by missing selector context in the last 24 hours.

always

Calculated by OtttoUnresolvedCalculated by Ottto
countPublic

stable

source_status.selector.completeness_ratio_24h

SourceSelectorDiagnosticsResponse.selector_completeness_ratio_24h

Share of recent model/selector rows with selector context.

nullable until the source has recent selector rows

Live telemetryLocal enrichedCalculated by Ottto
ratioPublic

stable

source_status.selector.missing_ratio_24h

SourceSelectorDiagnosticsResponse.missing_selector_ratio_24h

Share of recent model/selector rows blocked by missing selector context.

nullable until the source has recent selector rows

Calculated by OtttoUnresolvedCalculated by Ottto
ratioPublic

stable

source_status.selector.rollout_guardrail_status

SourceSelectorDiagnosticsResponse.rollout_guardrail_status

Rollout guardrail status derived from selector completeness and mismatch ratios.

always

Live telemetryLocal enrichedCalculated by OtttoCalculated by Ottto
enumPublic

stable

source_status.selector.rollout_guardrail_label

SourceSelectorDiagnosticsResponse.rollout_guardrail_label

Display label explaining the selector rollout guardrail status.

always

Live telemetryLocal enrichedCalculated by OtttoCalculated by Ottto
stringPublic

stable

source_status.local_snapshot_health

SourceStatusResponse.local_snapshot_health

Latest local snapshot collector health for a source.

nullable for sources without a local collector

Local enrichedLocal enriched
objectPublic

stable

source_status.agent_status

SourceStatusResponse.agent_status

Display-safe agent status snapshot for a source.

nullable until the local collector reports status

Local enriched
objectPublic

stable

source_status.agent_statuses

SourceStatusResponse.agent_statuses

Per-account current agent statuses for a source, one entry per identity.

empty until the local collector reports status

Local enriched
arrayPublic

stable

source_status.agent_status_sync_diagnostic

SourceStatusResponse.agent_status_sync_diagnostic

Warning when local collector freshness and backend-visible agent status diverge.

nullable unless Codex or Claude Code status sync is delayed

Local enrichedLocal enrichedCalculated by Ottto
objectPublic

stable

source_status.local_reconciliation

SourceStatusResponse.local_reconciliation

Compatibility local reconciliation/readiness state for the latest source machine.

nullable for sources without a local collector

Local enrichedLocal enrichedCalculated by Ottto
objectPublic

stable

source_status.local_reconciliations

SourceStatusResponse.local_reconciliations

Machine-scoped local reconciliation/readiness states for a source.

empty for sources without local collector status

Local enrichedLocal enrichedCalculated by Ottto
arrayPublic

stable

source_status.current_runtime_defaults

SourceStatusResponse.current_runtime_defaults

Current display-safe runtime defaults reported by the local collector for a source.

nullable until the local collector reports runtime defaults

Local enriched
objectPublic

stable

source_status.runtime_default_history

SourceStatusResponse.runtime_default_history

Collapsed runtime-default change intervals for a source.

empty unless callers opt into bounded default history

Local enrichedCalculated by Ottto
arrayPublic

stable

source_status.plan_profiles

SourceStatusResponse.plan_profiles

Configured source-plan profiles for a source.

always

Source plan profile
arrayPublic

stable

source_status.plan_observations

SourceStatusResponse.plan_observations

Recent source-plan observations for a source.

always

Source plan profileLocal enriched
arrayPublic

stable

settings.telemetry_enabled

OrganizationTelemetrySettingsResponse.telemetry_enabled

Organization master switch for Live telemetry ingest.

always

Organization settings
boolPublic

stable

settings.local_usage_reconciliation_enabled

OrganizationTelemetrySettingsResponse.local_usage_reconciliation_enabled

Organization switch for local snapshot upload and reconciliation.

always

Organization settings
boolPublic

stable

settings.local_usage_backfill_window_days

OrganizationTelemetrySettingsResponse.local_usage_backfill_window_days

Organization maximum local snapshot backfill window.

always

Organization settings
daysPublic

stable

settings.local_usage_session_titles_enabled

OrganizationTelemetrySettingsResponse.local_usage_session_titles_enabled

Organization switch for filtered local session title upload.

always

Organization settings
boolPublic

stable

settings.local_usage_workspace_labels_enabled

OrganizationTelemetrySettingsResponse.local_usage_workspace_labels_enabled

Organization switch for path-free local workspace label upload.

always

Organization settings
boolPublic

stable

settings.local_usage_session_artifacts_enabled

OrganizationTelemetrySettingsResponse.local_usage_session_artifacts_enabled

Organization opt-in (default off) for session VCS artifact linkage (PR/issue/commit).

always

Organization settings
boolPublic

stable

settings.selector_pricing_enabled

OrganizationTelemetrySettingsResponse.selector_pricing_enabled

Organization rollout switch for selector-aware pricing cost projection.

always

Organization settings
boolPublic

stable

settings.mcp_inventory_harvest_enabled

OrganizationTelemetrySettingsResponse.mcp_inventory_harvest_enabled

Organization opt-out (default on) for the local platform's configured-MCP inventory harvest (tools/list only, never executes a tool).

always

Organization settings
boolPublic

stable

settings.source_overrides[*]

aliases: settings.source_telemetry_overrides

OrganizationTelemetrySettingsResponse.source_telemetry_overrides

Per-source Live telemetry override map.

always

Organization settings
objectPublic

stable