Create done

Marks one step of the caller org's journey complete and returns the refreshed journey.

POST /v1/guide/steps/{id}/done

Addresshttps://api.hanzo.ai/v1/guide/steps/{id}/done
MethodPOST
Operationpost_guide_steps_by_id_done
AuthAuthorization: Bearer $HANZO_API_KEY

Marks one step of the caller org's journey complete and returns the refreshed journey.

Dependency-GATED, exactly as start is: a step whose prerequisites are unfinished is refused 409 carrying {error, step, blockedBy} naming what is in the way.

Request

1 field.

FieldInTypeRequiredDescription
idpathstringyesID is the step's id, as it appears in the journey (e.g. "gsuite").

Response

StatusBodyMeaning
200guide.overviewViewok
defaultproblem-detailsrefused

200 body — 34 fields.

FieldInTypeAlwaysDescription
custombodyboolean—Custom is true when the org replaced the shared playbook with one of its own — the difference between "everyone's checklist" and "the one you authored".
funnelbodyguide.Funnel—
funnel.availablebodyboolean—Available separates "this org has no traffic" from "we could not ask".
funnel.ordersbodyinteger (int64)—Orders counts completed orders in the window — purchases, not carts started.
funnel.pageviewsbodyinteger (int64)—Pageviews counts page events in the window, one per view rather than per person, so a single visitor reading ten pages counts ten.
funnel.revenuebodynumber (double)—Revenue is the sum of the amounts those orders reported, in whatever currency the beacon stamped on them (major units, e.g. 49.5 for $49.50) — NOT cents, and not converted to a single currency.
funnel.signupsbodyinteger (int64)—Signups counts completed signups in the window, the step where an anonymous visitor becomes somebody with an account.
funnel.visitorsbodyinteger (int64)—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.windowDaysbodyinteger (int64)—WindowDays is the length of the trailing window every count covers, so a reader knows whether 40 signups is a month or a day.
progressbodyguide.progressView—
progress.donebodyinteger (int64)—Done counts steps that are FINISHED — done and skipped alike, since a step the org deliberately passed over is not still owed.
progress.nextbodystring—Next is the id of the step to do next: the first available, unfinished step in authoring order.
progress.percentbodyinteger (int64)—Percent is done/total as a whole number 0-100, rounded, so a caller renders a bar without recomputing it.
progress.totalbodyinteger (int64)—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 authored step count.
stepsbodyguide.stepView[]—Steps are every enabled step with the org's own state folded in, in authoring order.
steps[].argsbodyobject—Args are the tool's default arguments, merged under whatever the caller passes at run time.
steps[].args.*bodyany—
steps[].automatablebodyboolean—Automatable is true when the Business AI can run this step (it names a tool).
steps[].availablebodyboolean—Available is true when every dependency is done or skipped.
steps[].blockedBybodystring[]—BlockedBy lists the unfinished dependencies keeping the step unavailable.
steps[].depsbodystring[]—Dependencies are step ids that must be done/skipped before this step is available.
steps[].detailbodystring—Detail is the prose/juncture — what the Guide asks or explains here.
steps[].draftbodystring—Draft, when set, is the prompt the embedded AI answers first; its output is folded into one of Args before the tool runs.
steps[].draftIntobodystring—DraftInto names the argument the drafted text lands in.
steps[].enabledbodyboolean—Enabled is the admin on/off lever; absent reads as enabled.
steps[].idbodystring—ID is the step's id, as it appears in the journey (e.g. "gsuite").
steps[].sectionbodystring—Section is the phase (section id) this step groups under.
steps[].signalbodystring—Signal names the machine detector that auto-marks this step done.
steps[].sourcebodystring—Source records what marked the state: manual, auto (detected) or agent.
steps[].statebodystring—State is the step's per-org lifecycle state: todo|in_progress|done|skipped.
steps[].titlebodystring—Title is the one-line quest as a person reads it in the checklist.
steps[].toolbodystring—Tool is the MCP tool the Business AI runs for "do it for me".
titlebodystring—Title is the playbook's name as it heads the checklist.
versionbodystring—Version identifies the playbook this journey came from, so a caller can tell that the checklist itself changed under them.

Failure carries the platform error shape — see Errors.

Examples

hanzo guide steps done <id>
import { Configuration, GuideApi } from 'hanzoai';

const api = new GuideApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postGuideStepsByIdDone({ id: 'id' });
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_steps_by_id_done(id='id')
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.GuideAPI.PostGuideStepsByIdDone(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::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_steps_by_id_done(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.GuideApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new GuideApi(client).postGuideStepsByIdDone();
curl -X POST https://api.hanzo.ai/v1/guide/steps/<id>/done \
  -H "Authorization: Bearer $HANZO_API_KEY"

MCP reaches guide through the guide tool, which names its 13 operations with its own verbs — this one among them, under a name only MCP 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": "list_guides"
         }
       }
     }'

Guide API · All Hanzo APIs · Interactive reference

Was this page useful?