Skip to main content

Python SDK for the FaceVault identity verification API

Project description

FaceVault Python SDK

PyPI version Python versions License: MIT Tests CI

Python client for the FaceVault identity verification API — privacy-first KYC with liveness detection, face matching, and document verification.

Features

  • Sync & async clients — use FaceVaultClient or AsyncFaceVaultClient
  • Webhook verification — HMAC-SHA256 signature validation
  • Typed models — dataclasses for sessions, status, and webhook events
  • Secure by default — HTTPS enforced, API keys validated, secrets redacted from logs
  • Lightweight — only depends on httpx

Installation

pip install facevault

Quick start

Sync

from facevault import FaceVaultClient

client = FaceVaultClient("fv_live_your_api_key")

# Create a verification session
session = client.create_session(external_user_id="user-123")
print(session.webapp_url)  # Send this URL to your user

# With proof of address required
session = client.create_session(external_user_id="user-123", require_poa=True)

# Check session status
status = client.get_session(session.session_id)
print(status.status)           # "in_progress", "passed", "failed", "review"
print(status.trust_score)      # 0-100 trust score
print(status.trust_decision)   # "accept", "review", "reject"

client.close()

Async

from facevault import AsyncFaceVaultClient

async def verify_user():
    async with AsyncFaceVaultClient("fv_live_your_api_key") as client:
        session = await client.create_session(external_user_id="user-123")
        print(session.webapp_url)

Webhook verification

from facevault import verify_signature, parse_event

# Verify the webhook signature
body = request.body
signature = request.headers["X-FaceVault-Signature"]

if verify_signature(body, signature, secret="your_webhook_secret"):
    event = parse_event(body)
    print(event.event)             # "verification.completed"
    print(event.session_id)
    print(event.face_match_passed)
    print(event.trust_score)       # 0-100
    print(event.trust_decision)    # "accept", "review", "reject"
    print(event.sanctions_hit)     # True/False

Error handling

from facevault import FaceVaultClient, AuthError, NotFoundError, RateLimitError

client = FaceVaultClient("fv_live_your_api_key")

try:
    session = client.get_session("nonexistent")
except AuthError:
    print("Invalid API key")
except NotFoundError:
    print("Session not found")
except RateLimitError:
    print("Too many requests")

Security

The SDK enforces security best practices out of the box:

  • HTTPS onlyhttp:// URLs are rejected at init to prevent credentials leaking over plaintext
  • Key validation — empty or whitespace-only API keys raise ValueError immediately
  • Secret redactionSession.__repr__ masks session_token and URL tokens, safe for logging
  • Client redactionFaceVaultClient.__repr__ masks the API key
  • Path traversal protectionget_session() validates session IDs

What's new in 1.0.0

  • require_poa parameter on create_session() — per-session proof of address override
  • trust_score and trust_decision on SessionStatus — unified 0-100 trust score
  • require_poa, poa, anti_spoofing, credential on SessionStatus
  • trust_score, trust_decision, sanctions_hit, poa on WebhookEvent
  • challenge_nonce on Session — capture integrity nonce

Documentation

Roadmap

The FaceVault platform also offers reusable identity credentials ("verify once, prove forever" — credential challenge / verify / renew / status). These endpoints aren't wrapped by this SDK yet; they're planned for a future release. Until then, call them directly via the REST API.

Contributing

See CONTRIBUTING.md. One topic per PR; update CHANGELOG.md under ## [Unreleased].

Reporting a vulnerability

Please do not open public issues for security vulnerabilities. See SECURITY.md or email security@facevault.id.

Changelog

See CHANGELOG.md.

License

MIT — © Kaditham Holdings Pte Ltd

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

facevault-1.0.1.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

facevault-1.0.1-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file facevault-1.0.1.tar.gz.

File metadata

  • Download URL: facevault-1.0.1.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for facevault-1.0.1.tar.gz
Algorithm Hash digest
SHA256 da3d5a1b4e0f3ff281af14267a778bea4beb94d6e6aba51d37278d219e4e8ff0
MD5 b1980c2a21c14aa583e5f7bb1aa9d6c4
BLAKE2b-256 b1b52bf2f9ecfadaddd751a5b3d671cca85f9f40bf7e7372dd873d2ee64fbc6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for facevault-1.0.1.tar.gz:

Publisher: release.yml on khreechari/facevault-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file facevault-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: facevault-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for facevault-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 790b3d169a72830851792f39d1a77d870f7a4f22b1dd4fbf369203b6402d3a81
MD5 f49c91ab363aa6de592edb206c7f876b
BLAKE2b-256 7e8c5d92297662e5eda8f8ed3ed21936635a8bbfdded86fa28977149bbf6a47d

See more details on using hashes here.

Provenance

The following attestation bundles were made for facevault-1.0.1-py3-none-any.whl:

Publisher: release.yml on khreechari/facevault-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page