Plans
Package plan is the plan catalog: every tier you can buy, what it costs, and what it grants.
Package plan is the plan catalog: every tier you can buy, what it costs, and what it grants.
| Base URL | https://api.hanzo.ai |
| Operations | 20 |
| Auth | Authorization: Bearer $HANZO_API_KEY |
plans
GET /v1/plans/blockchain
Returns the blockchain RPC plan catalog: the tiers metered in monthly compute units, with their prices, limits and overage terms. It is the canonical catalog for every caller — these plans carry no reseller overrides.
GET /v1/plans/cloud
Returns the cloud plan catalog. It is the same section ListCloudPlans answers and a separate operation because it is a separate address, and an address is what every projection keys on.
GET /v1/plans/dns
ListDNSPlans returns the DNS plan catalog: the tiers priced on zones, records per zone and queries per day. It is the canonical catalog for every caller — these plans carry no reseller overrides.
GET /v1/plans/entitlements/{id}
Returns what one plan GRANTS and not what it costs: the canonical namespaced entitlement block and the flat license-feature list derived from it. It is the entitlement half of ResolvePlan, over the same catalog and the same 404 for an id no catalog holds — the read a licensing or quota gate makes.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | ID is the plan's catalog id or slug — "pro", "team", "world-enterprise", "rpc-growth". |
PUT /v1/plans/entries/{slug}
Edit a plan, leaving the fields you omit alone
Loads the addressed plan, applies the body over it and answers the stored result, so a partial edit never silently zeroes a price or the contact-sales flag. The slug is IMMUTABLE: a body naming a different slug is rejected outright before anything is written, because a rename would orphan every subscription that stored the old id — deprecate and create instead. An admin edit marks the row authoritative so the seed stops correcting it. PLATFORM admin only; an unknown slug is 404.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
slug | path | string | yes |
DELETE /v1/plans/entries/{slug}
Remove a plan from the authority
Deletes the addressed plan and answers 204. It removes the plan from the catalog buyers choose from; it does not touch subscriptions already sold against it, which keep their stored plan id. PLATFORM admin only — an org-level admin is refused 403 — and an unknown slug is 404.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
slug | path | string | yes |
GET /v1/plans/entries
The raw plan authority rows
Returns every plan row as stored — the administrative view behind the public plan catalog. The plan authority is cross-tenant pricing data, so the gate is a PLATFORM admin enforced by the handler itself: an org-level admin is refused 403 no matter what they may do inside their own org.
POST /v1/plans/entries
Add a subscription plan
Creates a plan from the body and answers it at 201. The slug is required and globally unique — a duplicate is 409 — and the row is marked authoritative on creation, so the corrective seed will leave it alone. Price, annual price and the contact-sales flag are stored exactly as sent, never coerced, so the difference between a free plan and a quote-only plan survives. PLATFORM admin only.
GET /v1/plans/gpu
ListGPUTiers returns the rentable GPU configurations, each with its accelerator count and model, VRAM, vCPUs, host memory and hourly price.
GET /v1/plans/health
Health reports that the plans subsystem is mounted and serving. It answers from the process itself and consults neither the catalog bundle nor the goja host, so it stays "ok" while either is degraded.
GET /v1/plans/policy
Returns the published pricing policy: whether pricing is transparent, the revenue-sharing terms (idle compute resale and the open-source share) and the principles the catalog is priced by.
GET /v1/plans/regions
Returns the regions cloud capacity is offered in, each with its display name and physical location.
GET /v1/plans/resolve/{id}
Resolves one plan to everything a consumer of the catalog needs at once: its canonical entitlement block, the flat license-feature list a signed license carries, its billing reference, and the catalog it came from. The id may be the plan's id or its slug, and it is resolved against the caller's catalog, so a reseller's override wins over the canonical record. An id no catalog holds answers 404.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | ID is the plan's catalog id or slug — "pro", "team", "world-enterprise", "rpc-growth". |
GET /v1/plans/schema
Returns the two JSON Schema documents this surface speaks: entitlements.schema.json, which declares every entitlement key with its type, unit and enum, and plan.schema.json, which a catalog plan record conforms to.
POST /v1/plans/seed
Seed the embedded plan catalog, without overwriting administrative edits
Upserts the shipped plan rows and answers how many were created and how many corrected. It is idempotent and non-destructive — a row an administrator authored or edited is left as it stands — so it is safe against a live authority and fills only what is missing or has drifted. PLATFORM admin only, and a deployment with no seed source wired answers 500 rather than quietly seeding nothing.
GET /v1/plans/storage
Returns the block-storage price block: the price per GB per month and the volume size bounds a cloud plan may attach.
GET /v1/plans/subscriptions
Returns the subscription ladder — the personal and team tiers a customer buys to use the cloud, each with its monthly and annual price, seat rules, limits and billing reference. Scoped to the caller's catalog.
GET /v1/plans/tools
Returns the per-use price of every metered tool — web search, code interpreter, image generation, speech — each with the unit it is billed in.
GET /v1/plans/vocab
Returns the entitlement key vocabulary: every key with its namespace, JSON type, nullability, unit, enum and title, the list of namespaces, and the engine features a license can grant. It is derived from entitlements.schema.json on every call, so it cannot fall behind the schema.
GET /v1/plans
Returns the Hanzo cloud plan catalog: every cloud tier with its price, included capacity, limits and feature list, scoped to the caller's catalog. A reseller org sees its own overrides in place of the canonical records it has replaced, and the canonical record for every tier it has not.
How is this guide?