curl --request POST \
--url https://api.honcho.dev/v3/workspaces/{workspace_id}/chat \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"session_id": "<string>",
"stream": false,
"reasoning_level": "low",
"response_format": {},
"scope": "<string>",
"include_evidence": false
}
'import requests
url = "https://api.honcho.dev/v3/workspaces/{workspace_id}/chat"
payload = {
"query": "<string>",
"session_id": "<string>",
"stream": False,
"reasoning_level": "low",
"response_format": {},
"scope": "<string>",
"include_evidence": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
session_id: '<string>',
stream: false,
reasoning_level: 'low',
response_format: {},
scope: '<string>',
include_evidence: false
})
};
fetch('https://api.honcho.dev/v3/workspaces/{workspace_id}/chat', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.honcho.dev/v3/workspaces/{workspace_id}/chat",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => '<string>',
'session_id' => '<string>',
'stream' => false,
'reasoning_level' => 'low',
'response_format' => [
],
'scope' => '<string>',
'include_evidence' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.honcho.dev/v3/workspaces/{workspace_id}/chat"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"session_id\": \"<string>\",\n \"stream\": false,\n \"reasoning_level\": \"low\",\n \"response_format\": {},\n \"scope\": \"<string>\",\n \"include_evidence\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.honcho.dev/v3/workspaces/{workspace_id}/chat")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"session_id\": \"<string>\",\n \"stream\": false,\n \"reasoning_level\": \"low\",\n \"response_format\": {},\n \"scope\": \"<string>\",\n \"include_evidence\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.honcho.dev/v3/workspaces/{workspace_id}/chat")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"session_id\": \"<string>\",\n \"stream\": false,\n \"reasoning_level\": \"low\",\n \"response_format\": {},\n \"scope\": \"<string>\",\n \"include_evidence\": false\n}"
response = http.request(request)
puts response.read_body{
"content": "<string>",
"evidence": {
"conclusions": [
{
"id": "<string>",
"level": "explicit",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"observer_id": "<string>",
"observed_id": "<string>",
"session_id": "<string>",
"source_ids": [
"<string>"
]
}
],
"messages": [
{
"id": "<string>",
"session_id": "<string>",
"peer_id": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"tool_calls": [
{
"tool_name": "<string>",
"tool_input": {}
}
],
"reasoning_trace_id": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Workspace Chat
Query the entire workspace using natural language. Runs the Dialectic agent over every peer in the workspace rather than a single (observer, observed) pair: there is no anchor peer and no target.
Pass session_id to narrow message tools to one session, or scope to restrict recall to the union of the named scopes’ member sessions (always an allowlist, even for a single name; a scope with no member sessions recalls nothing). session_id and scope are mutually exclusive.
Set stream: true to receive the answer as a text/event-stream of {"delta": {"content": ...}, "done": false} chunks terminated by {"done": true}. Requires a workspace- or admin-level key.
curl --request POST \
--url https://api.honcho.dev/v3/workspaces/{workspace_id}/chat \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"session_id": "<string>",
"stream": false,
"reasoning_level": "low",
"response_format": {},
"scope": "<string>",
"include_evidence": false
}
'import requests
url = "https://api.honcho.dev/v3/workspaces/{workspace_id}/chat"
payload = {
"query": "<string>",
"session_id": "<string>",
"stream": False,
"reasoning_level": "low",
"response_format": {},
"scope": "<string>",
"include_evidence": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
session_id: '<string>',
stream: false,
reasoning_level: 'low',
response_format: {},
scope: '<string>',
include_evidence: false
})
};
fetch('https://api.honcho.dev/v3/workspaces/{workspace_id}/chat', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.honcho.dev/v3/workspaces/{workspace_id}/chat",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => '<string>',
'session_id' => '<string>',
'stream' => false,
'reasoning_level' => 'low',
'response_format' => [
],
'scope' => '<string>',
'include_evidence' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.honcho.dev/v3/workspaces/{workspace_id}/chat"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"session_id\": \"<string>\",\n \"stream\": false,\n \"reasoning_level\": \"low\",\n \"response_format\": {},\n \"scope\": \"<string>\",\n \"include_evidence\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.honcho.dev/v3/workspaces/{workspace_id}/chat")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"session_id\": \"<string>\",\n \"stream\": false,\n \"reasoning_level\": \"low\",\n \"response_format\": {},\n \"scope\": \"<string>\",\n \"include_evidence\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.honcho.dev/v3/workspaces/{workspace_id}/chat")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"session_id\": \"<string>\",\n \"stream\": false,\n \"reasoning_level\": \"low\",\n \"response_format\": {},\n \"scope\": \"<string>\",\n \"include_evidence\": false\n}"
response = http.request(request)
puts response.read_body{
"content": "<string>",
"evidence": {
"conclusions": [
{
"id": "<string>",
"level": "explicit",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"observer_id": "<string>",
"observed_id": "<string>",
"session_id": "<string>",
"source_ids": [
"<string>"
]
}
],
"messages": [
{
"id": "<string>",
"session_id": "<string>",
"peer_id": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"tool_calls": [
{
"tool_name": "<string>",
"tool_input": {}
}
],
"reasoning_trace_id": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
Options for workspace-level chat (no anchor peer; see DialecticOptions).
Workspace chat prompt
1 - 10000Optional session to scope message tools to
Level of reasoning to apply: minimal, low, medium, high, or max
minimal, low, medium, high, max Optional JSON Schema (root type 'object') the response must conform to. When provided, content is a JSON string matching this schema.
Optional (unprefixed) scope name(s) restricting recall to the union of the scopes' member sessions (explicit allowlist, fail-closed: an empty union recalls nothing). Mutually exclusive with session_id. Requires a workspace- or admin-level key.
When true, the response includes an evidence object listing the conclusions and messages the agent read while answering, plus the tool calls it made. Evidence is collated from what the agent accessed; the model is never asked to cite anything, so evidence may over-report (accessed is not the same as used).
Was this page helpful?