---
title: "Validate Decision Scorer Log Record"
method: POST
path: "/scorers/decision/validate/log_record"
tags: ["data", "prompts", "rows"]
---

# Validate Decision Scorer Log Record

`POST /scorers/decision/validate/log_record`

## Request

- Base URL: `https://api.galileo.ai`
- URL: `https://api.galileo.ai/scorers/decision/validate/log_record`
- Auth: one of:
  - API key in header `Splunk-AO-API-Key`
  - API key in header `Galileo-API-Key`
  - OAuth 2
    - Password
    - Token URL: `https://api.galileo.ai/login`
  - HTTP basic

Test a decision evaluator on log records. The results go to a new metrics_testing run.

The body has the LLM request's shape (ERD S6). model_name, question and answer_options are at the
top level, in place of the prompt fields. output_type, scoreable_node_types, input_type and
ground_truth are in scorer_configuration. scoreable_node_types holds exactly one node type. The
fields that select the records (log_stream_id or experiment_id, and filters) are at the top level.

## Request body

- ValidateDecisionScorerLogRecordRequest: Test a decision evaluator on log records. The query selects the records.
  - `starting_token` integer
  - `limit` integer: Records per page, at most 1000. Page through larger result sets with starting_token or previous_last_row_id.
  - `previous_last_row_id` string, uuid4, nullable
  - `log_stream_id` string, uuid4, nullable: Log stream id associated with the traces.
  - `experiment_id` string, uuid4, nullable: Experiment id associated with the traces.
  - `metrics_testing_id` string, uuid4, nullable: Metrics testing id associated with the traces.
  - `filters` union[]
    - union
      - 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[]
            - 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.
  - `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)
  - `sort` LogRecordsSortClause
    - `column_id` string, required: ID of the column to sort.
    - `ascending` boolean
    - `sort_type` 'column'
  - `truncate_fields` boolean
  - `include_counts` boolean: If True, include computed child counts (e.g., num_traces for sessions, num_spans for traces).
  - `include_code_metric_metadata` boolean: If True, include per-row scorer metadata (the dict returned alongside the score by code-based scorers via the (score, metadata) tuple-return contract) on each MetricSuccess in the response. Off by default to keep payloads small for callers that don't need it.
  - `model_name` string, required
  - `question` string, required
  - `answer_options` union
    - string[]
    - DecisionChoice[]
      - `label` string, required
      - `description` string, nullable
    - DecisionLevel[]
      - `level` integer, required
      - `label` string, required
      - `description` string, nullable
    - DecisionBooleanCriteria: What a true answer and a false answer mean, for a yes/no question. The two are set together.
      - `true` string, required
      - `false` string, required
  - `scorer_configuration` DecisionScorerTestConfiguration, required: The evaluator settings of a decision Test request, the same place as the LLM scorer_configuration. scoreable_node_types holds exactly one node type. input_type defaults to the decision default for it (get_decision_input_type).
    - `output_type` 'boolean' | 'categorical' | 'count' | 'discrete' | 'freeform' | 'percentage' | 'multilabel' | 'retrieved_chunk_list_boolean' | 'boolean_multilabel' | 'boolean_probability', required: Enumeration of output types.
    - `scoreable_node_types` StepType[], required
    - `input_type` 'basic' | 'llm_spans' | 'retriever_spans' | 'sessions_normalized' | 'sessions_trace_io_only' | 'tool_spans' | 'trace_input_only' | 'trace_io_only' | 'trace_normalized' | 'trace_output_only' | 'agent_spans' | 'workflow_spans': Enumeration of input types.
    - `ground_truth` boolean

## Response `200`

Successful Response

- ValidateScorerLogRecordResponse: Response model for validating a scorer based on log records. Returns the uuid of the experiment created with the copied log records to store the metric testing results. Also returns the project_id so callers can poll /projects/{project_id}/traces/search.
  - `metrics_experiment_id` string, uuid4, required
  - `project_id` string, uuid4, required

## Other responses

- `422`: Validation Error

## Changes

> 34 revisions in range; 2 not diffed.

- **2026-10-26** `a289cea1b504`: 2 warning
  - the `limit` request property's max was set to `1000.00`
  - the `limit` request property's min was set to `0.00`
- **2026-10-19** `0b20eade6391`: 1 info
  - added `#/components/schemas/DecisionBooleanCriteria, subschema #2` to the `answer_options` request property `anyOf` list
- **2026-10-13** `0897291b6ee2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/galileo/apis/galileo-api-server/changes/scorers/decision/validate/log_record/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/a289cea1b504?raw)
