Post
Post — 8 operations on https://api.hanzo.ai.
The REST reference for Post — 8 operations, generated from the OpenAPI document.
| Base URL | https://api.hanzo.ai |
| Operations | 8 |
| Auth | Authorization: Bearer $HANZO_API_KEY |
commerce
POST /_/commerce/tenants
Create a checkout tenant: hostnames, brand, IAM, IDV, providers and backend
Registers a new hosted-checkout tenant so its hostnames resolve to their own branding, identity config, payment providers and broker backend. PLATFORM admin only — the reserved admin org's owner claim; an org owner with the org-level admin bit is refused 403 and an anonymous caller 401, so a tenant can never be minted from inside a tenant. A duplicate name is 409 and a malformed hostname 400. The response echoes only the identity and timestamps, never the provider records the caller just sent, and the mutation is audited by hash rather than by content so a credential that slips into the body is not replayable from the log.
git
POST /{org}/{project}/{repo}/git-receive-pack
Accept a push, and turn it into a build
The pack-transfer phase of a push, and the point at which a push becomes an EVENT. NEVER ANONYMOUS: a push always requires an authenticated org, and the org in the path must equal it.
Once the pack is on disk the repository's storage usage is metered and a build is fired for every branch whose tip actually moved, computed from the before/after branch diff rather than from what the client claimed. That runs on a cancel-immune context, so a client that hangs up the moment its push lands still gets its build, and it runs even when git itself exited non-zero — the refs on disk are the ground truth. Repacking housekeeping is detached and never blocks the response.
A Content-Type other than application/x-git-receive-pack-request is 400. Addressed at the git host's root with the PROJECT as a middle path segment — the canonical-URL form of the project-scoped remote, since a git client has no header to carry a project. Served only on the dedicated git host; elsewhere it falls through. This is git's own wire protocol, not an API call to make by hand: point a git client at the clone URL and it makes this request itself.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org | path | string | yes | |
project | path | string | yes | |
repo | path | string | yes |
POST /{org}/{project}/{repo}/git-upload-pack
Serve a clone or fetch
The pack-transfer phase of a clone or fetch: the request and the response are git's binary pack protocol, streamed straight through git itself — request body to git's stdin, git's stdout to the response — so a multi-gigabyte clone never lands in this process's memory.
A PUBLIC repository is fetched anonymously; a private one requires its own org, and a wrong or absent org is 404 rather than a hint that the repository exists. A Content-Type other than application/x-git-upload-pack-request is 400. Addressed at the git host's root with the PROJECT as a middle path segment — the canonical-URL form of the project-scoped remote, since a git client has no header to carry a project. Served only on the dedicated git host; elsewhere it falls through. This is git's own wire protocol, not an API call to make by hand: point a git client at the clone URL and it makes this request itself.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org | path | string | yes | |
project | path | string | yes | |
repo | path | string | yes |
POST /{org}/{repo}/git-receive-pack
Accept a push, and turn it into a build
The pack-transfer phase of a push, and the point at which a push becomes an EVENT. NEVER ANONYMOUS: a push always requires an authenticated org, and the org in the path must equal it.
Once the pack is on disk the repository's storage usage is metered and a build is fired for every branch whose tip actually moved, computed from the before/after branch diff rather than from what the client claimed. That runs on a cancel-immune context, so a client that hangs up the moment its push lands still gets its build, and it runs even when git itself exited non-zero — the refs on disk are the ground truth. Repacking housekeeping is detached and never blocks the response.
A Content-Type other than application/x-git-receive-pack-request is 400. Addressed at the git host's root, so git clone https://<git-host>/<org>/<repo>.git works with the canonical URL and no prefix. Served ONLY on the dedicated git host; on the API and console hosts it falls through, so a bare /:org/:repo can never shadow another surface. This is git's own wire protocol, not an API call to make by hand: point a git client at the clone URL and it makes this request itself.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org | path | string | yes | |
repo | path | string | yes |
POST /{org}/{repo}/git-upload-pack
Serve a clone or fetch
The pack-transfer phase of a clone or fetch: the request and the response are git's binary pack protocol, streamed straight through git itself — request body to git's stdin, git's stdout to the response — so a multi-gigabyte clone never lands in this process's memory.
A PUBLIC repository is fetched anonymously; a private one requires its own org, and a wrong or absent org is 404 rather than a hint that the repository exists. A Content-Type other than application/x-git-upload-pack-request is 400. Addressed at the git host's root, so git clone https://<git-host>/<org>/<repo>.git works with the canonical URL and no prefix. Served ONLY on the dedicated git host; on the API and console hosts it falls through, so a bare /:org/:repo can never shadow another surface. This is git's own wire protocol, not an API call to make by hand: point a git client at the clone URL and it makes this request itself.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org | path | string | yes | |
repo | path | string | yes |
tasks
POST /tasks/{wildcard1}
The tasks console's assets and client-side routes
Serves the console's static assets on GET, and returns the application shell for any path that is not a file — client-side routing means a deep link into the console is a shell load, not a 404.
A path that looks like a missing asset therefore answers 200 with HTML rather than 404; look at the content type, not the status, when a resource seems to be missing.
This is the task console itself — HTML and hashed assets, not an API. Only GET and HEAD are served; every other method is refused 405. Hashed assets are returned immutable and cached for a year, while the shell is always revalidated, so a new deployment replaces a stale console on the next request.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
wildcard1 | path | string | yes |
POST /tasks
The tasks console
Serves the console's application shell on GET, which is the entry point a browser loads before it calls anything under /v1/tasks/.
This is the task console itself — HTML and hashed assets, not an API. Only GET and HEAD are served; every other method is refused 405. Hashed assets are returned immutable and cached for a year, while the shell is always revalidated, so a new deployment replaces a stale console on the next request.
team
POST /collaborator/rpc/{documentId}
CollabRPC is the collaborative-markup snapshot plane the Team front's editor speaks: createContent stores a document field's markup at a fresh, immutable blob ref and returns it, updateContent stores a new snapshot and answers nothing, and getContent reads back the exact snapshot a ref names.
createContent ALSO seeds the live-editing update log from the front-supplied Y.js update, so a dialog-authored description is visible in the collaborative editor — which replays that log — and not only in snapshot reads. updateContent never touches that log: peers may be live-editing the document, and their edits are not this call's to overwrite.
Every call is scoped to the caller's VERIFIED session or workspace token: the documentId's workspace must be the token's workspace when the token names one, and the caller must be a member of it. An unknown workspace, another tenant's workspace and a workspace the caller is not in all answer the same 404, so a probe learns nothing about what exists.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
documentId | path | string | yes | DocumentID addresses the document field, as "<workspaceUuid>|<objectClass>|<objectId>|<objectAttr>" — the… |
Request body — application/json (required)
| Field | Type | Required | Description |
|---|---|---|---|
documentId | string | — | DocumentID addresses the document field, as "<workspaceUuid>|<objectClass>|<objectId>|<objectAttr>" — the… |
method | string | — | Method is the verb: createContent, updateContent or getContent. |
payload | collabPayload | — | Payload is the verb's argument. |
How is this guide?