---
title: "Who holds anything in the organization, from grant. (owner/admin/auditor)"
method: GET
path: "/orgs/{org_id}/grants/holders"
tags: ["Organizations"]
---

# Who holds anything in the organization, from grant. (owner/admin/auditor)

`GET /orgs/{org_id}/grants/holders`

## Request

- Base URL: `https://api.mnemom.ai/v1`
- URL: `https://api.mnemom.ai/v1/orgs/{org_id}/grants/holders`
- Auth: HTTP bearer

The org-admin Grants pane's Who-holds read from grant. (canon mn-9rzonp v26/v27): class counts keyed by subject kind, resource type, route and environment over the whole filtered set, and one page of up to 100 holders in byte order after `cursor`, each with its holdings counted. Agents and services are holders as peers of people. No resource id is named. Owner, admin or auditor. `type`, `environment` and `cursor` are each optional and at most once; anything malformed, repeated or unknown is `400 invalid_request` and grant. is not called. Answers `404` exactly as an unknown route while the organization's effective `grant` capability flag is off. `503 grant_unavailable` when grant. is not configured or does not answer; `403 grant_subject_unavailable` when the caller has no Zitadel subject to send.

## Path parameters

- `org_id` string, required

## Query parameters

- `type` string
- `environment` 'test' | 'preview' | 'production'
- `cursor` string

## Response `200`

Who holds anything in the organization

- object
  - `counts` object[], required
    - `subject_kind` 'user' | 'service' | 'agent' | 'team', required
    - `type` string, required
    - `route` 'creator' | 'direct' | 'inherited', required
    - `environment` string, required
    - `holders` integer, required
    - `n` integer, required
  - `holders` object[], required
    - `subject` string, required
    - `held` object[], required
      - `type` string, required
      - `role` string, required
      - `route` 'creator' | 'direct' | 'inherited', required
      - `environment` string, required
      - `n` integer, required
  - `next_cursor` string
  - `approximate` boolean, required

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `429`: Rate-limit exceeded. The global per-IP limiter (100 requests/minute, applied to every `/v1/*` route) rejected this request. Back off until the window resets — `Retry-After` carries the cooldown in seconds and `X-RateLimit-Reset` the absolute reset time.
- `500`: Server error — request was well-formed but the server failed to fulfill it. Typically a downstream dependency (DB / RPC / external API) returned an unexpected error.
- `503`: An upstream dependency is currently unavailable. The request was not processed; retry after the cooldown window.

---

[API](https://skmtc.dev/mnemom/apis/mnemom-api.md) · [All operations](https://skmtc.dev/mnemom/apis/mnemom-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mnemom/apis/mnemom-api/revisions/274b7a6ea182?raw)
