List API scopes and what this key holds
Return the scope taxonomy and the calling key's effective permissions.
Return the scope taxonomy and the calling key's effective permissions.
Deliberately NOT gated by a scope of its own: a key must always be able to discover why it is being refused, or the first 403 becomes a support ticket.
Read key.grandfathered before anything else. When it is true the key
was minted before scopes existed, carries no scopes field, and therefore
holds every scope listed here — granted shows them all. That is
intentional backwards compatibility, not an over-grant: an absent policy has
never restricted anything, and reinterpreting it as "deny" would break every
integration built against this API so far. An explicitly empty scopes list
is honoured as empty and grants nothing.
keys:write is the one exception in both directions: it is never implied
by a grandfathered key, and it must be granted deliberately, because minting
and revoking credentials is the action that can extend every other one.
Errors: 401 (invalid key), 403 (wrong organization), 429 (rate limited).
Rate limit: 1000 requests per minute per organization (bucket default). Exceeding it returns 429 with Retry-After; the X-RateLimit-* response headers report your remaining allowance on every call.
v2/scopesAuthorization
AuthorizationRequiredBearer <token>
Your Graine API key. Create one in the dashboard under Developers, or via POST /v2/api-keys. Send it as Authorization: Bearer <key>.
In: header
Response Body
200
Every scope this API defines, the endpoints each one gates, and whether the calling key currently holds it.
scopesRequiredScopes
The full taxonomy, in publication order.
keyRequiredKey
What the calling key holds.
noteRequiredNote
How absent, empty and explicit scope lists are interpreted.
401
1100 — missing, unknown or inactive API key. 1101 — a browser session token was presented.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
403
1102 — the key is valid but not for the organisation named in the request.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
429
1300 — per-organisation rate limit exceeded. Carries Retry-After.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
Every scope this API defines, the endpoints each one gates, and whether the calling key currently holds it.

