Python SDK Installation Guide

Get started with the FaceSign Python SDK for server-side identity verification integration.

Installation

Install the FaceSign Python SDK using pip:

pip install facesign-api

Or using poetry:

poetry add facesign-api

Requirements

  • Python 3.8 or higher
  • HTTP library: httpx (automatically installed)
  • Validation: pydantic (automatically installed)

Quick Start

1. Initialize the Client

import os
from facesign import FaceSignClient

# Initialize with your API key from environment variable
client = FaceSignClient(
    api_key=os.getenv("FACESIGN_API_KEY"),
    server_url="https://api.facesign.ai"  # Production
    # server_url="https://api.dev.facesign.ai"  # Development
)

2. Create a Verification Session

# Create a session with modules (legacy approach)
session_response = client.sessions.create(
    client_reference_id="user-12345",
    metadata={
        "user_id": "12345",
        "source": "python-app"
    },
    modules=[
        {"type": "identityVerification"},
        {"type": "documentAuthentication"}
    ],
    initial_phrase="Welcome! I'll help you verify your identity.",
    default_lang="en"
)

print(f"Session ID: {session_response.session.id}")
print(f"Client Secret: {session_response.client_secret.secret}")
print(f"Verification URL: {session_response.client_secret.url}")

3. Create with Flow-Based Configuration

# Create a session with flow (recommended approach)
flow_session = client.sessions.create(
    client_reference_id="user-67890",
    metadata={"source": "python-flow-app"},
    flow={
        "nodes": [
            {
                "id": "start",
                "type": "start"
            },
            {
                "id": "greeting",
                "type": "conversation",
                "prompt": "Hello! Let's verify your identity.",
                "transitions": [{"id": "t1", "condition": "true"}]
            },
            {
                "id": "face-scan", 
                "type": "face_scan",
                "mode": "capture",
                "outcomes": {
                    "captured": "end",
                    "error": "end"
                }
            },
            {
                "id": "end",
                "type": "end"
            }
        ],
        "edges": [
            {"id": "e1", "source": "start", "target": "greeting"},
            {"id": "e2", "source": "greeting", "target": "face-scan"},
            {"id": "e3", "source": "face-scan", "target": "end"}
        ]
    }
)

4. Retrieve Session Status

# Get session details
session = client.sessions.retrieve("vs_session_id_here")
print(f"Status: {session.session.status}")

if session.session.report:
    print(f"Verified: {session.session.report.is_verified}")

5. List Sessions

# List recent sessions
sessions = client.sessions.list(
    limit=10,
    status="complete",
    sort_by="createdAt",
    sort_order="desc"
)

for session in sessions.sessions:
    print(f"{session.id}: {session.status}")

Async Usage

The SDK supports async/await patterns:

import asyncio
from facesign import AsyncFaceSignClient

async def main():
    async with AsyncFaceSignClient(api_key="your_api_key") as client:
        # Create session asynchronously
        session = await client.sessions.acreate(
            client_reference_id="async-user-123",
            modules=[{"type": "identityVerification"}]
        )
        
        # List sessions asynchronously
        sessions = await client.sessions.alist(limit=5)
        
        # Get languages asynchronously
        languages = await client.languages.aget()

# Run async code
asyncio.run(main())

Get Available Resources

Languages

# Get supported languages
languages = client.languages.get()
for lang in languages.langs:
    print(f"{lang.id}: {lang.title}")

Avatars

# Get available avatars
avatars = client.avatars.get()
for avatar in avatars.avatars:
    print(f"{avatar.id}: {avatar.name} ({avatar.gender})")

Error Handling

from facesign import (
    FaceSignAPIError, 
    AuthenticationError,
    ValidationError,
    NotFoundError
)

try:
    session = client.sessions.create(
        client_reference_id="test-user",
        modules=[{"type": "identityVerification"}]
    )
except AuthenticationError:
    print("Invalid API key")
except ValidationError as e:
    print(f"Invalid request data: {e}")
except NotFoundError:
    print("Resource not found")
except FaceSignAPIError as e:
    print(f"API error: {e}")

Framework Integration

Django

# settings.py
FACESIGN_API_KEY = "your_api_key_here"

# views.py
from django.conf import settings
from facesign import FaceSignClient

def create_verification_view(request):
    client = FaceSignClient(settings.FACESIGN_API_KEY)
    
    session = client.sessions.create(
        client_reference_id=f"user-{request.user.id}",
        metadata={"user_id": request.user.id},
        modules=[{"type": "identityVerification"}]
    )
    
    return JsonResponse({
        "session_id": session.session.id,
        "verification_url": session.client_secret.url
    })

Flask

from flask import Flask, jsonify
from facesign import FaceSignClient
import os

app = Flask(__name__)
client = FaceSignClient(os.getenv("FACESIGN_API_KEY"))

@app.route("/create-verification", methods=["POST"])
def create_verification():
    session = client.sessions.create(
        client_reference_id="user-123",
        modules=[{"type": "identityVerification"}]
    )
    
    return jsonify({
        "session_id": session.session.id,
        "verification_url": session.client_secret.url
    })

FastAPI

from fastapi import FastAPI
from facesign import AsyncFaceSignClient
import os

app = FastAPI()
client = AsyncFaceSignClient(os.getenv("FACESIGN_API_KEY"))

@app.post("/create-verification")
async def create_verification():
    async with client:
        session = await client.sessions.acreate(
            client_reference_id="user-123",
            modules=[{"type": "identityVerification"}]
        )
        
        return {
            "session_id": session.session.id,
            "verification_url": session.client_secret.url
        }

Environment Variables

Setting API Keys Securely

Never hardcode API keys in your source code. Use environment variables instead:

For local development:

# Create .env file (never commit this file)
echo "FACESIGN_API_KEY=your_api_key_here" > .env

# Or export directly
export FACESIGN_API_KEY="your_api_key_here"

For production deployment: Set environment variables in your hosting platform (Vercel, Heroku, AWS, etc.)

Using in your code:

import os
from facesign import FaceSignClient

# This safely loads from environment variables
client = FaceSignClient(
    api_key=os.getenv("FACESIGN_API_KEY"),
    server_url=os.getenv("FACESIGN_SERVER_URL", "https://api.facesign.ai")
)

Development vs Production

# Development environment
dev_client = FaceSignClient(
    api_key="dev_api_key",
    server_url="https://api.dev.facesign.ai"
)

# Production environment
prod_client = FaceSignClient(
    api_key="prod_api_key", 
    server_url="https://api.facesign.ai"
)

Next Steps