List entitlement
Projection reports which console apps the CALLER's org may open, and the plan slug that decides it.
GET /v1/entitlement
| Address | https://api.hanzo.ai/v1/entitlement |
| Method | GET |
| Operation | get_entitlement |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Projection reports which console apps the CALLER's org may open, and the plan slug that decides it. It is the READ side of the unified paywall: the org's plan tier resolved from commerce, which is a different authority from the enablement store behind GET /v1/entitlement/orgs/{org} (that one is the org's own on/off intent).
It fails SAFE-TO-LOCKED, never 500: an unvalidated principal is a 403, but a commerce outage reports every app locked at 200 rather than breaking the shell. The ENFORCEMENT path still fails open, so functionality survives the same outage even while the UI conservatively shows locked.
Request
GET /v1/entitlement takes no parameters and no body — the credential is the whole request.
Response
| Status | Body | Meaning |
|---|---|---|
200 | projectionView | ok |
200 body — 3 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
apps | body | object | — | Apps says, per console app, whether the org may open it. |
apps.* | body | boolean | — | |
tier | body | string | — | Tier is the plan slug commerce resolved for the org, or "" when the org has no active licensing subscription — which the console treats as its free default. |
Failure carries the platform error shape — see Errors.
Examples
hanzo entitlement getimport { Configuration, EntitlementApi } from 'hanzoai';
const api = new EntitlementApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getEntitlement();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import EntitlementApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = EntitlementApi(client).get_entitlement()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.EntitlementAPI.GetEntitlement(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, entitlement_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = entitlement_api::get_entitlement(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.EntitlementApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new EntitlementApi(client).getEntitlement();curl https://api.hanzo.ai/v1/entitlement \
-H "Authorization: Bearer $HANZO_API_KEY"MCP reaches entitlement through the entitlements tool, which names its 3 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_entitlements"
}
}
}'How is this guide?