The calling principal and its tenant grants
const url = 'https://example.com/v1/auth/whoami';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/v1/auth/whoami \ --header 'Authorization: Bearer <token>'Returns the calling principal, its tenant grants, and the effective permission set it holds in each of them.
Authorizations
Section titled “Authorizations ”Responses
Section titled “ Responses ”OK
object
Authentication assurance level (sessions only)
Authentication method references (sessions only)
object
Present only when this membership is confined to a workspace: the principal may act only within it, enforced server-side on every request.
The principal’s EFFECTIVE permission set in this tenant, sorted. The console answers “may I?” by membership of this set. It is the tenant-wide RBAC floor over the permissions this binary serves, minus the workspace-confinement forbids that hold regardless of target; authored scoped grants/forbids and the ABAC deny-overlay are decided per resource and are NOT reflected.
Example
{ "kind": "user"}Bad request
object
object
Example generated
{ "error": { "code": "example", "message": "example" }}Unauthenticated
object
object
Example generated
{ "error": { "code": "example", "message": "example" }}Forbidden
object
object
Example generated
{ "error": { "code": "example", "message": "example" }}Not found
object
object
Example generated
{ "error": { "code": "example", "message": "example" }}Conflict / setup required
object
object
Example generated
{ "error": { "code": "example", "message": "example" }}Rate limited
object
object
Example generated
{ "error": { "code": "example", "message": "example" }}