Returns the organizations you can see, newest first.
Returns the organizations you can see, newest first. Narrow it to one parent account, and set a limit and offset to page through the rest.
GET /v1/iam/organizations
| Address | https://api.hanzo.ai/v1/iam/organizations |
| Method | GET |
| Operation | listOrganizations |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Returns the organizations you can see, newest first. Narrow it to one parent account, and set a limit and offset to page through the rest.
READING THE REGISTRY IS AN OPERATOR ACT, and the handler now says so itself.
It never did: the scope lived only in the Guard, which refuses a non-operator GET with 403 before the handler runs. That was true and sufficient for as long as HTTP was the only way in. It stopped being sufficient when the same typed op became reachable over the agent door, where a request arrives at the handler with no middleware in front of it. A handler that reads no principal and treats an absent Owner selector as no filter would answer such a caller with the whole registry, so the scope has to be the handler's own, not the door's.
So the fact moves to where every door reaches it. The Guard keeps its own refusal — two checks of one rule is not two rules, and the outer one still spends nothing to refuse — but the rule no longer depends on which door was used. A caller who wants the organizations they can ACT in asks Search, which answers everyone from their own memberships.
Request
3 fields.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
owner | query | string | — | |
limit | query | integer | — | |
offset | query | integer | — |
Response
| Status | Body | Meaning |
|---|---|---|
200 | iam.ListOrganizationsOutput | ok |
200 body — 76 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
count | body | integer | — | |
organizations | body | iam.Organization[] | — | |
organizations[].accountItems | body | iam.AccountItem[] | — | |
organizations[].accountItems[].modifyRule | body | string | — | |
organizations[].accountItems[].name | body | string | — | |
organizations[].accountItems[].regex | body | string | — | |
organizations[].accountItems[].tab | body | string | — | |
organizations[].accountItems[].viewRule | body | string | — | |
organizations[].accountItems[].visible | body | boolean | — | |
organizations[].accountMenu | body | string | — | |
organizations[].avatar | body | string | — | How the organization appears across Hanzo — the square mark beside its name — as an image or as one emoji, never both. |
organizations[].balanceCredit | body | number | — | |
organizations[].balanceCurrency | body | string | — | |
organizations[].countryCodes | body | string[] | — | |
organizations[].createdAt | body | string (date-time) | — | |
organizations[].createdTime | body | string | — | |
organizations[].dcrPolicy | body | string | — | |
organizations[].defaultApplication | body | string | — | |
organizations[].defaultAvatar | body | string | — | |
organizations[].defaultPassword | body | string | — | |
organizations[].deleted | body | boolean | — | |
organizations[].disableSignin | body | boolean | — | |
organizations[].displayName | body | string | — | |
organizations[].emoji | body | string | — | |
organizations[].enableSoftDeletion | body | boolean | — | |
organizations[].enableTour | body | boolean | — | |
organizations[].failedSigninFrozenTime | body | integer | — | |
organizations[].failedSigninLimit | body | integer | — | Per-organization signin throttle. Zero means "inherit the application default"; a non-zero value overrides it. |
organizations[].favicon | body | string | — | |
organizations[].founder | body | string | — | Founder is the stable storage id of the identity that provisioned this org (self-service onboarding). |
organizations[].hasPrivilegeConsent | body | boolean | — | |
organizations[].id | body | string | — | |
organizations[].initScore | body | integer | — | |
organizations[].ipRestriction | body | string | — | |
organizations[].ipWhitelist | body | string | — | |
organizations[].isPersonal | body | boolean | — | |
organizations[].isProfilePublic | body | boolean | — | |
organizations[].kerberosKdcHost | body | string | — | |
organizations[].kerberosKeytab | body | string | — | |
organizations[].kerberosRealm | body | string | — | |
organizations[].kerberosServiceName | body | string | — | |
organizations[].languages | body | string[] | — | |
organizations[].ldapAttributes | body | string[] | — | |
organizations[].logo | body | string | — | |
organizations[].logoDark | body | string | — | |
organizations[].masterPassword | body | string | — | |
organizations[].masterVerificationCode | body | string | — | |
organizations[].mfaItems | body | iam.MfaItem[] | — | |
organizations[].mfaItems[].name | body | string | — | |
organizations[].mfaItems[].rule | body | string | — | |
organizations[].mfaRememberInHours | body | integer | — | |
organizations[].name | body | string | — | |
organizations[].navItems | body | string[] | — | |
organizations[].orgBalance | body | number | — | Balance fields are read-only mirrors; authoritative balances live in Commerce (billing.hanzo.ai). |
organizations[].owner | body | string | — | |
organizations[].passwordExpireDays | body | integer | — | |
organizations[].passwordObfuscatorKey | body | string | — | |
organizations[].passwordObfuscatorType | body | string | — | |
organizations[].passwordOptions | body | string[] | — | |
organizations[].passwordSalt | body | string | — | |
organizations[].passwordType | body | string | — | |
organizations[].tags | body | string[] | — | |
organizations[].themeData | body | iam.ThemeData | — | |
organizations[].themeData.borderRadius | body | integer | — | |
organizations[].themeData.colorPrimary | body | string | — | |
organizations[].themeData.isCompact | body | boolean | — | |
organizations[].themeData.isEnabled | body | boolean | — | |
organizations[].themeData.themeType | body | string | — | |
organizations[].updatedAt | body | string (date-time) | — | |
organizations[].useEmailAsUsername | body | boolean | — | |
organizations[].usePermanentAvatar | body | boolean | — | |
organizations[].userBalance | body | number | — | |
organizations[].userNavItems | body | string[] | — | |
organizations[].userTypes | body | string[] | — | |
organizations[].websiteUrl | body | string | — | |
organizations[].widgetItems | body | string[] | — |
Failure carries the platform error shape — see Errors.
Examples
hanzo iam organizations getimport { Configuration, IamApi } from 'hanzoai';
const api = new IamApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.listOrganizations();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import IamApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = IamApi(client).list_organizations()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.IamAPI.ListOrganizations(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, iam_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = iam_api::list_organizations(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.IamApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new IamApi(client).listOrganizations();curl https://api.hanzo.ai/v1/iam/organizations \
-H "Authorization: Bearer $HANZO_API_KEY"Tool iam, op listOrganizations — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "iam",
"arguments": {
"op": "listOrganizations",
"input": {}
}
}
}'How is this guide?