---
title: "Submit Tool Outputs (Simplified)"
method: POST
path: "/threads/tool-outputs"
tags: ["Threads"]
---

# Submit Tool Outputs (Simplified)

`POST /threads/tool-outputs`

Submit tool outputs for a thread in a single JSON call — no path parameters, no run_id. The server resolves the run from the latest REQUIRES_ACTION assistant message on the thread.

Body: `{thread_id, tool_outputs: [{tool_call_id, output}], stream?, thinking?}` — same entry shape as the original endpoint. Optional `thinking` overrides reasoning for this continuation round; omit it to reuse the run's original thinking config.

For explicit run-pinning or per-run tool overrides, use the original `POST /threads/{thread_id}/runs/{run_id}/submit-tool-outputs`.

## Headers

- `authorization` string, nullable
- `x_session_token` string, nullable

## Request body

- SubmitToolOutputsSimpleRequest — Simplified tool-output submission. Shares the canonical ``{tool_call_id, output}`` entry shape with the original ``submit-tool-outputs`` endpoint. The only differences vs. the original are: 1. ``thread_id`` lives in the body instead of the URL. 2. ``run_id`` is resolved server-side to the latest ``REQUIRES_ACTION`` run on the thread — callers never pass it. If you need to pin to a specific ``run_id`` or override the assistant's tool list for a run, use the original ``POST /threads/{thread_id}/runs/{run_id}/submit-tool-outputs`` instead.
  - `thread_id` string, uuid, required — Thread UUID the outputs belong to.
  - `tool_outputs` ToolOutput[], required — Tool outputs to submit. Each item is {tool_call_id, output}.
    - `tool_call_id` string, required — The ID of the tool call this output is for.
    - `output` string, required — The output of the tool call (stringified).
  - `stream` boolean, nullable — Whether to stream the response.
  - `thinking` ThinkingConfig
    - `effort` string, nullable — Reasoning effort level: low, medium, high, or max.
    - `budget_tokens` integer, nullable — Reasoning token budget for providers that use token budgets.
    - `max_tokens` integer, nullable — Reasoning max_tokens cap for providers that support it.
    - `exclude_reasoning` boolean, nullable — Whether reasoning tokens should be excluded when supported.

## Response `200`

Successful Response

- ToolOutputsResponse — Response for tool outputs submission
  - `message` string, required
  - `thread_id` string, uuid, required
  - `run_id` string, required
  - `content` string, nullable
  - `message_id` string, uuid, nullable
  - `role` 'user' | 'assistant' | 'tool'
  - `status` 'IN_PROGRESS' | 'REQUIRES_ACTION' | 'COMPLETED' | 'FAILED' | 'CANCELLED'
  - `tool_calls` object[], nullable
  - `memory_operation_id` string, nullable
  - `retrieved_memories` RetrievedMemory[], nullable
    - `id` string, nullable
    - `memory` string, required
    - `score` number, nullable
  - `retrieved_files` string[], nullable
  - `retrieved_files_count` integer
  - `reasoning` string, nullable
  - `model_provider` string, nullable
  - `model_name` string, nullable
  - `input_tokens` integer, nullable
  - `output_tokens` integer, nullable
  - `total_tokens` integer, nullable
  - `created_at` string, date-time, nullable
  - `generated_media` GeneratedMediaInfo[], nullable
    - `document_id` string, required
    - `media_type` string, required
    - `mime_type` string, required
    - `url` string, required
    - `file_size_bytes` integer, nullable
    - `transcript` string, nullable
  - `timestamp` string, date-time, required
  - `context_usage` object, nullable

## Other responses

- `422` — Validation Error

---

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