Python SDK
Official Python SDK for the Truelist email validation API. Sync and async clients, full type annotations, and minimal dependencies.
Installation
pip install truelist Requires Python 3.9+.
Note
Start free — 100 validations + 10 enhanced credits, no credit card required. Get your API key.
Quick start
from truelist import Truelist
client = Truelist("your-api-key")
result = client.email.validate("user@example.com")
print(result.state) # "ok"
print(result.is_valid) # True Async usage
from truelist import AsyncTruelist
async with AsyncTruelist("your-api-key") as client:
result = await client.email.validate("user@example.com") Configuration
client = Truelist(
"your-api-key",
base_url="https://api.truelist.io",
timeout=30.0,
max_retries=2,
) ValidationResult fields
| Field | Type | Description |
|---|---|---|
email | str | Validated email |
domain | str | Email domain |
state | str | ok, email_invalid, risky, unknown, accept_all |
sub_state | str | Detailed reason |
suggestion | str \| None | Suggested correction |
mx_record | str \| None | MX record |
verified_at | str \| None | Verification timestamp |
Convenience properties: is_valid, is_invalid, is_risky, is_unknown, is_disposable, is_role
Error handling
from truelist import AuthenticationError, RateLimitError, ApiError
try:
result = client.email.validate("user@example.com")
except AuthenticationError:
print("Check your API key")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after} seconds")
except ApiError as e:
print(f"API error {e.status_code}: {e.message}") Account info
account = client.account.get()
print(account.email) # "you@company.com"
print(account.payment_plan) # "pro" Django integration
pip install truelist-django
# With DRF support:
pip install "truelist-django[drf]" Add your API key to settings:
# settings.py
TRUELIST_API_KEY = "your-api-key" Model validator
from truelist_django.validators import TruelistEmailValidator
class User(models.Model):
email = models.EmailField(
validators=[TruelistEmailValidator(allow_risky=True, fail_silently=True)]
) DRF serializer field
from truelist_django.fields import TruelistEmailField
class SignupSerializer(serializers.Serializer):
email = TruelistEmailField(allow_risky=False, fail_silently=True) Django settings
| Setting | Default | Description |
|---|---|---|
TRUELIST_API_KEY | "" | Required |
TRUELIST_TIMEOUT | 10 | Timeout in seconds |
TRUELIST_ALLOW_RISKY | True | Accept risky results |
TRUELIST_CACHE_ENABLED | False | Enable caching |
TRUELIST_CACHE_TTL | 3600 | Cache TTL in seconds |
Caching
TRUELIST_CACHE_ENABLED = True
TRUELIST_CACHE_TTL = 3600 Uses Django’s cache framework. Unknown results are never cached.
Package links
| Package | Install |
|---|---|
| truelist | pip install truelist |
| truelist-django | pip install truelist-django |
Note
**Working in a notebook or AI assistant?** Try our hosted MCP server to validate emails conversationally in Claude, Cursor, or VS Code Copilot — no API key required.