vaultaris /docs

API Reference

Overview of the Vaultaris REST API — endpoints, authentication, response conventions, and rate limiting.

Base URL: https://{your-vaultaris-host}/api/v1. Interactive API docs at /api/v1/docs (Scalar UI). OpenAPI 3.1 spec at /api/v1/docs/openapi.json.

Authentication

All authenticated endpoints require:

Authorization: Bearer {access_token}

Obtain tokens via the OAuth 2.0 endpoints (/oauth/token). Service-to-service calls using API keys use:

X-Api-Key: {api_key}

Response format

Success:

{ "data": { ... } }

Paginated success:

{ "data": [...], "meta": { "page": 1, "per_page": 20, "total": 143 } }

Error:

{ "error": "not_found", "message": "Tenant not found", "status": 404 }

Pagination

Query params: page (default 1), per_page (default 20, max 100).

Rate limiting

120 requests / 60 s per IP. Redis-backed sliding window. Returns 429 Too Many Requests with Retry-After header. Configurable via RATE_LIMIT_MAX_REQUESTS / RATE_LIMIT_WINDOW_SECS.


Endpoint catalogue

Health & Observability

MethodPathAuthDescription
GET/healthNoneBasic liveness check
GET/readyNoneReadiness (load balancer probe)
GET/liveNoneLiveness (Kubernetes probe)
GET/health/detailedNoneComponent status (DB, Redis, email)
GET/metricsNonePrometheus metrics

OIDC Discovery

MethodPathAuthDescription
GET/.well-known/openid-configurationNoneOIDC discovery document
GET/.well-known/jwks.jsonNonePublic JWK set

OAuth 2.0

MethodPathAuthDescription
GET/oauth/authorizeNoneAuthorization endpoint (redirect)
POST/oauth/tokenClient credsToken endpoint (all grant types)
POST/oauth/revokeClient credsRevoke access or refresh token
POST/oauth/introspectClient credsToken introspection
GET/oauth/userinfoBearerUserInfo endpoint
GET/oauth/consent/{request_id}NoneGet pending consent details
POST/oauth/consent/{request_id}/approveBearerApprove consent
POST/oauth/consent/{request_id}/denyBearerDeny consent

Setup wizard

MethodPathAuthDescription
GET/setup/checkNoneCheck if setup is needed
GET/setup/statusNoneDetailed setup status
POST/setup/preview-licenseNonePreview license tier before activating
POST/setup/webauthn-challengeNoneGet passkey challenge for admin enrollment
POST/setupNoneComplete initial setup

Tenants

MethodPathAuthDescription
GET/api/v1/tenantsBearerList accessible tenants
POST/api/v1/tenantsBearerCreate tenant
GET/api/v1/tenants/{id}BearerGet tenant details
PUT/api/v1/tenants/{id}BearerUpdate tenant
DELETE/api/v1/tenants/{id}BearerSoft-delete tenant
GET/api/v1/tenants/{id}/licenseBearerGet license details
GET/api/v1/tenants/{id}/license/limits/{resource}BearerCheck limit for a resource type
GET/api/v1/tenants/{id}/frozenBearerList frozen resources
GET/api/v1/tenants/{id}/statistics/overviewBearerOverview stats
GET/api/v1/tenants/{id}/statistics/authenticationBearerAuth attempts, success rate, time series
GET/api/v1/tenants/{id}/statistics/sessionsBearerSession stats by device, location
GET/api/v1/tenants/{id}/statistics/securityBearerSecurity events, locked accounts
GET/api/v1/tenants/{id}/statistics/dashboardBearerCombined dashboard summary
GET/api/v1/tenants/{id}/keysBearerList signing keys
POST/api/v1/tenants/{id}/keys/rotateBearerRotate signing keys

Hosted tenants

MethodPathAuthDescription
GET/api/v1/tenants/{host_id}/hosted-tenants/capabilityBearerHosting capability + live count
GET/api/v1/tenants/{host_id}/hosted-tenantsBearerList hosted tenants
POST/api/v1/tenants/{host_id}/hosted-tenantsBearerProvision hosted tenant
PATCH/api/v1/tenants/{host_id}/hosted-tenants/{id}/statusBearerSet status (active, suspended, archived)
GET/api/v1/tenants/{host_id}/hosted-tenants/{id}/statsBearerAggregate stats (no PII)

Users

MethodPathAuthDescription
GET/api/v1/tenants/{id}/usersBearerList users (paginated)
POST/api/v1/tenants/{id}/usersBearerCreate user
GET/api/v1/tenants/{id}/users/{uid}BearerGet user details
PUT/api/v1/tenants/{id}/users/{uid}BearerUpdate user profile
DELETE/api/v1/tenants/{id}/users/{uid}BearerSoft-delete user
POST/api/v1/tenants/{id}/users/{uid}/restoreBearerRestore soft-deleted user
GET/api/v1/tenants/{id}/users/{uid}/rolesBearerList user's roles
POST/api/v1/tenants/{id}/users/{uid}/rolesBearerAssign role to user
DELETE/api/v1/tenants/{id}/users/{uid}/roles/{role_id}BearerRemove role from user
GET/api/v1/tenants/{id}/users/{uid}/groupsBearerList user's groups
POST/api/v1/tenants/{id}/users/{uid}/groupsBearerAdd user to group
DELETE/api/v1/tenants/{id}/users/{uid}/groups/{group_id}BearerRemove user from group
GET/api/v1/tenants/{id}/users/{uid}/sessionsBearerList user's sessions
DELETE/api/v1/tenants/{id}/users/{uid}/sessionsBearerRevoke all user sessions
GET/api/v1/tenants/{id}/users/{uid}/devicesBearerList registered devices
GET/api/v1/users/{uid}/tenantsBearerCross-tenant query for a user

Devices

MethodPathAuthDescription
GET/api/v1/tenants/{id}/users/{uid}/devicesBearerList devices (trusted, untrusted, revoked)
GET/api/v1/tenants/{id}/users/{uid}/devices/{device_id}BearerDevice details
POST/api/v1/tenants/{id}/users/{uid}/devices/{device_id}/trustBearerMark device trusted
DELETE/api/v1/tenants/{id}/users/{uid}/devices/{device_id}BearerRevoke device
GET/api/v1/tenants/{id}/users/{uid}/devices/{device_id}/sessionsBearerSession history for device

Roles

MethodPathAuthDescription
GET/api/v1/tenants/{id}/rolesBearerList roles
POST/api/v1/tenants/{id}/rolesBearerCreate role
GET/api/v1/tenants/{id}/roles/{role_id}BearerGet role
PUT/api/v1/tenants/{id}/roles/{role_id}BearerUpdate role
DELETE/api/v1/tenants/{id}/roles/{role_id}BearerSoft-delete role
POST/api/v1/tenants/{id}/roles/{role_id}/restoreBearerRestore soft-deleted role
GET/api/v1/tenants/{id}/roles/{role_id}/permissionsBearerList role's permissions
POST/api/v1/tenants/{id}/roles/{role_id}/permissionsBearerAdd permission to role
DELETE/api/v1/tenants/{id}/roles/{role_id}/permissions/{perm_id}BearerRemove permission from role

Permissions

MethodPathAuthDescription
GET/api/v1/tenants/{id}/permissionsBearerList permissions
POST/api/v1/tenants/{id}/permissionsBearerCreate permission
GET/api/v1/tenants/{id}/permissions/{perm_id}BearerGet permission
PUT/api/v1/tenants/{id}/permissions/{perm_id}BearerUpdate permission
DELETE/api/v1/tenants/{id}/permissions/{perm_id}BearerSoft-delete permission
POST/api/v1/tenants/{id}/permissions/{perm_id}/restoreBearerRestore soft-deleted permission

Groups

MethodPathAuthDescription
GET/api/v1/tenants/{id}/groupsBearerList groups
POST/api/v1/tenants/{id}/groupsBearerCreate group
GET/api/v1/tenants/{id}/groups/{group_id}BearerGet group
PUT/api/v1/tenants/{id}/groups/{group_id}BearerUpdate group
DELETE/api/v1/tenants/{id}/groups/{group_id}BearerDelete group
POST/api/v1/tenants/{id}/groups/{group_id}/restoreBearerRestore soft-deleted group
GET/api/v1/tenants/{id}/groups/{group_id}/membersBearerList members
GET/api/v1/tenants/{id}/groups/{group_id}/rolesBearerList group roles
POST/api/v1/tenants/{id}/groups/{group_id}/rolesBearerAssign role to group
DELETE/api/v1/tenants/{id}/groups/{group_id}/roles/{role_id}BearerRemove role from group
GET/api/v1/tenants/{id}/groups/{group_id}/login-providersBearerList IdP allowlist

Applications

Applications scope OAuth clients, IdPs, roles, groups, permissions, and ABAC policies per-service. Each resource type has a full link/unlink + create pattern (~40 endpoints total).

MethodPathAuthDescription
GET/api/v1/tenants/{id}/applicationsBearerList applications
POST/api/v1/tenants/{id}/applicationsBearerCreate application
GET/api/v1/tenants/{id}/applications/{app_id}BearerGet application
PUT/api/v1/tenants/{id}/applications/{app_id}BearerUpdate application
DELETE/api/v1/tenants/{id}/applications/{app_id}BearerDelete application
GET/POST/DELETE/api/v1/tenants/{id}/applications/{app_id}/clientsBearerLink/unlink/create OAuth clients
GET/POST/DELETE/api/v1/tenants/{id}/applications/{app_id}/rolesBearerLink/unlink/create roles
GET/POST/DELETE/api/v1/tenants/{id}/applications/{app_id}/groupsBearerLink/unlink/create groups
GET/POST/DELETE/api/v1/tenants/{id}/applications/{app_id}/permissionsBearerLink/unlink/create permissions
GET/POST/DELETE/api/v1/tenants/{id}/applications/{app_id}/identity-providersBearerLink/unlink/create IdPs
GET/POST/DELETE/api/v1/tenants/{id}/applications/{app_id}/policiesBearerLink/unlink/create ABAC policies

OAuth Clients

MethodPathAuthDescription
GET/api/v1/tenants/{id}/clientsBearerList OAuth clients
POST/api/v1/tenants/{id}/clientsBearerRegister OAuth client
GET/api/v1/tenants/{id}/clients/{client_id}BearerGet client config
PUT/api/v1/tenants/{id}/clients/{client_id}BearerUpdate client
DELETE/api/v1/tenants/{id}/clients/{client_id}BearerRevoke client
POST/api/v1/tenants/{id}/clients/{client_id}/secretBearerRegenerate client secret

Identity Providers

MethodPathAuthDescription
GET/api/v1/tenants/{id}/identity-providersBearerList IdPs
POST/api/v1/tenants/{id}/identity-providersBearerCreate IdP
GET/api/v1/tenants/{id}/identity-providers/{provider_id}BearerGet IdP
PUT/api/v1/tenants/{id}/identity-providers/{provider_id}BearerUpdate IdP
DELETE/api/v1/tenants/{id}/identity-providers/{provider_id}BearerDelete IdP
GET/api/v1/tenants/{id}/identity-providers/loginNoneList login-enabled IdPs (public)
GET/api/v1/tenants/{id}/identity-providers/{provider_id}/authorizeNoneGet authorization URL

Sessions

MethodPathAuthDescription
GET/api/v1/tenants/{id}/sessionsBearerList all tenant sessions
DELETE/api/v1/tenants/{id}/sessions/{session_id}BearerRevoke session
GET/api/v1/sessions/global/{token}NoneValidate global session
DELETE/api/v1/sessions/global/{token}BearerRevoke global session
POST/api/v1/sessions/global/{token}/transferBearerCreate domain transfer token
POST/api/v1/sessions/transfer/redeemNoneRedeem transfer token
GET/api/v1/sessions/global/meBearerList current user's global sessions

API Keys

MethodPathAuthDescription
GET/api/v1/tenants/{id}/api-keysBearerList API keys
POST/api/v1/tenants/{id}/api-keysBearerCreate API key
GET/api/v1/tenants/{id}/api-keys/{key_id}BearerGet API key details
PUT/api/v1/tenants/{id}/api-keys/{key_id}BearerUpdate API key
DELETE/api/v1/tenants/{id}/api-keys/{key_id}BearerDelete API key
POST/api/v1/tenants/{id}/api-keys/{key_id}/revokeBearerRevoke API key
GET/api/v1/api-keys/meAPI KeyCurrent key's identity
POST/api/v1/api-keys/authorizeAPI KeyRBAC + ABAC authorization check

MFA — TOTP

MethodPathAuthDescription
POST/api/v1/mfa/totp/setupBearerBegin TOTP enrollment (returns QR secret)
POST/api/v1/mfa/totp/verifyBearerComplete TOTP enrollment
POST/api/v1/mfa/totp/{user_id}/verifyBearerVerify TOTP code (MFA challenge)
DELETE/api/v1/mfa/totp/{user_id}BearerDisable TOTP for user

MFA — WebAuthn / Passkeys

MethodPathAuthDescription
POST/api/v1/mfa/webauthn/register/beginBearerBegin passkey registration
POST/api/v1/mfa/webauthn/register/completeBearerComplete passkey registration
POST/api/v1/mfa/webauthn/authenticate/beginBearerBegin passkey authentication
POST/api/v1/mfa/webauthn/authenticate/completeBearerComplete passkey authentication
GET/api/v1/mfa/webauthn/credentialsBearerList registered passkeys
DELETE/api/v1/mfa/webauthn/credentials/{credential_id}BearerRemove passkey
POST/api/v1/auth/passkey/challengeNoneGet challenge for passwordless login
POST/api/v1/auth/passkey/loginNoneAuthenticate with passkey (no username needed)

ABAC Policies

MethodPathAuthDescription
GET/api/v1/tenants/{id}/policiesBearerList policies
POST/api/v1/tenants/{id}/policiesBearerCreate policy
GET/api/v1/tenants/{id}/policies/{policy_id}BearerGet policy
PUT/api/v1/tenants/{id}/policies/{policy_id}BearerUpdate policy
DELETE/api/v1/tenants/{id}/policies/{policy_id}BearerDelete policy
POST/api/v1/tenants/{id}/policies/evaluateBearerEvaluate policies for a context
GET/api/v1/tenants/{id}/policies/conditions-schemaBearerSchema for UI autocomplete
GET/api/v1/tenants/{id}/users/{uid}/policies/checkBearerQuick access check for user

Audit Log

MethodPathAuthDescription
GET/api/v1/tenants/{id}/auditBearerList audit entries (filterable by action, resource_type, actor_id)
GET/api/v1/tenants/{id}/audit/{entry_id}BearerGet audit entry detail

Password & Email

MethodPathAuthDescription
POST/api/v1/auth/password-resetNoneRequest password reset (always 200)
POST/api/v1/auth/password-reset/validateNoneValidate reset token
POST/api/v1/auth/password-reset/completeNoneSet new password
POST/api/v1/auth/email-verification/resendBearerResend verification email
POST/api/v1/auth/email-verification/verifyNoneVerify email via token

Hosted Login

MethodPathAuthDescription
GET/api/v1/hosted/{slug}/configNoneTenant branding + auth methods (public)
POST/api/v1/hosted/{slug}/mfa/verifyNoneVerify MFA code after password grant
GET/api/v1/hosted/{slug}/providers/{id}/auth-urlNoneGet IdP redirect URL
GET/api/v1/hosted/{slug}/idp-callbackNoneIdP OAuth callback

Integration API (server-to-server)

MethodPathAuthDescription
POST/api/v1/integration/token/validateBearerValidate access token, get roles/permissions
POST/api/v1/tenants/{id}/integration/check-permissionBearerRBAC + ABAC permission check
POST/api/v1/tenants/{id}/integration/batch-check-permissionsBearerBatch permission checks
GET/api/v1/integration/session/validateBearerValidate session token
GET/api/v1/tenants/{id}/integration/users/{uid}BearerUser info for external integrations

Kubernetes

MethodPathAuthDescription
POST/api/v1/kubernetes/token-reviewService tokenK8s TokenReview (authn webhook)
POST/api/v1/kubernetes/subject-access-reviewService tokenK8s SubjectAccessReview (authz webhook)

Plugins

MethodPathAuthDescription
GET/api/v1/admin/pluginsBearerList installed plugins
POST/api/v1/admin/pluginsBearerInstall plugin
GET/api/v1/admin/plugins/{id}BearerGet plugin details
DELETE/api/v1/admin/plugins/{id}BearerUninstall plugin
POST/api/v1/admin/plugins/{id}/activateBearerActivate plugin globally
GET/api/v1/tenants/{id}/pluginsBearerList plugins active for tenant
POST/api/v1/tenants/{id}/plugins/{plugin_id}/enableBearerEnable plugin for tenant
POST/api/v1/tenants/{id}/plugins/{plugin_id}/disableBearerDisable plugin for tenant
PUT/api/v1/tenants/{id}/plugins/{plugin_id}/configBearerUpdate plugin config for tenant
GET/api/v1/tenants/{id}/plugins/{plugin_id}/healthBearerPlugin health check
GET/api/v1/tenants/{id}/plugins/active-schemasBearerMerged config schema for UI rendering

Webhooks (inbound, plugin-defined)

MethodPathAuthDescription
*/webhook/{plugin_slug}/{tenant_id}/{*rest}HMAC sigRoute to plugin webhook handler