Ask a grounded question about your own org
Answers a natural-language question about the CALLER'S OWN org, from real figures rather than from the model's memory.
POST /v1/ask
| Address | https://api.hanzo.ai/v1/ask |
| Method | POST |
| Operation | post_ask |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Answers a natural-language question about the CALLER'S OWN org, from real figures rather than from the model's memory.
The question is classified to a grounded domain, that domain's read runs IN-PROCESS under the caller's own credentials, and only then is the result narrated. So the figures and their sources are the domain's, resolved before any model call and never altered by one — a wrong answer is a wrong query, never an invention.
Domains: books (the org's ledger), projects (what is built and what of it is deployed), git (the org's repositories and what changed in them), and web (search, news, research, deep). A validated principal is required; the answer is scoped to that principal's org and nothing else.
Request
11 fields, body application/json.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
followUps | body | boolean | — | |
language | body | string | — | |
maxQueries | body | integer | — | |
maxSources | body | integer | — | |
mode | body | string | — | |
model | body | string | — | |
q | body | string | — | |
question | body | string | — | |
sources | body | string[] | — | |
stream | body | boolean | — | |
system | body | string | — |
Response
The document declares no response body for this operation. It answers 200 on success and the platform error shape on failure — see Errors.
Examples
hanzo ask createimport { Configuration, AskApi } from 'hanzoai';
const api = new AskApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postAsk({ followUps: false, language: "<language>" });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import AskApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = AskApi(client).post_ask(follow_ups=False, language="<language>")cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.AskAPI.PostAsk(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, ask_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = ask_api::post_ask(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.AskApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new AskApi(client).postAsk();curl -X POST https://api.hanzo.ai/v1/ask \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"followUps": false,
"language": "<language>"
}'The door declares no tool for ask — tools/list on https://api.hanzo.ai/v1/mcp names the products it does reach. Use HTTP or an SDK.
How is this guide?