Hanzo

Post

Post — 8 operations on https://api.hanzo.ai.

The REST reference for Post — 8 operations, generated from the OpenAPI document.

Base URLhttps://api.hanzo.ai
Operations8
AuthAuthorization: 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.

ParameterInTypeRequiredDescription
orgpathstringyes
projectpathstringyes
repopathstringyes

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.

ParameterInTypeRequiredDescription
orgpathstringyes
projectpathstringyes
repopathstringyes

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.

ParameterInTypeRequiredDescription
orgpathstringyes
repopathstringyes

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.

ParameterInTypeRequiredDescription
orgpathstringyes
repopathstringyes

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.

ParameterInTypeRequiredDescription
wildcard1pathstringyes

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.

ParameterInTypeRequiredDescription
documentIdpathstringyesDocumentID addresses the document field, as "<workspaceUuid>|<objectClass>|<objectId>|<objectAttr>" — the…

Request bodyapplication/json (required)

FieldTypeRequiredDescription
documentIdstringDocumentID addresses the document field, as "<workspaceUuid>|<objectClass>|<objectId>|<objectAttr>" — the…
methodstringMethod is the verb: createContent, updateContent or getContent.
payloadcollabPayloadPayload is the verb's argument.

All Hanzo APIs · Interactive reference

How is this guide?

On this page