Profile returns the caller org's OBSERVED growth profile — the signal set, the…
Profile returns the caller org's OBSERVED growth profile — the signal set, the classified growth stage, and the org's own key metrics.
GET /v1/guide/profile
| Address | https://api.hanzo.ai/v1/guide/profile |
| Method | GET |
| Operation | get_guide_profile |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Profile returns the caller org's OBSERVED growth profile — the signal set, the classified growth stage, and the org's own key metrics. It is a pure READ, recomputed from the org's CURRENT state each request (real-time by pull): it reuses the reconcile path (snapshotFor runs the detectors) for launch progress and runs the growth probes (observe) for the signals — it never caches, never runs a billable effect, never targets another org. Org-scoped on the validated principal; fail-closed without one. It PRODUCES the profile and classifies the stage; it decides NO recommendation (that is a later surface).
Request
GET /v1/guide/profile takes no parameters and no body — the credential is the whole request.
Response
| Status | Body | Meaning |
|---|---|---|
200 | profileResponse | ok |
200 body — 19 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
keyMetrics | body | profileMetrics | — | |
keyMetrics.funnel | body | Funnel | — | |
keyMetrics.funnel.available | body | boolean | — | Available separates "this org has no traffic" from "we could not ask". |
keyMetrics.funnel.orders | body | integer | — | Orders counts completed orders in the window — purchases, not carts started. |
keyMetrics.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. |
keyMetrics.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. |
keyMetrics.funnel.signups | body | integer | — | Signups counts completed signups in the window, the step where an anonymous visitor becomes somebody with an account. |
keyMetrics.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. |
keyMetrics.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. |
keyMetrics.launchProgress | body | progressView | — | |
keyMetrics.launchProgress.done | body | integer | — | Done counts steps that are FINISHED — done and skipped alike, since a step the org deliberately passed over is not still owed. |
keyMetrics.launchProgress.next | body | string | — | Next is the id of the step to do next: the first available, unfinished step in authoring order. |
keyMetrics.launchProgress.percent | body | integer | — | Percent is done/total as a whole number 0-100, rounded, so a caller renders a bar without recomputing it. |
keyMetrics.launchProgress.total | body | integer | — | Total is how many steps this org's journey holds — the ENABLED steps of the playbook, so it shrinks when an operator disables one and does not match the… |
keyMetrics.records | body | integer | — | Records is how many business records the org holds — the volume that tells a real book of customers from an empty account. |
keyMetrics.revenueCents | body | integer | — | RevenueCents is the org's money OF RECORD — what its books say, in whole cents, never a float and never a display string. |
signals | body | object | — | Signals is what was observed of the org right now, one boolean per probe. |
signals.* | body | boolean | — | |
stage | body | string | — | Stage is how far the business itself has got — formed, launched, activated or scaling — decided purely from the signals below, and by what the org has ACHIEVED… |
Failure carries the platform error shape — see Errors.
Examples
hanzo guide profileimport { Configuration, GuideApi } from 'hanzoai';
const api = new GuideApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getGuideProfile();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).get_guide_profile()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.GuideAPI.GetGuideProfile(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::get_guide_profile(&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).getGuideProfile();curl https://api.hanzo.ai/v1/guide/profile \
-H "Authorization: Bearer $HANZO_API_KEY"Tool guide, op get_guide_profile — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "guide",
"arguments": {
"op": "get_guide_profile",
"input": {}
}
}
}'How is this guide?