Skip to main content

Async Python SDK for ValidKit Email Verification API - Built for AI Agents

Project description

ValidKit Python SDK

PyPI version Python Versions License: MIT Documentation

Async Python SDK for ValidKit Email Verification API - Built for AI Agents and high-volume applications.

Features

  • 🚀 Fully Async: Built on aiohttp for maximum performance
  • 🤖 AI-Agent Optimized: Token-efficient responses and agent-friendly formats
  • 📦 Batch Processing: Verify up to 10,000 emails in a single request
  • 🔄 Smart Retries: Automatic retry logic with exponential backoff
  • 🌊 Connection Pooling: Efficient connection reuse for high throughput
  • 📊 Progress Tracking: Real-time progress updates for large batches
  • 🪝 Webhook Support: Async webhook handling for batch results
  • 🔍 Type Safety: Full type hints and Pydantic models

Full API Documentation: https://api.validkit.com/docs/openapi.json

Installation

pip install validkit

Quick Start

import asyncio
from validkit import AsyncValidKit

async def main():
    # Initialize the client
    async with AsyncValidKit(api_key="your_api_key") as client:
        # Single email verification
        result = await client.verify_email("user@example.com")
        print(f"Valid: {result.valid}")
        
        # Batch verification
        emails = ["user1@example.com", "user2@example.com", "user3@example.com"]
        results = await client.verify_batch(emails)
        
        for email, result in results.items():
            print(f"{email}: {result.valid}")

asyncio.run(main())

Advanced Usage

Batch Processing with Progress

async def verify_large_batch():
    async with AsyncValidKit(api_key="your_api_key") as client:
        emails = ["email{}@example.com".format(i) for i in range(10000)]
        
        # Process with progress callback
        async def progress_callback(processed, total):
            print(f"Progress: {processed}/{total} ({processed/total*100:.1f}%)")
        
        results = await client.verify_batch(
            emails,
            chunk_size=1000,
            progress_callback=progress_callback
        )
        
        valid_count = sum(1 for r in results.values() if r.valid)
        print(f"Valid emails: {valid_count}/{len(emails)}")

Webhook Support

# Start async batch job with webhook
job = await client.verify_batch_async(
    emails=large_email_list,
    webhook_url="https://your-app.com/webhook/validkit",
    webhook_headers={"Authorization": "Bearer your_token"}
)

print(f"Batch job started: {job.id}")
print(f"Check status at: {job.status_url}")

Custom Configuration

from validkit import AsyncValidKit, ValidKitConfig

config = ValidKitConfig(
    api_key="your_api_key",
    base_url="https://api.validkit.com",
    timeout=30,
    max_retries=3,
    max_connections=100,
    rate_limit=10000  # requests per minute
)

async with AsyncValidKit(config=config) as client:
    # Your code here
    pass

Response Format

Single Email Response

{
    "valid": true,
    "email": "user@example.com",
    "format": {"valid": true},
    "disposable": {"valid": true, "value": false},
    "mx": {"valid": true, "records": ["mx1.example.com"]},
    "smtp": {"valid": true}
}

Batch Response (Compact Format)

{
    "user1@example.com": {"v": true, "d": false},
    "user2@example.com": {"v": false, "r": "invalid_format"},
    "user3@example.com": {"v": true, "d": true}
}

Where:

  • v: valid (boolean)
  • d: disposable (boolean)
  • r: reason (string, only if invalid)

Agent-Optimized Features

Token-Efficient Mode

# Get compact responses (80% smaller)
result = await client.verify_email(
    "user@example.com",
    format="compact"
)

Multi-Agent Tracing

# Include trace headers for multi-agent debugging
result = await client.verify_email(
    "user@example.com",
    trace_id="agent_123_task_456"
)

Error Handling

from validkit.exceptions import (
    ValidKitAPIError,
    RateLimitError,
    InvalidAPIKeyError,
    BatchSizeError
)

try:
    result = await client.verify_email("invalid-email")
except ValidKitAPIError as e:
    print(f"API Error: {e.message}")
    print(f"Error Code: {e.code}")
    print(f"Status Code: {e.status_code}")

Rate Limiting

The SDK automatically handles rate limiting with smart backoff:

# SDK will automatically retry with exponential backoff
results = await client.verify_batch(
    large_email_list,
    auto_retry=True  # Default: True
)

Examples

Check the examples/ directory for more detailed examples:

  • basic_usage.py - Simple verification examples
  • batch_processing.py - Large batch processing patterns
  • webhook_handler.py - Webhook endpoint implementation
  • agent_integration.py - AI agent integration patterns
  • error_handling.py - Comprehensive error handling

Requirements

  • Python 3.8+
  • aiohttp
  • pydantic

License

MIT License - see LICENSE file for details.

Performance Tips

  1. Use batch verification for multiple emails (up to 10,000 per request)
  2. Enable connection pooling (default) for high-throughput applications
  3. Set appropriate timeouts based on your batch size
  4. Use webhooks for large async batches to avoid long-running requests

Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

# Clone the repository
git clone https://github.com/ValidKit/validkit-python-sdk.git
cd validkit-python-sdk

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -e ".[dev]"

# Run tests
pytest

Support


Built with ❤️ for AI agents by ValidKit

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

validkit-1.1.1.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

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

validkit-1.1.1-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file validkit-1.1.1.tar.gz.

File metadata

  • Download URL: validkit-1.1.1.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for validkit-1.1.1.tar.gz
Algorithm Hash digest
SHA256 cf2c30d3adfd7550228aa23bb49c3b22b1324cc3cb31563a23c245cd28bebd5a
MD5 05cbe44c8ad2c268a40e62dba68b9cfa
BLAKE2b-256 e49b3dbb34a2119229cd02314cb4a40a7bb1473599f1a6555f2e64a0a71f4807

See more details on using hashes here.

File details

Details for the file validkit-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: validkit-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 18.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for validkit-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7cf3d7a76038ae2b74c1be5ed58c2a49e0e334ceb158776f1dbf0880610959e1
MD5 e6e2ed8ce545460a196fb61622c4ead9
BLAKE2b-256 c424852d16c7c7444b91850bd20d6b3983655ff1eda652f9619fb2d721535d6b

See more details on using hashes here.

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