GET /v2/keeper/config requires primary authentication and no additional permission.
It is available after initialization, including while the Keeper is sealed or needs
a restart after quorum promotion. Operation mandates and enrollment invitations cannot
authorize it.
{"threshold":2,"total":3,"features":["core","ecies","mandate"],"authorities":["arbitrary","custom"],"sealProvider":"shamir"}
threshold and total describe the current stored quorum, including changes made by
promotion. sealProvider is the configured provider id, such as shamir, hsm, aws
or google; provider secrets and connection settings are not returned.
features contains sorted, unique ids of loaded modules, including core. Each runtime feature
provides a singleton implementation of the core KeeperModule interface with one
method, id(): String. No central feature catalog or config flag determines this list.
Nested module ids retain their path, for example digital-assets:evm, recovery:ecc
and agentic-payments:ap2. Shared runtime dependencies such as agentic-payments are
included when loaded. The digital-assets Gradle aggregation project has no runtime
artifact; only its selected chain modules appear. Cryptographic platforms are separate.
The Java SDK exposes this response as keeper.central().getConfig().
authorities contains sorted, unique authority types supported by the loaded modules.
Core supplies custom and, when enabled, arbitrary. For example, the EVM module adds
evm.transaction. This is a runtime capability list; it does not describe authorities attached to
a key or grant access to one.
Identity catalog
GET /v1/keeper/control/identities?lastSeen=<keyId>&limit=50 lists active identities
the caller may sign with. The default page size is 50 and the maximum is 100.
The response contains items and nextCursor; pass a non-null cursor as the next
request's lastSeen. Sealed Keepers reject catalog requests. Tampered identities and
identities without active key material are excluded.
GET /v1/keeper/control/identities/authority?keyId=<keyId>&authorityId=<authorityId> returns the
attached authority's id, type, version, description and command JSON Schema. The caller
needs tkeeper.key.<keyId>.sign. Unknown or unattached authorities are rejected.
The schema describes command input; the policy still decides whether it may execute.
An identity page has this shape:
{
"items": [{"keyId":"payments-key","algorithm":"P256","generation":2,"authorities":["payments"]}],
"nextCursor": "payments-key"
}
nextCursor is null on the last page. Each item names authority ids attached to its active
generation. Describe one of those ids to obtain commandSchema, which covers the complete
command object: type, authorityId and artifact. Authority version and description
can be null, including for the built-in arbitrary authority.
Both endpoints are core APIs and send Cache-Control: no-store. They do not require
inventory permissions. The SDK methods are keeper.controlPlane().listIdentities()
and keeper.controlPlane().describeAuthority(keyId, authorityId).
Pass the cursor explicitly when using the SDK:
var first = keeper.controlPlane().listIdentities(null, 50);
if (first.nextCursor() != null) {
var next = keeper.controlPlane().listIdentities(first.nextCursor(), 50);
}
Approval deadlines
Responses in approval flows include X-EXPIRES-AT, a Unix timestamp in whole seconds:
- WebAuthn enrollment options use the stored registration session deadline, including when a follower forwards the request to the writer.
- WebAuthn approval preparation uses the signed challenge's deadline.
- Operations with collected approval requirements include their approval window on
success and on approval errors, including
APPROVAL_REQUIREDand insufficient proofs. - Mandate issuance uses the issued mandate's deadline.
JSON expiresAt values remain in milliseconds. The header truncates the fractional
second. Repeating preparation or execution keeps the original approval deadline:
approvals.timestamp + keeper.approval.ttl. It does not create a fresh TTL.
Authentication, current policy and replay checks still apply independently of this
deadline. Synchronous operations without approval requirements do not acquire a TTL.