Download OpenAPI specification:
Enterprise-grade authentication service for PVPipe document management system. Provides JWT authentication, TOTP/OTP, biometric authentication, and WebAuthn/passkeys support.
Authenticate user with email and password
Login credentials
| email required | string |
| password required | string |
{- "email": "string",
- "password": "string"
}{- "registerOtp": true,
- "token": "string"
}Get complete user profile with short signature for file access
{- "department": {
- "id": "string",
- "name": "string"
}, - "email": "string",
- "employee": {
- "avatarFileId": "string",
- "id": "string",
- "name": "string"
}, - "id": 0,
- "isSuperAdmin": true,
- "mfaEnabled": true,
- "permissions": [
- "string"
]
}Exchange refresh token for new access and refresh tokens
Refresh token
| refreshToken required | string |
{- "refreshToken": "string"
}{- "accessToken": "string",
- "accessTokenExpiresAt": "string",
- "refreshToken": "string",
- "refreshTokenExpiresAt": "string",
- "signature": "string"
}Verify TOTP code and complete authentication
OTP code
| otp required | string |
{- "otp": "string"
}{- "accessToken": "string",
- "accessTokenExpiresAt": "string",
- "refreshToken": "string",
- "refreshTokenExpiresAt": "string",
- "signature": "string"
}Request biometric confirmation for a sensitive action
Action details for confirmation
object | |
| actionType required | string <= 100 characters |
{- "actionPayload": { },
- "actionType": "string"
}{- "challenge": "string",
- "confirmationId": "string",
- "expiresAt": "string"
}Reject a pending action confirmation request
| id required | string Confirmation ID |
Rejection reason (optional)
| reason | string |
{- "reason": "string"
}{- "confirmationId": "string",
- "status": "pending",
- "success": true
}Check the status of a pending action confirmation
| id required | string Confirmation ID |
{- "actionPayload": { },
- "actionType": "string",
- "confirmationId": "string",
- "createdAt": "string",
- "expiresAt": "string",
- "status": "pending",
- "updatedAt": "string"
}Approve a pending action using biometric authentication
| id required | string Confirmation ID |
Biometric signature for approval
| deviceId required | string |
| signedChallenge required | string Base64 encoded signature |
{- "deviceId": "string",
- "signedChallenge": "string"
}{- "confirmationId": "string",
- "status": "pending",
- "success": true
}Get all biometric devices registered by the authenticated user
[- {
- "createdAt": "string",
- "deviceFingerprint": "string",
- "deviceName": "string",
- "deviceType": "mobile",
- "fcmToken": "string",
- "id": "string",
- "isActive": true,
- "keyAlgorithm": "ES256",
- "lastUsedAt": "string",
- "publicKey": "string",
- "updatedAt": "string",
- "userId": 0
}
]Update Firebase Cloud Messaging token for push notifications
FCM token update request
| deviceId required | string |
| fcmToken required | string <= 255 characters |
{- "deviceId": "string",
- "fcmToken": "string"
}{- "message": "string",
- "success": true
}Generate a cryptographic challenge for registering a new biometric device
Device registration details
| deviceFingerprint required | string |
| deviceName required | string <= 255 characters |
| deviceType required | string Enum: "mobile" "desktop" "tablet" |
| keyAlgorithm required | string Enum: "ES256" "RS256" "PS256" |
| publicKey required | string Base64 encoded public key |
{- "deviceFingerprint": "string",
- "deviceName": "string",
- "deviceType": "mobile",
- "keyAlgorithm": "ES256",
- "publicKey": "string"
}{- "challenge": "string",
- "deviceId": "string",
- "expiresAt": "string",
- "sessionId": "string"
}Complete device registration by verifying the signed challenge
Signed challenge verification
| sessionId required | string |
| signedChallenge required | string Base64 encoded signature |
{- "sessionId": "string",
- "signedChallenge": "string"
}{- "device": {
- "createdAt": "string",
- "deviceFingerprint": "string",
- "deviceName": "string",
- "deviceType": "mobile",
- "fcmToken": "string",
- "id": "string",
- "isActive": true,
- "keyAlgorithm": "ES256",
- "lastUsedAt": "string",
- "publicKey": "string",
- "updatedAt": "string",
- "userId": 0
}, - "deviceId": "string",
- "success": true
}Authenticate user with biometric signature verification
Signed challenge for authentication
| rememberMe | boolean |
| sessionId required | string |
| signedChallenge required | string Base64 encoded signature |
{- "rememberMe": true,
- "sessionId": "string",
- "signedChallenge": "string"
}{- "success": true,
- "tokens": {
- "accessToken": "string",
- "accessTokenExpiresAt": "string",
- "refreshToken": "string",
- "refreshTokenExpiresAt": "string",
- "signature": "string"
}
}Generate a challenge for mobile biometric authentication
Device fingerprint
| deviceFingerprint required | string |
{- "deviceFingerprint": "string"
}{- "challenge": "string",
- "expiresAt": "string",
- "sessionId": "string"
}Generate a valid ECDSA P-256 key pair for mobile devices that may have issues generating keys locally
Key generation parameters
| keyAlgorithm required | string Value: "ES256" |
| keyName | string Optional name for the key |
{- "keyAlgorithm": "ES256",
- "keyName": "string"
}{- "curve": "string",
- "keyAlgorithm": "string",
- "privateKey": "string",
- "publicKey": "string"
}Exchange biometric refresh token for new access and refresh tokens
Refresh token request
| refreshToken required | string |
{- "refreshToken": "string"
}{- "success": true,
- "tokens": {
- "accessToken": "string",
- "accessTokenExpiresAt": "string",
- "refreshToken": "string",
- "refreshTokenExpiresAt": "string",
- "signature": "string"
}
}Check whether a user has registered any FIDO2/WebAuthn credentials
User email
| email required | string |
{- "email": "string"
}{- "hasPasskeys": true
}Start FIDO2/WebAuthn authentication challenge
User email
| email required | string |
{- "email": "string"
}{- "publicKey": { },
- "sessionId": "string"
}Verify FIDO2/WebAuthn assertion and issue tokens
WebAuthn assertion response
| rememberMe | boolean |
required | object WebAuthn AuthenticatorAssertionResponse |
| sessionId required | string |
{- "rememberMe": true,
- "response": { },
- "sessionId": "string"
}{- "success": true,
- "tokens": {
- "accessToken": "string",
- "accessTokenExpiresAt": "string",
- "refreshToken": "string",
- "refreshTokenExpiresAt": "string",
- "signature": "string"
}
}Get all registered FIDO2/WebAuthn credentials for the authenticated user
{- "credentials": [
- {
- "createdAt": "string",
- "id": "string",
- "isActive": true,
- "lastUsedAt": "string",
- "name": "string",
- "transportFlags": [
- "string"
]
}
]
}Update whether user should be prompted to register a passkey
New prompt status
| status required | string Enum: "pending" "accepted" "declined" "dismissed" |
{- "status": "pending"
}{- "message": "string",
- "success": true
}Start FIDO2/WebAuthn passkey registration process
Passkey name (optional)
| name required | string <= 255 characters User-friendly name for the passkey |
{- "name": "string"
}{- "publicKey": { },
- "sessionId": "string"
}Verify and store the new FIDO2/WebAuthn credential
WebAuthn attestation response
required | object WebAuthn AuthenticatorAttestationResponse |
| sessionId required | string |
{- "response": { },
- "sessionId": "string"
}{- "credential": {
- "attestationType": "string",
- "backupEligible": true,
- "backupState": true,
- "cloneWarning": true,
- "createdAt": "string",
- "credentialId": [
- 0
], - "id": "string",
- "isActive": true,
- "lastUsedAt": "string",
- "name": "string",
- "signCount": 0,
- "transportFlags": [
- "string"
], - "updatedAt": "string",
- "userId": 0
}, - "credentialId": "string",
- "success": true
}Service-to-service OTP verification endpoint
OTP verification request
| otp required | string |
| userId required | integer |
{- "otp": "string",
- "userId": 0
}{- "userId": 0,
- "valid": true
}Determine the active state and metadata of an OAuth2 token (RFC 7662)
| token required | string Token to introspect |
| token_type_hint | string Hint about token type (access_token or refresh_token) |
{- "active": true,
- "aud": "string",
- "client_id": "string",
- "exp": 0,
- "iat": 0,
- "iss": "string",
- "jti": "string",
- "nbf": 0,
- "scope": "string",
- "sub": "string",
- "token_type": "string",
- "username": "string"
}Revoke an access or refresh token (RFC 7009)
| token required | string Token to revoke |
| token_type_hint | string Hint about token type (access_token or refresh_token) |
{- "error": "string",
- "error_description": "string",
- "error_uri": "string"
}Exchange authorization code or refresh token for access tokens
| grant_type required | string Grant type (authorization_code, refresh_token, client_credentials) |
| code | string Authorization code (for authorization_code grant) |
| redirect_uri | string Redirect URI (must match authorization request) |
| client_id required | string OAuth2 client identifier |
| client_secret | string Client secret (required for confidential clients) |
| refresh_token | string Refresh token (for refresh_token grant) |
| code_verifier | string PKCE code verifier |
| scope | string Requested scopes (for client_credentials grant) |
{- "access_token": "string",
- "expires_in": 0,
- "id_token": "string",
- "refresh_token": "string",
- "scope": "string",
- "token_type": "string"
}