Skip to content

API Reference

Every endpoint is prefixed with /api/v3/eak/. There are two groups, and they authenticate differently:

Endpoint groupAuthentication
Delegation and tokens (10)Access key signature: sign the request with your workspace AK/SK and put it in the Authorization header. Using the SDK is recommended (it signs automatically); if you call HTTP directly, you can reuse the SDK's exported buildAuthorization to build the signature
Workspaces and access keys (9)Console session: for administrative operations

All responses are JSON. Error codes are listed at the end of the page.

Delegation and token endpoints

GET /api/v3/eak/runtime-config

Fetch the workspace runtime configuration (the endpoint addresses of each service). The SDK calls this automatically at initialization, so you rarely need it by hand.

POST /api/v3/eak/delegations

Start a delegation. mode decides the behavior: interactive returns an authorization link (user-level consent), silent issues immediately (organization-level consent — read Security considerations before using it).

Request fieldTypeRequiredDescription
agentstringAgent identifier
scopesstring[]List of scopes being requested
userIdstringrequired for silentID of the user being delegated for (the SDK has moved to user: { id }; this parameter is the HTTP contract)
modesilent | interactivedefaults to silentAuthorization mode
redirectUristringrequired for interactiveWhere to return after authorization completes
statestringrequired for interactiveYour business return state
expiresInnumberoptionalToken lifetime (seconds, 60–86400)

Response (silent): { mode: "silent", tokenType: "Bearer", delegationToken, delegateAgentToken, expiresIn, grantId, auditId }Response (interactive): { mode: "interactive", authorizationUrl, grantId, grantState, state, requestedScopes? }

Field names differ between HTTP and the SDK

In the HTTP response, the Delegate Token field is named delegationToken (delegateAgentToken is a legacy alias with the same value — use the former in new code). The SDK renames it to token and additionally provides grantedScopesthat is the SDK shape; neither key exists in the HTTP response. Mixing the two gets you undefined. For the mapping table, see SDK Reference.

POST /api/v3/eak/delegations/complete

Exchange the post-authorization callback parameters for a Delegate Token (SDK: completeDelegateToken).

Request fieldTypeDescription
grantIdstringGrant record ID
codestringAuthorization completion code
statestringAuthorization state

Response: a Delegate Token object, same shape as the silent response (mode / tokenType / delegationToken / delegateAgentToken / expiresIn / grantId / auditId).

The following four endpoints serve the page flow of interactive consent. If you use the hosted authorization page you never call them directly; if you build your own authorization experience, integrate against the request contracts below (the responses are flow-semantic objects — the interface Swagger is authoritative for their shape):

EndpointPurposeRequest fields
GET /api/v3/eak/delegations/:grantId/approval-contextResolve the authorization login context (returns the login entry point and the request details)query: grant_state, redirect_uri, state?
POST /api/v3/eak/delegations/auth/completeComplete the OIDC login callback for the authorization pagecode, state, redirectUri
POST /api/v3/eak/delegations/:grantId/approveThe user approves the authorization and a one-time callback code is generated (returns the return URL)userId?, userPoolId?
POST /api/v3/eak/delegations/callback/consumeConsume the one-time code and issue the Delegate Token (the code is single-use; replays fail)code, state

The response of callback/consume is a Delegate Token object (again: delegationToken is the token field name).

POST /api/v3/eak/token-exchange

Token exchange (RFC 8693 semantics): trade a Delegate Token for an access token for the target product.

Request fieldTypeRequiredDescription
subjectTokenstringThe Delegate Token
resourcegumem | webagentThe target product resource
scopesstring[]optionalProduct scopes needed for this exchange (must be a subset of the scopes already granted on the Delegate Token)

Response: { token, tokenType, expiresIn?, scope? } (the snake_case aliases access_token / token_type / expires_in are provided as well, so you can parse it the usual OAuth way). For the field structure of the access token, see Token and claim reference.

POST /api/v3/eak/genauth/admin-token

Obtain a management-plane access token (for server-side administrative operations, such as reading and writing the user directory). Response essentials: the management-plane accessToken and the user pool it applies to.

POST /api/v3/eak/delegations/introspect

Validate a Delegate Token online.

Request fieldTypeDescription
tokenstringThe Delegate Token

Response: when valid, { "active": true, ...all Delegate Token claims }; when invalid, expired, or malformed, always { "active": false } (the reason for failure is not disclosed).

Workspace and access key endpoints

A workspace is the isolation unit of the delegation model: it binds a user pool and product resources, and holds access keys.

EndpointPurpose
GET /api/v3/eak/tenantsList workspaces
POST /api/v3/eak/tenantsCreate a workspace
GET /api/v3/eak/tenants/:eakTenantIdWorkspace details
PATCH /api/v3/eak/tenants/:eakTenantIdUpdate a workspace
GET /api/v3/eak/tenants/:eakTenantId/credentialsList access keys
POST /api/v3/eak/tenants/:eakTenantId/credentialsCreate an access key
POST /api/v3/eak/tenants/:eakTenantId/credentials/:accessKeyId/rotateRotate a key
PATCH /api/v3/eak/tenants/:eakTenantId/credentials/:accessKeyIdEnable/disable or update a key
DELETE /api/v3/eak/tenants/:eakTenantId/credentials/:accessKeyIdDelete a key

Create a workspace (POST /tenants) request fields: name (required), description?, genauthUserPoolId?, gumemProjectId?, webAgentTenantId?, delegationLoginCallbackUrl?, idempotencyKey?, status?.

Create / update access key request fields:

FieldEndpointDescription
allowedScopescreate / updateAllowlist of scopes this key may request delegations for
allowedAgentscreate / updateAllowlist of agents this key may delegate to
enableupdateEnable or disable the key (disabling takes effect immediately — see Revocation and emergency response)

Key security

The secret is returned only once, at creation and at rotation. Each workspace has a quota on the number of keys (see Limits). Always configure allowedScopes as the smallest possible set — it is the first gate on delegation (see Security considerations).

Error codes

Error responses carry code and requestId. At the HTTP layer, code is a dotted eak.* code, grouped into families by domain:

Code familyTypical codesCommon causesHTTP status
anima.auth.*anima.auth.invalid_signature, anima.auth.invalid_authorization_header, anima.auth.credential_disabledBad signature, malformed Authorization header, key already disabled401
eak.delegation.*eak.delegation.agent_not_allowed, eak.delegation.scope_not_allowed, eak.delegation.expires_in_invalid, eak.delegation.grant_invalid_or_expired, eak.delegation.user_not_boundAgent or scope outside the key's allowlist, lifetime out of range, grant record invalid or expired, user not in the bound user pool400 / 403
eak.token_exchange.*eak.token_exchange.upstream_failed, eak.token_exchange.invalid_upstream_responseThe upstream call during token exchange failed502
anima.genauth.*anima.genauth.userpool_binding_missing, anima.genauth.no_bound_usersThe workspace has no user pool bound, or the pool has no users400

The SDK's error codes are consolidated

The SDK folds the backend codes above into a small set of stable typed errors (auth.failed / delegation.required / permission_denied / token.expired / validation.failed / rate_limit.exceeded, and so on) and throws the matching error class. Over raw HTTP, branch on the eak.* code; with the SDK, branch on the error class — for the mapping, see SDK Reference.

Next steps