Menu

Admin and CLI

Run your instance from outside your app.

The operator API and the command line: users, sessions, roles, keys, and the day-to-day jobs that are nobody's front end.

Docs · the operator contract

The Admin API.

The official contract for the operator API of a Signet instance (/admin/v1): 124 operations across users, sessions, tokens, delivery and event dead-letters, configuration, audit and stats. Generated from Signet's contract at commit c7649c40bc29, 2026-10-20.

agreementsorganizationsOrganizationsgrantsaudiencestatsusersapp-userssessionsapi-keysssh-machine-issuersservice-principalsauthorization-rolesprincipal-role-grantsoauth-clientsservice-tokenssigning-keysplatform-credentialstokensmessagesdeliverieseventsconfigauditvault

Two authorities, deliberately separate. A running instance serves the auth-wire OpenAPI at /api/auth/open-api/generate-schema, and that document covers the better-auth wire only. This contract lives in the repository and covers the operator API; instances do not serve it.
Each name is also a command. An operationId equals a signetctl command path: users_list is signetctl users list. A build check compares the contract and the CLI in both directions, so they cannot drift apart without a failing test. The exceptions are deliberate and few: operations a hosting platform calls directly over HTTP, such as magic_link_send, have no command, and one HTTP-only control has no operationId; both are listed below like every other operation. The signetctl reference is the same list in its terminal form.

agreements

OperationRouteWhat it does
platform_agreements_listGET /admin/v1/agreementsList platform agreements
platform_agreements_createPOST /admin/v1/agreementsCreate an agreement and version one
platform_agreements_showGET /admin/v1/agreements/{agreementId}Read an agreement and every full version
platform_agreements_renewPATCH /admin/v1/agreements/{agreementId}Set renewal for future acceptances
platform_agreements_deleteDELETE /admin/v1/agreements/{agreementId}Delete an agreement with no acceptances
platform_agreements_publishPOST /admin/v1/agreements/{agreementId}/versionsPublish a new current version
platform_agreements_recordPOST /admin/v1/agreements/{agreementId}/acceptancesRecord an acceptance made outside Signet
platform_agreements_acceptancesGET /admin/v1/agreement-acceptancesList or export organization acceptances
platform_clients_agreements_showGET /admin/v1/clients/{clientId}/agreementsRead the required agreement ids
platform_clients_agreements_setPUT /admin/v1/clients/{clientId}/agreementsReplace the required agreement ids

organizations

OperationRouteWhat it does
agreements_shared_listGET /admin/v1/organizations/{id}/shared-agreementsRead shared agreement evidence
agreements_shared_showGET /admin/v1/organizations/{id}/shared-agreements/{agreementId}Read shared agreement evidence
agreements_shares_showGET /admin/v1/organizations/{id}/agreements/{agreementId}/sharesRead shares
agreements_shares_setPUT /admin/v1/organizations/{id}/agreements/{agreementId}/sharesReplace share recipients
agreements_listGET /admin/v1/organizations/{id}/agreementsList organization agreements
agreements_createPOST /admin/v1/organizations/{id}/agreementsCreate an agreement and version one
agreements_showGET /admin/v1/organizations/{id}/agreements/{agreementId}Read an agreement and every full version
agreements_renewPATCH /admin/v1/organizations/{id}/agreements/{agreementId}Set renewal for future acceptances
agreements_deleteDELETE /admin/v1/organizations/{id}/agreements/{agreementId}Delete an agreement with no acceptances
agreements_publishPOST /admin/v1/organizations/{id}/agreements/{agreementId}/versionsPublish a new current version
agreements_recordPOST /admin/v1/organizations/{id}/agreements/{agreementId}/acceptancesRecord an acceptance made outside Signet
clients_listGET /admin/v1/organizations/{id}/clientsList organization registered apps and their agreement requirements
clients_agreements_showGET /admin/v1/organizations/{id}/clients/{clientId}/agreementsRead the required agreement ids
clients_agreements_setPUT /admin/v1/organizations/{id}/clients/{clientId}/agreementsReplace the required agreement ids
agreements_acceptancesGET /admin/v1/organizations/{id}/agreement-acceptancesList or export organization acceptances
organizations_listGET /admin/v1/organizationsResolve an organization by exact slug
organizations_createPOST /admin/v1/organizationsCreate an organization and its owner member row (platform credential only)
organizations_getGET /admin/v1/organizations/{id}Read one organization's public identity
organizations_deleteDELETE /admin/v1/organizations/{id}Erase an organization and its whole tenant estate (platform credential only)
organizations_membersGET /admin/v1/organizations/{id}/membersList one organization's members, with each member's live session count
organizations_add_memberPOST /admin/v1/organizations/{id}/membersAdd one member to an organization (platform credential only)
organizations_remove_memberDELETE /admin/v1/organizations/{id}/members/{userId}Remove one member immediately (platform credential only)
organizations_sessionsGET /admin/v1/organizations/{id}/sessionsList the live sessions currently active in one organization
organizations_auditGET /admin/v1/organizations/{id}/auditList one organization's audit entries, newest first, with the attribution boundary

Organizations

OperationRouteWhat it does
organizations_set_member_rolePATCH /admin/v1/organizations/{id}/membersSet a membership role
organizations_session_rules_getGET /admin/v1/organizations/{id}/session-rulesRead an organization's session rules
organizations_session_rules_putPUT /admin/v1/organizations/{id}/session-rulesReplace an organization's session rules

grants

OperationRouteWhat it does
grants_createPOST /admin/v1/grantsCreate one exact opaque principal/resource/capability grant (grants:write)
grants_listGET /admin/v1/grantsList grants in the caller's tenant scope (grants:read)
grants_checkGET /admin/v1/grants/checkCheck one exact opaque principal/resource/capability tuple (grants:read)
grants_getGET /admin/v1/grants/{id}Fetch one grant in the caller's tenant scope (grants:read)
grants_revokeDELETE /admin/v1/grants/{id}Idempotently revoke one grant in the caller's tenant scope (grants:write)
grants_revoke_manyPOST /admin/v1/grants/revokeRevoke every live grant matching exact filters (grants:write)

audience

OperationRouteWhat it does
audience_getGET /admin/v1/audience/{app}/{resource}Read the audience set for one resource (audience:manage)
audience_setPUT /admin/v1/audience/{app}/{resource}Create or revise the audience for one resource (audience:manage)
audience_checkPOST /admin/v1/audience/{app}/{resource}/checkAsk whether one person may open this resource now (audience:check)

stats

OperationRouteWhat it does
statsGET /admin/v1/statsInstance stats: users, active sessions, sign-ins per day, delivery and rate-limit counters

users

OperationRouteWhat it does
users_listGET /admin/v1/usersList users, newest first, with case-insensitive substring search over email and name
users_createPOST /admin/v1/usersCreate a user (optionally with password, role, and profile data)
users_set_rolePOST /admin/v1/users/{id}/roleSet a user's role or roles
users_two_factor_getGET /admin/v1/users/{id}/two-factorCount the backup codes on a person's verified hosted factor (platform credential only)
users_two_factor_importPUT /admin/v1/users/{id}/two-factorImport a proven SHA256 factor without replacement (platform credential only)
users_two_factor_removeDELETE /admin/v1/users/{id}/two-factorRemove only with the person's current factor code (platform credential only)
magic_link_sendPOST /admin/v1/magic-linkMail a platform sign-in link to an exactly configured landing (platform credential only)
users_set_passwordPOST /admin/v1/users/{id}/passwordSet a user's email/password credential (platform credential only)
users_deleteDELETE /admin/v1/users/{id}IRREVERSIBLE: delete a user and every row they own
users_banPOST /admin/v1/users/{id}/banBan a user (reversible): revokes their sessions and user-backed credentials
users_unbanPOST /admin/v1/users/{id}/unbanLift a user's ban
users_unlockPOST /admin/v1/users/unlockClear a lockout/escalation state, addressed by email (not id)
users_sessionsGET /admin/v1/users/{id}/sessionsList a user's sessions
users_revoke_allPOST /admin/v1/users/{id}/revoke-allRevoke every session belonging to a user

app-users

OperationRouteWhat it does
app_users_listGET /admin/v1/app-usersList one canonical application's end-user population, newest first
app_users_createPOST /admin/v1/app-usersCreate one tenant/application-scoped end user
app_users_updatePOST /admin/v1/app-users/{id}Update an application's end user
app_users_deleteDELETE /admin/v1/app-users/{id}IRREVERSIBLE: erase one app_user principal and its sessions
app_users_revoke_sessionsPOST /admin/v1/app-users/{id}/revoke-sessionsRevoke every session of one application end user

sessions

OperationRouteWhat it does
sessions_revokePOST /admin/v1/sessions/{token}/revokeRevoke one session by its at-rest token reference

api-keys

OperationRouteWhat it does
api_keys_mintPOST /admin/v1/api-keysMint a declared-permission API key for an existing user

ssh-machine-issuers

OperationRouteWhat it does
ssh_machine_issuers_registerPOST /admin/v1/ssh-machine-issuersRegister a trusted machine SSH task issuer in the infrastructure organization

service-principals

OperationRouteWhat it does
service_principals_ssh_machine_template_registerPOST /admin/v1/service-principals/{id}/ssh-machine-templatesBind one machine SSH task template to a live service principal
service_principals_listGET /admin/v1/service-principalsService identities, keyset-paged (cursor, not offset) and filterable by organization
service_principals_createPOST /admin/v1/service-principalsCreate a stable tenant-owned service identity with a server-generated id
service_principals_getGET /admin/v1/service-principals/{id}One service identity with its role grants and each credential's engine-computed ceiling
service_principals_deleteDELETE /admin/v1/service-principals/{id}Delete one disarmed service principal after all credentials and open batches are terminal

authorization-roles

OperationRouteWhat it does
authorization_roles_listGET /admin/v1/authorization-rolesPersisted D150 roles, keyset-paged and filterable by organization
authorization_roles_createPOST /admin/v1/authorization-rolesCreate an immutable named D150 permission bundle in one exact scope
authorization_roles_getGET /admin/v1/authorization-roles/{id}Read one persisted D150 authorization role by id
authorization_roles_deleteDELETE /admin/v1/authorization-roles/{id}Delete one authorization role after all principal-role grants are revoked

principal-role-grants

OperationRouteWhat it does
principal_role_grants_listGET /admin/v1/principal-role-grantsWhich identities hold which roles, keyset-paged and filterable by principal and/or role
principal_role_grants_createPOST /admin/v1/principal-role-grantsGrant one existing scoped authorization role to one existing principal
principal_role_grants_deleteDELETE /admin/v1/principal-role-grants/{id}Delete one principal-role grant without deleting its principal or role

oauth-clients

OperationRouteWhat it does
oauth_clients_createPOST /admin/v1/oauth-clientsCreate a confidential OAuth client for an existing service principal
no operationIdPOST /admin/v1/oauth-clients/{client_id}Set the consent policy or post-logout addresses of an existing public or confidential client
oauth_clients_getGET /admin/v1/oauth-clients/{client_id}Read OAuth client metadata without its secret or digest
oauth_clients_deleteDELETE /admin/v1/oauth-clients/{client_id}Delete an OAuth client and invalidate its issued credentials
no operationIdGET /admin/v1/organizations/{id}/sign-in-clientsList the organization sign-in clients made by this route
no operationIdPOST /admin/v1/organizations/{id}/sign-in-clientsCreate an organization app's public PKCE sign-in client
no operationIdGET /admin/v1/organizations/{id}/sign-in-clients/{client_id}Read an organization sign-in client made by this route
no operationIdDELETE /admin/v1/organizations/{id}/sign-in-clients/{client_id}Delete an organization sign-in client made by this route

service-tokens

OperationRouteWhat it does
service_tokens_mintPOST /admin/v1/service-tokensMint a required-expiry credential for an existing service principal
service_tokens_rotatePOST /admin/v1/service-tokens/{id}/rotateRotate one active service token with an explicit bounded overlap
service_tokens_mint_batchPOST /admin/v1/service-token-batchesIdempotently mint one pre-provisioned tenant credential manifest
service_tokens_reconcile_batchPOST /admin/v1/service-token-batches/{id}/reconcileAbandon one crashed U13 claim and revoke every reverse-linked destination token
service_tokens_remint_batchPOST /admin/v1/service-token-remintsPrevalidate and remint one complete U6 legacy-credential batch

signing-keys

OperationRouteWhat it does
signing_keys_listGET /admin/v1/signing-keysList Ed25519 JWKS signing-key lifecycle metadata
signing_keys_preparePOST /admin/v1/signing-keys/preparePrepare one EdDSA or RS256 JWKS-lane successor
signing_keys_activatePOST /admin/v1/signing-keys/{kid}/activateActivate a dwelled prepared JWKS successor
signing_keys_revokePOST /admin/v1/signing-keys/{handle}/revokeRevoke a prepared, retiring, or emergency active JWKS key

platform-credentials

OperationRouteWhat it does
platform_credentials_listGET /admin/v1/platform-credentialsList durable platform-administrator credential lifecycle metadata
platform_credentials_mintPOST /admin/v1/platform-credentialsMint a credential in an independent no-vault or unlock lineage
platform_credentials_rotatePOST /admin/v1/platform-credentials/rotateMint a managed platform credential with bounded predecessor overlap
platform_credentials_revokePOST /admin/v1/platform-credentials/{id}/revokeRevoke one retiring or offline-recovery platform credential

tokens

OperationRouteWhat it does
tokens_listGET /admin/v1/tokensToken inventory, keyset-paged (cursor, not offset)
tokens_configGET /admin/v1/tokens/configThe token-kind registry (read-only)
tokens_getGET /admin/v1/tokens/{id}One token record by handle
tokens_revokePOST /admin/v1/tokens/{id}/revokeRevoke one exact token handle
tokens_revoke_principalPOST /admin/v1/principals/{id}/tokens/revokeReview then atomically revoke one service principal's exact active credential estate

messages

OperationRouteWhat it does
messages_hobby_waitlistPOST /admin/v1/messages/hobby-waitlistSend one numbered Hobby waitlist stage mail

deliveries

OperationRouteWhat it does
deliveries_dead_lettersGET /admin/v1/deliveries/dead-lettersList delivery dead-letters (undeliverable emails/webhooks)
deliveries_replayPOST /admin/v1/deliveries/dead-letters/{id}/replayReplay one dead-lettered delivery

events

OperationRouteWhat it does
events_dead_lettersGET /admin/v1/events/dead-lettersList event dead-letters
events_deliveriesGET /admin/v1/events/deliveriesList durable event-delivery retry state and terminal rollup receipts
events_replayPOST /admin/v1/events/dead-letters/{id}/replayReplay one dead-lettered event

config

OperationRouteWhat it does
config_showGET /admin/v1/configConfiguration introspection: secrets absent by construction, never masked

audit

OperationRouteWhat it does
approval_requests_listGET /admin/v1/approval-requestsList approval requests and their outcomes, newest first
audit_exportGET /admin/v1/audit/exportExport the admin audit log as NDJSON

vault

OperationRouteWhat it does
vault_listGET /admin/v1/vaultList an organization's secret paths and metadata: never a value
vault_getGET /admin/v1/vault/{path}Decrypt and return one secret: receipted before the value is returned
vault_putPUT /admin/v1/vault/{path}Create a secret or write a new version, shredding the one it supersedes
vault_rotatePOST /admin/v1/vault/{path}/rotateWrite a new version under a fresh data key and crypto-shred the previous one
vault_revokePOST /admin/v1/vault/{path}/revokeWithdraw a secret by deleting its data key: the ciphertext becomes unrecoverable
vault_unsealPOST /admin/v1/vault-master-keySupply this instance's 32-byte vault master key, the only supported way one arrives
vault_statusGET /admin/v1/vault-statusReport the vault seal state, memory hygiene posture, and the corrective action
vault_audit_exportGET /admin/v1/vault-audit-exportExport the vault's hash-chained receipt trail as NDJSON: every read, write and refusal

A new operation is added to the contract first, then the CLI grows the command. The API mounts only when an admin key is configured; without one, every path answers 404.

Enter to open · Esc to close