---
title: "Get Agent Observability Config"
method: POST
path: "/agent-observability/config"
tags: ["agent-observability"]
---

# Get Agent Observability Config

`POST /agent-observability/config`

Evaluator metrics present in the window, plus a deterministic default selection.

A POST because the discovery query is scoped by the same window and project filter as the trend
requests, and that scope does not belong in a query string.

## Request body

- SummaryRequest — Scope for a dashboard read. `project_ids` and `log_stream_ids` are both optional: omitted means every project in the caller's org, and every dashboard-eligible run within it. Supplying either outside the caller's org is rejected rather than silently narrowed, so a wrong scope surfaces as an error instead of a quietly smaller number. Both are typed as UUIDs so a malformed ID is rejected here, at the edge. As plain strings they reached Postgres as a comparison against a UUID column and surfaced as a 500.
  - `start_time` string, date-time, required
  - `end_time` string, date-time, required
  - `interval` 'hourly' | 'daily' | 'weekly' | 'monthly'
  - `project_ids` string[], nullable
  - `log_stream_ids` string[], nullable

## Response `200`

Successful Response

- DashboardConfigResponse — What the dashboard's pickers can offer, and what to chart by default. The selection is not persisted server-side: the client sends `metric_keys` on the trends request and owns the user's choice. `evaluator_metric_keys` is a deterministic default so a client with no stored selection still renders a populated chart. `available_evaluator_metrics` is the org's whole scorer registry, deliberately *not* the set of keys seen in the window — a window-derived list changes size with the time range, so the same org offered 5 evaluators at 7 days and 45 at 90. The defaults stay window-derived, so they chart evaluators that actually ran. `available_log_streams` covers every stream in the selected projects and is deliberately *not* narrowed by the request's own `log_stream_ids` — otherwise picking a stream would collapse the picker to that one entry and the user could never widen the selection again. `available_projects` is the picker's own source of truth rather than the host's paginated project list, which would silently omit projects past its first page — including ones holding data.
  - `evaluator_metric_keys` string[], required
  - `available_evaluator_metrics` EvaluatorMetricOption[], required
    - `metric_key` string, required
    - `label` string, required
    - `group_label` string, nullable
  - `available_projects` ProjectOption[]
    - `project_id` string, required
    - `name` string, required
  - `available_log_streams` LogStreamOption[]
    - `log_stream_id` string, required
    - `name` string, required
    - `project_id` string, required
  - `available_log_streams_truncated` boolean
  - `degraded` Degraded — Why a card or section has no value.
    - `ems_code` integer, required
    - `reason` 'timeout' | 'memory_limit' | 'upstream_error' | 'range_too_large' | 'not_found', required
    - `message` string, required
    - `retryable` boolean, required
  - `max_evaluator_metrics` integer

## Other responses

- `422` — Validation Error

## Changes

> 23 revisions in range; 2 not diffed.

- **2026-09-18** `20760c217c4f` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/galileo/apis/galileo-api-server/changes/agent-observability/config/post.md)

---

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