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 examplesbatch_processing.py- Large batch processing patternswebhook_handler.py- Webhook endpoint implementationagent_integration.py- AI agent integration patternserror_handling.py- Comprehensive error handling
Requirements
- Python 3.8+
- aiohttp
- pydantic
License
MIT License - see LICENSE file for details.
Support
- Documentation: https://docs.validkit.com
- API Reference: https://docs.validkit.com/api
- Issues: https://github.com/validkit/python-sdk/issues
- Email: support@validkit.com
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.0.0.tar.gz
(12.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
validkit-1.0.0-py3-none-any.whl
(11.5 kB
view details)
File details
Details for the file validkit-1.0.0.tar.gz.
File metadata
- Download URL: validkit-1.0.0.tar.gz
- Upload date:
- Size: 12.7 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b28a88ff4cfae14725bbcca2ba584e7f910ba0e40ff873af499a707d69515a43
|
|
| MD5 |
df41e3a06ed26b112ced7930127cdc76
|
|
| BLAKE2b-256 |
4a93e7883bb2f98cd92d391e6c2d8105957b776a20204d26218ec9dd25c6f6f8
|
File details
Details for the file validkit-1.0.0-py3-none-any.whl.
File metadata
- Download URL: validkit-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.5 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f990798e1b35c8080d1068a145178d27030b6a588b5a1cd40041f6f37f8faa9f
|
|
| MD5 |
8bc7f17740304d2ad6191cfe1a16e5fe
|
|
| BLAKE2b-256 |
480bfabb3809b437ea6baf7adaab1e7ed4e418e0c343a9e22081042968d211bb
|