Chat answers a founder's question about their launch journey as the Business AI…
Chat answers a founder's question about their launch journey as the Business AI coach: it grounds the reply in the org's REAL progress, its ranked…
POST /v1/guide/chat
| Address | https://api.hanzo.ai/v1/guide/chat |
| Method | POST |
| Operation | post_guide_chat |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Chat answers a founder's question about their launch journey as the Business AI coach: it grounds the reply in the org's REAL progress, its ranked available quests and its analytics funnel, and returns those candidate quests alongside so the caller can act on one. READ-ONLY — it advises and never runs a step, so it cannot be talked into performing an action; the only executing path is POST /v1/guide/steps/{id}/do. One AI completion per call, billed to the caller's own payer.
Request
1 field, body application/json (required).
| Field | In | Type | Required | Description |
|---|---|---|---|---|
message | body | string | — | Message is the founder's question for the Business AI. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | chatResponse | ok |
200 body — 16 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
funnel | body | Funnel | — | |
funnel.available | body | boolean | — | Available separates "this org has no traffic" from "we could not ask". |
funnel.orders | body | integer | — | Orders counts completed orders in the window — purchases, not carts started. |
funnel.pageviews | body | integer | — | Pageviews counts page events in the window, one per view rather than per person, so a single visitor reading ten pages counts ten. |
funnel.revenue | body | number | — | Revenue is the sum of the amounts those orders reported, in whatever currency the beacon stamped on them (major units, e.g. |
funnel.signups | body | integer | — | Signups counts completed signups in the window, the step where an anonymous visitor becomes somebody with an account. |
funnel.visitors | body | integer | — | Visitors is the number of DISTINCT people seen in the window, counted by the beacon's distinct id — so it is unique visitors, not sessions and not views. |
funnel.windowDays | body | integer | — | WindowDays is the length of the trailing window every count covers, so a reader knows whether 40 signups is a month or a day. |
reply | body | string | — | Reply is the coach's answer, grounded only in the quests and funnel below. |
suggestions | body | suggestion[] | — | Suggestions are the current candidate quests, ranked best-first. |
suggestions[].automatable | body | boolean | — | Automatable is true when the step names a tool, so the Business AI can do it rather than only describe it. |
suggestions[].detail | body | string | — | Detail is the step's own prose — what it asks for. |
suggestions[].rationale | body | string | — | Rationale is why this step is being suggested NOW, written for the person reading it. |
suggestions[].stepId | body | string | — | StepID is the checklist step being recommended — the id every step route takes, so a caller can act on the suggestion directly. |
suggestions[].title | body | string | — | Title is the step's own one-line quest. |
suggestions[].unlocks | body | integer | — | Unlocks is how many downstream steps completing this one immediately makes available (its leverage) — the primary ranking key. |
Failure carries the platform error shape — see Errors.
Examples
hanzo guide chatimport { Configuration, GuideApi } from 'hanzoai';
const api = new GuideApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postGuideChat({ message: "<message>" });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import GuideApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = GuideApi(client).post_guide_chat(message="<message>")cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.GuideAPI.PostGuideChat(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, guide_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = guide_api::post_guide_chat(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.GuideApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new GuideApi(client).postGuideChat();curl -X POST https://api.hanzo.ai/v1/guide/chat \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "<message>"
}'The door reaches guide through the guide tool, which names its 19 operations with its own verbs — this one among them, under a name only the door declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "get_guide"
}
}
}'How is this guide?