---
title: "Update Trends"
method: PUT
path: "/projects/{project_id}/log_streams/{log_stream_id}/trends"
tags: ["trends_dashboard"]
---

# Update Trends

`PUT /projects/{project_id}/log_streams/{log_stream_id}/trends`

## Path parameters

- `project_id` string, uuid4, required
- `log_stream_id` string, uuid4, required

## Query parameters

- `trends_dashboard_id` string, uuid4, nullable

## Request body

- TrendsDashboardUpdateRequest — Update dashboard properties: filter_tree, group_by, interval_mins, layout_map, and time range. Time range: provide either (start_time, end_time) for absolute timestamps, or relative_time (e.g. "last_7_days", "last_12_hours", "last_3_months") for a rolling window from now.
  - `name` string, nullable
  - `description` string, nullable
  - `interval_mins` integer, nullable
  - `layout_map` object, nullable
  - `start_time` integer, nullable
  - `end_time` integer, nullable
  - `relative_time` string, nullable — Rolling window from now, e.g. last_7_days, last_12_hours (max 5 years)
  - `filter_tree` union
    - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
      - `filter` union, required
        - LogRecordsIDFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'one_of' | 'not_in' | 'contains'
          - `value` union, required
            - string, uuid4
            - union[]
              - …
            - string
          - `type` 'id'
        - LogRecordsDateFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte', required
          - `value` string, date-time, required
          - `type` 'date'
        - LogRecordsNumberFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'between', required
          - `value` union, required
            - integer
            - number
            - integer[]
            - number[]
          - `type` 'number'
        - LogRecordsBooleanFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne'
          - `value` boolean, required
          - `type` 'boolean'
        - LogRecordsCollectionFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'contains' | 'one_of' | 'not_in', required
          - `value` union, required
            - string
            - string[]
          - `case_sensitive` boolean
          - `type` 'collection'
        - LogRecordsTextFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'contains' | 'one_of' | 'not_in', required
          - `value` union, required
            - string
            - string[]
          - `case_sensitive` boolean
          - `type` 'text'
        - LogRecordsFullyAnnotatedFilter — Queue-scoped filter for records rated across all queue templates.
          - `column_id` 'fully_annotated' — Queue-scoped filter identifier. This filter only works for annotation-queue searches that provide queue context.
          - `type` 'fully_annotated'
          - `user_ids` string[], nullable — Optional queue member IDs to require for full annotation in a queue-scoped search. If omitted, all tracked queue members visible to the requester are used.
    - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
      - `and` union[], required
        - union
          - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
            - `filter` union, required
              - …
          - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput — recursive
          - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
            - `or` union[], required
              - …
          - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
            - `not` union, required
              - …
    - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
      - `or` union[], required
        - union
          - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
            - `filter` union, required
              - …
          - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
            - `and` union[], required
              - …
          - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput — recursive
          - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
            - `not` union, required
              - …
    - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
      - `not` union, required
        - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
          - `filter` union, required
            - LogRecordsIDFilter
              - …
            - LogRecordsDateFilter
              - …
            - LogRecordsNumberFilter
              - …
            - LogRecordsBooleanFilter
              - …
            - LogRecordsCollectionFilter
              - …
            - LogRecordsTextFilter
              - …
            - LogRecordsFullyAnnotatedFilter — Queue-scoped filter for records rated across all queue templates.
              - …
        - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
          - `and` union[], required
            - union
              - …
        - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput
          - `or` union[], required
            - union
              - …
        - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeInput — recursive
  - `group_by` string, nullable

## Response `200`

Successful Response

- TrendsDashboardResponse
  - `id` string, uuid4, required
  - `name` string, required
  - `description` string, nullable
  - `is_default` boolean, required
  - `visibility` string, required
  - `created_by` string, uuid4, nullable
  - `is_favorited` boolean
  - `log_stream_id` string, uuid4, required
  - `project_id` string, uuid4, required
  - `widgets` WidgetResponse[]
    - `id` string, uuid4, required
    - `name` string, required
    - `description` string, nullable
    - `type` 'bar_chart' | 'line_chart' | 'number' | 'table', required
    - `dataset` object[], nullable
    - `metric` string, required
    - `aggregation` 'Count' | 'Sum' | 'Average' | 'Min' | 'Max' | 'P50' | 'P90' | 'P95' | 'P99' | 'PercentageFalse' | 'PercentageTrue', required
    - `section_id` string, uuid4, nullable
  - `sections` SectionResponse[]
    - `id` string, uuid4, required
    - `name` string, required
    - `description` string, nullable
    - `color` string, nullable
    - `widgets` WidgetResponse[]
      - `id` string, uuid4, required
      - `name` string, required
      - `description` string, nullable
      - `type` 'bar_chart' | 'line_chart' | 'number' | 'table', required
      - `dataset` object[], nullable
      - `metric` string, required
      - `aggregation` 'Count' | 'Sum' | 'Average' | 'Min' | 'Max' | 'P50' | 'P90' | 'P95' | 'P99' | 'PercentageFalse' | 'PercentageTrue', required
      - `section_id` string, uuid4, nullable
  - `layout_map` object, required
  - `interval_mins` integer, required
  - `group_by` string, nullable
  - `filter_tree` union
    - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
      - `filter` union, required
        - LogRecordsIDFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'one_of' | 'not_in' | 'contains'
          - `value` union, required
            - string, uuid4
            - union[]
              - …
            - string
          - `type` 'id'
        - LogRecordsDateFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte', required
          - `value` string, date-time, required
          - `type` 'date'
        - LogRecordsNumberFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'between', required
          - `value` union, required
            - integer
            - number
            - integer[]
            - number[]
          - `type` 'number'
        - LogRecordsBooleanFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne'
          - `value` boolean, required
          - `type` 'boolean'
        - LogRecordsCollectionFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'contains' | 'one_of' | 'not_in', required
          - `value` union, required
            - string
            - string[]
          - `case_sensitive` boolean
          - `type` 'collection'
        - LogRecordsTextFilter
          - `column_id` string, required — ID of the column to filter.
          - `operator` 'eq' | 'ne' | 'contains' | 'one_of' | 'not_in', required
          - `value` union, required
            - string
            - string[]
          - `case_sensitive` boolean
          - `type` 'text'
        - LogRecordsFullyAnnotatedFilter — Queue-scoped filter for records rated across all queue templates.
          - `column_id` 'fully_annotated' — Queue-scoped filter identifier. This filter only works for annotation-queue searches that provide queue context.
          - `type` 'fully_annotated'
          - `user_ids` string[], nullable — Optional queue member IDs to require for full annotation in a queue-scoped search. If omitted, all tracked queue members visible to the requester are used.
    - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
      - `and` union[], required
        - union
          - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
            - `filter` union, required
              - …
          - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput — recursive
          - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
            - `or` union[], required
              - …
          - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
            - `not` union, required
              - …
    - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
      - `or` union[], required
        - union
          - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
            - `filter` union, required
              - …
          - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
            - `and` union[], required
              - …
          - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput — recursive
          - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
            - `not` union, required
              - …
    - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
      - `not` union, required
        - FilterLeafAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorType
          - `filter` union, required
            - LogRecordsIDFilter
              - …
            - LogRecordsDateFilter
              - …
            - LogRecordsNumberFilter
              - …
            - LogRecordsBooleanFilter
              - …
            - LogRecordsCollectionFilter
              - …
            - LogRecordsTextFilter
              - …
            - LogRecordsFullyAnnotatedFilter — Queue-scoped filter for records rated across all queue templates.
              - …
        - AndNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
          - `and` union[], required
            - union
              - …
        - OrNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput
          - `or` union[], required
            - union
              - …
        - NotNodeAnnotatedUnionLogRecordsIDFilterLogRecordsDateFilterLogRecordsNumberFilterLogRecordsBooleanFilterLogRecordsCollectionFilterLogRecordsTextFilterLogRecordsFullyAnnotatedFilterFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorTypeOutput — recursive
  - `start_time` integer, required
  - `end_time` integer, required
  - `relative_time` string, nullable

## Other responses

- `422` — Validation Error

## Changes

- **2026-07-26** `05003e7835a2` — 1 info
  - the endpoint scheme security `ClassicAPIKeyHeader` was added to the API

[Change history](https://skmtc.dev/galileo/apis/galileo-api-server/changes/projects/:project_id/log_streams/:log_stream_id/trends/put.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-service-production.skmtc.workers.dev/v1/apis/galileo/galileo-api-server/revisions/4bc031507246/schema)
