`GET /api/intelligence/model-selection/board` — the #691 §E server-paginated model-selection board: filtered+paged rows + total + (optional) workspace facets.
const url = 'https://example.com/api/intelligence/model-selection/board';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/intelligence/model-selection/boardParameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Exact selected_agent_type (the PROVIDER facet/select).
Exact selected_model (the MODEL facet/select).
Exact policy (the POLICY facet/select).
Free-text search over provider/model/policy + input summary.
Whitelisted sort key: created_at | provider | model | policy
(anything else folds to the default created_at DESC).
Sort direction asc | desc (default desc).
Recompute the workspace facets (default true; the FE sends false for a
page/size/select change — the workspace facets are unchanged).
Responses
Section titled “Responses”One page of the model-selection board: the rows, the filtered total (for the
pager), and — only when requested — the workspace facets (null otherwise;
the client keeps the ones it already holds).
object
The provider / model / policy facet chips, each {value,count} bucket
workspace-wide and largest-first. Backs the DataTable filter chips.
object
One filter-chip value and its count. Counts are workspace-wide (independent of the active filter — the chip totals do not shift as the user filters).
object
How many rows fall in this bucket.
The bucket value (e.g. a scope, a role, a framework).
One filter-chip value and its count. Counts are workspace-wide (independent of the active filter — the chip totals do not shift as the user filters).
object
How many rows fall in this bucket.
The bucket value (e.g. a scope, a role, a framework).
One filter-chip value and its count. Counts are workspace-wide (independent of the active filter — the chip totals do not shift as the user filters).
object
How many rows fall in this bucket.
The bucket value (e.g. a scope, a role, a framework).
object
ADR 0045 Stage 2b — L0 attribution + propensity (mig 212).
selection_propensity is the probability the chosen arm was selected under
the policy (winner_score/sum_scores for ‘auto’, 1.0 for ‘manual’, None when
no arm was scored) — the inverse-propensity-weighting denominator that fixes
the only-chosen-arm reward blindspot. alternatives_considered is the
counterfactual log of rejected arms. effort_level/harness mirror the
outcome axes for the segment join. All #[serde(default)] so pre-Stage-2 rows
stay readable.
Examplegenerated
{ "facets": { "models": [ { "count": 1, "value": "example" } ], "policies": [ { "count": 1, "value": "example" } ], "providers": [ { "count": 1, "value": "example" } ] }, "items": [ { "agent_profile_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "alternatives_considered": "example", "created_at": "2026-04-15T12:00:00Z", "effort_level": "example", "estimated_cost": "example", "fallback_reason": "example", "harness": "example", "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "input_summary": "example", "override_choice": "example", "override_reason": "example", "policy": "example", "score_breakdown": "example", "score_completeness": "example", "selected_agent_type": "example", "selected_model": "example", "selection_propensity": 1, "task_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "user_overrode": true, "workspace_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" } ], "total": 1}