Skip to content

Python SDK

View as Markdown

Installation

Terminal window
pip install syvel

Requires Python 3.10+. No runtime dependencies beyond httpx.

Quick start

import os
from syvel import Syvel
client = Syvel(api_key=os.environ["SYVEL_API_KEY"])
result = client.check_email("user@example.com")
if result and result.is_risky:
raise ValueError("Please use a professional email address.")
# result is None → Syvel unavailable, let the user through

Async usage

import os
from syvel import AsyncSyvel
async def validate_email(email: str) -> bool:
async with AsyncSyvel(api_key=os.environ["SYVEL_API_KEY"]) as client:
result = await client.check_email(email)
return result is None or not result.is_risky

Django REST Framework

from rest_framework import serializers
import os
from syvel import Syvel
client = Syvel(api_key=os.environ["SYVEL_API_KEY"], silent=True)
class RegisterSerializer(serializers.Serializer):
email = serializers.EmailField()
def validate_email(self, value):
result = client.check_email(value)
if result and result.is_risky:
raise serializers.ValidationError(
"Please use a professional email address."
)
return value

FastAPI (async)

from fastapi import FastAPI, HTTPException
import os
from syvel import AsyncSyvel
app = FastAPI()
@app.post("/register")
async def register(email: str):
async with AsyncSyvel(api_key=os.environ["SYVEL_API_KEY"]) as client:
result = await client.check_email(email)
if result and result.is_risky:
raise HTTPException(
status_code=422,
detail="Please use a professional email address.",
)
# continue with registration…

Flask

from flask import Flask, request, jsonify
import os
from syvel import Syvel
app = Flask(__name__)
client = Syvel(api_key=os.environ["SYVEL_API_KEY"], silent=True)
@app.route("/register", methods=["POST"])
def register():
email = request.json.get("email")
result = client.check_email(email)
if result and result.is_risky:
return jsonify({"error": "Please use a professional email address."}), 422
# continue with registration…

Response fields

FieldTypeDescription
is_riskyboolTrue if the email is considered risky
risk_scoreintRisk score (0–100)
reasonstr"safe" | "disposable" | "undeliverable" | "role_account"
deliverability_scoreintLikelihood of delivery (0–100)
did_you_meanstr | NoneTypo correction suggestion
is_free_providerboolGmail, Yahoo, etc.
is_corporate_emailboolBusiness domain detected
is_alias_emailboolPrivacy relay service (e.g. iCloud Hide My Email)

Error handling

By default, the SDK raises exceptions on errors. Pass silent=True to return None instead.

from syvel import Syvel, SyvelAuthError, SyvelRateLimitError, SyvelError
client = Syvel(api_key=os.environ["SYVEL_API_KEY"])
try:
result = client.check_email("user@example.com")
except SyvelAuthError:
pass # invalid API key
except SyvelRateLimitError:
pass # quota exceeded
except SyvelError:
pass # any other Syvel error → fail open

Configuration

ParameterDefaultDescription
api_keyYour API key (from syvel.io/dashboard)
base_urlhttps://api.syvel.ioAPI base URL
timeout3.0Timeout in seconds
silentFalseReturn None instead of raising exceptions

Resources

Last updated: