Skip to main content

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

Project description

ValidKit Python SDK

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

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.

Support

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.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

validkit-1.1.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: validkit-1.1.0.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.10.0 readme-renderer/44.0 requests/2.32.3 requests-toolbelt/1.0.0 urllib3/2.2.3 tqdm/4.66.5 importlib-metadata/8.7.0 keyring/24.3.1 rfc3986/2.0.0 colorama/0.4.6 CPython/3.12.7

File hashes

Hashes for validkit-1.1.0.tar.gz
Algorithm Hash digest
SHA256 90a574e35a5318d5c8fe8fbb119fd70d677392871c2795a9ee21882a8012faae
MD5 47232d13b2875151972e3bab52386ad8
BLAKE2b-256 6bbb9f3a12d8b025a3c5bd36ea7424215e773263de490f687934d8746c74616d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: validkit-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.10.0 readme-renderer/44.0 requests/2.32.3 requests-toolbelt/1.0.0 urllib3/2.2.3 tqdm/4.66.5 importlib-metadata/8.7.0 keyring/24.3.1 rfc3986/2.0.0 colorama/0.4.6 CPython/3.12.7

File hashes

Hashes for validkit-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 03f0d0b8ee8c29a0a2415955ddd8d3ecc578eba18830e5d3dafe9ccd59fcef37
MD5 5b61875ec4450affd2dad69253961566
BLAKE2b-256 0b4d05488ce0ff8550ff182b577661b894c9acc7a0534f59c8755593a1b3a47b

See more details on using hashes here.

Supported by

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