amanpay / api /schemas.py
MHamdan's picture
Deploy AmanPay — cardless multimodal biometric payments
1730163 verified
Raw
History Blame Contribute Delete
2.19 kB
"""Pydantic request/response schemas for the AmanPay API."""
from __future__ import annotations
from typing import List, Optional
from pydantic import BaseModel, Field
class EnrollRequest(BaseModel):
user_id: str = Field(..., description="Unique identifier for the user")
face_image: str = Field(..., description="Base64-encoded face image")
fingerprint_image: str = Field(..., description="Base64-encoded fingerprint image")
class AuthRequest(BaseModel):
user_id: str
face_image: str
fingerprint_image: str
class VerifyRequest(BaseModel):
face1: str
fp1: str
face2: str
fp2: str
class EnrollResponse(BaseModel):
success: bool
user_id: str
face_liveness: float
fp_liveness: float
reason: Optional[str] = None
class AuthResponse(BaseModel):
success: bool
similarity: float
threshold: float
face_liveness: float
fp_liveness: float
confidence: Optional[float] = None
face_quality: Optional[float] = None
fp_quality: Optional[float] = None
protected: Optional[bool] = None
deepfake_score: Optional[float] = None
is_deepfake: Optional[bool] = None
reason: Optional[str] = None
class VerifyResponse(BaseModel):
fused_similarity: float
face_similarity: float
fingerprint_similarity: float
class PasskeyRegisterRequest(BaseModel):
user_id: str
public_key: str = Field(..., description="Base64 raw Ed25519 device public key")
class ChallengeRequest(BaseModel):
user_id: str
class ChallengeResponse(BaseModel):
user_id: str
challenge: str = Field(..., description="Base64 single-use nonce to sign")
class PasskeyAuthRequest(BaseModel):
user_id: str
challenge: str
signature: str = Field(..., description="Base64 Ed25519 signature over the challenge")
face_image: str
fingerprint_image: str
class PasskeyAuthResponse(BaseModel):
success: bool
biometric_success: bool
similarity: float
factors: Optional[List[str]] = None
reason: Optional[str] = None
class HealthResponse(BaseModel):
status: str
model_loaded: bool
device: str
class UserListResponse(BaseModel):
users: List[str]