---
title: "Modify Feedback For Step"
method: PATCH
path: "/v1/steps/{step_id}/feedback"
tags: ["steps"]
---

# Modify Feedback For Step

`PATCH /v1/steps/{step_id}/feedback`

Modify feedback for a given step.

## Path parameters

- `step_id` string, required

## Request body

- ModifyFeedbackRequest
  - `feedback` 'positive' | 'negative'
  - `tags` string[], nullable — Feedback tags to add to the step

## Response `200`

Successful Response

- Step
  - `id` string, required — The id of the step. Assigned by the database.
  - `origin` string, nullable — The surface that this agent step was initiated from.
  - `provider_id` string, nullable — The unique identifier of the provider that was configured for this step
  - `run_id` string, nullable — The unique identifier of the run that this step belongs to. Only included for async calls.
  - `agent_id` string, nullable — The ID of the agent that performed the step.
  - `provider_name` string, nullable — The name of the provider used for this step.
  - `provider_category` string, nullable — The category of the provider used for this step.
  - `model` string, nullable — The name of the model used for this step.
  - `model_endpoint` string, nullable — The model endpoint url used for this step.
  - `context_window_limit` integer, nullable — The context window limit configured for this step.
  - `completion_tokens` integer, nullable — The number of tokens generated by the agent during this step.
  - `prompt_tokens` integer, nullable — The number of tokens in the prompt during this step.
  - `total_tokens` integer, nullable — The total number of tokens processed by the agent during this step.
  - `completion_tokens_details` object, nullable — Metadata for the agent.
  - `stop_reason` 'end_turn' | 'error' | 'llm_api_error' | 'invalid_llm_response' | 'invalid_tool_call' | 'max_steps' | 'no_tool_call' | 'tool_rule' | 'cancelled' | 'requires_approval'
  - `tags` string[] — Metadata tags.
  - `tid` string, nullable — The unique identifier of the transaction that processed this step.
  - `trace_id` string, nullable — The trace id of the agent step.
  - `messages` Message[] — The messages generated during this step. Deprecated: use `GET /v1/steps/{step_id}/messages` endpoint instead
    - `created_by_id` string, nullable — The id of the user that made this object.
    - `last_updated_by_id` string, nullable — The id of the user that made this object.
    - `created_at` string, date-time — The timestamp when the object was created.
    - `updated_at` string, date-time, nullable — The timestamp when the object was last updated.
    - `id` string — The human-friendly ID of the Message
    - `agent_id` string, nullable — The unique identifier of the agent.
    - `model` string, nullable — The model used to make the function call.
    - `role` 'assistant' | 'user' | 'tool' | 'function' | 'system' | 'approval', required
    - `content` union[], nullable — The content of the message.
      - union
        - TextContent
          - `type` 'text' — The type of the message.
          - `text` string, required — The text content of the message.
          - `signature` string, nullable — Stores a unique identifier for any reasoning associated with this text content.
        - ImageContent
          - `type` 'image' — The type of the message.
          - `source` union, required — The source of the image.
            - UrlImage
              - …
            - Base64Image
              - …
            - LettaImage
              - …
        - ToolCallContent
          - `type` 'tool_call' — Indicates this content represents a tool call event.
          - `id` string, required — A unique identifier for this specific tool call instance.
          - `name` string, required — The name of the tool being called.
          - `input` object, required — The parameters being passed to the tool, structured as a dictionary of parameter names to values.
          - `signature` string, nullable — Stores a unique identifier for any reasoning associated with this tool call.
        - ToolReturnContent
          - `type` 'tool_return' — Indicates this content represents a tool return event.
          - `tool_call_id` string, required — References the ID of the ToolCallContent that initiated this tool call.
          - `content` string, required — The content returned by the tool execution.
          - `is_error` boolean, required — Indicates whether the tool execution resulted in an error.
        - ReasoningContent — Sent via the Anthropic Messages API
          - `type` 'reasoning' — Indicates this is a reasoning/intermediate step.
          - `is_native` boolean, required — Whether the reasoning content was generated by a reasoner model that processed this step.
          - `reasoning` string, required — The intermediate reasoning or thought process content.
          - `signature` string, nullable — A unique identifier for this reasoning step.
        - RedactedReasoningContent — Sent via the Anthropic Messages API
          - `type` 'redacted_reasoning' — Indicates this is a redacted thinking step.
          - `data` string, required — The redacted or filtered intermediate reasoning content.
        - OmittedReasoningContent — A placeholder for reasoning content we know is present, but isn't returned by the provider (e.g. OpenAI GPT-5 on ChatCompletions)
          - `type` 'omitted_reasoning' — Indicates this is an omitted reasoning step.
          - `signature` string, nullable — A unique identifier for this reasoning step.
        - SummarizedReasoningContent — The style of reasoning content returned by the OpenAI Responses API
          - `type` 'summarized_reasoning' — Indicates this is a summarized reasoning step.
          - `id` string, required — The unique identifier for this reasoning step.
          - `summary` SummarizedReasoningContentPart[], required — Summaries of the reasoning content.
            - `index` integer, required — The index of the summary part.
            - `text` string, required — The text of the summary part.
          - `encrypted_content` string — The encrypted reasoning content.
    - `name` string, nullable — For role user/assistant: the (optional) name of the participant. For role tool/function: the name of the function called.
    - `tool_calls` ChatCompletionMessageFunctionToolCall[], nullable — The list of tool calls requested. Only applicable for role assistant.
      - `id` string, required
      - `function` Function, required
        - `arguments` string, required
        - `name` string, required
      - `type` 'function', required
    - `tool_call_id` string, nullable — The ID of the tool call. Only applicable for role tool.
    - `step_id` string, nullable — The id of the step that this message was created in.
    - `run_id` string, nullable — The id of the run that this message was created in.
    - `otid` string, nullable — The offline threading id associated with this message
    - `tool_returns` ToolReturn[], nullable — Tool execution return information for prior tool calls
      - `status` 'success' | 'error', required — The status of the tool call
      - `stdout` string[], nullable — Captured stdout (e.g. prints, logs) from the tool invocation
      - `stderr` string[], nullable — Captured stderr from the tool invocation
    - `group_id` string, nullable — The multi-agent group that the message was sent in
    - `sender_id` string, nullable — The id of the sender of the message, can be an identity id or agent id
    - `batch_item_id` string, nullable — The id of the LLMBatchItem that this message is associated with
    - `is_err` boolean, nullable — Whether this message is part of an error step. Used only for debugging purposes.
    - `approval_request_id` string, nullable — The id of the approval request if this message is associated with a tool call request.
    - `approve` boolean, nullable — Whether tool call is approved.
    - `denial_reason` string, nullable — The reason the tool call request was denied.
  - `feedback` 'positive' | 'negative', nullable — The feedback for this step. Must be either 'positive' or 'negative'.
  - `project_id` string, nullable — The project that the agent that executed this step belongs to (cloud only).
  - `error_type` string, nullable — The type/class of the error that occurred
  - `error_data` object, nullable — Error details including message, traceback, and additional context
  - `status` 'pending' | 'success' | 'failed' | 'cancelled' — Status of a step execution

## Other responses

- `422` — Validation Error

## Changes

- **2025-10-03** `f0554a0bf8b2` — 3 info
  - added the optional property `messages/items/content/anyOf[subschema #1]/items/oneOf[subschema #1: TextContent]/signature` to the response with the `200` status
  - added the optional property `messages/items/content/anyOf[subschema #1]/items/oneOf[subschema #3: ToolCallContent]/signature` to the response with the `200` status
  - added the optional property `messages/items/content/anyOf[subschema #1]/items/oneOf[subschema #7: OmittedReasoningContent]/signature` to the response with the `200` status
- **2025-09-29** `ac8e1eb68404` — 1 warning, 2 info
  - removed the optional property `job_id` from the response with the `200` status
  - added the optional property `messages/items/run_id` to the response with the `200` status
  - added the optional property `run_id` to the response with the `200` status
- **2025-09-24** `68c3c741b873` — 1 breaking, 1 info
  - added `#/components/schemas/SummarizedReasoningContent` to the `messages/items/content/anyOf[subschema #1]/items/` response property `oneOf` list for the response status `200`
  - added `summarized_reasoning` discriminator mapping keys to the `messages/items/content/anyOf[subschema #1]/items/` response property for the response status `200`

[Change history](https://skmtc.dev/yu-code666/apis/letta-api/changes/v1/steps/:step_id/feedback/patch.md)

---

[API](https://skmtc.dev/yu-code666/apis/letta-api.md) · [All operations](https://skmtc.dev/yu-code666/apis/letta-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/yu-code666/letta-api/revisions/f0554a0bf8b2/schema)
