- Threads
- Submit Tool Outputs (Legacy)
Threads
Submit Tool Outputs (Legacy)
curl --request POST \
--url https://app.backboard.io/api/threads/{thread_id}/runs/{run_id}/submit-tool-outputs \
--header 'X-API-Key: <api-key>' \
--header 'authorization: <authorization>' \
--header 'x_session_token: <x_session_token>' \
--header 'Content-Type: application/json' \
--data '{
"tool_outputs": [
{
"tool_call_id": "string",
"output": "string"
}
],
"tools": [
{}
],
"thinking": null
}'Overview
Submit tool call results when you need explicit control over run_id, tool overrides, or per-step reasoning.
For most integrations, use Submit Tool Outputs instead — it resolves run_id automatically.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
tool_outputs | array | Yes | [{tool_call_id, output}, ...] |
tools | array | No | Override the assistant’s tool list for this continuation only |
thinking | object | No | Per-step reasoning override for this continuation |
Reasoning on tool continuation
After tool execution, the model may run another reasoning pass before replying. Pass thinking to control that step — same shape as Send Message (effort, budget_tokens, etc.).
When omitted, the run reuses the original message’s thinking config.
final = await client.submit_tool_outputs(
thread_id=thread_id,
run_id=run_id,
tool_outputs=outputs,
thinking={"effort": "medium"},
)
print(final.reasoning) # reasoning trace when thinking is enabled
Response
Non-streaming responses include content, status, and reasoning (when thinking is enabled) — same fields as message responses.
Query parameters
| Parameter | Description |
|---|---|
stream | Set stream=true to receive SSE chunks (including reasoning_streaming events when thinking is enabled) |
When to use this endpoint
| Use case | This endpoint | Simple endpoint |
|---|---|---|
Auto-resolve latest REQUIRES_ACTION | No | Yes |
Pin a specific run_id | Yes | No |
Override tools mid-run | Yes | No |
Set per-step thinking | Yes | No |
Authorizations
Query Parameters
Body
A list of tool outputs to submit.
Optional override for the assistant's tool list, applied only to this run. Each entry is an OpenAI-style tool definition (e.g. {type: 'function', function: {...}}).
Optional per-step reasoning override for this continuation (the 'reasoning sandwich': lower effort during the tool/edit grind than at planning/verification). Same shape as the messages endpoint's thinking (e.g. {"effort": "medium"} or {"budget_tokens": 4096}). When omitted, the run's original thinking config is reused.
Response
200
422
Successful Response
Message
Thread Id
Run Id
Timestamp
Content
Message Id
Tool Calls
Memory Operation Id
Retrieved Files
Retrieved Files Count
Reasoning
Model Provider
Model Name
Input Tokens
Output Tokens
Total Tokens
Created At
Context Usage
curl --request POST \
--url https://app.backboard.io/api/threads/{thread_id}/runs/{run_id}/submit-tool-outputs \
--header 'X-API-Key: <api-key>' \
--header 'authorization: <authorization>' \
--header 'x_session_token: <x_session_token>' \
--header 'Content-Type: application/json' \
--data '{
"tool_outputs": [
{
"tool_call_id": "string",
"output": "string"
}
],
"tools": [
{}
],
"thinking": null
}'